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

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

Форум самогонщиков Автоматика
1 ... 23 24 25 26 27 28 29 ... 132 26
U-M Магистр MSK 210 39
Отв.500  16 Июля 17, 22:56
Ради спортивного интереса, откинул входные цепи, а вход А3 посадил на землю. Итог - число на индикаторе, не меняющееся. Если А3 висит в воздухе, то число скачет. Скорее всего в скетче так реализовано.
сообщение удалено
OldBean Доцент Красноярск 1K 1.4K
Отв.501  16 Июля 17, 23:37, через 41 мин
U-M, ненулевое число на показометре при нулевом напряжении в сети - это нормально. В общем случае (для данного датчика RMS) так и должно быть.

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

Такая калибровка (по границам рабочего диапазона, т.е. без привязки к нулю) позволяет увеличить точность измерения RMS в практически значимом для нас диапазоне напряжений (например от 140 до 280В). Маленькие напряжения (в данном случае, ниже 100-140В) будут, естественно, измеряться с небольшой ошибкой. Но нас этот диапазон совсем не интересует.

Но если очень хочется чтобы при нуле напряжения сети показывался именно ноль - выбирайте первое напряжение для калибровки (U1, см.комментарий в скетче) равное нулю. Тогда аддитивная компонента калибровки (коэффициент kS в скетче) будет равна нулю и на показометре будет строгий ноль. Но точность измерения в рабочем диапазоне несколько упадет. Насколько? Это в первую очередь зависит от качества (линейности) АЦП ардуинки.
------------------
Ну а 137 - это просто осталось от другой задачи (точнее - теста). Если смущает - поставьте 0 в строке объявления и инициализации переменной rms. Ее можно вообще не инициализировать.
сообщение удалено
OldBean Доцент Красноярск 1K 1.4K
Отв.502  17 Июля 17, 05:06
Это в первую очередь зависит от диодов выпрямителя и трансформатора.sevpro, 16 Июля 17, 23:54
Да, конечно. Вы абсолютно правы... :)
gol_avto Доцент Москва - Серпухов - Анапа 1.3K 458
Отв.503  17 Июля 17, 13:34
Стесняюсь спросить, но в этом линуксе ничего не понятно. Как все-таки запустить программу?
После установки (активации) питона попробовал запустить имеющийся в примерах тестовый файл google_spreadsheet.py. В ответ вот.....

pi@raspberrypi:/Adafruit_Python_BMP/examples $ python google_spreadsheet.py
Traceback (most recent call last):
  File "google_spreadsheet.py", line 33, in <module>
    import Adafruit_BMP.BMP085 as BMP085
ImportError: No module named Adafruit_BMP.BMP085

=====
пишу с малинки
dth Бакалавр Арти 98 39
Отв.504  17 Июля 17, 13:36, через 3 мин
Модуль adafruit не видит, туда копать...
HBB Кандидат наук Москва 356 94
Отв.505  17 Июля 17, 13:41, через 6 мин
После установки (активации) питона попробовал запустить имеющийся в примерах тестовый файл google_spreadsheet.py.gol_avto, 17 Июля 17, 13:34

Это что за малинка, в которой надо устанавливать или активировать питон? В джесси 2 и 3 питоны по умолчанию стоят.
gol_avto Доцент Москва - Серпухов - Анапа 1.3K 458
Отв.506  17 Июля 17, 13:54, через 14 мин
Ну это я так по незнанию выразился. Выполнил рекомендации автора и коллег по подготовке малинки.
====
Не пинайте сильно, я в линуксе 0, даже ближе к -1
=====
Кстати по команде git clone https://github.com/adafruit/Adafruit_Python_BMP.git дирректория Adafruit_Python_BMP не создается. Надо впереди написать sudo
Потом выяснилось, что таких дирректорий 2, в разных местах. Чтобы удалить, перечитал инет... не удаляется.
•удалить директорию с именем ‘dir1’ и рекурсивно всё её содержимое
  rm -rf dir1
  sudo  тоже дабавлял

