简述
DLT645 是中国电力行业电表通信规约,主要通过RS-485与上位机(采集器、DTU、主站)通信。 常见版本有:
DL/T 645-1997(老版) DL/T 645-2007(当前主流) DL/T 645-2019(最新,向下兼容 2007,大多表仍是 2007)它解决的问题:
电表如何以统一格式上传数据 如何读电量、功率、电压、需量等 如何写参数(校时、抄表周期等) 如何确保表计数据安全(密码/权限)通讯物理层
接口:485(半双工) 波特率:2400 / 4800 / 9600(典型是 2400bps) 校验位:偶校验软件开发
软件部分已实现DLT645读取数据,如:读表号、正向电能、反向电能、A、B、C值等。 使用标准C语言,内部提供使用文档。帧格式
以下是DLT645-2007的帧格式
帧起始符68H
- 标识一帧信息的开始,其值为 68H=01101000B。
地址域A0-A5
- 地址域由 6 个字节构成,每字节 2 位 BCD 码(4个二进制位),地址长度可达 12 位十进制数。每块表具有唯一的通信地址,且与物理层信道无关。当使用的地址码长度不足 6 字节时,高位用“0”补足。
- 通信地址 999999999999H 为广播地址,只针对特殊命令有效,如广播校时和广播冻结等。广播命令不要求从站应答。
- 地址域支持缩位寻址,即从若干低位起,剩余高位补 AAH 作为通配符进行读表操作,从站应答帧的地址域返回实际通信地址。
- 地址域传输时低字节在前,高字节在后。
控制码C
数据域长度L
L 为数据域的字节数。读数据时 L≤200,写数据时 L≤50,L=0 表示无数据域。
数据域DATA
数据域包括数据标识、密码、操作者代码、数据、帧序号等,其结构随控制码的功能而改变。传输时发送方按字节进行加 33H 处理,接收方按字节进行减 33H 处理。
数据标识
在帧格式数据域中,会有数据标识,一共四个字节(DI3-DI1)。数据类型分七大类:电能量、最大需量及发生时间、变量、事件记录、参变量、冻结量、负荷记录。
校验码CS
跳过第一个起始符,从地址到校验前所有字节和的低8位,示例如下
报文 68 01 02 03 04 05 06 68 11 04 33 33 34 35 CS 16 计算CS (68 + 01 + 02 + 03 + 04 + 05 + 06 + 68 + 11 + 04 + 33 + 33 + 34 + 35) 取低 8 位数据传输
前导字节
在主站发送帧信息之前,先发送 4 个字节 FEH,以唤醒接收方。
传输次序
所有数据项均先传送低位字节,后传送高位字节。数据传输的举例:电能量值为 123456.78kWh,其传输次序如图
数据交互
主站请求
可以分为4种帧格式,最常用的是第一种,如下图
帧格式 2(m=1,读给定块数的负荷记录)
帧格式 3(m=6,读给定时间、块数的负荷记录)
帧格式 4(液晶查看命令使用帧格式 4)
从机应答
正常情况,无后续数据帧(C=91H)
正常情况,有后续数据帧(C=B1H)
异常情况(C=D1H)
软件开发
1. 文件结构
dlt645.h: 头文件,包含常量定义、结构体声明和 API 接口。dlt645.c: 源文件,包含协议的具体实现(组包、解包、校验、数据处理)。
2. 关键数据结构
dlt645_frame_t
用于存储解析后的帧信息。
typedefstruct{