通讯规约
仪表提供串行异步半双工RS485 通讯接口,采用MODBUS-RTU协议,各种数据信息均可在通讯线路上传送。在一条线路上可以同时连接多达32 个网络电力仪表,每个网络电力仪表均可设定其通讯地址(Address No.),不同系列仪表的通讯接线端子号码不同,通讯连接应使用带有铜网的屏蔽双绞线,线径不小于0.5mm2。布线时应使通讯线远离强电电缆或其他强电场环境,推荐采用T型网络的连接方式,不建议采用星形或其他的连接方式。
MODBUS_RTU通讯协议:MODBUS 协议在一根通讯线上采用主从应答方式的通讯连接方式。首先,主计算机的信号寻址到一台**地址的终端设备(从机),然后,终端设备发出的应答信号以相反的方向传输给主机,即:在一根单独的通讯线上信号沿着相反的两个方向传输所有的通讯数据流(半双工的工作模式)。MODBUS 协议只允许在主机(PC,PLC 等)和终端设备之间通讯,而不允许独立的终端设备之间的数据交换,这样各终端设备不会在它们初始���时占据通讯线路,而**于响应到达本机的查询信号。
主机查询:查询消息帧包括设备地址码、功能代码、数据信息码、校验码。地址码表明要选中的从机设备;功能代码告之被选中的从设备要执行何种功能,例如功能代码03 或04是要求从设备读寄存器并返回它们的内容;数据段包含了从设备要执行功能的其它附加信息,如在读命令中,数据段的附加信息有从何寄存器开始读及要读的寄存器数量;校验码用来检验一帧信息的正确性,为从设备提供了一种验证消息内容是否正确的方法,它采用CRC16 的校准规则。
从机响应:如果从设备产生一正常的回应,在回应消息中有从机地址码、功能代码、数据信息码和CRC16 校验码。数据信息码则包括了从设备收集的数据:如寄存器值或状态。如果有错误发生,我们约定是从机不进行响应。传输方式是指一个数据帧内一系列独立的数据结构以及用于传输数据的有限规则,下面定义了与MODBUS 协议– RTU方式相兼容的传输方式。每个字节的位:1 个起始位、8 个数据位、1 个停止位。
数据帧的结构:即:报文格式。
地 址 码 | 功 能 码 | 数 据 码 | 效 验 码 |
1个BYTE | 1个BYTE | N个BYTE | 2个BYTE |
地址码:在帧的开始部分,由一个字节(8 位二进制码)组成,十进制为0~255,在我们的系统中只使用1~247,其它地址保留。这些位标明了用户指定的终端设备的地址,该设备将接收来自与之相连的主机数据。每个终端设备的地址必须是**的,仅仅被寻址到的终端会响应包含了该地址的查询。当终端发送回一个响应,响应中的从机地址数据便告诉了主机哪台终端正与之进行通信。
功能码:告诉了被寻址到的终端执行何种功能。下表列出显示所支持的功能码,以及它们的意义和功能。
校验码:错误校验(CRC)域占用两个字节,包含了一个16 位的二进制值。CRC 值由传输设备计算出来,然后附加到数据帧上,接收设备在接收数据时重新计算CRC 值,然后与接收到的CRC 域中的值进行比较,如果这两个值不相等,就发生了错误。
生成一个CRC的流程为:
(1) 预置一个16位寄存器为0FFFFH(16进制,全1),称之为CRC寄存器。
(2) 把数据帧中的**个字节的8位与CRC寄存器中的低字节进行异或运算,结果存回寄存器。
(3) 将CRC寄存器向右移一位,*高位填以0,*低位移出并检测。
(4) 上一步中被移出的那一位如果为0;重复第三步(下一次移位)为1,将CRC寄存器与一个预设的固定值(0A001H)进行异或运算。
(5) 重复第三步和第四步直到8次移位。这样处理完了一个字节的八位。
(6) 重复**步到第五步来处理下一个字节的八位。直到所有的字节结束。
(7) *终CRC寄存器的值就是CRC的值。
报文指令格式
读取数据寄存器指令0x03
主机请求指令 | 从机响应 |
从机地址 | 1Byte | 1~247 | 从机地址 | 1Byte | |
功能码 | 1Byte | 0x03/0x04 | 功能码 | 1Byte | |
起始寄存器地址 | 2Bytes | | 寄存器字节 数 | 1Byte | |
寄存器个数 | 2Bytes | | 寄存器值 | N Bytes | |
CRC校验码 | 2Bytes | | CRC校验码 | 2Bytes | |
通讯报文举例:1.读数据(功能码:03):这个功能可使用户获得终端设备采集、记录的数据,以及系统参数。主机一次请求采集的数据个数没有限制,但不能超出定义的地址范围。下面的例子是从终端设备地址为12(0CH)的从机上,读取3 个数据Ia、Ib、Ic (数据帧中数据每个地址占用2 个字节,Ia 的开始地址为 43(2BH)开始,数据长度为3(03H)个字。)
查询数据帧(主机)
地址 | 命令 | 起始寄存器地址 (高位) | 起始寄存器地址 (低位) | 寄存器个数 (高位) | 寄存器个数 (低位) | CRC16 (低位) | CRC16 (高位) |
0CH | 03H | 00H | 2BH | 00H | 03H | 74H | DEH |
响应数据帧(从机),表明I=1380H(4.992)。
地址 | 命令 | 数据长度 | 数据1 2 3 4 5 6 | CRC16 (低位) | CRC16 (高位) |
0CH | 03H | 06H | 13H 80H | 72H | E5H |
MODBUS 地址信息表:
地址 | 项目 | 描述 | 字节地址 | 说明 |
设 置 信 息 |
0 | MM | 编程设置密码 | 0,1 | 2 字节1~9999 |
1 | DZ | 仪表地址 | 2 | 1 字节,1~254 |
4 | CT | 电流倍率 | 8,9 | CT=电流1 次测/2 次测(1~9999) |
运 行 信 息 |
33 | DIO/Info | 开关信息 | 66,67 | 0断,1通 |
35 | DCT | 电流小数点位置 | 71 | |
电 量 信 息 |
43 | I | 电流 | 86 87 | 数据计算: 电流 I=(Rx /10000) * (10^DCT) |