你们好,最近小未来发现有诸多的小伙伴们对于modbus rtu报文,modbus rtu这个问题都颇为感兴趣的,今天小活为大家梳理了下,一起往下看看吧。
1、 ModBus通信协议
2、 ModBus通信协议允许变送器与可编程序控制器(PLC)、RTU、SCADA系统、DCS或与第三方(如施耐德、西门子、AB和ge)兼容ModBus的监控系统之间进行信息交换和数据传输。
3、 只要变送器简单加一套监控软件(如组态王、Intouch、FIX、synall等。)以计算机(或工控机)为基础,可以组成一套电力监控系统。
4、 通信数据的类型和格式:
5、 沟通信息传递过程:
6、 当通信命令从发送设备(主机)发送到接收设备(从机)时,满足相应地址码的从机接收通信命令,并根据功能码和相关要求读取信息。如果CRC校验正确,则执行相应的任务,然后将执行结果(数据)返回给主机。
7、 返回的信息包括地址码、功能码、执行数据和CRC校验码。如果CRC校验错误,将不会返回任何信息。
8、 地址代码
9、 地址码是每个通信信息帧的第一个字节(8位),范围从0到255。该字节表示地址由用户设置的从机将接收主机发送的信息。每台从机必须有唯一的地址码,只有满足地址码的从机才能响应反馈信息。
10、 从机发回信息时,返回的数据以各自的地址码开始。主机
11、 发送的地址码表示要发送的从机地址,从机返回的地址码表示返回的从机地址。相应的地址码表明了信息的来源。
12、 功能代码:
13、 是每个通信信息帧的第二个字节。ModBus通信协议可以定义从1到127的功能代码。变送器仅使用部分功能代码。作为主机请求发送,通过功能码告诉从机应该执行什么动作。作为从响应,
14、 从机返回的功能码与主机发送的功能码相同,表示从机已经响应主机并进行相关操作。
15、 表8.1 MODBUS部分功能代码
16、 数据区:
17、 数据区包括从机需要发回的信息或动作。这些信息可以是数据(如开关输入/输出、模拟输入/输出、寄存器等)。)、参考地址等。举个例子,
18、 主机通过功能码03告诉从机返回寄存器的值(包括要读取的寄存器的起始地址和读取寄存器的长度),返回的数据包括寄存器的数据长度和数据内容。对于不同的从机,地址和数据信息是不同的(应给出通信信息表)。
19、 响应的命令格式是从机地址、功能码、数据区和CRC码。数据区的数据都是两个字节,高位在前(电能除外)。
20、 MODBUS功能代码简介
21、 功能代码“03”:读取多通道寄存器输入
22、 例如,主机想要读取地址为01、起始地址为0000的从机寄存器的数据。
23、 从机数据寄存器的地址和数据如下:
24、 主机发送的消息格式:
25、 错误校验码(CRC校验):
26、 主设备或从设备可以使用校验码来判断接收到的信息是否正确。由于电子噪声或其他一些干扰,信息在传输过程中有时会出错。错误校验码(CRC)可以检查通信数据传输过程中主机或从机的信息是否有误。
27、 错误的数据可以被丢弃(无论是发送的还是接收的),这增加了系统的安全性和效率。
28、 MODBUS通信协议的CRC(冗余循环码)包含2个字节,即16位二进制数。CRC码由发送设备(主机)计算,并放在所发送信息帧的末尾。接收信息的设备(从设备)重新计算接收信息的CRC,
29、 比较计算出的CRC与接收到的CRC是否一致,如果不一致,则表示出错。
30、 CRC计算中仅使用8个数据位,即起始位和停止位,并且CRC计算中不涉及奇偶校验位(如果有)。
31、 CRC码的计算方法是:
32、 1.预置一个16位寄存器为十六进制FFFF(即全1);将该寄存器称为CRC寄存器;
33、 2.将第一个8位二进制数据(即通信信息帧的第一个字节)和16位CRC寄存器的低位置位
34、 8位异或,将结果放入CRC寄存器;
35、 3.将CRC寄存器的内容右移一位(向低位),最高位填充0,检查右移后移出的位;
36、 4.如果移出位置为0;重复步骤3(再次向右移动一个位置);
37、 如果移出位为1,则1:CRC寄存器与多项式A001(1010 0000 0000 0001)进行异或运算;
38、 5.重复步骤3和4,直到它向右移动8次,这样所有的8位数据都被处理;
39、 6.重复步骤2至步骤5,处理通信信息帧的下一个字节;
40、 7.按照上述步骤计算完通信信息帧的所有字节后,得到16位CRC寄存器的高低。
41、 字节被交换;
42、 8.最终的CRC寄存器内容是:CRC代码。
43、 通信错误信息和数据的处理;
以上就是modbus rtu这篇文章的一些介绍,希望对大家有所帮助。