Праздники не за горами, а спирт неуклонно заканчивается. Но сахарный сырец в достаточном количестве уже был в наличии. Решил провести ректификацию с помощью новой системы (ака вариант LITE). Получился хороший повод написать первое клиентское приложение для БД redis, которое позволяло бы это делать. Написал. Заодно сразу его проверил в реальном деле. Параллельно вносил в код исправления, дополнения и комментарии. С вечера пятницы провел две первичных ректификации спирта-сырца. Полученный ректификат (СР1) залил, не разбавляя, в куб. И сейчас неспешно (с перерывами "на работу" ;) идет вторая ректификация СР1 в СР2. Из части отобранного СР2 уже сделал 40%-ю сортировку. Органолептика "на нюх" очень даже приличная. Посторонних запахов нет. Да и сам запах спирта очень-очень слабый, "тонкий". На вкус еще не пробовал. Пусть постоит несколько дней. "Отдохнет". А там как раз и праздники...
В целом, результаты испытаний таковы. Вариант LITE в реальном процессе отработал, как говорят, "на пять". Ни одного критического сбоя. Ни в железе, ни в прошивках, ни в БД redis с прослойкой lsync, ни в только что написанном клиенте. Несколько раз были "выбросы" единичных отсчетов температур (причем, безо всяких корреляций с чем-нибудь ;). Они никак не влияли на работу. Поэтому отложил "разборки" с ними "на потом".
Работа с клиентским скриптом показалась мне комфортной, а набор режимов и элементов управления вполне достаточным для проведения классических кубовых ректификаций и обслуживания установки. Поэтому я решил опубликовать этот скрипт.
17.8.1. Простой клиент для классической кубовой ректификации (v.0.0.1.4)
Внешний вид приложения, работающего непосредственно на малинке, показан на рисунке ниже. Скриншот сделан во время запуска колонны (после перерыва) в процессе второй ректификации (получение СР2). Интерфейс приложения простой. Слева расположена инструментальная панель с элементами управления и полями вывода значений параметров процесса. На панели справа в графической форме представлена 20-минутная история изменения температур и невязки, используемой для старт/стопа (разность между температурой в нижней части колонны и уставкой). Точка 0 на оси времени справа - это текущий момент времени. Слева - история. Понятно, что "глубина" истории задается параметром, который можно менять. Цвета кривых на графике совпадает с цветами цифровых полей слева.
Смысл элементов управления и полей вывода информации в общем-то понятен ректификаторам. Поэтому ограничусь лишь краткими комментариями. На самом верху панели расположен таймер, который показывает время, прошедшее с момента запуска программы или последнего сброса таймера (кнопочка справа). Удобная опция.
Следующий элемент управления - чекбокс для управления контактором, подающим высокое на шины. Тут комментировать нечего.
Ниже идет группа радиокнопок для индикации и/или ручного выбора текущего режима работы установки. Набор режимов достаточен для проведения ректификации и обслуживания установки. Скриншот слегка устарел: сейчас добавлен еще один режим "Слив", про который я совсем забыл в начале разработки. Это слив остатков флегмы из узла отбора. В этом режиме клапан отбора полностью открыт, а ТЭН выключен.
"Пробежимся" кратко по режимам работы установки.
0) Мониторинг. Нагрев выключен, отбор тоже выключен. С этого режима система начинает свою работу после запуска. Если необходимо, это режим (как и все остальные) можно в любой момент выбрать вручную. Это, по сути дела, будет быстрое программное выключение установки.
1) Разгон. В этом режиме ТЭН включен на максимум, отбор выключен. После того, как кубовая жидкость закипит, пар пойдет в колонну и температура датчика в нижней части колонны превысит пороговую (сейчас установлено 65°C), система автоматически перейдет в следующий режим работы - холостой ход.
2) Холостой ход. В этом режиме мощность нагрева снижена до рабочей (у меня это 600 Вт). Отбор выключен.
3) Следующий режим "Головы". Как видно из названия, он предназначен для отбора голов. Мощность нагрева - рабочая, скорость отбора небольшая (у меня сейчас установлена - 50 мл/час). Включение этого режима (после установки соответствующей приемной емкости) и выключение его пока производится вручную.
4) и 5) Режимы "Подголовники" и "Тело" в данном релизе ничем не отличаются. Их разделение введено для будущих версий клиента. Мощность нагрева - рабочая (600 Вт), а скорость отбора - "базовая" (у меня 500 мл/час). В этих двух режимах может быть включено импульсное регулирование средней скорости отбора (старт/стоп), о котором поговорим чуть ниже. Также, как режим отбора голов, эти режимы (в данном релизе) включаются и выключаются вручную после замены соотвествующих приемных емкостей.
6) Хвосты. После того, как средняя скорость отбора тела (в частности, периоды "стопов" начинают существенно превышать периоды "стартов") и спиртуозность кубовой жидкости становится малой, этот режим может использоваться для отбора, так называемых, "исправимых" хвостов (оборотный спирт с примесями высококипящих фракций). Мощность нагрева - рабочая, скорость отбора базовая (у меня установлено 500 мл/час). Регулирование скорости отбора в этом режиме не производится. Завершение режима "Хвосты" автоматическое: после достижения температуры дефлегматора порогового значения (у меня установлено 78.5°C) система переходит в режим холостого хода. В данном релизе коррекция этого порога на атмосферное давление не производится.
7) и 8) Режимы "Пропарка колонны" и "Слив" предназначены для обслуживания установки. В первом случае мощность нагрева и скорость отбора максимальные. Во втором - нагрев выключен, а клапан отбора полностью открыт.
9) Ну и, наконец, последний режим "СР2" предназначен для отбора спирта во время второй ректификации. Мощность нагрева рабочая, скорость отбора понижена (у меня сейчас установлена половинка от базовой - 250 мл/час).
После группы радиокнопок "Режимы работы" на инструментальной панели расположен чекбокс для включения/выключения блокировки системы по температуре в трубке связи с атмосферой (ТСА). В отличие от блокировки по температуре охлаждающей воды (которая включена всегда), блокировку по температуре ТСА в некоторых вариантах работы приходится отключать. В частности, при пропарке колонны или при отборе голов при наличии большого количества летучих примесей в сырце. Поэтому и добавлен этот чекбокс на инструментальную панель.
Следующая группа полей - это текущие температуры всех датчиков DS18B20, подключенных к системе (соответствуют моменту 0 на графиках). Тут, в общем-то тоже комментировать нечего.
После полей температур, на инструментальной панели расположены средства управления регулятором скорости отбора в режимах отбора подголовников и тела. Текущее значение уставки выводится справа. Три кнопочки предназначены для редактирования значения уставки. Кнопочки "+" и "-" увеличивают/уменьшают уставку на один квант датчика DS18B20 (0.0625°C), а кнопочка с галочкой позволяет выбрать в качестве уставки к текущую температуру в нижней части колонны (потом, естественно, это значение можно скорректировать при помощи кнопочек "+" и "-"). Чекбокс в этой же группе элементов управления предназначен для включения/выключения регулятора средней скорости отбора.
Необходимо сказать пару слов по поводу самого регулятора средней скорости отбора в режимах "Подголовники" и "Тело. В данной версии клиента реализован самый простейший импульсный вариант регуллятора (ака старт/стоп) с фиксированной базовой скоростью отбора, с гистерезисом +- 1 квант относительно уставки и без коррекции самой уставки на атмосферное давление. Недолго было написать более качественный регулятор, но тестирование и подбор параметров регулятора - довольно длительный процесс. Поэтому, из-за нехватки времени, и было выбрано простейшее решение. При правильном выборе базовой скорости отбора, уставки и без фанатизма в вопросе перевода остатков спирта в исправимые хвосты, можно получать неплохие результаты и с помощью простого старт/стопа ;)
Следующие поля на инструментальной панели носят чисто информативный характер и не нуждаются в специальных комментариях.
Исходный текст клиента - в архиве в приложении к данному топику. Текст очень подробно прокомментирован. Поэтому за остальными деталями можно обратиться к нему.
В заключение - пару слов как запускать клиента.
1. Поскольку клиент практически ничего не знает о реальном железе и может общаться только с базой данных, синхронизированной с железом, в системе должна быть установлена и запущена СУБД redis. См. топик про это.
2. Естественно, предварительно должен быть запущен и сам "синхронизатор" железа с БД. Т.е. модуль lsync должен быть запущен как обычное приложение или демон. См. топик и про то. После запуска, про синхронизатор можно просто забыть. Там кольцевая организация БД с двухсуточной историей.
После этого можно запускать клиентский скрипт и проводить ректификацию. Для этого, в отдельном терминале на малинке пишем:
python3 cli_0014.py
Добавление от 08.08.2019
Коллега ekochnev сделал исправления в скрипте cli_0014.py, обеспечивающие совместимость с версией Python 3.7.3
Модифицированный файл можно скачать из приложения к этому топику.
Ps
Для иллюстрации добавил несколько скриншотов, которые делал в процессе испытаний. Краткие комментарии прямо на картинках.
Предыдущий топик Вернуться к оглавлению Следующий топик