Плагин Modbus
-
На гитхабе опубликована новая версия плагина https://github.com/intrahouseio/intraHouse.plugin-Modbus/releases/tag/v0.0.4
1. Изменен синтаксис ввода адресов!!! - в 16-ричном виде нужно ввести перед числом 0x: 0x200
Адреса, диапазон значений можно вводить в десятичном или 16-ричном виде, параметр для определения hex-dec удален.
2. Убрана жесткая привязка типа устройства и типа регистра
3. Исправлена ошибка использования команд чтения (FC3-FC4). Пользователь сам определяет команду, независимо от типа регистра (Holding-Input)
-
И еще есть у меня регистры, которые в общем то бинарные актуаторы, т.е. имеют состояние включено/выключено.
Но выключено у них - 0, а включено - 255.
Создавать аналоговый актуатор для чтения/записи такого регистра?
В версии 0.0.4 убрана жесткая связь типа регистра и устройства.
Поэтому можно сделать так:
Устройство - дискретный актуатор,
Тип переменной - UNIT16 (скорее всего)
Функции - FC3, FC6
Трансформация значения - да
Значения логического уровня 0-1
Значения физического уровня 0-255
На нашем контроллере (мы проверяем на WAGO) работает
-
Сопутствующий багрепорт.
В сценариях, при копировании готовой блок-схемы с одним простым действием "установить значение", после изменения настроек блока сохранение не доступно.
Нужно удалить блок, создать новый, тогда настройки сохраняются.
-
версии 0.0.4 убрана жесткая связь типа регистра и устройства.
Как обновлять? В админке поиск обновлений не видит 0.0.4
-
Обновился.
В контроллере температура храниться целой цифрой в 10 раз большей фактического значения. Если хранится 217, значит температура +21,7
ПРи чтении температуры, делю значение на 10, в свойствах устройства указано, что знаков после запятой - 1.
А значение где-то округляется. вместо 10,6 вижу 11,0.
Где искать?
-
Обновился.
В контроллере температура храниться целой цифрой в 10 раз большей фактического значения. Если хранится 217, значит температура +21,7
ПРи чтении температуры, делю значение на 10, в свойствах устройства указано, что знаков после запятой - 1.
А значение где-то округляется. вместо 10,6 вижу 11,0.
Где искать?
Посмотрите в отладчике, что присваивается операцией set
-
Сопутствующий багрепорт.
В сценариях, при копировании готовой блок-схемы с одним простым действием "установить значение", после изменения настроек блока сохранение не доступно.
Нужно удалить блок, создать новый, тогда настройки сохраняются.
Спасибо, проверим
-
02.02 17:29:47.930 IH: get [{"id":"TUl","value":-38}] 02.02 17:29:47.931 IH: set {"ACTORA1":{"aval":-4,"err":0}}
Вот. Вместо -3,8 показывает -4
-
А что вы с расписанием делать хотите? И каков смысл этих 42 нулей?
Поставил такие настройки в расписании
строка приняла вид
(9) Комнатное устройство : Расписание [0,154,193,394,456,678,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] modbus: 43375
-
> 02.02 17:29:47.930 IH: get [{"id":"TUl","value":-38}] > 02.02 17:29:47.931 IH: set {"ACTORA1":{"aval":-4,"err":0}} >
Вот. Вместо -3,8 показывает -4
А формула какая? value/10 ?
-
А что вы с расписанием делать хотите? И каков смысл этих 42 нулей?
Поставил такие настройки в расписании
строка приняла вид
> (9) Комнатное устройство : Расписание [0,154,193,394,456,678,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] modbus: 43375 >
Да, загадочно
Если подойти по простому, получается, на каждый элемент настройки всего по два элемента массива. Это время в минутах от начала суток. А где положение ползунка? Что он кстати означает?
Я так понимаю, это интерфейс самого контроллера. А в IH вы что хотите видеть? Цель какая?
-
-
А формула какая? value/10 ?
> Math.round(value/10) >
Math.round как раз и округляет. Если хотите с десятыми, просто value/10
-
Да, загадочно
Если подойти по простому, получается, на каждый элемент настройки всего по два элемента массива. Это время в минутах от начала суток. А где положение ползунка? Что он кстати означает?
Я так понимаю, это интерфейс самого контроллера. А в IH вы что хотите видеть? Цель какая?
Там можно задать от 0 до 3-х периодов в день, когда работает режим комфорт.
В остальное время работает режим эконом.
Поэтому там у каждого дня недели по 3 полосы (в графическом интерфейсе).
А в регистре модбас эти периоды подряд перечисляются, через запятую - начало, конец, начало, конец, в минутах от начала суток.
-
Отображалку сделал.
Все работает.
-
Отображалку сделал.
Получилось хорошо. Мне нравится.
При этом сделано на контроллере с плагином Modbus :!:
Вы показывали скриншот с большим количеством сетевых соединений в мажордомо:
https://frm.intrahouse.ru/viewtopic.php?f=18&t=5321&sid=51f9c0ff16eaaf41d3c451e8b15a8386&start=30
Какая ситуация сейчас в intraHouse с плагином Modbus?
-
@intrahouse:
Отображалку сделал.
Получилось хорошо. Мне нравится.
При этом сделано на контроллере с плагином Modbus :!:
Вы показывали скриншот с большим количеством сетевых соединений в мажордомо:
https://frm.intrahouse.ru/viewtopic.php?f=18&t=5321&sid=51f9c0ff16eaaf41d3c451e8b15a8386&start=30
Какая ситуация сейчас в intraHouse с плагином Modbus?
Сейчас все отлично! Все регистры опрашиваются/записываются внутри одного TCP соединения, ошибок нет, работает устойчиво.
Сделал все исключительно на аналоговых актуаторах.
Сначала это казалось странным и не логичным (так оно и есть, в общем то), но потом они мне очень понравились. Исключительно удобная вещь. Можно термометру цвет менять в зависимости от диапазона температуры, которую он показывает.
Вопросов по взаимодействию с модбас устройством на этом этапе не возникло, все легко и понятно. Когда доберусь до более сложных задач (типа расписания), тогда возможно появятся вопросы. А пока мне производитель контроллера сообщил, что через модбас с раписанием работать в текущей прошивке нельзя
Чего лично мне не хватило в IH.
Возможности привязывать состояние одного объекта к значению или состоянию другого.
Чтобы в выборе "границ" состояний можно было еще и другое устройство указать.
Тогда без лишних трудозатрат можно на одном виджете отображать разные наборы элементов.
Спасибо за отличный плагин!
-
Здесь нужны кнопки + сценарии
Можно сделать мультисценарий, который будет присваивать новое значение c заданным шагом, при этом еще проверять выход за границы. step - шаг - будем передавать с кнопки как параметр
Пытаюсь заставить скрипт проверять режим комнаты (ACTORA3), и в зависимости от его значения увеличивать уставки соответствующего режима.
/** * @name Увеличение уставки T комнаты на шаг * @desc * @version 4 */ script({ start(step) { step = Number(step); let newvalue1 = ACTORA7.value+step; if ((ACTORA3.value = 0)) ACTORA7.setValue(newvalue1); let newvalue2 = ACTORA8.value+step; if ((ACTORA3.value = 1)) ACTORA8.setValue(newvalue2); let newvalue3 = ACTORA9.value+step; if ((ACTORA3.value = 3)) ACTORA9.setValue(newvalue3); } });
И ничего не просиходит. Ни ошибок, ни действий.
Сделайте в блоках арифметику, пожалуйста
Из-за "+1" заставлять учить синтаксис - это же геноцид!!!
-
Пытаюсь заставить скрипт проверять режим комнаты (ACTORA3), и в зависимости от его значения увеличивать уставки соответствующего режима.
И ничего не просиходит. Ни ошибок, ни действий.
Сделайте в блоках арифметику, пожалуйста
Из-за "+1" заставлять учить синтаксис - это же геноцид!!!
Все нормально у вас с синтаксисом
Просто в сценарии нужно объявить устройства, с которыми он работает
Если вы не хотите использовать мультисценарий, достаточно написать так
/** * @name Увеличение уставки T комнаты на шаг * @desc * @version 4 */ const ACTORA3 = Device("ACTORA3"); const ACTORA7 = Device("ACTORA7"); const ACTORA8 = Device("ACTORA8"); const ACTORA9 = Device("ACTORA9"); script({ start(step) { step = Number(step); let newvalue1 = ACTORA7.value+step; if (ACTORA3.value == 0) ACTORA7.setValue(newvalue1); let newvalue2 = ACTORA8.value+step; if (ACTORA3.value == 1) ACTORA8.setValue(newvalue2); let newvalue3 = ACTORA9.value+step; if (ACTORA3.value == 3) ACTORA9.setValue(newvalue3); } });
И операция проверки равенства это ==
Одиночный = это присваивание
Увидеть ошибку сценария после его запуска можно в PM - Рабочие сценарии. Там ошибка должна быть, что устройства не определены
Также там есть Отладчик, аналогичный отладчику плагина. Можно в отдельной вкладке открыть PM, встать на сценарий, выбрать Отладчик, нажать play, там будет виден ход выполнения сценария.
Насчет арифметики в блок-схеме - да, вы правы, сделаем.Но не в ближайшем будущем
-
Спасибо.
Мультисценарий не понимаю, как сделать.
В другой комнате все актуаторы другие.
Передавать сценарию номера 4-х актуаторовв и значение шага через запятую?
А в сценарии парсить строку параметров?
Что-то типа
const ao = Device("ActorA","Регулируемый актуатор"); start(A,B,C,D,step) { A = Number(A,,,,); B = Number(,B,,,); C = Number(,,C,,); D = Number(,,,D,); step = Number(,,,,step); let newvalue1 = aoB.value+step; if ((aoA.value == 0)) aoB.setValue(newvalue1); let newvalue2 = aoC.value+step; if ((aoA.value == 1)) aoC.setValue(newvalue2); let newvalue3 = aoD.value+step; if ((aoA.value == 3)) aoD.setValue(newvalue3); } ;