通讯功能
仪表采用 RS485 通信方式,波特率可设为 1200、2400bps、4800bps、9600bps。
同一条通讯线路上最多可以同时连接 32 个仪表,每个仪表均可设定其通讯地址,通讯连接应使用带有铜网的屏蔽双绞线,线径不小于 0.5mm2 。布线时应使通讯线远离强电电缆或其他强电场环境,最大传输距离为 1200m,典型的网络连接方式如图,用户可根据具体情况选用其他合适的连接方式。
DL/T 645-2007 协议切换到 ModBus-RTU 通讯协议的数据帧如下:
FE FE FE FE 68 xx xx xx xx xx xx 68 14 0E 33 33 35 3D 35 33 33 33 33 33 33 33 33 33 CS 16
注意:xx xx xx xx xx xx 即为屏显地址,如编号为 21 02 25 02 15 21 则填入 21 15 02 25 02 21,填入的是仪表侧边条形码标号的倒写.
CS为68 xx xx 至 33 33 33的校验和后两位,不包括前面4个FE;
更改后modbus 地址,波特率,数据位,校验位,停止位以仪表屏幕显示。
默认DL/T645连接参数为(8n2,2400bps),发送上述指令,观察电表屏显,当“DLT645”变成“Modbus”即为切换成功,观察屏显“Modbus”后一屏的数字,该数字为电表的modbus从机地址,以10进制显示,注意,modbus的默认波特率为9600。
仪表设置为 ModBus-RTU 传输模式时,ModBus-RTU 通讯协议在一根通讯线上采用主从应答方式的通讯连接方式。首先,主计算机的信号寻址到一台唯一地址的终端设备(从机),然后,终端设备发出的应答信号以相反的方向传输给主机,即半双工的工作模式。该协议只允许在主机(PC,PLC 等)和终端设备之间通讯,而不允许独立的终端设备之间的数据交换,这样各终端设备不会在它们初始化时占据通讯线路,而仅限于响应到达本机的查询信号。
仪表提供 ModBus-RTU 通讯协议(见附录 A),通讯可读取或修改的参数信息,见下表。
参数地址 | 参数代号 | 参数说明 | 数据类型 | 数据长度Word | 读写属性 |
0000H | UcodE | 编程密码 codE | int | 1 | R |
0001H | REV. | 软件版本 | int | 1 | R/W |
0002H | CLrE | 电能清零 CLr.E | int | 1 | R/W |
0003H | RESERVED | 保留 | int | 1 | R/W |
0004H | RESERVED | 保留 | int | 1 | R/W |
0005H | ChangeProtocol | 协议切换设置 | int | 1 | R/W |
0006H | Addr | 此地址只有 Modbus-RTU 时有效 | int | 1 | R/W |
0007H | RESERVED | 保留 | int | 1 | R/W |
0008H | RESERVED | 保留 | int | 1 | R/W |
0009H | RESERVED | 保留 | int | 1 | R/W |
000AH | RESERVED | 保留 | int | 1 | R/W |
000BH | RESERVED | 保留 | int | 1 | R/W |
000CH | BAud | 波特率 | int | 1 | R/W |
000DH | RESERVED | 保留 | int | 1 | R/W |
000EH | RESERVED | 保留 | int | 1 | R/W |
000FH | RESERVED | 保留 | int | 1 | R/W |
0010H | RESERVED | 保留 | int | 1 | R/W |
2000H | U | A 相电压 | float | 2 | R/W |
2002H | I | A 相电流 | float | 2 | R/W |
2004H | P | 瞬时总有功功率 | float | 2 | R/W |
2006H | Q | 瞬时总无功功率 | float | 2 | R/W |
2008H | S | 瞬时总视在功率 | float | 2 | R/W |
200AH | PF | 总功功率因数 | float | 2 | R/W |
200CH | RESERVED | 保留 | float | 2 | R/W |
200EH | Freq | 电网频率 | float | 2 | R/W |
2010H | RESERVED | 保留 | float | 2 | R/W |
4000H | Ep | 有功总电能 | float | 2 | R/W |
ChangeProtocol 协议切换模式字,数据为 2 为 Modbus-RTU 协议,数据为 1 时为 DL/T 645-2007协议;
CLr.E 电能清零写 1 清除总电能;
BAud 波特率: 0:1200bps; 1:2400bps; 2:4800bps; 3:9600bps;
通讯示例
功能码 03H:读寄存器
主机要读取从机地址为 01H,起始寄存器地址为 0CH 的 2 个寄存器数据,主机发送:
地址码 | 功能码 | 起始寄存器地址 | 寄存器数量 | CRC 校验码 |
01 | 03 | 00 0C | 00 02 | 04 08 |
如果从机寄存器 0CH、0DH 的数据为 0000H、1388H,从机返回:
地址码 | 功能码 | 字节数 | 寄存器 0CH 数据 | 寄存器 0DH 数据 | CRC 校验码 |
01 | 03 | 04 | 00 00 | 13 88 | F7 65 |
功能码 10H:写多路寄存器
例如:主机要把数据 0002H、1388H、000AH 保存到从机地址为 01H,起始寄存器地址为 00H的 3 个寄存器中。
主机发送:
地址码 | 功能码 | 起始寄存器地址 | 寄存器数量 | 写入字节数 | 00H 寄存器待写入数据 | 01H 寄存器待写入数据 | 02H 寄存器待写入数据 | CRC 校验码 |
01 | 10 | 00 00 | 00 03 | 06 | 00 02 | 13 88 | 00 0A | 9B E9 |
从机返回:
地址码 | 功能码 | 起始寄存器地址 | 寄存器数量 | CRC 校验码 |
01 | 10 | 00 00 | 00 03 | 80 08 |
16 位CRC校验码
主机或从机可用校验码判别接收信息是否正确。由于电子噪声或一些其它干扰,信息在传
输过程中可能会发生错误,校验码可以检验主机或从机通讯信息是否有误。
16 位 CRC 校验码由主机计算,放置于发送信息帧的尾部。从机再重新计算接收到的信息的CRC,比较计算得到的 CRC 与接收到的 CRC 是否一致,如果不一致,则表明出错。在进行 CRC 计算时只用到 8 个数据位,起始位及停止位都不参与 CRC 计算。
CRC 校验码计算方法如下:
1) 预置 1 个 16 位的寄存器为十六进制 FFFF(即全为 1),称此寄存器为 CRC 寄存器;
2) 把第一个 8 位二进制数据(通讯信息帧的第 1 个字节)与 16 位 CRC 寄存器的低 8 位相异或,结果放于 CRC 寄存器;
3) 把 CRC 寄存器的内容右移一位(朝低位)并用 0 填补最高位,检查右移后的移出位;
4) 如果移出位为 0:重复第 3)步(再次右移一位);
如果移出位为 1:CRC 寄存器与多项式 A001(1010 0000 0000 0001)进行异或;
5) 重复步骤 3)和 4),直到右移 8 次,这样整个 8 位数据全部进行了处理;
6) 重复步骤 2)到步骤 5),进行通讯信息帧下一个字节的处理;
7) 将该通讯信息帧所有字节(不包括 CRC 校验码)按上述步骤计算完成后,得到的 CRC 寄存器内容即为:16 位 CRC 校验码。
出错处理
当仪表检测到了除 CRC 校验码出错以外的其它错误时,将向主机回送信息,功能码的最高位置为 1,即从机返送给主机的功能码是在主机发送的功能码的基础上加 128。从机返回的错误信息帧格式如下:
地址码 | 功能码(最高位为 1) | 错误码 | CRC 校验码 |
1 字节 | 1 字节 | 1 字节 | 2字节 |
错误码如下:
01H | 非法的功能码 | 接收到的功能码仪表不支持 |
02H | 非法的寄存器地址 | 接收到的寄存器地址超出仪表的寄存器地址范围 |
03H | 非法的数据值 | 接收到的数据值超出相应地址的数据范围 |