Плагин Modbus



  • @Erik:

    И еще есть у меня регистры, которые в общем то бинарные актуаторы, т.е. имеют состояние включено/выключено.

    Но выключено у них - 0, а включено - 255.

    То есть для чтения-записи используются команды 03 и 06?

    @Erik:

    Создавать аналоговый актуатор для чтения/записи такого регистра?

    Криво, конечно. Видимо придется жесткую связь тип устройства - тип регистра убрать.

    @Erik:

    Вообще у меня в планах…:)

    Как подступиться к регистрам Расписание [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,0,0,0,0,0,0] modbus: 40427 ?

    Что сказать, планы грандиозные 🙂

    А что вы с расписанием делать хотите? И каков смысл этих 42 нулей?

    Адрес есть - можно писать, например, из сценария напрямую командой pluginCommand.

    Сейчас она не включена в плагин, но включим, это стандартный функционал.



  • @intrapro:

    А что вы с расписанием делать хотите? И каков смысл этих 42 нулей?

    Там эти настройки должны как то отобразиться.

    http://doku.gidrologo.ru/инструкции/smartweb/описания_программ/c-комнатное_устройство#c22_расписание

    Но у меня еще руки до них не дошли. 🙂



  • На гитхабе опубликована новая версия плагина 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)



  • @Erik:

    И еще есть у меня регистры, которые в общем то бинарные актуаторы, т.е. имеют состояние включено/выключено.

    Но выключено у них - 0, а включено - 255.

    Создавать аналоговый актуатор для чтения/записи такого регистра?

    В версии 0.0.4 убрана жесткая связь типа регистра и устройства.

    Поэтому можно сделать так:

    Устройство - дискретный актуатор,

    Тип переменной - UNIT16 (скорее всего)

    Функции - FC3, FC6

    Трансформация значения - да

    Значения логического уровня 0-1

    Значения физического уровня 0-255

    На нашем контроллере (мы проверяем на WAGO) работает



  • Сопутствующий багрепорт.

    В сценариях, при копировании готовой блок-схемы с одним простым действием "установить значение", после изменения настроек блока сохранение не доступно.

    Нужно удалить блок, создать новый, тогда настройки сохраняются.



  • @intrapro:

    версии 0.0.4 убрана жесткая связь типа регистра и устройства.

    Как обновлять? В админке поиск обновлений не видит 0.0.4



  • Обновился.

    В контроллере температура храниться целой цифрой в 10 раз большей фактического значения. Если хранится 217, значит температура +21,7

    ПРи чтении температуры, делю значение на 10, в свойствах устройства указано, что знаков после запятой - 1.

    А значение где-то округляется. вместо 10,6 вижу 11,0.

    Где искать?



  • @Erik:

    Обновился.

    В контроллере температура храниться целой цифрой в 10 раз большей фактического значения. Если хранится 217, значит температура +21,7

    ПРи чтении температуры, делю значение на 10, в свойствах устройства указано, что знаков после запятой - 1.

    А значение где-то округляется. вместо 10,6 вижу 11,0.

    Где искать?

    Посмотрите в отладчике, что присваивается операцией set



  • @Erik:

    Сопутствующий багрепорт.

    В сценариях, при копировании готовой блок-схемы с одним простым действием "установить значение", после изменения настроек блока сохранение не доступно.

    Нужно удалить блок, создать новый, тогда настройки сохраняются.

    Спасибо, проверим



  • 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



  • @intrapro:

    А что вы с расписанием делать хотите? И каков смысл этих 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
    
    


  • @Erik:

    > 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 ?



  • @Erik:

    @intrapro:

    А что вы с расписанием делать хотите? И каков смысл этих 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 вы что хотите видеть? Цель какая?



  • @intrapro:

    А формула какая? value/10 ?

    Math.round(value/10)
    
    


  • @Erik:

    @intrapro:

    А формула какая? value/10 ?

    > Math.round(value/10)
    > 
    

    Math.round как раз и округляет. Если хотите с десятыми, просто value/10



  • @intrapro:

    Да, загадочно 😉 Если подойти по простому, получается, на каждый элемент настройки всего по два элемента массива. Это время в минутах от начала суток. А где положение ползунка? Что он кстати означает?

    Я так понимаю, это интерфейс самого контроллера. А в IH вы что хотите видеть? Цель какая?

    Там можно задать от 0 до 3-х периодов в день, когда работает режим комфорт.

    В остальное время работает режим эконом.

    Поэтому там у каждого дня недели по 3 полосы (в графическом интерфейсе).

    А в регистре модбас эти периоды подряд перечисляются, через запятую - начало, конец, начало, конец, в минутах от начала суток.



  • Отображалку сделал.

    Все работает.



  • @Erik:

    Отображалку сделал.

    Получилось хорошо. Мне нравится.

    При этом сделано на контроллере с плагином Modbus :!:

    Вы показывали скриншот с большим количеством сетевых соединений в мажордомо:

    https://frm.intrahouse.ru/viewtopic.php?f=18&t=5321&sid=51f9c0ff16eaaf41d3c451e8b15a8386&start=30

    Какая ситуация сейчас в intraHouse с плагином Modbus?



  • @intrahouse:

    @Erik:

    Отображалку сделал.

    Получилось хорошо. Мне нравится.

    При этом сделано на контроллере с плагином Modbus :!:

    Вы показывали скриншот с большим количеством сетевых соединений в мажордомо:

    https://frm.intrahouse.ru/viewtopic.php?f=18&t=5321&sid=51f9c0ff16eaaf41d3c451e8b15a8386&start=30

    Какая ситуация сейчас в intraHouse с плагином Modbus?

    Сейчас все отлично! Все регистры опрашиваются/записываются внутри одного TCP соединения, ошибок нет, работает устойчиво.

    Сделал все исключительно на аналоговых актуаторах. 🙂

    Сначала это казалось странным и не логичным (так оно и есть, в общем то), но потом они мне очень понравились. Исключительно удобная вещь. Можно термометру цвет менять в зависимости от диапазона температуры, которую он показывает.

    Вопросов по взаимодействию с модбас устройством на этом этапе не возникло, все легко и понятно. Когда доберусь до более сложных задач (типа расписания), тогда возможно появятся вопросы. А пока мне производитель контроллера сообщил, что через модбас с раписанием работать в текущей прошивке нельзя 🙂

    Чего лично мне не хватило в IH.

    Возможности привязывать состояние одного объекта к значению или состоянию другого.

    Чтобы в выборе "границ" состояний можно было еще и другое устройство указать.

    Тогда без лишних трудозатрат можно на одном виджете отображать разные наборы элементов.

    Спасибо за отличный плагин!



  • @intrapro:

    Здесь нужны кнопки + сценарии

    Можно сделать мультисценарий, который будет присваивать новое значение 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" заставлять учить синтаксис - это же геноцид!!! 🙂


Авторизуйтесь, чтобы ответить