modbus 485简单协议入门引导

[复制链接]
admin 发表于 2018-11-8 17:10:56 | 显示全部楼层 |阅读模式
一般家用设备用的简单modbus协议格式,协议由8个16进制字节组成;每个字节含义如下:
数据格式1.png

说明:一、协议由8个字节组成:
1、第一个字节为485设备的地址(1byte)。2、第二个字节为功能码(1byte);06写入;03读取。
3、第三、四字节为寄存器地址(2byte)。高位在前;低位在后。例如寄存器地址为2;那么该第三、四字节应为:00 02;如果寄存器地址为10,那么该第三、四字节应为:00 0A(10进制转换为16进制)。
4、第五、六字节为数据值(2byte)。根据寄存器上的数据含义而来。
5、第七、八字节为CRC16校验值(2byte)。该值可通过“CRC16校验工具”计算。计算方式:将1-6的数据复制到CRC16工具中,点击计算。

CRC16计算.png

二、示例
一空调温控器协议如下

空调协议.png
那么,通过上诉图片,我们可以看出:
1、0号寄存器代表“开关机”;1:开机;0关机。支持写入(控制)、读取(状态查询)。
2、1号寄存器代表“模式”;1:自动;0:通风;2:制冷;3:制热。支持写入(控制)、读取(状态查询)。
3、2号寄存器代表“风速”;0:自动;1:低风;2:中风;3:高风。支持写入(控制)、读取(状态查询)。
4、3号寄存器代表“设定温度”;支持5-35℃(使用时要转换成16进制);支持写入(控制)、读取(状态查询)。
5、5号寄存器为测量的“室内温度”;精度为0.1摄氏度;在数据中显示会放大10倍以整数反馈。只支持读取(状态查询)。

根据前面讲的数据格式,假如现在的温控面板地址为01,那么功能控制具体协议如下:
开机:01 06 00 00 00 01 48 0A
关机:01 06 00 00 00 00 89 CA
制冷:01 06 00 01 00 02 59 CB
制热:01 06 00 01 00 03 98 0B
风速高:01 06 00 02 00 03 68 0B
设定温度16:01 06 00 03 00 10 78 06
设定温度25:01 06 00 03 00 19 B8 00


查询状态格式为:
地址   查询功能码   起始寄存器地址(高) 起始寄存器地址(低) 查询寄存器个数(高) 查询寄存器个数(低)  校验低   校验高
只查询开关状态:01 03 00 00 00 01 84 0A
只查询室内温度:01 03 00 03 00 01 74 0A

如果想批量查询,则为:
一次性查询“开关状态”、“模式”、“风速”、“设定温度”、“室内温度”:01 03 00 00 00 06 C5 C8
注意:批量查询,只能连续查询寄存器地址。
三、查询回复
查询回复内容如下:
1、第一个字节:设备ID
2、功能码
3、数据长度(即查询结果的数据字节个数=2*查询的寄存器个数n
4、数据   :起始寄存器状态值高位、起始寄存器状态值低位、起始寄存器+1状态值高位、起始寄存器+1状态值低位、……起始寄存器+n-1状态值高位、起始寄存器+n-1状态值低位
5、校验结果

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

四、状态匹配

根据回复数据的第一个字节区分出数据属于哪一个设备;然后分理处要获得的状态他数据所在的字节值。
这里面,温度一般默认占用2个字节。计算公式一般如下:温度temp=(H*256+L)/10。(H:高位的十进制值;L:低位的十进制值)



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

使用道具 举报

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

本版积分规则