Плагин Modbus
-
Обновился.
В контроллере температура храниться целой цифрой в 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); } ;
-
Просто в сценарии нужно объявить устройства, с которыми он работает
Если вы не хотите использовать мультисценарий, достаточно написать так
Сравнение с нулем оказывается 3 знака равенства (===)
Скрипт работает, спасибо.
Но.
Скрипт изменяет значение, но в поле оно сразу не отображается. Оно улетает на контроллер функцией FC6, потом считывается функцией FC3, и только потом отображается. Контроллер у меня не спешный, и между нажатиям и изменением отображаемого значения проходит 1-2 секунды.
Нужно модбас устройство, которое имеет только функцию записи (FC6). Чтобы в виждете устройство отображало цифру, введенную на сервере, и писало ее в контроллер при изменении.
С одной стороны тут бы как раз параметры из свойств устройств модбаса пригодились.
Создать модбас устройство не привязанное к своему регистру, но с параметром, записывающим чужой регистр?
-
Мультисценарий не понимаю, как сделать.
В другой комнате все актуаторы другие.
Передавать сценарию номера 4-х актуаторовв и значение шага через запятую?
А в сценарии парсить строку параметров?
Идея мультисценария в том, что в Device задается не конкретное устройство, а класс: "SensorD", "SensorA", "ActorD", "ActorA", "Meter"
То есть это шаблон сценария. Затем можно формировать наборы конкретных устройств. Для каждого набора создается экземпляр рабочего сценария.
Чтобы из простого сценария сделать мульти, нужно:
1. Вместо конкретных устройств проставить класс - в вашем случае ActorD или ActorA.
Чтобы ориентироваться в таблице "Запуск для устройств" можно добавить названия каждого параметра
/** * @name Увеличение уставки комнаты на шаг * @desc * @version 4 */ const ACTORA3 = Device("ActorA", "Режим"); const ACTORA7 = Device("ActorA", "Уставка комфорт"); const ACTORA8 = Device("ActorA", "Уставка ночь"); const ACTORA9 = Device("ActorA", "Уставка эконом"); 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); } });
Сами названия устройств - параметров можно оставить как есть, можно заменить на более общие - неважно
Сохранить скрипт
2. В нижней табличке (там же где скрипт) выбрать "Запуск для устройств" и создать наборы для комнат:
Там все просто - выбираются устройства для каждого параметра.
В результате получаются сценарии:
Увеличение уставки комнаты на шаг(ACTORA3, ACTORA7, ACTORA8, ACTORA9) - для одной комнаты
Увеличение уставки комнаты на шаг(ACTORA3, ACTORA17, ACTORA18, ACTORA19) - для другой комнаты
и т д
3. На кнопку теперь нужно привязать конкретный сценарий. Они все будут доступны в списке
А параметр (step) - остается как есть
-
каким образом скрипт разберется какой ActorA куда подставлять?
-
-
Скрипт работает, спасибо.
Но.
Скрипт изменяет значение, но в поле оно сразу не отображается. Оно улетает на контроллер функцией FC6, потом считывается функцией FC3, и только потом отображается. Контроллер у меня не спешный, и между нажатиям и изменением отображаемого значения проходит 1-2 секунды.
Нужно модбас устройство, которое имеет только функцию записи (FC6). Чтобы в виждете устройство отображало цифру, введенную на сервере, и писало ее в контроллер при изменении.
Тогда теряем обратную связь Нет гарантии, что записанное нами принято контроллером
В Berry у нас был флаг "Односторонняя связь" для устройств, в которые можно только писать. Его же применяли для "задумчивых" устройств.
В этом случае значение принимается сервером как текущее в момент отправки.
Мы как раз планировали добавить этот флаг. Будет при следующем обновлении системы.