Форум самогонщиков Сайт Барахолка Магазин Помощь солдатам

Ненавязчивая автоматизация ректификационной установки

Форум самогонщиков Автоматика
1 ... 4 5 6 7 8 9 10 ... 132 7
woddy Доцент Новосиб 1.3K 489
Отв.120  15 Февр. 17, 18:42
малину китайцы клонировать не научились. не встречал копий.
где делают в китае или в UK не так существенно...
сообщение удалено
U-M Магистр MSK 210 39
Отв.121  15 Февр. 17, 21:32
Но я пока еще глубоко в это дело не въезжал. В общем - разбираться надо.OldBean, 15 Февр. 17, 14:39
А версии файлов/драверов для I2C одинаковые? Если на 3-й малинке посвежее-можетимеет смысл заменить на старые версии?
mak Модератор Екатеринбург 6.3K 1.8K
Отв.122  15 Февр. 17, 21:34, через 3 мин
На самой плате написано Made in the UK. Может и вправду не китайцы?OldBean, 15 Февр. 17, 18:30
взял какую-то из оставшихся ардуин, на ней принт made in italy
так что скорее всего китайцы Смеющийся
OldBean Доцент Красноярск 1K 1.4K
Отв.123  16 Февр. 17, 05:48
sevpro, на старой малинке подтягивающие резисторы тоже 1.8k.

U-M, конечно версии ядер (и, естественно драйверов) разные. На старой малинке - 3.6.11+, а на новой - 4.4.38-v7+. Да и процессоры у этих малинок разные. К сожалению, на старой малинке карточка - SD, а на новой - Micro SD, поэтому я смог провести эксперимент только в "одну сторону" - вставить Micro SD с новой ОС через переходник в старую малинку (там гнездо под обычную SD). Самое смешное, что на старой малинке с новой ОС все работает нормально. Итак резюме:

старая малинка + старая ОС - работает нормально
старая малинка + новая ОС - работает нормально
новая малинка + новая ОС - сбои по шине I2C при работе с ардуинками

Можно, конечно, поискать Img какой-нибудь старой ОС для малинки и залить в Micro SD, но, мне кажется, итак понятно, что причина все-таки в новой малинке. Т.е. - в железе, а не в драйверах.
сообщение удалено
OldBean Доцент Красноярск 1K 1.4K
Отв.124  16 Февр. 17, 07:21
Ну, вроде бы, не так уж и страшно. Слейву нужно всего > 2.78 мА чтобы "утянуть" шину к нулю.
сообщение удалено
OldBean Доцент Красноярск 1K 1.4K
Отв.125  16 Февр. 17, 09:30
у которых нагрузочная способность не превышает 3мАsevpro, 16 Февр. 17, 09:03
Ну такой-то, конечно, "вспотеет".

У меня вообще иногда (по литературе) складывается впечатление, что разработчики малинки проектировали периферию, связанную с GPIO, как-то совсем "по остаточному принципу". Как некую очень-очень вспомогательную опцию. Основная функция малинки (с точки зрения разработчиков) - образовательная. Как недорогой и миниатюрный компьютер для изучения Linux. Потом жизнь начала вносить свои коррективы. GPIO расширилось аж до 40 пинов. Даже появилась вторая шина I2C. Но исходные позиции, видимо, наложили некий своеобразный отпечаток на систему. Жизнь так устроена... :)))
C-Bell Научный сотрудник Улан-Удэ 1.8K 1.3K
Отв.126  16 Февр. 17, 10:09, через 40 мин
OldBean, ты обе шины пробовал?
На обеих шинах проблема?
OldBean Доцент Красноярск 1K 1.4K
Отв.127  16 Февр. 17, 13:01
ты обе шины пробовал?C-Bell, 16 Февр. 17, 10:09
Только основную (1-ю). Мысль интересная - завтра попробую вторую шину.
OldBean Доцент Красноярск 1K 1.4K
Отв.128  17 Февр. 17, 07:14
Увы, со второй шиной I2C пока "облом". Начал искать на плате подтягивающие резисторы - не нашел. В связи с этим полез в схему малинки (3 релиз B) и там, относительно пинов 27 (SDA0) и 28 (SCL0) прочитал вот такое предупреждение:
DO NOT USE these pins for anything other than attaching an I2C ID EEPROM. Leave unconnected if ID EEPROM not required.
Активировать вторую шину i2c получается. Там даже видны какие-то "устройства" на двух адресах. Потом, невзирая на предупреждения, все-таки попробовал подключить ардуинку к пинам 27-28 (ну ладно, один ведь раз живем... :), но "i2cdetect -y 0" ее не увидел.