Уже 3 раза образ линукса переписываю на SD и с нуля все по новой настраиваю. пипец какой то.
OldBean Доцент Красноярск 1K 1.4K
Отв.507  17 Июля 17, 17:33
пипец какой тоgol_avto, 17 Июля 17, 13:54
После Windows так бывает, но обычно быстро проходит. Если, конечно, проявить немного терпения и упорства. Потом обратно уже и не захочется :) Самая первая ссылка в разделе "Полезные ссылки" поможет легко и безболезненно начать знакомство с Linux. После понимания философии системы, сможете правильно формулировать вопросы (по любому поводу) и практически всегда находить на них квалифицированные ответы в Сети. Сообщество пользователей Linux довольно широко и, как правило, очень квалифицировано.
U-M Магистр MSK 210 39
Отв.508  17 Июля 17, 21:41
попробовал запустить имеющийся в примерах тестовый файл google_spreadsheet.pygol_avto, 17 Июля 17, 13:34
похоже по закону подлости выбран косячный вариант. Насколько я понял, надо или еще подтянуть gspread или у нас нет модуля-железки под это дело.

Зато соседний файл simpletest.py работает. Только надо железку BMP (датчик давления) подключить:

cd Adafruit_Python_BMP
cd examples
python simpletest.py


отклик-температура, пара давлений, высота.
gol_avto Доцент Москва - Серпухов - Анапа 1.3K 458
Отв.509  19 Июля 17, 09:34
Пробую дальше. Решил хотя бы логи посмотреть от OldBean. Инсталлировал paramiko, написал команду в папке, где логи лежат. В результате -- увы. И где взять этот модуль pylab?

pi@raspberrypi:~/Desktop/logs_25_24_32_22 $ python log_viewer.py
Traceback (most recent call last):
 File "log_viewer.py", line 4, in <module>
   import pylab as pl # Библиотека для построения графиков (matplotlib)
ImportError: No module named pylab


Кстати. А можно в малинке поставить 2 языка клавиатуры и переключаться как Виндовс, а то каждый раз приходится  запускать конфигурацию и устанавливать страну то Россия, то США?
==========================
Инсталлировал библиотеку matplotlib
Теперь ругани нет, но программа ищет соединение по SSH
Traceback (most recent call last):
 File "log_viewer.py", line 9, in <module>
   ssh.connect("192.168.0.22", 22, "pi", "raspberry") # Сединяемся с малинкой
 File "/usr/lib/python2.7/dist-packages/paramiko/client.py", line 251, in connect
   retry_on_signal(lambda: sock.connect(addr))
 File "/usr/lib/python2.7/dist-packages/paramiko/util.py", line 278, in retry_on_signal
   return function()
 File "/usr/lib/python2.7/dist-packages/paramiko/client.py", line 251, in <lambda>
   retry_on_signal(lambda: sock.connect(addr))
 File "/usr/lib/python2.7/socket.py", line 224, in meth
   return getattr(self._sock,name)(*args)
socket.error: [Errno 110] Connection timed out

