27 МОСКОВСКАЯ ВСТРЕЧА
Форум самогонщиков Сайт Барахолка Магазин 27 МОСКОВСКАЯ ВСТРЕЧА

Modbus, Ethernet, SCADA и прочие "излишества"

Форум самогонщиков Автоматика
1 2 3 4 3
baton Доктор наук Санкт-Петербург 648 230
Отв.40  22 Февр. 18, 00:42
MBpollTomat7, 21 Февр. 18, 15:31
Работает. Конечно помучился. Видимо из-за питания Arduino периодически подвисает. То работает стабильно, то начинается расколбас.
Из Modbus Poll лампочка зажигается, но при этом может отвалиться связь. У меня пока на макетке сделано без всяких снабберов-конденсаторов. Сейчас займусь этим.
Растащил все проводочки и БП по сторонам. Отработало два периода по 10 минут без ошибок. Температуру кажет стабильно.
Я почти счастлив Улыбающийся

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

Сдаётся мне, что всё же модуль Ethernet надо запитывать от 5V. Скорее всего до этого удалось добиться соединения при переключении на 3.3 вольта из-за того, что я поправил проводники, где был плохой контакт и т.д.
Сейчас при переключении на 5 вольт всё стало вобще стабильно.
Начал пробовать что-то делать в SCADA и масштаб возможностей поражает.
Tomat7 Магистр Черноморская губинния 236 138
Отв.41  22 Февр. 18, 21:13
Если используешь SimpLight несколько простых советов:

- в Модбас драйвере создавая тэг (Узел->Устройство->Тэг) сразу обращай внимание на "Тип данных" (Int16 для температуры, UItn16 для остального) и "Тип доступа" (ReadOnly для температуры и Pnow, ReadWrite для остального);

- именовать каналы/тэги (да и узлы/устройства) лучше сразу "разумно" (не тэг1, тэг2..), то есть так, чтобы по названию сразу было понятно что за устройство и что за данные в канале;

- в "Конфигураторе каналов", когда канал уже в "Списке активных каналов" у него может быть другой тип данных, а для температуры удобно приделать "Модификатор на чтение" "Val/100" и тип "Single" с форматом X.X или X.XX;

- так как контроллер всегда ждет "0" в одном из регистров как подтверждение "живости" Мастера, то в СКАДЕ логично сразу сделать Virtual Channel и привязать к нему скрипт (исполняющийся циклично) который будет обнулять соответствующий регистр;

С удовольствием отвечу на любые вопросы.

Удачи!
baton Доктор наук Санкт-Петербург 648 230
Отв.42  22 Февр. 18, 21:38, через 26 мин
Да, ковыряюсь с SimpLight. Потрясающая вещь.
Спасибо за наводки! До части уже "доковырялся" сам Улыбающийся
Пришла посылка из Китая с недостающими деталькам для базового модуля. Соберу всё и буду дальше смотреть.
PavelSaratov Доктор наук Саратов 622 80
Отв.43  22 Февр. 18, 22:03, через 25 мин
Да, ковыряюсь с SimpLight. Потрясающая вещь.
Блин, походу надо изучить, чтобы не отставать от тенденций. Почему она вам потрясающей показалась?
baton Доктор наук Санкт-Петербург 648 230
Отв.44  22 Февр. 18, 22:44, через 42 мин
PavelSaratov, можно сделать практически то, что хочешь. Не знаю ещё в каких пределах Улыбающийся Ещё мало знаю.
Первое, что я отмечу, как важный для меня факт, это то, что можно управлять/наблюдать всё на экране компьютера. И делать это можно удалённо.
Мне всегда не хватало гибкости в той автоматике, которой (которыми) я пользуюсь. Хочется, например, дополнительный датчик температуры куда-то установить, а так просто, как это сделать тут, не получится. Или вобще не получится. Вот нужен мне, допустим, регулятор мощности по давлению - и его сюда запросто добавить, а не делать как отдельное устройство с независимым контролем и управлением. Клапан - пожалуйста. И можно это всё проследить в динамике, как меняется относительно друг-друга.
Когда я пишу "запросто", это не значит, что мне прям это просто, но я понимаю, что это в принципе не так и сложно и я уже начинаю соображать, как это сделать Улыбающийся

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

