一、立项背景和目标
背景
DLT/645-2007 是中国电力行业广泛使用的电能表通信规约,用于电表数据采集、参数配置、固件升级等运维场景。实际运维工作中,现场工程师需要一款轻量级
桌面工具与电能表进行交互,包括:
- 抄读电表的电压、电流、功率、电能等实时数据
- 配置电表地址、密码、通信参数
- 执行终端校准(有参/无参校准)
- 对电表固件进行远程升级
- 对 Modbus RTU/TCP 设备进行数据读写
传统方式依赖厂家专用调试软件,兼容性差、功能封闭。本工具旨在提供一款通用、可配置、支持多规约的电能表维护工具。
目标
多规约支持 同时支持 DLT/645-2007 和 Modbus RTU/TCP 两种规约,一键切换
多通信方式 支持串口(RS-485)、TCP 服务端、UDP 服务端三种通信链路
数据可配置 通过 XML 配置文件定义数据标识项,无需改代码即可适配不同型号电表
便携部署 单 exe + config 目录即可运行,无需安装数据库或运行时环境
业务流程与功能路径
通信建立流程
选择规约(DLT645 / Modbus)
↓
选择通信方式(串口 / UDP / TCP)
↓
配置通信参数(端口/波特率/地址等)
↓
点击[打开] → 建立连接 → 状态栏显示"已连接"
规约切换:顶部下拉框切换时,自动隐藏/显示对应 UI 控件:
- DLT645 模式:显示参数设置(地址/密码)、终端校准、DLT645 数据 Tab、状态位
- Modbus 模式:显示从站地址、Modbus 数据表格(14列可折叠),隐藏校准/升级
DLT645 数据读取流程
[加载配置] → 解析 data_items.xml → 按分类创建 Tab 页
↓
[全部读取] / 双击某行 → 构造读数据帧(控制码 11H)
↓
协议层:帧间延时等待 → 发送 → 等待响应 → 超时重发
↓
收到响应(91H/B1H)→ -33H 解密 → 解码数据(BCD/Float/...)→ 更新表格
↓
日志记录:TX/RX 原始帧 + 解码值 + 数据项名称
后续帧处理:当电表返回 B1H(有后续数据帧)时,协议层自动发送后续帧请求,直到收到 91H(无后续数据)。
DLT645 数据写入流程
选中表格行 → [写入选中] → 危险操作二次确认
↓
弹出写入对话框(显示当前值 + 输入区)
↓
├─ 单数据:数值输入框 / 下拉框(Enum类型)
├─ 块数据:多个子项输入框
└─ 结构化:write_layout 字段定义的多字段表单
↓
用户输入 → 编码(+33H 加密)→ 发送写帧(14H)
↓
收到响应(94H 成功 / D4H 失败)→ 日志显示结果
Modbus 数据读写流程
[导入配置] → 解析 Modbus XML → 填充 14 列表格
↓
[全部读取] → 遍历勾选项 → 构造 Modbus 读帧(FC=01~04)
↓
协议层:RTU(CRC16) / TCP(MBAP) → 发送 → 等待响应 → 超时重发
↓
收到响应 → 按数据类型/字节序/系数/小数位解码 → 更新表格数值列
↓
[写入选中] → 弹出输入框 → 按配置编码 → 构造写帧(FC=05/06/15/16)→ 发送
自动轮询:勾选后按设定间隔(1~60秒)自动循环读取所有勾选项。