Так что со второй шиной I2C пока - никак :(
сообщение удалено
OldBean Доцент Красноярск 1K 1.4K
Отв.129  17 Февр. 17, 14:49
Там не так все просто. Судя по сопротивлению между +3.3V и пинами 27 и 28 никаких подтягивающий резисторов для второй шины на плате нет. Но непонятно как же i2cdetect видит два адреса (устройства) на второй шине? Поэтому решил не рисковать чужой малинкой. А моя (из новых) сейчас в другом месте. Потом с ней повожусь "подробнее".
OldBean Доцент Красноярск 1K 1.4K
Отв.130  19 Февр. 17, 13:08
14.2.1. Подготовка Raspberry Pi к работе (на рабочей станции под Ubuntu)

В последнее время мне пришлось сделать несколько MicroSD-карточек c ОС Raspbian для малинок. Чтобы не думать и не вспоминать каждый раз последовательность действий, я решил оформить этот процесс здесь в виде "прописей". Может еще кому-нибудь тоже пригодится. Последние пару карточек как раз сделал по этим прописям - действительно удобно. Мозг отдыхает. :)))

Итак, приготавливаем карточку для малинки без клавиатуры, мыши, монитора и сетевого кабеля. Предполагаем что у нас есть только рабочая станция под Linux и роутер с DHCP и Wi-Fi.

1. Вставляем карточку в кардридер рабочей станции и выполняем команду:
df -h
Получаем что-нибудь типа:
Файл.система   Размер Использовано  Дост Использовано% Cмонтировано в
udev             3,9G         4,0K  3,9G            1% /dev
tmpfs            793M         1,5M  792M            1% /run
/dev/sda2        451G         227G  201G           54% /
none             4,0K            0  4,0K            0% /sys/fs/cgroup
none             5,0M            0  5,0M            0% /run/lock
none             3,9G          53M  3,9G            2% /run/shm
none             100M          96K  100M            1% /run/user
/dev/sdb1        110G         100G  5,0G           96% /media/....
/dev/sdc2         15G         3,9G  9,6G           29% /media/ku/402bfe3d-37db-48a7-a515-31edccf953df
/dev/sdc1         63M          21M   43M           33% /media/ku/boot
2. sdc1 и sdc2 - это и есть наша карточка. Мы видим, что на этой карточке уже кто-то устанавливал какую-то старую ОС. У новой карточки может быть один раздел. В любом случае смотрим по размеру раздела, чтобы не ошибиться. Первое, что нам нужно сделать, прежде чем копировать образ ОС на карточку, это "отмонтировать" ее:
sudo umount /dev/sdc1
sudo umount /dev/sdc2
3. Идем в папку, где у нас находится скаченный и распакованный образ Raspbian-а и выполним команду (имя скаченного образа 2017-01-11-raspbian-jessie.img у вас может быть другим - исправьте командную строку):
sudo dd bs=4M if=2017-01-11-raspbian-jessie.img of=/dev/sdc
Обратите внимание, что в конце команды мы указываем только устройство (sdc), а не разделы (sdc1, sdc2 и т.д.).

4. Ждем какое-то время, пока образ системы и загрузочный раздел запишутся на карточку.

