面试的时候叫画出Modbus协议 电信卡不知道有协议怎么画

Modbus 协议是应用于电子控制器上的一种通用语言。通过此协议,控制器相互之间、控制器经由网络(例如以太网)和其它设备之间可以通信。Modbus 协议定义了一个控制器能认识使用的消息结构,而不管它们是经过何种网络进行通信的。它描述了一控制器请求访问其它设备的过程,如果回应来自其它设备的请求,以及怎样侦测错误并记录。它制定了消息域格局和内容的公共格式

Modbus 是一个请求/应答协议

以下是要分解的Modbus热图

了解了它,会使你对串口通信有一个清晰的认识!

ASCII消息帧 (在消息中的每个8Bit 字节都作为两个ASCII字符发送)

消息中的每个ASCII字符都是一个十六进制字符组成

n个数据位,最小的有效位先发送

1个奇偶校验位,无校验则无

1个停止位(有校验时),2个Bit(无校验时)

LRC(纵向冗长检测)

消息中的每个8位域都是一个两个十六进制字符组成

8个数据位,最小的有效位先发送

1个奇偶校验位,无校验则无

1个停止位(有校验时),2个Bit(无校验时)

CRC(循环冗长检测)

/// 例如把如下字符串转换成字节数组
/// 转换为符合本程序的十六进制格式

自定义Modbus数据表例子:

自定义Modbus数据表定义注意

串口调试工具 + RS485  就可以读取硬件上的数据,和向硬件请求了,如何使用请看“调试篇”会有详细的说明。

}

版权声明:本文为博主原创文章,未经博主允许不得转载。 /u/article/details/

Mobus协议应用图解


2. 哪两种Modbus协议规定了消息、数据的结构、命令和就答的方式,数据通讯采用什么方式?

-Modbus的ASCIIRTU协议规定了消息、数据的结构、命令和就答的方式,数据通讯采用Maser/Slave方式。

3. Modbus串行通信协议数据校验有哪些?

-Modbus协议需要对数据进行校验,串行协议中除有奇偶校验外,ASCII模式采用LRC校验,RTU模式采用16位CRC校验.

TCP和RTU协议非常类似,只要把RTU协议的两个字节的校验码去掉,然后在RTU协议的开始加上5个0和一个6并通过TCP/IP网络协议发送出去即可

5. Modbus协议中保持寄存器和输入寄存器是什么?

-04功能码的作用就是读输入寄存器,而03功能码的作用则是读保持寄存器,06功能码的内容是预置单个保持寄存器,16功能码的内容则是预置多个保持寄存器。

Modbus协议最开始是用来解决PLC的通信协议问题的,主要用于输入输出数字量信号以及模拟量信号,所谓的输入寄存器就是从模拟量信号输入引申出来的,即输入寄存器只能从模拟量信号输入端改变寄存器,而主机则不能通过下发指令改变输入寄存器的数据,而保持寄存器则是用于输出模拟量信号的,主机是可以改变寄存器数据,也就是说对于主机而言,输入寄存器是只读的,而保持寄存器是可以读写的,当主机用06,16功能码的指令去预置输入寄存器的时候,设备会返回一个代码为0x81的错误代码,即企图写只读寄存器。

-MODBUS协议中0x,1x,,4x,5x,6x,还有4x_,_8等,代表不同的设备类型数据区。这些设备类型在MODBUS协议中只支持特定的功能码,下面分别说明:0x 是一个可读可写的线圈设备类型(类似于的输出点)。读该设备类型的位状态时,功能码为01H,写位状态时功能码为05H。
1x 是一个只读的触点设备类型(类似于的输入点)。读位状态时的功能码为02H。
是一个只读的模拟量设备类型(类似于的模拟量)。读其数据时的功能码为04H。
4x是一个可读可写的数据寄存器设备类型(类似于PLC的数据寄存器)。当读其数据时功能码是03H当写入数据的时候功能码是10H
5x 该设备类型与4x的设备类型属性是一样的。即发出读写的功能码完全一样。不同之处在于,当为双字时,譬如32_unsigned格式的数据,使用5x和4x两种设备类型分别读取数据时,高字和低字的位置是颠倒的。譬如,使用4x设备类型读到的数据是0x1234,那么使用5x设备类型读取的数据是0x3412。
6x 是一个可读可写的设备类型,读数据的时候发出的功能码也是03H,与4x不同之处在于写数据的时候,发出的功能码为06H,即写单个寄存器的数据。
3x_bit 该设备类型支持的功能码与3x设备类型完全一致,不同之处是,3x是读数据,而3x_bit是读数据中的某一个bit的状态。
4x_bit 该设备类型支持的功能码与4x设备类型完全一致,不同之处是,4x是读数据,而4x_bit是读数据中的某一个bit的状态。

常用查表法和计算法。计算方法一般都是:

(1)、预置1个16位的寄存器为十六进制FFFF(即全为1),称此寄存器为CRC寄存器;

(2)、把第一个8位二进制数据(既通讯信息帧的第一个字节)与16位的CRC寄存器的低

(3)、把CRC寄存器的内容右移一位(朝低位)用0填补最高位,并检查右移后的移出位;

(4)、如果移出位为0:重复第3步(再次右移一位);如果移出位为1,CRC寄存器与多

(5)、重复步骤3和4,直到右移8次,这样整个8位数据全部进行了处理;

(6)、重复步骤2到步骤5,进行通讯信息帧下一个字节的处理;

(7)、将该通讯信息帧所有字节按上述步骤计算完成后,得到的16位CRC寄存器的高、低

(8)、最后得到的CRC寄存器内容即为:CRC码。

以上计算步骤中的多项式A001是8005按位颠倒后的结果。

查表法是将移位异或的计算结果做成了一个表,就是将0~256放入一个长度为16位的寄存器中的低八位,高八位填充0,然后将该寄存器与多项式0XA001按照上述3、4步骤,直到八位全部移出,最后寄存器中的值就是表格中的数据,高八位、低八位分别单独一个表。


}

我要回帖

更多关于 电信卡不知道有协议 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信