8个数据位,最小的有效位先发送 无奇偶校验位 1个停止位
错误检测(Error cheeking) CRC(循环冗余校验) 9.1.4 协议
当数据帧到达终端设备时,它通过一个简单的“端口”entry被寻址到的设备,该设箅去掉数据帧的“信封”(数据头),读取数据,如果没有错误,就执行数据所请求的任务,然后,它将自己生成的数据加入到取得的“信封”中,把数据帧返回给发送者。返回的响应数据中包含了以下内容:终端从机地址(Address),被执行了的命令(Function),执行命令生成的被请求数据(Data)和一个检验码(Check)。发生任何错误都不会有成功的响应,或者返回一个错误的指示帧。 数据帧格式
地址 8-Bits 地址域
代码 03H或04H 意义 行为 功能 8-Bits 数据 NX8-Bits 校验 16-Bits 读数据寄存器 获得一个或多个寄存器的当前二进制数值 地址域在帧的开始部分,出一个字节(8位二进制码)组成,十
进制为0~255,在我们的系统中只使用1~247,其它地址保留,这些位标明了用户指定的终端设备的地址,该设备将接收来自与之相连的主机数据。每个终端设备的地址必须是唯一的,仅仅被寻址到的终端设备会响应包含了该地址的查询。当终端发送回一个响应,响应中的从机地址数据便告诉了主机哪台终端正与之进行通信。
功能域
功能域代码告诉了被寻址到的终端执行何种功能。下表列出了该系列仪表用到的功能码,以及它们的意义和功能。
数据域
数据域包含了终端执行特定功能所需要的数据或者终端响应查询时采集到的数据。这些数据的内容可能是数值、参考地址或者设置值。例如:功能域码告诉终端读取一个寄存器,数据域则需要指明从哪个寄存器开始及读取多少个数据,内嵌的地址和数据依据类型和从机之间的内容而有所不同。
错误校验域
该域允许主机和终端检查传输过程中的错误。有时,由于电噪声和其它干扰,一组数据在从一个设备传输到另一个设备时在线路上可能会发生一些改变,出错校验能够保证主机或者终端不去响应那些传输过程中发生了改变的数据,这就提高了系统的这全性或效率,错误校验使用了16位循环冗余的方法(CRC16)。错误检验(CRC)域占用两个字节,包含了一个16位的二进制值。CRC值由传输设备计算出来,然后附加到数据帧上,接收设备在接收数据时重新计算CRC
值,然后与接收到的CRC域中的值进行比较,如果这两个值不相符,就发生了错误。CRC运算是,首先将一个16位的寄存器预置为全1,然后连续把数据帧中的每个字节中的与该寄存器的当前值进行运算,仅仅每个字节的8个数据位参与生成CRC,起始位和终止位以及可能使用的奇偶位都不影响CRC。在生成CRC时,每个字节的8位与寄存器中的内容进行异或,然后将结果向低位转移,高位则用“0”补充,最低位(LSB)移出并检测,如果是1,该寄存器就与一个预设的固定值(0A001H)进行一次异或运算,如果最低位0不作任何处理。上述处理重复进行,直到执行完了8次移位操作,当最后一位(第8位)移完以后,下一个8位字节与寄存器的当前值进行异或运算,同样进行上述的另一个8次移位异或操作,当数据帧中的所有字节都作了处理,生成的最终值就是CRC值。
生成一个CRC的流程为:
预置一个16位寄存器为0FFFFH(全1),称之为CRC寄存器;把数据帧中的第一个字节的8位与CRC寄存器中的低字节进行异或运算,结果存回CRC寄存器;将CRC寄存器向右移一位,最高位填以0,最低位移出并检测;如果最低位为0:重复第三步(下一次移位);如果最低位为1,将CRC寄存器与一个预设的固定值(0A001H)进行一次异或运算;重复第三步和第四步直到8次位移,这样处理完了一个完整的八位。重复第二步到第五步处理下一个八位,直到所有的字节处理结束;最终CRC寄存器的值就是CRC的值。
9.2通讯数据真值表
地址 0000H 0001H 0002H 0003H 0004H 0005H 0006H 0007H 0008H 0009H 000AH 000BH 000CH 000DH 000EH 000FH 0010H 0011H 0012H 0013H 0014H 0015H 0016H 0017H 0018H 0019H 001AH 001BH 001CH 001DH 内容 预留 预留 预留 预留 预留 预留 预留 预留 预留 1相I有效值 1相I有效值 2相I有效值 2相I有效值 3相I有效值 3相I有效值 4相I有效值 4相I有效值 CT1 CT2 CT3 CT4 F有效值 报警、IO 开出1模式 报警1类型 报警1阀值 开出1延时 预留 预留 开出2模式 简要说明 R/W 备注 固定3位小数 无小数 固定3位小数 无小数 固定3位小数 无小数 固定3位小数 无小数 读写属性: R-读;W-写 电流(单位:A)0~6000(表示6.000A二次电流) R 电流(单位:A)0~50000(表示50000A一次电流) R 电流(单位:A)0~6000(表示6.000A二次电流) R 电流(单位:A)0~50000(表示50000A一次电流) R 电流(单位:A)0~6000(表示6.000A二次电流) R 电流(单位:A)0~50000(表示50000A一次电流) R 电流(单位:A)0~6000(表示6.000A二次电流) R 电流(单位:A)0~50000(表示50000A一次电流) R 电流变比1回路 1~9999 电流变比2回路 1~9999 电流变比3回路 1~9999 电流变比4回路 1~9999 频率(单位:Hz)450~650(固定一位小数) 具体使用参看下方说明 0报警1遥控 0负荷报警 1~150% 0~200秒 0报警1遥控 R R R R R R R R R R R
001EH 001FH 0020H 0021H 0022H 0023H 0024H 0025H 0026H 0027H 0028H 0029H 002AH 002BH 002CH 002DH 002EH 002FH 0030H 0031H 0032H ?? ?? ?? ?? 0147H 0148H 0149H 014AH 014BH 014CH 014DH 014EH 报警2类型 报警2阀值 开出2延时 预留 预留 记录延时 记录阀值 预留 预留 当前年 当前月,日 0故障报警 1~4倍额定电流 0~200秒 1~1000分钟 1~100% 年 高字节.月, 低字节.日 R R R R R R R R R R R R R R R R R R R R R R R R 16进制 16进制 16进制 16进制 16进制 16进制 16进制 16进制 16进制 16进制 16进制 16进制 16进制 16进制 16进制 16进制 16进制 16进制 16进制 当前时,分 高字节.时, 低字节.分 当前秒,上下午 高字节.秒, 低字节.0上午1下午 预留 当前记录数据量 当前记录数据的数量1~96 记录年(奇数年) 年 记录月,日 高字节.月, 低字节.日 (1月) 记录时,分 高字节.时, 低字节.分 记录秒,上下午 秒 电流峰值数据 小数点和路数 ?? ?? ?? ?? 电流有效值 高字节.小数点位置, 低字节.路数 (第1路) 记录年(奇数年) 年 记录月,日 记录时,分 记录秒 电流峰值数据 小数点和路数 高字节.月, 低字节.日 (12月) 高字节.时, 低字节.分 秒 电流有效值 高字节.小数点位置, 低字节.路数 (第4路) 记录年(偶数年) 年 记录月,日 高字节.月, 低字节.日 (1月)