И опять же тут участвуют две понятные мне вещи: компьютер и ethernet Улыбающийся
PavelSaratov Доктор наук Саратов 622 80
Отв.45  22 Февр. 18, 22:48, через 4 мин
 SCADA, че уж, тут рекомендующий был прав - все дела. Меня заинтересовало, что вы внезапно прикрутили всю периферию к к ней. А и да - надо посмотреть тренды. Детализацию, как долго хранятся, как отслеживает пики (пиздец датчику) ну и остальное. Спасибо за мнение.
Tomat7 Магистр Черноморская губинния 236 138
Отв.46  23 Февр. 18, 10:23
можно управлять/наблюдать всё на экране компьютера. И делать это можно удалённо.
Мне всегда не хватало гибкостиbaton, 22 Февр. 18, 22:44
+100500
Modbus, Ethernet, SCADA и прочие "излишества"
Modbus, Ethernet, SCADA и прочие "излишества". Автоматика.
ради этого и было всё затеяно!
Для совсем удаленного доступа (с работы, с мобильника) использую стандартный виндовый RDP.

регулятор мощности по давлению
Атмосферник уже прикрутил, mpx5010 на подходе.

Детализацию, как долго хранятся
Мои ноябрьские эксперименты еще частично видны в архиве.
Частично, потому что есть одна заморочка - в архиве видны только тэги которые с тех пор остались в "Редакторе каналов" и не переименовывались. В замешательстве
Именно поэтому рекомендовал подходить к именованию тэгов/каналов разумно.
Кстати, БД включается в архивную копию по умолчанию. (можно отключить в Project manager)

