通用插件-modbus入门

  • 准备:需要清楚modbus协议,并能从产品的协议中看出modbus的功能码与某功能的寄存器地址

开始

以此协议为例

03H/06H:读写保持寄存器

寄存器地址偏移值       描述                        状态值                                                             
             00         开关机状态                  0-关机 1-开机
             01         工作模式                    0-制冷 2-送风 3-制热(风机盘管) 5-制热(风机盘管+地热) 6-地热
             02         风速                        0-自动 1-高速风 2-中速风 3-低速风
             03         手动模式设置温度            10.0-30.0度(设置值精度为0.1度,例如发送0x100,代表设置温度25.6度)

04H:读取输入寄存器(读AI值)
寄存器地址偏移值 描述 状态值
00 内置探头记取温度值 温度探头T1

这个协议支持03,06的功能码,03在modbus协议中属于读取类型的功能码,06属于写入类型的功能码,

开关机状态的寄存器是0,我们要将设备的状态写成开机,则需要将1-开机这个状态写入这个寄存器

根据modbus的协议,假设设备地址是1,则写入的指令应该是

01 06 00 00 00 01 48 0A

第一位是设备地址是1,第二位是该指令的功能码,第三位第四位是寄存器的号码,第五位第六位是写入的状态,最后2位是校验码,在协议中1对应开机,则我们这条指令是将开机写入开关机状态的寄存器。

在serialdevice插件的配置文件中,我们需要这样写,按照通道说明

写成

switch=modbus:0:3/6:on/1+off/0
  • 其中,开头的switch代表通道名称,modbus代表协议类型是modbus,0代表是这个通道的功能对应的寄存器号码,3/6代表这个通道支持的功能码,on/1代表开这个设备对应的状态码是1,off/0代表关这个设备的状态码是0,一个寄存器内有多个状态码需要用+相连

那么同理,工作模式就是

mode=modbus:1:3/6:cool/0+fan/2+heat/3+quickheat/5+floorheat/6

风速则是

fan=modbus:2:3/6:auto/0+high/1+mid/2+low/3

当应该输入大范围的数字量时,例如设置温度这种无需填写状态码

settemp=modbus:3:3/6

实际温度支持的功能码是04,是读取类的功能码,对应的寄存器地址是0,则需要写

temperature=0:0:4

results matching ""

    No results matching ""