User Tools

Site Tools


настройка_modbus

Данная статья формируется в процессе написания кода

LightHub можно настроить на работу в качестве шлюза с фактически любым устройством, поддерживающим Modbus RTU и работающем в режиме Slave

Раздел "modbus" конфигурации

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

Для каждого устройства в библиотеки возможно задать такие параметры как скорость обмена (раздел baud) /параметры четности (раздел serial), назначение и тип регистров (раздел par), а также, интервал и параметры опроса этих регистров (раздел poll)

раздел par

Данный раздел содержит информацию о назначении каждого опрашиваемого или управляемого регистра (или групп регистров) используемого устройства. Раздел состоит из JSON объектов следующего формата:

"t_heat":{"reg":8,"map":[0,1024,0,1024],"type":"i16"},

В примере выше:

  • “t_heat” - имя параметра устройства.
  • “reg”:8 - регистр (или стартовый регистр) параметра
  • “map” - правила преобразования (TBD)
  • “type”:“i16” - указывает, что значение - 16-ти битное число со знаком

Возможные варианты типов:

  • i16 - знаковый 16-ти битный регистр (по умолчанию)
  • i32 - знаковый 32-ти битный регистр (первый регистр - младшие биты, следующий - старшие)
  • u16 - беззнаковый 16-ти битный регистр
  • u32 - беззнаковый 32-ти битный регистр (первый регистр - младшие биты, следующий - старшие)
  • i8h - старшие 8 бит регистра (при записи значения, другие 8 бит будут заполнены значением 0xFF)
  • i8l - старшие 8 бит регистра (при записи значения, другие 8 бит будут заполнены значением 0xFF)

(знаковые и беззнаковые варианты пока не отличаются в реализации, чуть позже будут)

раздел poll

задает интервал и параметры опроса регистров устройства

Причем, в целях оптимизации обмена, можно опрашивать устройство командой чтения группы регистров. Пример:

"poll":{"regs":[[40000,40014],[30000,30002],40099],"delay":10000}

Обозначает, что с интервалом 10 сек будут произведены следующие три опроса:

  • Команда чтения группы из 15-ти регистров с 40000 по 40014
  • Команда чтения группы из 3-x регистров с 30000 по 30002
  • Команда чтения одиночного регистра 40099

Для каждого из успешно прочитанных регистров, проводится поиск соответствия в разделе par Если есть запись, соответствующая данному регистру, прочитанные значения преобразовываются (см описание map) и направляются в MQTT и/или локальным объектам контроллера

Разделы baud и serial

Пример:

              "baud":9600,
              "serial":"8E1"

Соответственно, скорость обмена (по умолчанию, 9600) и параметр четности порта Параметр четности - одно из значений ниже. По умолчанию 8N1

“8E1”,“8N1”,“8E2”, “8N2”, “8O1”, “8O2”, “8M1”, “8S1”, “7E1”, “7N1”, “7E2”, “7N2”, “7O1”, “7O2”, “7M1”, “7S1”

Раздел "items" конфигурации

В данном разделе задаются конкретные modbus устройства

  "items": {
    "dimer1":[14,[1,
                  "dim4",
                     {
                      "ch1":{"emit":"aaa1,"item":"localdimmer1"},
                      "ch2":{"emit":"abc/aaa2"},
                      "ch3":{"item":"localdimmer3"},
                      "ch4":[{"emit":"aaa4,"item":"localdimmer4"},{"emit":"aaa44,"item":"localdimmer44"}]                  
                      }
                  ]
              ],

В данном примере, создается item (объект) dimer1 с адресом modbus=1, на основе библиотечного устройства “dim4”

Устройство опрашивается согласно настройкам в библиотеке. А вот результаты опроса используются согласно настройкам в items. В данном примере,

  • “ch1” передается в MQTT топик “myhome/s_out/aaa1” плюс локальному устройству “localdimmer1”
  • “ch2” передается в MQTT топик “abc/aaa2” (если в названии топика есть / - он не дополняется слева статусным префиксом)
  • “ch3” передается локальному устройству “localdimmer3”
  • “ch4” передается в MQTT топик “myhome/sout/aaa4” и “myhome/sout/aaa44”, локальному устройству “localdimmer4” и “localdimmer44” (использован массив из двух JSON объектов)

Далее, соберем фрагменты в более полный пример:

"modbus":
  {
    "airset":{
              "baud":9600,
              "serial":"8N1",
              "poll":{"regs":[1,[8,24]],"delay":1000},
              "par":{ 
                            "t_heat":{"reg":8,"map":[0,1024,0,1024],"type":"i16"},
                            "mode":{"reg":24}
                  
              }
              },
    "dim4":{
             "poll":{"regs":[[0,4]],"delay":10000},
             "par":{
                            "ch1":{"reg":0},
                            "ch2":{"reg":1},
                            "ch3":{"reg":2},
                            "ch4":{"reg":3}
             }
            },
    "panel":{
            "poll":{"regs":[[40000,40014],[30000,30002]],"delay":10000},
             "par":{
                            "fan"  :{"reg":40000},
                            "mode" :{"reg":40001},
                            "set"  :{"reg":40002},
                            "pwr"  :{"reg":40003},
                            "alm01":{"reg":40004},
                            "alm17":{"reg":40005},
                            "alm33":{"reg":40006},
                            "sethum" :{"reg":40007},
                            "setvoc" :{"reg":40008},
                            
                            "temp" :{"reg":30000},
                            "hum"  :{"reg":30001},
                            "voc"  :{"reg":30002},
                            
                            "ch_temp"  :{"reg":40009},
                            "ext_temp" :{"reg":40010},
                            "out_temp" :{"reg":40011},
                            "water_temp" :{"reg":40012},
                            "ch_hum"  :{"reg":40013},
                            "heat_pwr":{"reg":40014}
             }   
    }
  },
  

  "items": {
    "airset1":[14,[10,"airset",{"t_heat":{"emit":"aaa"}}]],
    "panel1":[14,[2,"panel"]],
    "dimer1":[14,[1,"dim4",
                     {
                      "ch1":{"emit":"aaa1,"item":"localdimmer1"},
                      "ch2":{"emit":"abc/aaa2"},
                      "ch3":{"item":"localdimmer3"},
                      "ch4":[{"emit":"aaa4,"item":"localdimmer4"},{"emit":"aaa44,"item":"localdimmer44"}]                  
                      }
                  ]
              ]
           }
           


настройка_modbus.txt · Last modified: 2020/06/12 11:13 by Sanch-KK