Modbus协议相关知识整理
Mobus协议应用图解
Modbus协议相关问答:
1. Modbus协议包括哪三种?
-Modbus协议包括ASCII、RTU、TCP。
2. 哪两种Modbus协议规定了消息、数据的结构、命令和就答的方式,数据通讯采用什么方式?
-Modbus的ASCII、RTU协议规定了消息、数据的结构、命令和就答的方式,数据通讯采用Maser/Slave方式。
3. Modbus串行通信协议数据校验有哪些?
-Modbus协议需要对数据进行校验,串行协议中除有奇偶校验外,ASCII模式采用LRC校验,RTU模式采用16位CRC校验.
4. TCP和RTU这两者Modbus协议的异同在哪里?
-TCP 协议是MODBUS RTU/ascii协议封装成TCP报文的。两个协议的本质都是MODBUS协议,都是靠MODBUS寄存器地址来交换数据;但所用的硬件接口不一样,Modbus RTU一般采用串口RS232C或RS485/422,而Modbus TCP一般采用以太网口。
TCP和RTU协议非常类似,只要把RTU协议的两个字节的校验码去掉,然后在RTU协议的开始加上5个0和一个6并通过TCP/IP网络协议发送出去即可
5. Modbus协议中保持寄存器和输入寄存器是什么?
-04功能码的作用就是读输入寄存器,而03功能码的作用则是读保持寄存器,06功能码的内容是预置单个保持寄存器,16功能码的内容则是预置多个保持寄存器。
Modbus协议最开始是用来解决PLC的通信协议问题的,主要用于输入输出数字量信号以及模拟量信号,所谓的输入寄存器就是从模拟量信号输入引申出来的,即输入寄存器只能从模拟量信号输入端改变寄存器,而主机则不能通过下发指令改变输入寄存器的数据,而保持寄存器则是用于输出模拟量信号的,主机是可以改变寄存器数据,也就是说对于主机而言,输入寄存器是只读的,而保持寄存器是可以读写的,当主机用06,16功能码的指令去预置输入寄存器的时候,设备会返回一个代码为0x81的错误代码,即企图写只读寄存器。
6. MODBUS协议中0x,1x,3x,4x,5x,6x,还有4x_bit,3x_bit8各代表什么?
-MODBUS协议中0x,1x,3x,4x,5x,6x,还有4x_bit,3x_bit8等,代表不同的设备类型数据区。这些设备类型在MODBUS协议中只支持特定的功能码,下面分别说明:
0x 是一个可读可写的线圈设备类型(类似于PLC的DO输出点)。读该设备类型的位状态时,功能码为01H,写位状态时功能码为05H。
1x 是一个只读的触点设备类型(类似于PLC的DI输入点)。读位状态时的功能码为02H。
3x是一个只读的模拟量设备类型(类似于PLC的AI模拟量)。读其数据时的功能码为04H。
4x是一个可读可写的数据寄存器设备类型(类似于PLC的AO数据寄存器)。当读其数据时功能码是03H,当写入数据的时候功能码是10H。
5x 该设备类型与4x的设备类型属性是一样的。即发出读写的功能码完全一样。不同之处在于,当为双字时,譬如32_bitunsigned格式的数据,使用5x和4x两种设备类型分别读取数据时,高字和低字的位置是颠倒的。譬如,使用4x设备类型读到的数据是0x1234,那么使用5x设备类型读取的数据是0x3412。
6x 是一个可读可写的设备类型,读数据的时候发出的功能码也是03H,与4x不同之处在于写数据的时候,发出的功能码为06H,即写单个寄存器的数据。
3x_bit 该设备类型支持的功能码与3x设备类型完全一致,不同之处是,3x是读数据,而3x_bit是读数据中的某一个bit的状态。
4x_bit 该设备类型支持的功能码与4x设备类型完全一致,不同之处是,4x是读数据,而4x_bit是读数据中的某一个bit的状态。
7. CRC-16校验码计算方法:
常用查表法和计算法。计算方法一般都是:
(1)、预置1个16位的寄存器为十六进制FFFF(即全为1),称此寄存器为CRC寄存器;
(2)、把第一个8位二进制数据(既通讯信息帧的第一个字节)与16位的CRC寄存器的低
8位相异或,把结果放于CRC寄存器,高八位数据不变;
(3)、把CRC寄存器的内容右移一位(朝低位)用0填补最高位,并检查右移后的移出位;
(4)、如果移出位为0:重复第3步(再次右移一位);如果移出位为1,CRC寄存器与多
项式A001(1010 0000 0000 0001)进行异或;
(5)、重复步骤3和4,直到右移8次,这样整个8位数据全部进行了处理;
(6)、重复步骤2到步骤5,进行通讯信息帧下一个字节的处理;
(7)、将该通讯信息帧所有字节按上述步骤计算完成后,得到的16位CRC寄存器的高、低
字节进行交换;
(8)、最后得到的CRC寄存器内容即为:CRC码。
以上计算步骤中的多项式A001是8005按位颠倒后的结果。
查表法是将移位异或的计算结果做成了一个表,就是将0~256放入一个长度为16位的寄存器中的低八位,高八位填充0,然后将该寄存器与多项式0XA001按照上述3、4步骤,直到八位全部移出,最后寄存器中的值就是表格中的数据,高八位、低八位分别单独一个表。