正在进行安全检测...

发布时间:2023-10-01 18:23:13


Modbus通讯协议


1、读可读写数字量寄存器(线圈状态):

计算机发送命令:[设备地址][命令号01][起始寄存器地址高8][8][读取的寄存器数高8][8][CRC校验的低8][CRC校验的高8]
例:[11][01][00][13][00][25][CRC][CRC]
意义如下:

<1>设备地址:在一个485总线上可以挂接多个设备,此处的设备地址表示想和哪一个设备通讯。例子中为想和17(十进制的17是十六进制的11通讯。
<2>命令号01:读取数字量的命令号固定为01

<3>起始地址高8位、低8位:表示想读取的开关量的起始地址(起始地址为0。比如例子中的起始地址为19

<4>寄存器数高8位、低8位:表示从起始地址开始读多少个开关量。例子中为37个开关量。

下表是Modbus的功能格式:


<5>CRC校验:是从开头一直校验到此之前。在此协议的最后再作介绍。此处需要注意,CRC校验在命令中的高低字节的顺序和其他的相反。
设备响应:[设备地址][命令号01][返回的字节个数][数据1][数据2]...[数据n][CRC校验的低8][CRC校验的高8]
例:[11][01][05][CD][6B][B2][0E][1B][CRC][CRC]
意义如下:

<1>设备地址和命令号和上面的相同。

<2>返回的字节个数:表示数据的字节个数,也就是数据12...n中的n的值。

<3>数据1...n:由于每一个数据是一个8位的数,所以每一个数据表示8个开关量的值,每一位为0表示对应的开关断开,为1表示闭合。比如例子中,表示20(索引号为19关闭合,21号断开,22闭合,23闭合,24断开,25断开,26闭合,27闭合...如果询问的开关量不是8的整倍数,那么最后一个字节的高位部分无意义,置为0

<4>CRC校验同上。
2、读只可读数字量寄存器(输入状态):
和读取线圈状态类似,只是第二个字节的命令号不再是1而是2
3、写数字量(线圈状态):


正在进行安全检测...

相关推荐