安科瑞 陈志豪
5 通讯指南
5.1 概述
AMC16Z-FD16高精度电压监测装置采用Modbus-RTU协议:“9600,8,1,n”,其中115200为默认波特率, 可通过通讯修改为2400、4800、19200等,参量地址见7.5通讯参量地址表;8表示有8个数据位;n表示无奇偶校验位;1表示有1个停止位。
错误检测:CRC16(循环冗余校验)
5.2 协议
当数据帧到达终端设备时,它通过一个简单的“端口”进入被寻址到的设备,该设备去掉数据帧的“信封”(数据头),读取数据,如果没有错误,就执行数据所请求的任务,然后,它将自己生成的数据加入到取得的“信封”中,把数据帧返回给发送者。返回的响应数据中包含了以下内容:终端从机地址(Address)、被执行了的命令(Function)、执行命令生成的被请求数据(Data)和一个CRC校验码(Check)。发生任何错误都不会有成功的响应,或者返回一个错误指示帧。
5.2.1 数据帧格式
5.2.2 地址(Address)域
地址域在帧首,由一个字节(8-Bits,8位二进制码)组成,十进制为0~255,在我们的系统中只使用1~ 247,其它地址保留。这些位标明了用户指定的终端设备的地址,该设备将接收来自与之相连的主机数据。同一总线上每个终端设备的地址必须是唯一的,只有被寻址到的终端才会响应包含了该地址的查询。当终端发送回一个响应,响应中的从机地址数据便告诉了主机哪台终端正与之进行通信。
5.2.3 功能(Function)域
功能域代码告诉了被寻址到的终端执行何种功能。下表列出了该系列仪表用到的功能码,以及它们的意义和功能。
5.2.4 数据(Data)域
数据域包含了终端执行特定功能所需的数据或终端响应查询时采集到的数据。这些数据可能是数值、参量地址或者设置值。 例如:功能域告诉终端读取一个寄存器,数据域则需要指明从哪个寄存器开始及读取多少个数据,内嵌的地址和数据依照类型和从机之间的不同而内容有所不同。
5.2.5 错误校验(Check)域
该域采用CRC16循环冗余校验,允许主机和终端检查传输过程中的错误。有时由于电噪声和其它干扰,一组数据从一个设备传输到另一个设备时,在线路上可能会发生一些改变,错误校验能够保证主机或从机不去响应那些发生改变的数据,这就提高了系统的安全性、可靠性和效率。
5.3 错误校验的方法
错误校验(CRC)域占用两个字节,包含了一个16位的二进制值。CRC值由传输设备计算出来,然后附加到数据帧上,接收设备在接受数据时重新计算CRC值,然后与接收到的CRC域中的值进行比较,如果这两个值不相等,就发生了错误。
CRC运算时,首先将一个16位的寄存器预置为全1,然后连续把数据帧中的每个字节中的8位与该寄存器的 当前值进行运算,仅仅每个字节的8个数据位参与生成CRC,起始位和停止位以及可能使用的奇偶位都不影响CRC。在生成CRC时,每个字节的8位与寄存器中的内容进行异或,然后将结果向低位移位,高位则用“0”补 充,低位(LSB)移出并检测,如果是1,该寄存器就与一个预设的固定值(0A001H)进行一次异或运算,如果低位为0,不作任何处理。
CRC生成流程:
1 预置一个16位寄存器为0FFFFH(全1),称之为CRC寄存器。
2 把数据帧中的di一个字节的8位与CRC寄存器中的低字节进行异或运算,结果存回CRC寄存器。
3 将CRC寄存器向右移一位,高位填0,低位移出并检测。
4 如果低位移出为0:重复第3步(下一次移位);如果低位移出为1:将CRC寄存器与一个预设固定值 (0A001H)进行异或运算。
5 重复第3步和第4步直到8次移位。这样就处理完了一个完整的8位。
6 重复第2步到第5步来处理下一个8位,直到所有的字节处理结束。
7 终CRC寄存器的值就是CRC的值。