как отслеживает пики
Скриптами.
Пропадание и глюки датчика контроллер "преобразовывает" в отрицательные температуры:
-99 - DS18B20 не обнаружен
-33 - не успел за отведенное время
-22 - CRC error
-11 - какая-то другая проблема.
(только сейчас подумал - DS'ка ведь может измерять аж до -55 и -11 вполне себе реальная температура которая может оказаться у кого-нибудь в лаборатории. наверное придется переделать)

Вот эти "маячки" и нужно отслеживать в скриптах.
Пропадание из сети и прочие глюки самого контроллера (точнее тэга) можно отследить по GetQuality(ИмяКанала). https://simplight.ru/...gami/getquality
Или отслеживая регистр/счетчик HeartBeat который SCADA должна обнулять, а контроллер на каждое обнуление должен заносить туда количество отработанных им секунд с момента включения.
baton Доктор наук Санкт-Петербург 648 230
Отв.47  27 Февр. 18, 22:37
Tomat7, накопилось некоторое количество вопросов.
1.   Теги.
Не мог бы ты написать, что каждый из них означает.
Например, в РМ предназначение второго тега, который у тебя на скриншоте обозначен как LagFactor, мне не понятно. В БК (базовый контроллер) четвёртый по значению похож на DSConvTime, но значение его всегда постоянно, в отличие от DSConvTime в РМ. Так же девятый, десятый и одиннадцатый.
Шестой тег это константа из скетча    mb.addHreg(hrLAST_DROP);    // DEBUG?? // длительность крайнего открытия клапана (100 мс + залёты)? Но почему он тогда иногда имеет значение, отличное от 100?
2.   "Щелкунчик".
Объясни пожалуйста принцип его работы. При выставлении в пятом теге БК значения «1» в седьмом "нащёлкивает" больше, чем при значении «100», из-за чего у меня возникает некий "разрыв шаблона" Улыбающийся
3.   Скрипты для SCADA.
Не мог бы ты поделиться своими, чтоб я уже по их подобию начал что-то "городить" и понимать. А то с языками программирования кроме html практически не знаком.
Атмосферник уже прикрутил, mpx5010 на подходе.Tomat7, 23 Февр. 18, 10:23
И конечно же это очень интересует.
Tomat7 Магистр Черноморская губинния 236 138
Отв.48  28 Февр. 18, 10:51
Не мог бы ты написать, что каждый из них означает.baton, 27 Февр. 18, 22:37

Модбас регистры Регулятора Мощности - актуально для версий до mb-TVP-141!

dsTemp [только чтение] - температура DS'ки умноженная на 100, в СКАДЕ нужно применить модификатор Val/100.

LagFactor [чтение/запись] - параметр влияющий на алоритм регулятора мощности, условно говоря это скорость реакции на изменения. при "скачках" напряжения на входе подбор параметра может в некоторой степени сгладить скачки на выходе. если на входе стабильные 220 вольт, то его изменение практически не заметно. проверять его влияние удобнее с внешним ваттметром. по опыту, приемлемый диапазон - от 1 до 200, но можно и 1000 для экперимента. Смеющийся

Pset [чтение/запись] - установленная/заданная мощность.

Pnow [только чтение] - измеренная мощность (для ТЭНа с номинальной мощностью равной той, что скорфигурирована при компиляции скетча! она же показывается на начальном экране в нижней строке - CONFIG **** watt. соответственно, если подключить прибор другой мощности, то показания будут не верны)

secUptime [чтение/запись] - HeartBeat модбаса, Ардуино записывает в него количество отработанных секунд, а Модбас мастер должен записывать сюда "0".

dsConvTime [только чтение] - время потраченное DS'кой на преобразование. (у меня есть несколько DS которые выполняют преобразование с полным разрешением менее чем за 100 мсек. Шокированный хотел таких найти побольше. в общем, чистый дебаг, в следующих версиях уж в РМ точно выпилю  ;))

mbpoll2b.JPG
mbpoll2b.JPG Modbus, Ethernet, SCADA и прочие "излишества". Автоматика.
Tomat7 Магистр Черноморская губинния 236 138
Отв.49  28 Февр. 18, 11:16, через 25 мин
В БК (базовый контроллер) четвёртый по значению похож на DSConvTime, но значение его всегда постоянно, в отличие от DSConvTime в РМ. Так же девятый, десятый и одиннадцатый.baton, 27 Февр. 18, 22:37

Модбас регистры Базового Контроллера - актуально для версий до MB-reg-09*

dsTemp0-2 [только чтение] - температурs DS'ок умноженная на 100, в СКАДЕ нужно применить модификатор Val/100.

convTimeOut [чтение/запись] - время отведенное DS'кам на преобразование температуры, оно же время между обновлениями информации на экране и в регистрах модбаса. 750 мсек - максимальное время по даташиту для DS, можно поиграться с длительностью. чистый дебаг, в следующих версиях наверное выпилю  ;)

dropInterval [чтение/запись] - время между открытиями клапана. высчитывается в СКАДЕ исходя из требуемой скорости отбора.

lastDrop [только чтение] - длительность нахождения клапана в открытом состоянии в последний крайний щелчёк. вообще, это время фиксировано в скетче - 100 мсек, но из-за других операций выполняемых в скетче может "залетать" до 106 (зависит от количества подключенных DS, это дебаг, наверное выпилю).

clicks [только чтение] - количество кликов клапана с момента включения. СКАДА из этого считает объём собранного продукта. (объем за один клик определяется только экспериментально, так как зависит от множества факторов - конструкции клапана, высоты подвеса и тд)

secUptime [чтение/запись] - HeartBeat модбаса, Ардуино записывает в него количество отработанных секунд, а Модбас мастер должен записывать сюда "0".

dsConvTime0-2 [только чтение] - время потраченное DS'ками на преобразование. (дебаг, в следующих версиях наверное выпилю  ;)
mbpoll-base35.JPG
mbpoll-base35.JPG Modbus, Ethernet, SCADA и прочие "излишества". Автоматика.
Tomat7 Магистр Черноморская губинния 236 138
Отв.50  28 Февр. 18, 11:56, через 41 мин
При выставлении в пятом теге БК значения «1» в седьмом "нащёлкивает" больше, чем при значении «100»,
Всё верно, пятый тэг (четвертый если считать с "0" ) это dropInterval - это время между щелчками. то есть чем больше в нем значение, тем реже щелкает клапан.
НО! "0" в этом регистре означает не щелкать совсем.

Скрипты для SCADA. Не мог бы ты поделиться своими, чтоб я уже по их подобию начал что-то "городить" и понимать
Приложил.

И конечно же это очень интересует.
Приложил и скетч и библиотеку для BMP. (для MPX библиотека не нужна)
#define PRESSURE_BMP // для BMP280
или
#define PRESSURE_MPX // для MPX5010dp

НО! На реальном перегоне скетч не проверялся!
Как всё это себя поведет при наличии помех от РМ и прочего еще надо выяснять.

*** В этом скетче изменена последовательность регистров Модбаса!! *** (картинку прилагаю)

Удачи!
mbpoll-141-newHR.JPG
mbpoll-141-newHR.JPG Modbus, Ethernet, SCADA и прочие "излишества". Автоматика.

scripts.zip 4.7 Кб
mb-TVP-141.zip 6.7 Кб
BMP280x.zip 2.9 Кб
baton Доктор наук Санкт-Петербург 648 230
Отв.51  28 Февр. 18, 12:17, через 21 мин
то есть чем больше в нем значение, тем реже щелкает клапанTomat7, 28 Февр. 18, 11:56
А как сделать, чтоб был открыт постоянно? Насколько понимаю, это уже "зона ответственности" скетча?
Можно ли на базовый контроллер повесить ещё исполнительные устройства (клапаны)?
Tomat7 Магистр Черноморская губинния 236 138
Отв.52  28 Февр. 18, 12:28, через 11 мин
А как сделать, чтоб был открыт постоянно? Насколько понимаю, это уже "зона ответственности" скетча?baton, 28 Февр. 18, 12:17
А никак! Если локально, то я тумблер сейчас ставлю на три положения: On-Auto-Off.
Наверное покопаю в сторону постоянного открытия удаленно...  ???

Можно ли на базовый контроллер повесить ещё исполнительные устройства (клапаны)?
Конечно можно!
У меня на базовом контроллере три DS'ки, клапан, и теперь еще BMP280 или MPX5010dp.
А в версии 141 (что я сегодня приложил) аж два клапана - задел на будущее - чтобы собирать оборотный спирт и тело в разные ёмкости.
Про другие исполнительные как-то не думал, хотя не вижу проблем совсем и могу добавить легко.
Tomat7 Магистр Черноморская губинния 236 138
Отв.53  28 Февр. 18, 13:00, через 32 мин
Выпилил из своего проекта "лишние" тэги так, чтобы было 32 и запускалось на бесплатной версии SimpLight.
Попробуй, для ознакомления уж точно пойдет, а если немного напильником поправить, то и вообще рабочая версия.  ;)

