中弘网关modbus协议解析说明

[复制链接]
admin 发表于 2018-11-8 22:35:32 | 显示全部楼层 |阅读模式
一、中弘modbus协议功能码有3种:
  • 0x03(读保存寄存器)
  • 0x06(写单个寄存器)
  • 0x10(写多个寄存器)
1、读取
中弘状态寄存器.png
在此,一台内机的状态会用6个寄存器地址去存储,每个寄存器存储的状态关系如下:
中弘寄存器对应状态.png

从上图可以看出,每个寄存器有两个字节,高位都为0,低位代表不同含义:
0号寄存器》bit0的值表示开关状态;(注:1byte有8bit;不明白的可以直接通过计算器将16进制转换成2进制查看;反之也可以将2进制转换成16进制
1号寄存器》低位代表当前设定温度(16进制转换成10进制值等于温度值)
2号寄存器》bit0:制冷;bit1:除湿;bit2:送风;bit3:制热
3号寄存器》bit0:高速;bit1:中速;bit2:低速
4号寄存器》低位代表回风温度(房间温度)
2、控制
中弘控制寄存器.png

在此,一台内机的使用的控制寄存器是4个;4000为起始寄存器
中弘控制.png
类似于状态存储寄存器,不再重复。

二、数据格式
该文档中通过举例列出数据格式如下
中弘控制码.png

三、控制数据
假如中弘网关地址为01;现控制内机01,那么控制命令如下: (40004转换成16进制为0FA4;个人懒得校验的用CRC16代替校验结果)
开机:01 06 0F A4 00 01 0A FD
关机:01 06 0F A4 00 00 CRC16
制冷:01 06 0F A6 00 01 CRC16
制热:01 06 0F A6 00 08 CRC16
设定温度21:01 06 0F A5 00 15 CRC16
风速中:01 06 0F A7 00 02 CRC16

四、查询数据格式如下:
网关地址  查询功能码(03) 起始寄存器高位  起始寄存器低位   要查询的个数高位   要查询的个数低位  校验低位  校验高位

具体参考说明文档,也可以参考“modbus 485简单协议入门引导
五、回复数据处理
如果一次查询一台内机的所有状态,即查询一台内机的6个寄存器的值,那么回复的数据格式如下
回复数据.png
1、第一个字节:网关地址
2、功能吗
3、数据长度(即查询结果的数据字节个数=2*查询的寄存器个数n)
4、数据   :起始寄存器状态值高位、起始寄存器状态值低位、起始寄存器+1状态值高位、起始寄存器+1状态值低位、……起始寄存器+n-1状态值高位、起始寄存器+n-1状态值低位5、校验结果

根据寄存器编号拿其对应的值,和03读取寄存器关系表对照即可获取到当前内机的所有状态值。

六、扩展
在程序编写时,我们会面临多台内机;那么当我们一次查询一台内机的状态时,其回复的数据格式是一样的,且数据中没有点名属于哪一台内机;所以面对该情况我们需要一次批量查询多台内机的状态;查询内机寄存器个数扩展成6*n;然后将返回的数据进行一一匹配,
分离出需要的字节匹配出要得到的结果。

当然,如果内机数量过多,一次全部查询回复数据量太多时,我们可以分成2个不相等部分或三个不相等部分查询;例如一个查3台(即3*6个寄存器),一个查4台(即4*6个寄存器);其返回码的第3个字节一个是0x24(18*2=0x24),一个是0x30(24*2=0x24);通过校验第三个字节
可以进一步分出想要的内机数据。



中央空调集控有线接口协议(MODBUS).pdf

543.65 KB, 下载次数: 1159

nabolen 发表于 2019-1-26 11:34:44 | 显示全部楼层
下载来学习一下
回复

使用道具 举报

13228751750 发表于 2019-2-12 12:53:46 | 显示全部楼层

感谢楼主分享,辛苦了!!!
回复

使用道具 举报

小叮当 发表于 2019-2-28 11:24:44 | 显示全部楼层
不错
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则