Плагин Modbus



  • Пользователь @kostinanton написал в Плагин Modbus:

    @konia74 четыре устройства опрашиваются без проблем с такими вводными...1.png 2.png

    Спасибо, попробую.



  • Здравствуйте Уважаемые профессионалы. Опять прошу помощи. Устройство вроде как отвечает но не включает. Может где ошибка в настройках или еще что-то?

    22.08 14:13:16.321 IH: command [ { dn: 'ACTOR1', prop: 'on' } ]
    22.08 14:13:16.322 IH: send { type: 'act',
    data:
    [ { chan: 'ch1',
    id: 'ch1',
    vartype: 'int16',
    usek: false,
    ks: 100,
    ks0: 0,
    gr: true,
    pollp: true,
    desc: 'DO',
    kh0: 0,
    address: '0x0001',
    fcr: '3',
    useactions: false,
    kh: 100,
    unitid: 1,
    value: 1,
    nofb: true,
    command: 'on' } ] }
    22.08 14:13:16.326 IH: get [ { id: 'ch1', value: 0 } ]
    set { ACTOR1: { dval: 0, err: 0 } }
    22.08 14:13:16.326 modbus1: Command to send: [ { chan: 'ch1',
    id: 'ch1',
    vartype: 'int16be',
    usek: false,
    ks: 100,
    ks0: 0,
    gr: true,
    pollp: true,
    desc: 'DO',
    kh0: 0,
    address: 1,
    fcr: '3',
    useactions: false,
    kh: 100,
    unitid: 1,
    value: 1,
    nofb: true,
    command: 'on' } ]
    22.08 14:13:16.342 modbus1: WRITE: unitId = 1, FC = 6, address = 1 (0x1), value = 1
    22.08 14:13:16.342 modbus1: writeSingleRegister: address = 1 (0x1), value = 1
    22.08 14:13:16.362 modbus1: Write result: { address: 1, value: 1 }
    22.08 14:13:16.364 modbus1: READ: unitId = 1, FC = 3, address = 0x0001 (0x1), length = 1
    22.08 14:13:16.384 IH: get [ { id: 'ch1', value: 0 } ]
    set { ACTOR1: { dval: 0, err: 0 } }
    22.08 14:13:16.403 modbus1: READ: unitId = 1, FC = 3, address = 0x0001 (0x1), length = 1
    22.08 14:13:16.423 IH: get [ { id: 'ch1', value: 0 } ]



  • Вот настройки Screenshot_2020-08-22-12-22-55-068_com.android.chrome.jpg Screenshot_2020-08-22-12-22-31-655_com.android.chrome.jpg Screenshot_2020-08-22-12-22-20-929_com.android.chrome.jpg Screenshot_2020-08-22-12-23-20-847_com.android.chrome.jpg



  • Вот документация по модулюScreenshot_2020-08-22-12-37-27-106_cn.wps.xiaomi.abroad.lite.jpg



  • Навскидку, без изучения документации - очень маленький интервал между запросами 20 мсек

    22.08 14:13:16.342 modbus1: WRITE: unitId = 1, FC = 6, address = 1 (0x1), value = 1
    22.08 14:13:16.342 modbus1: writeSingleRegister: address = 1 (0x1), value = 1
    22.08 14:13:16.362 modbus1: Write result: { address: 1, value: 1 }
    Запись произошла успешно с точки зрения плагина
    Прошло всего 20 мсек 342+20=362 - и отправляется команда на чтение
    22.08 14:13:16.364 modbus1: READ: unitId = 1, FC = 3, address = 0x0001 (0x1), length = 1

    Поставьте для начала Интервал между запросами 2000 - то есть 2 секунды



  • Пользователь @intrapro написал в Плагин Modbus:

    Навскидку, без изучения документации - очень маленький интервал между запросами 20 мсек

    22.08 14:13:16.342 modbus1: WRITE: unitId = 1, FC = 6, address = 1 (0x1), value = 1
    22.08 14:13:16.342 modbus1: writeSingleRegister: address = 1 (0x1), value = 1
    22.08 14:13:16.362 modbus1: Write result: { address: 1, value: 1 }
    Запись произошла успешно с точки зрения плагина
    Прошло всего 20 мсек 342+20=362 - и отправляется команда на чтение
    22.08 14:13:16.364 modbus1: READ: unitId = 1, FC = 3, address = 0x0001 (0x1), length = 1

    Поставьте для начала Интервал между запросами 2000 - то есть 2 секунды

    set { ACTOR1: { dval: 0, err: 0 } }
    22.08 17:20:30.118 IH: command [ { dn: 'ACTOR1', prop: 'on' } ]
    22.08 17:20:30.119 IH: send { type: 'act',
    data:
    [ { chan: 'ch1',
    id: 'ch1',
    vartype: 'int16',
    usek: false,
    ks: 100,
    ks0: 0,
    gr: true,
    pollp: true,
    desc: 'DO',
    kh0: 0,
    address: '0x0001',
    fcr: '3',
    useactions: false,
    kh: 100,
    unitid: 1,
    value: 1,
    nofb: false,
    command: 'on' } ] }
    22.08 17:20:30.121 modbus1: Command to send: [ { chan: 'ch1',
    id: 'ch1',
    vartype: 'int16be',
    usek: false,
    ks: 100,
    ks0: 0,
    gr: true,
    pollp: true,
    desc: 'DO',
    kh0: 0,
    address: 1,
    fcr: '3',
    useactions: false,
    kh: 100,
    unitid: 1,
    value: 1,
    nofb: false,
    command: 'on' } ]
    22.08 17:20:30.363 modbus1: WRITE: unitId = 1, FC = 6, address = 1 (0x1), value = 1
    22.08 17:20:30.364 modbus1: writeSingleRegister: address = 1 (0x1), value = 1
    22.08 17:20:30.385 modbus1: Write result: { address: 1, value: 1 }
    22.08 17:20:30.387 modbus1: READ: unitId = 1, FC = 3, address = 0x0001 (0x1), length = 1
    22.08 17:20:30.408 IH: get [ { id: 'ch1', value: 0 } ]



  • Всем спасибо. Разобрался сам.



  • Пользователь @konia74 написал в Плагин Modbus:

    Всем спасибо. Разобрался сам.

    Поделитесь. В чем была проблема?



  • @intrahouse проблема была в команде. Данному релейному модулю из поднебесной нужна команда 0x0100 на включение и 0x0200 на отключение и адресация в dex формате. Но так как я вообще не программист, а электромонтажник я этого не знал и вообще далек от этого. В связи с этим мне потребовалось 2 дня, чтобы это изучить и вникнуть, параллельно с mqtt воевал. Только ещё до конца mqtt не победил, в другой ветке форума задал вопрос (состояние на схеме не меняется). Как-то так.![0_1598302198062_15983021691365734504111748559465.jpg](Загрузка 88%)-1146610533-140707427.jpg



  • Добрый день, у меня проблема с рекуператором, в режиме bool (чтение), значение 1- вкл. IH принимает а 0- когда компрессор выключен то передает "-".



  • Возможно ли из сценария редактировать список каналов в плагине ?
    Например, при ошибке какого либо датчика исключать его из списка (или приостанавливать опрос).



  • @fanagor, есть вариант легче. Я делаю так:

    const dt_ext = Device("SensorA", "Датчик уличной температуры");
    const dt_ext_rez  = Device("SensorA", "Датчик уличной температуры (резервный)");
    
    script({
        sensor_ext: '',
        
        check() {      
          //Проверка работоспособности датчика уличной температуры
          //При его неисправности - работаем по резервному датчику
          if(!dt_ext.isError()) this.sensor_ext = dt_ext;
          else this.sensor_ext = dt_ext_rez;
          
          //Проверка основных условий
        },
    

    В основной программе к sensor_ext обращаемся как к обычному датчику:

    //Если температура на улице меньше уставки
        if(this.sensor_ext.value < this.sensor_ext.setpoint) {
        }
    


  • Пользователь @fanagor написал в Плагин Modbus:

    Возможно ли из сценария редактировать список каналов в плагине ?
    Например, при ошибке какого либо датчика исключать его из списка (или приостанавливать опрос).

    В версии Cherry такой возможности нет. В V5, думаю, получится добавить такой функционал.

    @Alex_Jet , вероятно, нужно решить проблему тормозов при опросе по последовательному интерфейсу (Modbus RTU). Если датчик не отвечает, переход к опросу следующего канала происходит через таймаут, и так в каждом цикле.



  • Это сообщение удалено!


  • Подскажите пожалуйста, как можно вывести окно для ввода команд устройству рядом с самим устройством , куда можно оперативно прописать команды ( например смена адреса устройства и т.п )



  • Как получить удобоваримое число?
    Снимок1234.PNG



  • @alekscrow
    Вероятно, ваш девайс использует другой порядок байт для Float, по умолчанию идет Big-Endian, swap B1B2B3B4 => B3B4B1B2

    Для изменения порядка на вкладке Параметры плагина поставьте галочку Настроить порядок байт. Внизу откроется список для настройки. Нужно изменить Порядок байтов для 4-байтовых значений.
    Начните с первого варианта Big-Endian, B1B2B3B4 => B1B2B3B4. После сохранения параметров нужно перезагрузить плагин.

    2022-01-22 11.22.24.jpg


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