5. Записалось. Теперь один важный момент. В последних версиях Raspbian протокол SSH выключен по умолчанию. Чтобы ssh был доступен сразу же после первой загрузки, необходимо в загрузочный раздел карточки (который .../boot) добавить пустой файл с именем "ssh" без расширений. Иначе к малинке придется подключать монитор и клавиатуру с мышкой, чтобы запустить ssh :(((

6. Далее, если в малинке есть встроенный Wi-Fi (например, как в версии 3) мы сможем сразу же после загрузки работать с беспроводной сетью. Для этого мы должны прописать название сети и ключ. Открываем второй раздел карточки (который уже не boot!) и идем в папку /etc/wpa_supplicant/ и, с правами суперпользователя (т.е. sudo) открываем файл wpa_supplicant.conf для редактирования в каком-нибудь текстовом редакторе (например, gedit):
sudo gedit wpa_supplicant.conf
В конец файла добавляем все сети, с которыми хотим "подружить" малинку, в следующем формате (имя сети и пароль - в кавычках):
network={
 ssid="имя сети"
 psk="пароль"
}
Имя сети и код - в кавычках. Для каждой сети Wi-Fi, к которой собираемся подключать малинку, такой фрагмент. Отдельно. Сохраняем файл и выходим из редактора.

7. Извлекаем карточку из системы и кардридера, вставляем ее в малинку. Ну если все-таки нет Wi-Fi, то, естественно, подключаем сетевой кабель к малинке. Подключаем питание - начинается загрузка...

8. После того, как зелененький светодиодик на малинке перестал мигать, при помощи утилиты nmap (на рабочей станции) посмотрим что у нас в сети:
nmap 192.168.0.*
Конкретный диапазон адресов проставьте свой. Среди всякого прочего, в выдаче nmap, мы должны увидеть приблизительно такой фрагмент:
...
Nmap scan report for raspberrypi.Dlink (192.168.0.62)
Host is up (0.028s latency).
Not shown: 999 closed ports
PORT   STATE SERVICE
22/tcp open  ssh
...
Это и есть наша новая малинка с IP адресом 192.168.0.62 и открытым 22-м портом для работы по ssh. Теперь мы знаем ее IP-адрес в локальной сети и можем начинать с ней работать.

9. Пишем (конкретный адрес, естественно, ставим свой):
ssh pi@192.168.0.62
Т.к. мы заходим в малинку первый раз (в списке ключей ее ключ отсутствует), то мы получим предупреждение, на которое должны ответить твердое "yes". Потом вводим пароль (по умолчанию - raspberry) и все. Зелененькое приглашение говорит о том, что мы уже подключились к малинке по ssh. Ура!

10. Заходим в утилиту конфигурации малинки с правами суперпользователя:
sudo raspi-config
10.1. "Раздвигаем" файловую систему малинки на всю карточку - меню "1 Expand Filesystem"
10.2. Устанавливаем правильный часовой пояс - меню "4 Internationalisation Options/I2 Change Timezone"
10.3. Делаем доступной шиной I2C - меню "7 Advanced Options/A7 I2C"
10.4. Делаем доступной шину 1-Wire - меню "7 Advanced Options/AA 1-Wire"

Малинка захочет перезагрузиться - перезагрузимся.

11. Опять заходим в малинку (см. пункт 9) и обновим репозитории пакетов системы и сами пакеты:
sudo apt-get update
sudo apt-get upgrade
Ждем...

Все малинка готова к работе.


======================================

Предыдущий топик  Вернуться к оглавлению  Следующий топик
сообщения удалены (3)
OldBean Доцент Красноярск 1K 1.4K
Отв.131  01 Марта 17, 08:26
Обновление модуля sens

Обнаружилась еще одна несовместимость малинок "снизу вверх" - на новых малинках (Raspberry Pi 3 model B) "заглючила" многопоточная реализация циклов преобразования датчиков DS18B20. Суть глюка: непонятная задержка последнего потока преобразования. Иногда аж до 8-10 секунд! :(((

"Лечение" - переписал реализацию многопоточного преобразования температурных датчиков с использованием класса Thread из модуля threading. В таком варианте (он более свежий и простой) все работает стабильно. API полностью сохранен. Так что "нет худа без добра" :)))

Архив с обновленным модулем sens - в приложении к топику.
sens.py.zip 3.8 Кб
сообщение удалено
OldBean Доцент Красноярск 1K 1.4K
Отв.132  01 Марта 17, 17:59
Не пробовал использовать owfs ?ys1797, 01 Марта 17, 15:39
А смысл? В штатных вариантах использования нативных модулей ядра (w1_gpio и w1_term) никаких проблем в общем-то и нет. Непредсказуемые задержки появились лишь в (как бы) "недокументированном" (многопоточном) варианте. Причем, при питоновской реализации многопоточности с помощью низкоуровневого модуля thread на новой малинке и последней версии ОС. Но проблема легко и быстро "зафиксилась" при помощи высокоуровневого модуля threading. Кстати, некоторые питоновские гуру (например, Уэсли Чан) даже явно рекомендуют избегать использование модуля thread. Рекомендуют threading. Видимо, не зря...

Просто несколько огорчает (точнее - раздражает) то, что второй раз пришлось переписывать часть уже отлаженного софта совсем "на пустом месте" - просто (!) при переходе со старых малинок (2) на новые малинки (3). Хотя, конечно, использование недокументированных возможностей - это всегда некий риск. Поэтому каких-то особых претензий к разработчикам у меня, естественно, нет. :)))
ZagAl Доцент Прибалтика 1.9K 916
Отв.133  06 Марта 17, 16:01
В ожидании заказанных компонентов из Китая, решил подготовить Малинку, благо она уже была. Сделал все как написАл  OldBean. Все получилось. Для тех кого пугают слова linux и Ubuntu хочу дать маленький совет. Я сделал загрузочную флэшку с Ubuntu 16.04 (в Гугле достаточно информации). Запускаемся с нее в тестовом режиме. После загрузки видим вполне знакомую графическую оболочку. Добавляем русскую раскладку клавиатуры и устанавливаем интернет соединение (если Wi-Fi). В браузере заходим на Homedistiller.ru и открываем данную тему, и располагаем его скажем в правой половине монитора. В левой открываем Терминал (нажатие правой кнопки мышки на рабочем столе отобразит меню, в котором выбираем Терминал). Все. Далее в браузере из пошагового описания действий выделяем нужные команды, копируем и вставляем в Терминал. Если нужно, то подправляем. Для меня самым сложным оказалось перейти в папку где хранился образ 2017-01-11-raspbian-jessie.img. Подумал и воспользовался графической средой. По левому краю монитора располагается панель инструментов. На ней внизу отображены диски. Привычными действиями заходим на нужный диск в нужную дирректорию и видим нужный нам образ. В этом окне щелкаем правой кнопкой мышки и выбираем команду Терминал, а дальше по накатанному. В браузере копируем команду  sudo dd bs=4M if=2017-01-11-raspbian-jessie.img of=/dev/sdc и вставляем ее в этот Терминал. of=/dev/sdc правим на то что нам нужно.
Вроде ничего не перепутал.

P.S. Для таких же как и я: Следующий топик.
OldBean Доцент Красноярск 1K 1.4K
Отв.134  07 Марта 17, 12:04
16. Простейшие критерии отбора основной фракции (тела)

