-
图文详情
-
产品属性
-
相关推荐
MODBUS协议只允许在主机(PC,PLC等)和终端设备之间通讯,而不允许独立的终端设备之间的数据交换,这样各终端设备不会在它们初始化时占据通讯线路,而仅限于响应到达本机的查询信号。
主机查询:查询消息帧包括设备地址码、功能人码、数据信息码、校验码。地址码表明要选中的从机设备;功能代码告之被选中的从设备要执行何种功能,例如功能代码03或04是要求从设备读寄存器并返回它们的内容;数据段包含了从设备要执行功能的其它附加信息,如在读命令中,数据段的附加信息有从何寄存器开始读的寄存器数量;校验码用来检验一帧信息的正确性,为从设备提供了一种验证消息内容是否正确的方法,它采用CRC16的校准规则。
从机响应:如果从设备产生一正常的回应,在回应消息中有从机地址码、功能代码、数据信息码和CRC16校验码。数据信息码包括了从设备收集的数据:如寄存器值或状态。如果有错误发生,我们约定是从机不进行响应。
传输方式是指一个数据帧内一系列独立的数据结构以及用于传输数据的有限规则,下面定义了与MODBUS协议-RTU方式相兼容的传输方式。每个字节的位:1个起始位、8个数据位(无奇偶校验位)、2个停止位。
数据帧的结构:即:报文格式。
地址码 |
功能码 |
数据码 |
校验码 |
1个BYTE |
1个BYTE |
N个BYTE |
2个BYTE |
地址码在帧的开始部分,由一个字节(8位二进制码)组成,十进制为0~255,在我们的系统中只使用1~247,其它地址保留。这些位标明了用户指定的终端设备的地址,该设备将接收来自与之相连的主机数据。每个终端设备的地址必须是的,仅仅被寻址到的终端会响应包含了该地址的查询。当终端发送回一个响应,响应中的从机地址数据告诉了主机哪台终端与之进行通信。
功能码告诉了被寻址到的终端执行何种功能。下表列出所支持的功能码,以及它们的意义和功能。
代码 |
意义 |
行为 |
03/04 |
读数据寄存器 |
获得一个或多个寄存器的当前二进制值 |
16 |
写预置寄存器 |
设定二进制值到相关的寄存器中 |
数据码包含了终端执行特定功能所需要的数据或者终端响应查询时采集到的数据。这些数据的内容可能是数值、参考地址或者设置值。例如:功能域码告诉终端读取一个寄存器,数据域则需要反映明从哪个寄存器开始及读取多少个数据,而从机数据码回送内容则包含了数据长度和相应的数据。
校验码错误校验(CRC)域占用两个字节,包含了一个16位的二进制值。CRC值由传输设备计算出来,然后附加到数据帧上,接收设备在接收数据时重新计算CRC值,然后与接收到的CRC域中的值进行比较。如果这两个值不相等,就发生了错误。
生成一个CRC的流程为:
(1).预置一个16位寄存器为FFFFH(16进制,全1),称之为CRC寄存器。
(2).把数据帧中的个字节的8位与CRC寄存器中的低字节进行异或运算,结果存回CRC寄存器。
(3).将CRC寄存器向右移一位,位填以0,位移出并检测。
(4).上一步中被移出的那一位如果为0:重复第三步(下移位);为1:将CRC寄存器与一个预设的固定值(
(5).重复第三点和第四步直到8次移位。这样处理完了一个完整的八位。
(6).重复第2步到第5步来处理下一个八位,直到所有的字节处理结束。
(7).终CRC寄存器的值就是CRC的值。
通讯报文举例:1.读数据(功能码:03/04):这个功能可使用户获得终端设备采集、记录的数据,以及系统参数。主机请求采集的数据个数没有限制,但不能超出定义的地址范围。下面的例子是从终端设备地址为12(0CH)的从机上,读取变送数据BS1(数据帧中数据每个地址占用2个字,测量数据字地址为12(0CH)开始,数据长度为2(02H)个字。字通讯方式。)
查询数据帧(主机)
地址 |
命令 |
起始寄存器地址 (高位) |
起始寄存器地址 (低位) |
寄存器个数 (高位) |
寄存器个数 (低位) |
CRC16 低位 |
CEC16 高位 |
南自
制造商
全新
浙江