Сначала собрал автоматику типа [сообщение #12517431] и регулятор на базе РМ2 + REX-C100 с простыми доработками позволяющими переходить с разгона на рабочую мощность и делать стоп по заданной температуре. Автоматизации хватало чтобы не сидеть рядом, а только приходить менять тару, задать следующую точку стопа и подкорректировать скорость отбора. Но хотелось большего.
Постановка задачи
1) Мониторинг, как онлайн, так и исторический - для разбора полётов.
2) Удаленное управление – установка режима работы, скорости отбора и прочего, не вставая со стула. (с работы!)
3) Уведомления о смене режима и неполадках.
4) Автоматизация перехода между режимами и корректировки скорости отбора. (эта хотелка появилась по мере реализации как продолжение п.2)
Онлайн мониторинг запилил быстро – просто установил HD веб-камеру в «лаборатории» так чтобы в кадр попадали показания термометров и приемная тара. Как говорится – дёшево и сердито, главное не забывать поглядывать на картинку в телефон и отзвонится тестю чтобы поменял тару. Остальные хотелки камера не решала совсем, но всё равно прижилась в лаборатории, да не одна. Так, год назад я задумал делать «свою» автоматику.
Немного о промежуточных этапах
За базу сначала выбрал Raspberry PI, с ней и несколькими DS18B20 начал играться на Python’e добывая/вспоминая опыт программирования и первый успех с головокружением пришли быстро. Неспешно была написаны кучка функций по сбору данных с DS в параллельных потоках и складированию их в MySQL с возможность показа графиков через WEB. В общем, задача мониторинга была решена, но счастью или нет DS’ки глючили. Глюк заключался в том, что малинка теряла все DS’ки и находила их только после холодного рестарта. Передача функций 1-wire от малины к DS2482 (мост I2C-1wire) и питание датчиков от +5v хоть и уменьшило количество зависаний, но полностью их не искоренило. Подробнее тут - [сообщение #13034651]В результате, поглядывая тему OldBean’а [Ненавязчивая автоматизация ректификационной установки] решил двигаться в сторону модулей.
Примерно таким был концепт который даже воплотился в железе, но до перегона дело так и не дошло по совокупности причин - [сообщение #13041876]
Взгляд упал на Ардуино, хотя до этого их даже в руках не держал. Первые шаги как обычно прошли хорошо. Дальнейшие эксперименты с DS и Ардуино также оказались удачными – Малинка теперь всё так же получала и складывала данные, но теперь уже по USB/UART от Ардуино [сообщение #13083411] . Кроме того, также по USB/UART малина научилась управлять регулятором мощности. Можно сказать, что задачи и мониторинга и частично удаленного управления были решены. Тут бы начать писать на Питоне функции/модули для ректификации, но всё время ловил себя на мысли о бесполезной работе – ведь уже была и автоматика от msg31, да и OldBean к этому времени на малинке уже целую религию построил. Да и просто-напросто малинка мне к тому времени разонравилась.
https://yadi.sk/i/0m8O0iDXt7ztDQ
https://yadi.sk/i/DE_z0e-0iuf4Lw
https://yadi.sk/i/92XWEqBcK1gi_A
Как-то сама собой появилась промежуточная задача: собирать информацию с контроллеров и управлять ими с обычного ПК.
К этому моменту в наличии имелись: контроллеры температуры и мощности на Arduino Nano/ProMini управляемые по USB/UART. Протокол обмена простейший, текстовый, однако на форуме было озвучено заманчивое предложение [Создадим свой открытый протокол обмена данными между контроллером и модулями] , но сожалению до сих пор результата нет.
Было решено пощупать Modbus. [сообщение #13083509] Сначала RTU по RS485 (модуль на UART, по USB тоже работало). Благо что только рабочих библиотек Модбаса для Ардуино есть аж три штуки. Почему-то не хотелось занимать единственный UART Ардуино Nano, и во чтобы то ни стало пытался делать на SoftwareSerial. Эксперименты с SoftwareSerial/RS485 и даже AltSoftwareSerial/RS485 показали, что оно как-то работало, но пролетали ошибки – за ночь от 10 до 1000 в зависимости от скорости и количества устройств на шине. По стандартному (hardware) UART/USB ошибок за ночь не наблюдалось даже на скоростях 115200. Сейчас я понимаю, что это ерунда и эти ошибки можно спокойно отрабатывать на более высоком уровне, но тогда это казалось абсолютно неприемлемым. Из-за этого стал смотреть в сторону Modbus TCP, а для него нашел только одну библиотеку, но поддерживает она и W5100, и ENC28J60 модули.
Успешные эксперименты подтвердили работоспособность модели. Другими словами, в наличии были контроллеры температуры и мощности управляемые по Modbus TCP и нужно найти/написать приложение на ПК умеющее управлять такими контроллерами. Наверное не сильно ошибусь если скажу что любая система СКАДА умеет собирать данные и управлять такими контроллерами. Осталось выбрать подходящую Скаду, а их не мало и в том числе бесплатных. 8)
Библиотеки Modbus для Arduino
https://github.com/...ave-for-Arduino
https://github.com/angeloc/simplemodbusng
https://github.com/andresarmento/modbus-arduino (RTU & TCP)
Подключение модуля RS485 к Arduino
https://lesson.iarduino.ru/...tandartu-rs485/
http://masters.donntu.org/...brary/art7.html
Статьи про Modbus RTU & TCP
https://habrahabr.ru/post/281430/
https://ipc2u.ru/articles/prostye-resheniya/modbus-rtu/
https://ipc2u.ru/articles/prostye-resheniya/modbus-tcp/
Программы для тестирования Modbus
http://qmodbus.sourceforge.net/
https://sourceforge.net/projects/qmodmaster/
http://www.modbustools.com/download.html
https://www.win-tech.com/html/demos.htm
https://1drv.ms/f/s!AnlWQ-iun_89bBlryDhYUl0yy90 – архив «R414A01…»
Библиотеки созданные для этого проекта
https://github.com/Tomat7/RegPower - регулятор тока (на основе проекта Sebra), заменён на ACpower и ACpower3
https://github.com/Tomat7/DStemp - сбор температуры с датчиков DS18B20
https://github.com/Tomat7/HDvalve - управление клапанами отбора
https://github.com/Tomat7/BMP280x - сбор данных с датчика атмосферного давления BMP280
https://github.com/Tomat7/MPX5010x - сбор данных с датчика дифференциального давления MPX5010dp (заменена на ADCmulti)
https://github.com/Tomat7/ADCmulti - чтение с нескольких аналоговых пинов используя режим непрерывного преобразования (Free-running-mode)
https://github.com/Tomat7/ADCmultiplexer - как и предыдущая, но возвращает не среднеарифметическое, а RMS значение
https://github.com/Tomat7/ACpower - регулятор мощности (да, именно мощности, а не тока или напряжения), для Arduino на Atmega328p и ESP32
https://github.com/Tomat7/ACpower3 - 3-х фазный регулятор мощности для ESP32
Другие использованные библиотеки
http://arduino.ru/...rillitsei-utf-8
https://github.com/marcoschwartz/LiquidCrystal_I2C
https://github.com/PaulStoffregen/OneWire
https://github.com/andresarmento/modbus-arduino
https://github.com/jcw/ethercard
https://github.com/emelianov/modbus-esp8266 - Modbus Master/Slave для ESP8266 и ESP32. Спасибо emelianov
https://github.com/stickbreaker/OneWire - этот форк OneWire корректнее работает под ESP32. Спасибо chuck todd
https://github.com/pstolarz/OneWireNg - библиотека для OneWire написанная с нуля, возможно лучше для ESP32. Спасибо Piotr Stolarz
Прочие полезные ссылки
https://support.simplight.ru/...erez-modbus-rtu - конфигурация Modbus драйвера СКАДА SimpLight
[сообщение #13080245] - схема подкючения клапана 12в к Ардуино (теперь и здесь [сообщение #13228981])
[сообщение #12022652] - подключение MPX5010dp к Ардуино (вместо А9 подключать к А1)
[сообщение #13246958] - немного про MBpoll с картинками
[сообщение #13248447] - несколько советов по именованию тэгов
[сообщение #13238647] - снимки экранов Скады и исторических данных
Обновление от 16.05.2019 - начал осваивать ESP32.
Скетч модуля TVP стал "всеядным" - то есть компилится и для Arduino Nano с Ethernet модулем, и для ESP32 с Wi-Fi - https://github.com/Tomat7/mb-TVP
Сделан и опробован на ректификации регулятор мощности с WEB, OTA, Oled, Encoder, DS18B20 - https://tomat.visualstudio.com/ESP32-AC-power