16.1. Коррекция температурной уставки при изменении атмосферного давления

Основная задача ректификационного процесса - выделение основной фракции (тела), представляющей из себя азеотроп этанол-вода, с минимальным содержанием остальных примесей. К сожалению, в настоящее время не существует эффективного и доступного в быту датчика оперативного контроля этих "остальных примесей". Ну хотя бы суммарного их количества. Поэтому в качестве "ориентира" (причем, достаточно условного!) для управления ректификацией используется содержание основной примеси - воды. К счастью, температуры кипения этанола и воды довольно сильно отличаются. Это дает возможность достаточно надежно оценивать содержание спирта в воде (спиртуозность) x по температуре кипения раствора T и давлению P, поскольку в условиях термодинамического равновесия эти три параметра (x, T, P) однозначно связаны. Ректификационная колонна - термодинамически неравновесная система. Но, если скорости потоков не слишком велики и отсутствует развитая турбулентность (как, например, в "неспешном" пленочном режиме работы насадочной колонны), то в каждой точке (точнее - в небольшой области) колонны устанавливается так называемое "локальное термодинамическое равновесие" (ЛТР), которое позволяет использовать равновесные соотношения между x, T и P. Но локально, для каждой конкретной точки колонны.

Существует большое количество алгоритмов управления процессом ректификации. Подавляющее большинство из них использует в качестве уставки температуру кипения в одной или нескольких точках колонны. Строго говоря такие алгоритмы не вполне корректны, т.к. критерием отбора фракции должен быть именно ее состав (в данном случае - спиртуозность), а не температура кипения, которая зависит не только от состава, но еще и от давления. Например, если уставка используется в алгоритмах регулирования с малыми гистерезисами (с малым дельта T), то становятся возможными ложные срабатывания автоматики, обусловленные не реальным изменением спиртуозности, а колебаниями атмосферного давления в длительном процессе ректификации. Либо наоборот, падение атмосферного давления может нивелировать реальное падение спиртуозности флегмы.

Для устранения указанной некорректности возможны два подхода. Первый - использовать в алгоритме управления уставку, основанную на спиртуозности, а не на температуре кипения. Второй - использовать температурную уставку, но постоянно корректировать ее с учетом изменения атмосферного (и не только) давления. Второй вариант проще. Поэтому остановимся на нем.

Задача еще упрощается, если колонна функционирует в установившемся квазистационарном режиме, когда перепад давления внутри колонны либо мал (как, например, в пленочном режиме), либо/и слабо изменяется в процессе ректификации. В этом случае нам достаточно измерять только атмосферное давление и, с учетом его изменения, корректировать уставку.

Получить практическую формулу для коррекции температурной уставки несложно. Связь спиртуозности, температуры кипения и давления для системы этанол-вода достаточно хорошо изучена. В приложение к топику я положил архив с кодом на языке Си (файл van_Laar.c.zip), позволяющий рассчитывать температуру кипения раствора спирта в зависимости от спиртуозности раствора (в мольных долях) и давления. На рисунке ниже показаны графики зависимости температуры кипения от давления для нескольких значений спиртуозности (соответствующие мольные доли - в легенде).
 Ненавязчивая автоматизация ректификационной установки
Ненавязчивая автоматизация ректификационной установки. Автоматика.

Из рисунка хорошо видно, что в диапазоне изменения атмосферного давления 720-800 мм.рт.ст. (этого диапазона более чем достаточно для большинства приложений) температура кипения T изменяется линейно с изменением давления P. Т.е.
T = m*P + b,
где m и b - коэффициенты линейной регрессии, зависящие от спиртуозности раствора (x). На следующем рисунке показана зависимость наклона регресионных прямых (коэффициент m) от спиртуозности.
 Ненавязчивая автоматизация ректификационной установки
Ненавязчивая автоматизация ректификационной установки. Автоматика.

Из рисунка мы видим, что для "крепких" растворов (x > 60 mol %) наклон регресиионных прямых (параметр m) очень слабо зависит от спиртуозности (красные точки, красная прямая практически горизонтальна - уравнение регрессии в правом верхнем углу диаграммы). Т.е. для этого диапазона спиртуозностей мы можем считать коэффициент m постоянным и равным приблизительно 0.033 °C/мм.рт.ст.