P.S. config.cpp обычно лежит в C:\slProject\InternalTag\Script
tomat4mini.slz 163.1 Кб
baton Доктор наук Санкт-Петербург 648 230
Отв.54  01 Марта 18, 19:41
Tomat7, привет!
Вопрос по поводу отображения данных от MPX5010DP на LCD и в тегах. Когда происходит так, что давление выходит за рамки измерения датчика на LCD показывает «-1», а в теге приходит 65535. Я так понимаю, что это число аналогично понятию "бесконечность". Эти данные для LCD как-то конвертируются, а в регистре просто RAW?
Tomat7 Магистр Черноморская губинния 236 138
Отв.55  01 Марта 18, 19:58, через 17 мин
на LCD показывает «-1», а в теге приходит 65535baton, 01 Марта 18, 19:41

65535 - это тот же набор битов что и "-1", просто программа которая это показывает считает это число беззнаковым (unsigned).
Если это Modbus Poll версии 7 и выше, то кликни на "65535" и потом Display->Signed, или Alt-Shift-S.

Если SimpLight (или другая СКАДА), то сначала в Модбас Драйвере для этого тэга установить "Тип данных" Int16.
А затем еще в "Конфигураторе каналов" этому каналу установить "Тип переменной" устнаовить Int16 или ShortInt.


