ModBus通信协议

ModBus是通信协议。

大致分为:

1、ModBus-RTU

2、ModBus-ASCII

3、ModBus-TCP

一般来说大部分的设备都是Modbus-RTU协议的。

     设备必须要有RTU协议!这是Modbus协议上规定的,且默认模式必须是RTU,ASCII作为选项,(也就是说,一般的设备只有RTU这个协议,ASCI一般很少)所以说,一般学习Modbus协议,只需要了解RTU的协议。

1、帧结构
帧结构=地址 +功能码+数据+校验

  • 地址:占用一个字节,范围0-255,其中有效范围是1-247,其他有特殊用途,比如255是广播地址(广播地址就是应答所有地址,正常的需要两个设备的地址一样才能进行查询和回复)。
  • 功能码:占用一个字节,功能码的意义就是,知道这个指令是干啥的,比如你可以查询从机的数据,也可以修改数据,所以不同功能码对应不同功能。
  • 数据:根据功能码不同,有不同结构,在下面的实例中有说明。
  • 校验:为了保证数据不错误,增加这个,然后再把前面的数据进行计算看数据是否一致,如果一致,就说明这帧数据是正确的,我再回复;如果不一样,说明你这个数据在传输的时候出了问题,数据不对的,所以就抛弃了。

主机发送:01 03 00 00 00 01 84 0A
从机回复:01 03 02 19 98 B2 7E
01 从机地址

03 功能码 03代表查询 06代表修改

00 00 代表查询的起始寄存器地址

00 01 代表查询了1个寄存器地址

84 0A 循环冗余校验,modbus的校验公式


01 从机地址

03 功能码

02 代表后面数据的字节数

19 98 代表01寄存器的值是19 98

B2 7E 循环冗余校验


Modbus-RTU协议只需要看懂功能码0x03、0x06、0x10这三个基本的就已经足够了,分别回想下其数据域部分:
0x03 —— 主机需要发送起始地址+寄存器数量,从机回复总字节数+数据:
0x06 —— 主机发送起始地址+数据内容(因为你只需要修改一个,所以起始地址就是所要修改的地址),从机返回起始地址+数据内容(发
现居然一样!)
0x10 —— 主机发送起始地址+寄存器个数+总字节数+数据,从机返回起始地址+寄存器数量





标签: MudBus
2024.5.27   /   热度:1027   /   分类: 算法

发表评论:

©地球仪的BLOG  |  Powered by Emlog