При отборе основной фракции (тела) спиртуозность флегмы в большей части колонны (по крайней мере там, где обычно стоят датчики температуры) близка к спиртуозности азеотропа (x = 0.884). Поэтому мы вполне укладываемся в указанный выше диапазон (60 мольных % соответствует приблизительно 85 об.%. В результате мы получаем очень простую формулу коррекции уставки на изменение атмосферного давления:
Tset = Tset0 + m*(P - P0) = Tset0 + 0.033*(P - P0),
где Tset - скорректированное значение уставки, Tset0 - значение уставки в начальный момент времени, P - текущее значение атмосферного давления, P0 - атмосферное давление в начальный момент времени. Температуры - в °C, давление - в мм.рт.ст.

Таким образом, если мы на начальном этапе отбора тела определим (измерим) уставку Tset0 и атмосферное давление P0 и в дальнейшем на каждом шаге будем использовать скорректированную по приведенной выше формуле уставку, то любой наш алгоритм управления, основанный на температурной уставке, перестанет зависеть от колебаний атмосферного давления. Естественно, необходимо учитывать те приближения, которые мы сделали выше.

В приложении к данному топику я положил архив со скриптом, реализующим полный цикл ректификации в рамках "ненавязчивой автоматизации", в котором для старт-стопа при отборе тела используется приведенный выше алгоритм коррекции (файл nna_04.py.zip). Он достаточно подробно прокомментирован - в нем несложно разобраться и посмотреть как это реализовано на практике. К сожалению, атмосферное давление, во время последней ректификации с этим скриптом, стояло ну просто "как вкопанное" и не дало возможности оценить эффективность такой коррекции уставки :(((  Ну что же, будем ждать переменчивой погоды с "дикими" атмосферными фронтами для окончательного тестирования скрипта...

PS
В архиве modules.zip - текущие версии модулей, необходимых для работы скрипта nna_04.py. Так, на всякий случай...

Предыдущий топик  Вернуться к оглавлению  Следующий топик
van_Laar.c.zip 1.7 Кб
nna_04.py.zip 4.7 Кб
modules.zip 8.3 Кб
сообщения удалены (2)
OldBean Доцент Красноярск 1K 1.4K
Отв.135  13 Марта 17, 05:33
У малинки есть "бесплатный" real time

RTC, конечно, хорошее решение. Правда цены в "чипе-дипе" всегда славились своим масштабом...

Но у малинки есть linux и, если малинка находится в сети, то ее локальное время автоматически синхронизируется по доступным NTP-серверам. Поэтому, в общем-то, никакой реальной проблемы с real time у малинки нет. Правда иногда эта синхронизация может занимать минут десять и даже более (если Интернет притормаживает, или серверы недоступны). Если малинка часто включается/выключается и не очень хочется ждать, то можно настроить синхронизацию с какой-нибудь рабочей станцией в локальной сети. Я, например, делаю именно так.

Для этого на какой-нибудь рабочей станции, находящейся в той же локальной сети, что и малинка, нужно запустить свой NTP-сервер. Это делается легко. Например, по этим прописям.

Затем нужно сказать малинке, чтобы она синхронизировала время именно с этой рабочей станцией. Это тоже делается просто. Путем редактирования файла /etc/ntp.conf. На малинке пишем:

sudo nano /etc/ntp.conf

В редакторе ищем и "ремуем" решеткой строки с адресами внешних NTP-серверов и добавим свой (помечено красненьким; вместо 192.168.0.48 поставьте адрес своей рабочей станции со своим NTP-сервером):

....
#server 0.debian.pool.ntp.org iburst
#server 1.debian.pool.ntp.org iburst
#server 2.debian.pool.ntp.org iburst
#server 3.debian.pool.ntp.org iburst

server 192.168.0.48 iburst
...



Ищем далее в этом же файле следующие строки и разрешаем своему серверу обновлять время малинки (тоже помечено красненьким):

...
restrict 127.0.0.1
restrict ::1

restrict 192.168.0.48
...


Все. Сохраняем конфиг (ctrl+O), выходим из редактора (ctrl+X) и перезапустим сервис (на малинке):

sudo /etc/init.d/ntp restart

С этого момента малинка будет синхронизировать свои часы с часами рабочей станции. Причем, довольно шустро и, главное, совершенно бесплатно.
сообщение удалено
OldBean Доцент Красноярск 1K 1.4K
Отв.136  14 Марта 17, 04:33
Ну а если вдруг совсем все плохо - команда date...
Ненавязчивая автоматизация ректификационной установки
Ненавязчивая автоматизация ректификационной установки. Автоматика.
OldBean Доцент Красноярск 1K 1.4K
Отв.137  14 Марта 17, 05:29, через 57 мин
16.2. Импульсный регулятор скорости отбора тела (aka "старт-стоп")

Данный топик, по сути, представляет собой развернутый комментарий к скрипту автоматизации ректификационного процесса, который приложен к предыдущему топику (файл nna_04.py). В последнее время я получаю питьевой спирт (в основном для настоек) при помощи двойной ректификации. Двойная ректификация заметно улучшает качество продукта (ну, по крайней мере, на моем оборудовании). Действительно, проба на окисляемость (проба Ланга) после второй ректификации увеличивается раза в два (у меня после первой - обычно от 15 до 20 мин, а вот после двойной - 30 мин и более). Да и в запахе двойного ректификата уже практически нет никакой "резкости". О двойной ректификации поговорим позже. А здесь же я упоминаю ее лишь потому, что повторная ректификация позволяет несколько снизить требования к режимам первой ректификации и упростить алгоритмы отбора фракций. Об этих режимах и пойдет речь в данном топике.

Мои предпочтения на данный момент - это "неспешный" процесс ректификации в насадочной колонне с СПН из нержавейки, работающей в пленочном режиме. Снизу колонны - куб с регулируемой мощностью нагрева (до 1.5 кВт). Сверху - дефлегматор, охлаждаемый просто водопроводной водой (какая течет :). Дефлегматор снабжен узлом отбора с электромагнитным клапаном для регулирования скорости отбора (ШИМ с периодом 10 сек, от 0 до 100% с шагом в процент). Максимальная скорость отбора клапана устанавливается жиклером и составляет около 950 мл/час. Т.е. - достаточно стандартная, классическая схема ректификационной установки, удобная для расчетов и экспериментов. Неплохое практическое введение в процесс ректификации в таких режимах можно найти, например, в теме Сержа 1 - Практическая ректификация на кубовых аппаратах. Поэтому за всеми нюансами ректификации, не связанными непосредственно с автоматизацией, лучше сходить туда. Или - в какие-нибудь другие профильные ветки, подходящие для конкретной установки и режимов ее работы.

Установка, с которой я сейчас экспериментирую, может работать в 8 режимах, которые нумеруются числами от 0 до 7. Последовательное прохождение всех этих режимов как раз и составляет полный цикл однократной ректификации спирта-сырца. Каждый режим можно включить вручную при помощи нажатия клавиши с цифрой режима на клавиатуре. В некоторые режимы система может переходить автоматически, при выполнении определенных условий. Рассмотрим все эти режимы подробнее.

0 - это режим "мониторинга". С этого режима установка начинает свою работу. В этом режиме ничего не происходит кроме периодического (в цикле) измерения всех необходимых параметров установки, выдачи их на экран терминала и записи в файл журнала (эти же действия, естественно, выполняются и во всех других режимах). В режиме мониторинга можно вручную управлять установкой (при помощи кнопок на платах контроллеров), отлаживать какие-то новые варианты работы и т.п.

1 - это режим "разгона" установки. Включается максимально возможная мощность нагрева ТЭНа без стабилизации мощности. Отбор выключен. Вся автоматизация этого режима заключается в простом переключении мощности нагрева на более низкий (номинальный) уровень если температура датчика в нижней части колонны (примерно 35 см от нижней границы насадки) превысит некое пороговое значение (в моем случае - 60°C). После этого система автоматически переключается в режим 2.

2 - режим выведения колонны на стационарный режим и "работы на себя". В этом режиме мощность нагрева ТЭНа номинальная (у меня - 600 Вт). Стабилизация мощности нагрева включена. Отбор выключен. Через некоторое время после перехода в режим 2 система выходит на некое стационарное состояние и может пребывать в таком виде сколь угодно долго. Режим 2 служит своеобразной "паузой" после автоматического завершения почти всех этапов (режимов) работы установки: 1, 3, 4, 5 и 6. Для смены приемной емкости или просто подумать... :) В этом режиме, кроме мощности нагрева, нечего автоматизировать. Переходы из этого режима в другие режимы осуществляются "вручную" путем нажатия клавиши на клавиатуре с номером желаемого режима (естественно, после смены очередных приемных емкостей).

3 - режим отбора "неисправимых" голов. Головы отбираются со скорость отбора приблизительно 10% от номинальной (в моем случае это 40 мл/час). Завершение этапа - после отбора 1-2% от первоначального количества АС в кубе. Этот параметр устанавливается в карте режимов (см. текст скрипта). Мощность нагрева ТЭНа в этом режиме номинальная. Режим стабилизации мощности включен. По окончанию отбора голов система автоматически переключается в режим 2 и ожидает смены приемной емкости и ввода следующей команды.

4 - режим отбора "подголовников". Эта фракция содержит остатки голов и представляет собой оборотный спирт, добавляемый в спирт-сырец следующей ректификации. Подголовники тоже отбираются по объему (10-15% первоначального объема АС). По сути этот этап отличается от предыдущего только увеличенной скоростью отбора (в моем случае 400 мл/час). Спиртуозность жидкости в кубе на этом этапе достаточна для того, чтобы колонна легко "справлялась" с номинальным отбором. Поэтому никакого регулирования отбора на этом этапе не производится (хотя его можно легко включить). После отбора нужного объема "подголовников" система также автоматически переходит в режим 2.

5 - режим отбора основной фракции ("тела"). Это самый длительный и ответственный этап работы установки, определяющий качество конечного продукта. В данной версии скрипта мы проводим этот этап при постоянной номинальной мощности нагрева куба и регулируемой средней скорости отбора. В качестве уставки для регулятора отбора берется температура с датчика, расположенного в нижней части колонны. Уставка корректируется с учетом изменяющегося атмосферного давления по алгоритму, описанному в предыдущем топике. Способ регулирования - импульсный (который известен еще и под названием "старт-стоп"). Т.е. если температура, измеряемая датчиком, расположенным в нижней части колонны, не превышает некоторого порогового значения (TsetMax = Tset + 2*dT), то отбор тела производится с постоянной номинальной скоростью отбора (в моем случае - 400 мл/час). А если превышает, то отбор полностью прекращается. Т.е. колонна переходит в режим работы на себя. При работе на себя температура постепенно снижается и в момент, когда температура снизится ниже другого порогового значения (TsetMin = Tset + dT), отбор опять включается (естественно, с той же номинальной скоростью - 400 мл/час).

По мере снижения спиртуозности жидкости в кубе, длительность пауз в отборе ("стопа") будет нарастать по отношению к длительности периодов времени, когда отбор включен ("старта"). В результате средняя скорость отбора тела будет постепенно снижаться, автоматически адаптируясь под снижение спиртуозности в кубе.

На рисунке ниже показан лог завершающего этапа отбора тела. Основная часть тела была отобрана в предыдущий день, но я специально оставил в кубе часть спирта (часа на 2-3 отбора) для иллюстрации финальной стадии режима 5. Ну и последующих этапов (6, 7).
 Ненавязчивая автоматизация ректификационной установки
Ненавязчивая автоматизация ректификационной установки. Автоматика.

На верхней диаграмме изображены графики температур (в кубе - Tкуб, нижней части колонны - Tкол и на входе дефлегматора - Tдеф) от времени. На средней диаграмме - графики Tкол и Tдеф с сильно растянутой шкалой по температуре, чтобы были видны детали эволюции этих температур. А на нижнем графике - зависимость скорости отбора продукта от времени.

После этапа разгона, система переключилась в режим 2 (работа на себя). Температуры постепенно вышли на свои стационарные значения (на рисунке эта область помечена цифрой 1). В момент, отмеченный цифрой 2 включаем режим 5 (т.е. мы продолжаем отбор тела, незаконченный в предыдущий день). Регулирование отбора пока выключено. После включения отбора, температура в нижней части колонны слегка возрастает (у меня обычно - на 2-3 десятых доли градуса). После установления "квазистационара" (но уже со включенным отбором) в момент, помеченный на рисунке цифрой 3, включаем (активируем) регулирование отбора (в данном случае - "старт-стоп"). Активация/дезактивация регулятора производится клавишами "s" и "r" соответственно. В момент активации запоминаются текущие значения температуры в нижней части колонны и атмосферного давления. Они нужны для дальнейших периодических коррекций уставки.

Скорость отбора (в данном случае 400 мл/час) выбрана близкой к оптимальному значению. Поэтому колонна вполне "справляется" с таким отбором, температура растет очень медленно и "стоп" еще не срабатывает. Вот, примерно через три часа, в первый раз срабатывает "стоп" (этот момент помечен на рисунке цифрой 4). Это говорит о том, что спиртуозность в кубе упала настолько, что колонна уже не справляется с заданной (номинальной) скоростью отбора. Напомним, что здесь мы проводим процесс ректификации при постоянной мощности нагрева куба. Ну и далее начинается обычный процесс "старт-стоп", многократно описанный и обсужденный в разных местах на разных профильных форумах. На нижнем графике, где приведена зависимость скорости отбора от времени, хорошо видно постепенное возрастание длительности пауз в отборе тела (по отношению в длительности периодов времени, когда отбор включен). Т.е. средняя скорость отбора в промежутке времени от 350 до 400 мин действительно постепенно снижается.

Ну и, наконец, когда длительность "стопов" начинает существенно превышать длительность "стартов", мы завершаем режим отбора тела. Меняем приемную емкость и включаем режим отбора "исправимых" хвостов. Этот момент на рисунке отмечен цифрой 5.

6 - режим отбора "хвостов". Фракция, которая отбирается на этом этапе, тоже (как и подголовники) представляет собой оборотный спирт, добавляемый к спирту-сырцу следующей ректификации. При отборе хвостов скорость отбора номинальна (в моем случае 400 мл/час) и постоянна. Т.е. режим регулирования скорости отбора (старт-стоп) дезактивирован. Мощность нагрева номинальна (в моем случае - 600 Вт), режим стабилизации мощности  включен. Окончание режима отбора хвостов автоматическое - по началу роста температуры датчика, расположенного на входе дефлегматора (сейчас - это превышение уровня 80°C; можно было бы и поточнее и "поадаптивнее" :), но особого смысла в этом нет). По окончанию этапа 6 система автоматически переходит в режим 2. На рисунке этот момент отмечен цифрой 6.

7 - режим "пропарки" колонны. В этом режиме на максимальной мощности нагрева и с максимальной скоростью отбора из системы выводятся "неисправимые" хвосты и производится очистка ("пропарка") колонны. Окончание этого режима (и выключение установки) производится вручную. На рисунке начало режима пропарки отмечено цифрой 7, конец - 8.

Все. Процесс закончен - осталось только слить барду, представляющую собой почти чистую воду со слабым кисловатым, "вареным" запахом.

======================================

Предыдущий топик  Вернуться к оглавлению  Следующий топик
OldBean Доцент Красноярск 1K 1.4K
Отв.138  14 Марта 17, 17:55
16.3. Позиционный (релейный) регулятор скорости отбора тела

Импульсный регулятор скорости отбора тела ("старт-стоп"), о котором шла речь в предыдущем топике, является неплохим и эффективным решением. Он очень прост в реализации и устойчив в работе. Тем не менее у него есть свои недостатки. Во-первых, на начальных стадиях отбора тела, средняя скорость отбора (которая равна номинальной) может оказаться неоптимальной. Т.е. меньше той, с которой колонна вполне бы могла еще "справляться" (при текущей спиртуозности в кубе и постоянной мощности нагрева). Во-вторых (это уже касается завершающих стадий отбора тела), идиллию нарушает периодическое "встряхивание" колонны (при срабатывании старт-стопа), которое нарушает квазистационарный режим ее работы. Поэтому хотелось бы сделать какой-нибудь более совершенный регулятор, свободный от указанных недостатков.

У нас реализована цифровая система управления, а у малинки вполне "квалифицированные" мозги. Поэтому такая задача решается просто. Я бы даже сказал - очень просто. Всего лишь нужно в регуляторе изменить алгоритм вычисления управляющего воздействия (в нашем случае - скорости отбора). Управляющее воздействие нужно изменять не "импульсно" (как в "старт-стопе": либо ноль, либо максимум) а как-нибудь плавнее. Например, увеличивать или уменьшать отбор небольшими шагами в зависимости от невязки (в нашем случае - отклонения температуры в нижней части колонны от уставки). Шаг можно выбрать фиксированным или переменным, например, пропорциональным невязке. В первом случае мы получим простой релейный регулятор, во втором - пропорциональный.

Ректификационная колонна является довольно инерционной системой. Например, время реакции моей "железяки" на импульсное воздействие составляет порядка 4-5 мин. Поэтому шаг в релейном регуляторе должен быть выбран сравнительно небольшим.

И еще один момент, который необходимо отметить. Наша система сильно несимметрична относительно управляющего воздействия. Т.е при повышении скорости отбора температура растет довольно быстро, а вот при уменьшении - падает очень медленно. Для того, чтобы система всегда стремилась к максимально возможной (для данной спиртуозности) скорости отбора, я добавил в управляющее воздействие еще одну компоненту - небольшую положительную постоянную составляющую. Можно сказать, что эта компонента как бы слегка "симметризирует" систему :)

ПИД-регулятор требует более тщательной настройки параметров по сравнению с релейным. Поэтому для первого эксперимента я реализовал простой релейный регулятор. Реализация (совсем небольшая модификация скрипта) заняла буквально несколько минут. Скрипт находится в приложении к данному топику (файл nna_06.py). Все, что необходимо - прокомментировано в тексте скрипта.

На рисунке ниже показан фрагмент лога, в котором производится отбор тела с описанным выше "плавным" релейным регулятором.
 Ненавязчивая автоматизация ректификационной установки
Ненавязчивая автоматизация ректификационной установки. Автоматика.

Смысл диаграмм такой же, как и в предыдущем топике. На верхней диаграмме зависимость температур (в кубе, колонне и дефлегматоре) от времени. На средней - то же самое, только с сильно растянутой шкалой по температуре. На нижней - скорость отбора. На средней диаграмме мы отчетливо видим, что даже самый простой релейный регулятор скорости отбора стабилизирует температуру в нижней части колонны с точностью плюс-минус один квант датчика. Мне кажется - весьма неплохой результат для первого эксперимента!

Примечание. На средней диаграмме виден небольшой (на пару-тройку квантов) резкий провал температуры примерно в середине диаграммы (в районе 542 минуты) и соотвествующий ему всплеск скорости отбора. На этот артефакт не следует обращать внимания - это внешнее возмущение. Я в это время вытаскивал из-за установки одну штуковину и случайно (причем, нехило) долбанул по колонне. Но, тем не менее, мы видим, что регулятор вполне "справился" и с таким внешним воздействием :)