Как сделать, чтобы логи смотреть на самой малинке, подключившись напрямую клавиатурой, мышкой и монитором.
Делать соединение по SSH - это для меня не то, что стратосфера - недостижимый дальний космос.
Проект классный, но похоже только для профессиональных программистов Линукс. Грустный
OldBean Доцент Красноярск 1K 1.4K
Отв.510  20 Июля 17, 03:36
Инсталлировал paramiko, написал командуgol_avto, 19 Июля 17, 09:34
Немного непонятна логика запуска этого теста. Paramiko - это библиотека для работы как раз с SSH непосредственно из программы (скрипта) на питоне. Ну и стОит ли запускать тест, работающий с SSH без SSH?
Кстати. А можно в малинке поставить 2 языка клавиатуры и переключаться как Виндовсgol_avto, 19 Июля 17, 09:34
Конечно, можно. Гуглим что-нибудь типа "Raspberry Pi переключение раскладки клавиатуры" и выполняем первые попавшиеся вменяемые прописи по установке нужных раскладок и их удобному переключения.
Как сделать, чтобы логи смотреть на самой малинке, подключившись напрямую клавиатурой, мышкой и монитором.gol_avto, 19 Июля 17, 09:34
Очень просто. Запускаете консоль/терминал мышкой из меню (или просто нажимаете на клавиатуре Ctrl+Alt+T). На монитере появится окно терминала. В нем и пишете все что Вам нужно. Таких терминалов можно запустить несколько.
BogAD Кандидат наук Красногорск - Белово 403 184
Отв.511  22 Июля 17, 19:39
OldBean, проект "Ненавязчивая автоматизация ректификационной установки" и концепция супер! И Малинка достойна внимания... По волне идеи, встали только на I2С, что вполне оправдано.
Вопрос ребром: А не слишком сердцем системы назначили Малинку? Может достаточно ESP8266? Не совсем спец, но в курсе, что море ОС под эту "платформу" состряпали. И по финансам на порядок меньше.
Разубеди...
woddy Доцент Новосиб 1.3K 489
Отв.512  22 Июля 17, 19:47, через 9 мин
Вопрос ребром: А не слишком сердцем системы назначили Малинку? Может достаточно ESP8266? Не совсем спец, но в курсе, что море ОС под эту "платформу" состряпали. И по финансам на порядок меньше.
Разубеди...BogAD, 22 Июля 17, 19:39
пиши для esp софт. все тебе только спасибо скажут и пива нальют.
а пока не написал - рассматриваю как троллинг
BogAD Кандидат наук Красногорск - Белово 403 184
Отв.513  22 Июля 17, 20:09, через 22 мин
Woddy, голову пеплом посыплю...
Не совсем спец в этом. Имею опыт в повторе погодных станциях на ESP8266 (температура, влажность).
Сварить аргоном - запросто. Разработать плату в Lay под STM32 тоже опыт есть. Последнее - Сборка конструкций с STM32F100C8T6B. Пайка SMD, пока сложности не вызывает, хотя глаза стали подводить. Грустный
А вот что то самому выдумать, прописать код, увы... голова не на то настроена...
Без обид
woddy Доцент Новосиб 1.3K 489
Отв.514  22 Июля 17, 20:16, через 8 мин
А вот что то самому выдумать, прописать код, увы... голова не на то настроена...BogAD, 22 Июля 17, 20:09
вот в этом у всех тут проблема. потому автор пишет на том, что умеет.
а так да, ресурсов esp за глаза
OldBean Доцент Красноярск 1K 1.4K
Отв.515  23 Июля 17, 08:12
Разубеди...BogAD, 22 Июля 17, 19:39
Тут все гораздо проще. В общем-то на малинке свет клином и не сходился.

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

При выборе малинки в качестве процессора верхнего уровня сработали три фактора: 1) наличие серьезной полноценной ОС Linux, 2) обширное интернет-сообщество с огромным количеством уже реализованных проектов, прототипов и 3) просто наличие малинки во время начала работы над этой системой автоматизации. Стоимость же (в разумных пределах) для единичного устройства не играет особой роли.

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

В программировании верхнего уровня пока, естественно, я буду ориентироваться конкретно на малинку. Но, возможно в будущем, удастся как-то унифицировать логику системы и написать какой-нибудь более-менее универсальный драйвер, облегчающий подключение варианта LITE к разным устройствам верхнего уровня. Но вряд ли получится сделать это быстро и легко. Меня все-таки больше интересуют сами алгоритмы управления разными процессами ректификации, чем железо, электроника, пайка и программирование само по себе. Собственно для этого данная архитектура и задумывалась. Существующей системы уже вполне хватает для решения таких задач и так. Поэтому дальнейшее развитие системы будет, к сожалению, скорее всего, уже немножко по остаточному принципу :(
lesbeg Доктор наук Екатеринбург 657 458
Отв.516  23 Июля 17, 08:30, через 18 мин
1) наличие серьезной полноценной ОС Linux, 2) обширное интернет-сообщество с огромным количеством уже реализованных проектов, прототипов и 3) просто наличие малинки во время начала работы над этой системой автоматизации.OldBean, 23 Июля 17, 08:12