baton Доктор наук Санкт-Петербург 648 230
Отв.56  01 Марта 18, 20:00, через 3 мин
Понял, спасибо!

Добавлено через 9дн. 16ч. 55мин.:

Tomat7, не подскажешь, как сделать, чтоб давление отображалось с точностью до десятых или сотых? И для BMP280 и для MPX5010. Понимаю, что возможно лишнее, но...
У меня первая попытка была для BMP280: поменял в скетче (выделено красным)  bmp280.Press_mmHg  на  bmp280.Press_Pa, чтоб в SCADA пересчитать скриптом на мм рт.ст. с сотыми.
#ifdef PRESSURE_BMP
   bmp280.check();
   mb.Hreg(hrPRESSURE, bmp280.Press_Pa);
   String pressInfo = "TEMP " + String(bmp280.Temp_C, 2) + " DegC  PRESS : " + String(bmp280.Press_Pa, DEC) +
                      " Pa | " + String(bmp280.Press_mmHg, DEC) + " mmHg";
Но почему-то показания через Modbus приходили "неправильные". Вместо, например, 101 511, приходила типа 35 625. В "Мониторе порта" всё правильно.
С MPX5010 попытка была краткой: в скетче решил поменять тип данных с int на float - мало ли Улыбающийся
#ifdef PRESSURE_MPX
   float dPress_mmHg = analogRead(MPX5010_PIN);
   dPress_mmHg = (dPress_mmHg * 4 - 160) / 50;
   mb.Hreg(hrPRESSURE, dPress_mmHg);
Не получилось.
Ну это вкратце мои попытки Улыбающийся
Tomat7 Магистр Черноморская губинния 236 138
Отв.57  12 Марта 18, 11:16
Размерность регистра Модбаса 16 бит, соответственно в него можно "запихнуть" беззнаковое число до 65535, а Press_Pa больше 100 тысяч.

Самый простой способ сделать так:
mb.Hreg(hrPRESSURE, bmp280.Press_Pa/10);
А в СКАДЕ для этого параметра сделать модификатор Val*10. Но так потеряешь младший знак - единицы Паскалей, что при переводе в мм ртути даст погрешность в третьем знаке после запятой.  :-\

Чтоб не терять младший знак можно так:
mb.Hreg(hrPRESSURE, (bmp280.Press_Pa-65535);
А в СКАДЕ модификатор Val+65535. Но так теряется наглядность если смотришь регистры не СКАДОй.


Для MPX:
dPress_mmHg = (dPress_mmHg * 4 - 160) / 5;
А в СКАДЕ модификатор Val/10.

Ну и для всех каналов которым нужны десятые: в "Конфигураторе каналов", указать соответствующий тип данных - скорее всего "Single" с форматом X.X.

Хохмолог Доктор наук Хариш 692 203
Отв.58  17 Марта 18, 11:21
Ого, ударим скадой по ЭАФ а модбасом хвосты отрежем! Я сделал аппарат на основе PLC, HMI, Modbus RTU модуль опроса термометров DS, использовал готовый регулятор мощности. Но как сказали, это не ТРУъ аппарат, настоящий ТРУъ обязательно на ардуинке, на самодельном регуляторе-стабилизаторе мощности и вообще на всем самодельном и обязательно писаном на си. Наверное и ваш аппарат не будет ТРУъ, ибо скада не самописная.
Tomat7 Магистр Черноморская губинния 236 138
Отв.59  18 Марта 18, 10:44
настоящий ТРУъ обязательно на ардуинке, на самодельном регуляторе-стабилизаторе мощности
ну пока я в тренде. Подмигивающий

и обязательно писаном на си. Наверное и ваш аппарат не будет ТРУъ, ибо скада не самописная.
Не, СКАДУ с нуля писать я точно не буду.  Шокированный
А вот скрипты в СКАДЕ как раз на Си пишу.  Крутой

Расскажи про свой проект - в каком устройстве "зашиты" алгоритмы перегона/ректификации?
Другими словами - что за девайс управляет всем процессом?