Для сравнения качества работы двух регуляторов (импульсного и релейного), я совместил центральные диаграммы (которые с растянутой температурной шкалой) обоих регуляторов в одном рисунке и согласовал шкалы по времени. Рисунок представлен ниже.
 Ненавязчивая автоматизация ректификационной установки
Ненавязчивая автоматизация ректификационной установки. Автоматика.

Вывод, особенно для финальных стадий отбора (в правой части диаграмм), очевиден.

Итак, простейший релейный регулятор показал вполне приличные результаты по стабилизации температуры в нижней части колонны и оптимизации скорости отбора. В то же время ступеньки на графике зависимости скорости отбора от времени (нижняя диаграмма предыдущего рисунка) явно видно, что динамические характеристики регулятора неплохо было бы улучшить. Т.е. нужно реализовать "нормальный" ПИД-регулятор и тщательно подобрать его параметры под конкретную установку. Но это - уже другая история.

======================================

Предыдущий топик  Вернуться к оглавлению  Следующий топик
nna_06.py.zip 5.2 Кб
U-M Магистр MSK 210 39
Отв.139  14 Марта 17, 19:06
Есть некоторый вопрос по теме температуррной коррекции относительно атмосферного давления - требуется-ли и насколько точно калибровка датчиков температуры и датчика давления? И каким методом можно добиться достаточной точности калибровки?