- 1. 通讯Function
- 2. 通讯示例
- 3. function code 03H:读register
- 4. function code 10H:写多路register
- 5. 16 位CRC check码
- 6. 出错处理
- 7. Modbus技术交流QQ群
通讯Function
仪表采用 RS485 通信方式,Baud rate可设为 1200、2400bps、4800bps、9600bps。
同一条通讯线路上最多可以同时connect 32 个仪表,每个仪表均可设定其通讯address,通讯connect应使用带有铜网的屏蔽双绞线,线径不小于 0.5mm2 。布线时应使通讯线远离强电电缆或其他强电场环境,最大传输距离为 1200m,典型的网络connect方式如图,用户可根据具体情况选用其他合适的connect方式。

DL/T 645-2007 协议Switch到 ModBus-RTU 通讯协议的data帧如下:
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 即为屏显address,如编号为 21 02 25 02 15 21 则填入 21 15 02 25 02 21,填入的是仪表侧边条形码标号的倒写.

CS为68 xx xx 至 33 33 33的checksum后两位,不包括前面4个FE;
更改后modbus address,Baud rate,data bit,check digit,stop bit以仪表屏幕显示。
默认DL/T645connect参数为(8n2,2400bps),send上述指令,观察电表屏显,当“DLT645”变成“Modbus”即为Switch成功,观察屏显“Modbus”后一屏的数字,该数字为电表的modbus从机address,以decimal显示,注意,modbus的默认Baud rate为9600。
仪表设置为 ModBus-RTU 传输模式时,ModBus-RTU 通讯协议在一根通讯线上采用主从应答方式的通讯connect方式。首先,主计算机的信号寻址到一台唯一address的终端设备(从机),然后,终端设备发出的应答信号以相反的方向传输给主机,即半双工的工作模式。该协议只允许在主机(PC,PLC 等)和终端设备之间通讯,而不允许独立的终端设备之间的data交换,这样各终端设备不会在它们初始化时占据通讯线路,而仅限于Response到达本机的查询信号。
仪表提供 ModBus-RTU 通讯协议(见附录 A),通讯可读取或修改的参数信息,见下表。
| 参数address | 参数代号 | 参数说明 | data type | dataLengthWord | 读写属性 |
| 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 | 协议Switch设置 | int | 1 | R/W |
| 0006H | Addr | 此address只有 Modbus-RTU 时effective | 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 | Baud rate | 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 协议Switch模式字,data为 2 为 Modbus-RTU 协议,data为 1 时为 DL/T 645-2007协议;
CLr.E 电能清零写 1 Clear总电能;
BAud Baud rate: 0:1200bps; 1:2400bps; 2:4800bps; 3:9600bps;
通讯示例
function code 03H:读register
主机要读取从机address为 01H,Starting register address为 0CH 的 2 个register data,主机send:
| address码 | function code | Starting register address | number of registers | CRC verification码 |
| 01 | 03 | 00 0C | 00 02 | 04 08 |
如果从机register 0CH、0DH 的data为 0000H、1388H,从机返回:
| address码 | function code | byte count | register 0CH data | register 0DH data | CRC verification码 |
| 01 | 03 | 04 | 00 00 | 13 88 | F7 65 |
function code 10H:写多路register
例如:主机要把data 0002H、1388H、000AH 保存到从机address为 01H,Starting register address为 00H的 3 个register中。
主机send:
| address码 | function code | Starting register address | number of registers | 写入byte count | 00H register待写入data | 01H register待写入data | 02H register待写入data | CRC verification码 |
| 01 | 10 | 00 00 | 00 03 | 06 | 00 02 | 13 88 | 00 0A | 9B E9 |
从机返回:
| address码 | function code | Starting register address | number of registers | CRC verification码 |
| 01 | 10 | 00 00 | 00 03 | 80 08 |
16 位CRC check码
主机或从机可用校验码判别receive信息是否正确。由于电子噪声或一些其它干扰,信息在传
输过程中可能会发生Error,校验码可以检验主机或从机通讯信息是否有误。
16 位 CRC verification码由主机计算,放置于send信息帧的尾部。从机再重新计算receive到的信息的CRC,比较计算得到的 CRC 与receive到的 CRC 是否一致,如果不一致,则表明出错。在进行 CRC 计算时只用到 8 个data bit,start位及stop bit都不参与 CRC 计算。
CRC verification码计算方法如下:
1) 预置 1 个 16 位的register为hexadecimal FFFF(即全为 1),称此register为 CRC register;
2) 把第一个 8 位binarydata(通讯信息帧的第 1 个byte)与 16 位 CRC register的低 8 位相异或,结果放于 CRC register;
3) 把 CRC register的内容右移一位(朝低位)并用 0 填补最高位,检查右移后的移出位;
4) 如果移出位为 0:重复第 3)步(再次右移一位);
如果移出位为 1:CRC register与多项式 A001(1010 0000 0000 0001)进行异或;
5) 重复步骤 3)和 4),直到右移 8 次,这样整个 8 位dataAll进行了处理;
6) 重复步骤 2)到步骤 5),进行通讯信息帧下一个byte的处理;
7) 将该通讯信息帧所有byte(不包括 CRC verification码)按上述步骤计算Complete后,得到的 CRC register内容即为:16 位 CRC verification码。
出错处理
当仪表检测到了除 CRC verification码出错以外的其它Error时,将向主机回送信息,function code的最高位置为 1,即从机返送给主机的function code是在主机send的function code的基础上加 128。从机返回的Error信息帧format如下:
| address码 | function code(最高位为 1) | Error码 | CRC verification码 |
| 1 byte | 1 byte | 1 byte | 2byte |
Error码如下:
| 01H | 非法的function code | receive到的function code仪表不支持 |
| 02H | 非法的register address | receive到的register address超出仪表的register address范围 |
| 03H | 非法的data值 | receive到的data值超出相应address的data范围 |
Modbus技术交流QQ群

发表回复