4) возможность покрыть код тестами
5) возможность развертывания апдейта кода как модуля pip-ом с github-а
6) Одна из самых крупных стандартных библиотек python-а и море модулей
7) ... Тут можно еще много написать о преимуществах полноценной ОС с языком очень высокого уровня
woddy Доцент Новосиб 1.3K 489
Отв.517  23 Июля 17, 08:57, через 27 мин
для esp можно на lua писать даже... и на питоне 
lesbeg Доктор наук Екатеринбург 657 458
Отв.518  23 Июля 17, 11:35
для esp можно на lua писать даже... и на питонеwoddy, 23 Июля 17, 08:57

Это сами интерпретаторы, причем резаные относительно i386\x86-64 (MicroPython уж точно), но не окружение. А ценность представляет не синтаксис на котором написан код, а экосистема в целом. Компьютер, в отличие от контроллера, позволяет собрать полноценное окружение, но за это придется платить снижением надежности аппаратной части (но не программной, тут все наоборот) и повышением стоимости этой аппаратной части.
OldBean Доцент Красноярск 1K 1.4K
Отв.519  24 Июля 17, 19:37
15.8. В качестве эпилога к первому варианту автоматизации: учет дифференциальной составляющей

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

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

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

Для упрощения рассуждений, здесь мы пренебрегаем влиянием атмосферного давления, но в реальной программе оно, естественно, учитывается.

В данной задаче управляющим (регулирующим) параметром является скорость отбора тела Q, а управляемый (регулируемым) - температура в нижней части колонны Tc. И, собственно, задача регулятора выглядит так: за счет снижения скорости обора Q (мгновенной или средней) не допустить существенного превышения температуры в нижней части колонны Tc некоторого заданного значения (уставки) Tset в течение всего процесса отбора тела.

Самый простой регулятор - это всем известный "старт-стоп". Отбор ведется с некоторой постоянной базовой скоростью отбора bQ. Как только температура Tc начинает превышать уставку Tset, скорость отбора устанавливается равной нулю. Т.е. - "стоп" по отбору. Колонна начинает работать на себя. Поток флегмы, стекающей вниз по колонне, возрастает и через некоторое время температура Tc начинает снижаться.После того, как Tc снизится до/ниже Tset, отбор возобновляется с той же самой базовой скоростью отбора. Это - очередной "старт". С понижением спиртуозности паузы в отборе (т.е. периоды между "стопом" и очередным "стартом") удлиняются. Таким образом, легко видеть, что средняя по времени скорость отбора постепенно уменьшается.

Регулятор "старт-стоп" прост и надежен. Но у него есть существенный недостаток - довольно большая амплитуда колебаний температуры Tc, которая возрастает по мере уменьшения спиртуозности кубовой жидкости. См., например, первый рисунок в этом топике.. Красная кривая на второй диаграмме - это как раз зависимость Tc (Tкол на графике) от времени. Амплитуда колебаний Tc к конце отбора тела достигает почти двух градусов! Несмотря на то, что температура в дефлегматоре  при этом остается неизменной, органолептические качества конечного продукта могут пострадать. Интересно, что некоторая сла-а-бенькая "жесткость" ощущается даже после второй ректификации. Объективных хроматографических анализов я не проводил, но субъективная оценка достаточно устойчива.

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

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

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

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

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

Немножко более формально (на питоне :) алгоритм выглядит следующим образом:

if not stopFlag: # Отбор производится
  if Tc >= Tset - qT and  maTcDeriv > 0 :
    ....
    # Делаем "стоп"   
    ....
else: # Сейчас - пауза в отборе (т.е. был стоп)
  if Tc < Tset + qT and maTcDeriv <= 0 :
    ....
    # Корректируем базовую скорость отбора и делаем "старт"
    ....

Здесь stopFlag - флаг состояния "стоп", т.е. когда отбор выключен, qT - величина кванта температурного датчика (в данном случае 0.0625°C) и maTcDeriv - скользящее среднее производной Tc по времени.

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


Небольшой комментарий к рисунку.

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

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

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

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

Предыдущий топик  Вернуться к оглавлению  Следующий топик