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

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

Форум самогонщиков Автоматика
1 ... 118 119 120 121 122 123 124 ... 132 121
OldBean Доцент Красноярск 1K 1.4K
Отв.2400  05 Февр. 22, 14:43
To NBVV

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

1. Для исправления косяка, связанного с отсутсвием бота, нужно вставить в начале файла sr1.py (перед первым использованием переменных token и chat_id) такую строчку
token = chat_id = ''
2. Закомментировать ("решеткой") все строки, в которых используется переменная u.s0 (это связано с фракционником).
После этих исправлений у Вас должно все заработать (см. скриншоты ниже)
2022-02-05-180150_1920x1080_scrot.png
2022-02-05-180150_1920x1080_scrot. Ненавязчивая автоматизация ректификационной установки. Автоматика.
2022-02-05-180643_1920x1080_scrot.png
2022-02-05-180643_1920x1080_scrot. Ненавязчивая автоматизация ректификационной установки. Автоматика.


PS
На всякий случай, я подготовил такой файл (для работы без фракционника и бота). Файл sr1_s0.py в приложении к топику. Запускать так
python3 main.py sr1_s0.py
Проверьте, заработает или нет это дело на Вашем железе.
sr1_s0.py.zip 4.6 Кб
sig Кандидат наук Ростов-на-Дону 304 138
Отв.2401  05 Февр. 22, 18:24
Для исправления косяка, связанного с отсутсвием бота, нужно вставить в начале файла sr1.py (перед первым использованием переменных token и chat_id) такую строчку
token = chat_id = ''OldBean, 05 Февр. 22, 14:43
День добрый!
Я бы предложил решить этот момент по другому - ошибка возникает при использовании комментированной переменной token в строке
 url = 'https://api.telegram.org/bot' + token + '/' 

Зачем нужна эта глобальная переменная url? Лучше перенести ее определение в tele_send_msg(), передав token в параметрах функции. Тогда все интимные подробности обмена с ботами telegram будут сосредоточены в одном месте - внутри функции tele_send_msg(token,chatid,text).
Это если есть смысл передавать глобальные переменные token и chat_id еще и параметрами функции.
OldBean Доцент Красноярск 1K 1.4K
Отв.2402  06 Февр. 22, 01:23
Зачем нужна эта глобальная переменная url? Лучше перенести ее определение в tele_send_msg(), передав token в параметрах функции. Тогда все интимные подробности обмена с ботами telegram будут сосредоточены в одном месте - внутри функции tele_send_msg(token,chatid,text).
Это если есть смысл передавать глобальные переменные token и chat_id еще и параметрами функции.sig, 05 Февр. 22, 18:24
Да. url вполне можно перенести в tele_send_msg(token,chat_id,text), слегка облегчив тем самым пользовательский скрипт. Да и подумать про флаг u.bot_flag нужно. Как показывает практика, эта опция (включение/выключение сообщений в процессе работы) не очень-то и нужна. Сделаю это в следующей версии.

В целом же, видимо действительно настала пора серьезно подумать о нормальном config-файле.
Ненавязчивая автоматизация ректификационной установки
Ненавязчивая автоматизация ректификационной установки. Автоматика.


To NBVV

Файл sr1_s0.py, который я выкладывал в своем предыдущем топике рассматривайте только как пример. Для отладки и проверки оборудования. Для реальной ректификации он не годится, т.к. переходы между режимами происходят автоматически и пауз смены приемных емкостей там нет. Для этого после каждого этапа нужно вставить переходы в режим холостого хода. Пример, как это сделать - в приложении к данному топику. Но только как пример! Поскольку в реально процессе этот скрипт не тестировался.
ekochnev Магистр Екатеринбург 206 54
Отв.2403  06 Февр. 22, 08:11
В целом же, видимо действительно настала пора серьезно подумать о нормальном config-файле.OldBean, 06 Февр. 22, 01:23
На самом деле давно пора это сделать, чтобы полностью отделить собственно исполняемый код от пользовательских данных. Тогда не придется подгонять текст программы индивидуально под каждого. Хотя у самого руки еще не дошли до этих доделок, но при ближайшей переделке софта планирую использовать для конфигов XML-файлы. Вот только дождусь когда из Китая ко мне сенсорный экран приедет, обещали к марту, и начну.
OldBean Доцент Красноярск 1K 1.4K
Отв.2404  06 Февр. 22, 12:24
На самом деле давно пора это сделать, чтобы полностью отделить собственно исполняемый код от пользовательских данных.ekochnev, 06 Февр. 22, 08:11
Давно бы сделал, если бы знал как :(((

Проблема файлов конфигураций в данной задаче на самом деле сложнее, чем кажется с первого взгляда. Дело в том, что у нас "переменной", определяемой пользователем, частью полной программы являются не только данные, но и части кода. К сожалению, я не знаю конфиг-форматов, которые могли бы содержать в себе еще и код. Да и есть ли такие вообще? Поэтому, для пользовательского конфигурирования системы, я, в свое время, решил использовать просто формат *.py :) По сути дела, файлы пользовательских скриптов (типа sr1.py, sr2.py) это и есть такие своеобразные "расширенные" конфигурационные файлы, которые призваны отделять основной код (библиотека lite.py и main.py) от пользовательских данных и кода.
NBVV Специалист Новосибирск 124 2
Отв.2405  06 Февр. 22, 15:25
Добрый день. Почему значения мощности отличаются от выставленных, и при этом не во всех трех случаях?
Список устройств, обнаруженных на шине i2c и хабах:
U0 11_8_A1 Датчик RMS [0.3549, 0, 1]
w0 13_8_A3 PDM-контроллер [2000.0, 0, 2]
Q0 14_0_A8 Датчик расхода [1.0, 0, 6]
q0 14_8_A4 PWM-контроллер [2000.0, 0, 3]
w1 23_8_A3 PDM-контроллер [2000.0, 0, 2]
w2 33_8_A3 PDM-контроллер [2000.0, 0, 2]
P0 77_8_55 Датчик давления BMP180 [0.00750061683, 0, 5]

>>> w0.v=10
>>> w1.v=20
>>> w2.v=30
>>> w0.v
20.0
>>> w1.v
20.0
>>> w2.v
40.0
>>>
OldBean Доцент Красноярск 1K 1.4K
Отв.2406  06 Февр. 22, 16:30
Почему значения мощности отличаются от выставленных, и при этом не во всех трех случаях?NBVV, 06 Февр. 22, 15:25
Потому что точность управления контроллером PDM - один процент от номинальной мощности. 1% от 2000 Вт это 20 Вт. Т.е. квант регулятора мощности в Вашем случае - будет как раз 20 Вт. Первые два случая (10 и 20 Вт) округлились до 20 Вт, а последний (30 Вт) - до 40 Вт.

Принцип работы PDM (Брезенхем) см. здесь. Квант (по времени) PDM-регулятора - это один полупериод сети (т.е. 10 мсек). За 100 полупериодов (1 сек) мы устанавливаем мощность с точностью 1%, за 1000 полупериодов (10 сек) точность установки мощности будет 0.1%, за 10000 полупериодов (100 сек) точность установки мощности будет 0.01% и т.д. В данном релизе выбран первый вариант. Точность установки - 1%. В этом случае инерционность регулятора - порядка 1 сек. Это оптимальный вариант для наших задач.

PS
Кстати, для клапана отбора (PWM-регулятор) точности 1% маловато, поэтому там базой является 1000 полупериодов. Т.е. точность установки скорости отбора - 0.1%, но инерционность регулятора уже 10 сек.
sig Кандидат наук Ростов-на-Дону 304 138
Отв.2407  06 Февр. 22, 23:08
Проблема файлов конфигураций в данной задаче на самом деле сложнее, чем кажется с первого взгляда. Дело в том, что у нас "переменной", определяемой пользователем, частью полной программы являются не только данные, но и части кода. К сожалению, я не знаю конфиг-форматов, которые могли бы содержать в себе еще и код. Да и есть ли такие вообще?OldBean, 06 Февр. 22, 12:24
Собственно, для программы на интерпретируемом языке и не нужен дополнительный язык конфигурации. Достаточно самого python. И именно поэтому в программы на С или С++ часто включают интерпретаторы lua или python - чтобы иметь мощный язык конфигурации с макросами, алиасами, подстановками переменных и функциями, которые вычисляют одни параметры по заданным другим. Поэтому никакой XML даже близко не годится для конфигурации.
Нужно только сразу отделить системные настройки в отдельный файл, чтобы не копировать адреса и пароли обмена из одного технологического файла sr1.py в другой. Все таки sr1.py это не конфигурационный файл, а скорее, описание конкретного технологического процесса в виде конечного автомата. Возможно сделать отдельный контейнер cfg - по аналогии с контейнером пользовательских переменных u.
OldBean Доцент Красноярск 1K 1.4K
Отв.2408  07 Февр. 22, 02:37
Все таки sr1.py это не конфигурационный файл, а скорее, описание конкретного технологического процесса в виде конечного автомата.sig, 06 Февр. 22, 23:08
Да. У меня он тоже плохо ассоциируется с конфигом. Поэтому я обычно и называю его скромненько - "пользовательский скрипт". Увы, в отличие от данных, поведение (т.е. код) плохо структурируется и унифицируется. В одной из ранних версий, я хранил кусочки кодов (инициализации режимов и проверки условий) в БД (в редиске). Почти сломал мозг, но так ничего и не придумал кроме тупого хранения кода в текстовом виде и прекомпиляции "на лету", при получении кода из БД :(((
Возможно сделать отдельный контейнер cfg - по аналогии с контейнером пользовательских переменных u.sig, 06 Февр. 22, 23:08
Давайте так и сделаем. На данном этапе туда войдут адрес TCP-сервера (малинки) и телеграммовская атрибутика. Это начало всех пользовательских скриптов - пусть идет в отдельный файл config.
NBVV Специалист Новосибирск 124 2
Отв.2409  08 Февр. 22, 10:08
Тестирую, пока с помощью lite.py свою установку. Сильно не нравится такой момент: любая «искорка» в сети (включил вентиляцию, щелкнул выключателем освещения) и светодиодики на платах тэнов гаснут, соответственно на тэны тоже ничего не подается. При этом, если запросить у малинки значение, к примеру, w0.v – то она скажет, w0.v имеет значение 2000 (то, что я задавал). И только если повторно ввести w0.v=2000 работа тэнов и светодиодиков)) возобновляется в штатном режиме.
Что посоветуете?
ekochnev Магистр Екатеринбург 206 54
Отв.2410  08 Февр. 22, 11:17
Попытайтесь определить, откуда проходит помеха: по питанию или это электромагнитная наводка. Попробуйте для начала запитать силовую часть отдельно, а блок питания для малинки отдельно через сетевой фильтр.
А так у меня лично борьба с помехами проходила как длительный отдельный квест. Постоянно ловил помеху, особенно в момент срабатывания контакторов. Предлагаемый Сергеем вариант я так и не смог запустить нормально, в итоге пришлось разрабатывать свой вариант платы крейта с которым малинка соединялась непосредственно своей гребенкой GPIO без промежуточных проводов, плюс еще несколько доработок. С тех пор все работает стабильно.
NBVV Специалист Новосибирск 124 2
Отв.2411  08 Февр. 22, 11:25, через 9 мин
У меня на подходе UPS для малинки. Подождать его или он тут не может помочь?
sig Кандидат наук Ростов-на-Дону 304 138
Отв.2412  08 Февр. 22, 12:37
У меня на подходе UPS для малинки. Подождать его или он тут не может помочь?NBVV, 08 Февр. 22, 11:25
Так малинка тут не причем - она команду в PDM-контроллер выдала. До следующей команды он должен ее помнить и выполнять. Тут больше вопрос к питанию ардуинки. Надеюсь, конденсаторы по питанию +5В стоят? (электролит и 100n)
BogAD Кандидат наук Красногорск - Белово 403 184
Отв.2413  08 Февр. 22, 12:51, через 14 мин
Тут больше вопрос к питанию ардуинки.sig, 08 Февр. 22, 12:37
Несомненно! Блокировочных конденсаторов на 0,1 мкф побольше как можно ближе к ногам МК, и электролит качественный по линии +5в.
NBVV, у тебя PE (земля) есть? Если да, нужно проверить её. На вход по 220 обязательно добавь LC-фильтр. Он не даст помехи извне пролезть...

Добавлено через 7мин.:

В общем комплексно надо подходить...
NBVV Специалист Новосибирск 124 2
Отв.2414  08 Февр. 22, 13:05, через 14 мин
Питание - китайский, но как сказали "неплохой" БП на 6А фото его и общей компоновки прилагаю. После него могу поставить конденсаторы легко. 10 000 мкф + 100n пойдет?
И еще интересная штука. отправил команду с малинки, к примеру, включить тэн. Потом выключаю малинку через меню и shutdown. Экран тухнет, зеленый светодиод малинки тоже замолкает. А тэн по-прежнему работает, пока не снимешь либо питание малинки, либо 220 с силовой части. Так и должно быть?
IMG_20220208_165935.jpg
IMG_20220208_165935.jpg Ненавязчивая автоматизация ректификационной установки. Автоматика.
IMG_20220208_170001.jpg
IMG_20220208_170001.jpg Ненавязчивая автоматизация ректификационной установки. Автоматика.
ekochnev Магистр Екатеринбург 206 54
Отв.2415  08 Февр. 22, 13:14, через 10 мин
Так и должно быть?NBVV, 08 Февр. 22, 13:05
Да, так и должно быть.
Малинка отдала по шине команду КАК работать ТЭНу, дальше им управляет ардуинка на соответствующем модуле. Малинка больше не нужна до тех пор, пока не захочется сменить режим работы.
NBVV Специалист Новосибирск 124 2
Отв.2416  08 Февр. 22, 13:37, через 23 мин
у тебя PE (земля) естьBogAD, 08 Февр. 22, 12:51
- земли нет.
BogAD Кандидат наук Красногорск - Белово 403 184
Отв.2417  08 Февр. 22, 13:40, через 4 мин
общей компоновки прилагаю.NBVV, 08 Февр. 22, 13:05
NBVV, ты уж извини, у тебя "залипуха" получилась...
У тебя вся силовая часть и цифровая вся в ёмкостной связи! Малинка вообще в сантиметре от силовой вилки. Провода GPIO от крейта до RPi в одном пучке с силовыми проводами. Силовые провода параллельны корпусам МК и очень близко расположены.
Если оставлять конструкцию в таком виде, нужно сильно переделывать монтаж, цифровые линии загонять в экранированные провода. Как говориться, мухи отдельно, котлеты отдельно.
Зря ушел от варианта OldBean.
- земли нет.NBVV, 08 Февр. 22, 13:37
Вот тут очень плохо... свой дом или квартира?
NBVV Специалист Новосибирск 124 2
Отв.2418  08 Февр. 22, 13:43, через 3 мин
И для общего понимания ситуации вопрос: моя проблема (Отв.2409 Сегодня, 10:08) это глюк малинки или 328-х МК?

Добавлено через 1мин.:

Вот тут очень плохо... свой дом или квартира?BogAD, 08 Февр. 22, 13:40
-
хрущевка.

Добавлено через 4мин.:

Силовые провода параллельны корпусам МК и очень близко расположены.BogAD, 08 Февр. 22, 13:40
Близко - согласен, но параллелей нет(корпуса вертикально, сила - горизонтально).
ekochnev Магистр Екатеринбург 206 54
Отв.2419  08 Февр. 22, 13:53, через 11 мин
И для общего понимания ситуации вопрос: моя проблема (Отв.2409 Сегодня, 10:08) это глюк малинки или 328-х МК?NBVV, 08 Февр. 22, 13:43

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