写代码调试 DL/T645 电能表时,手里没有真表是常态。就算有表,接线也得折腾半天。等都弄好了,还得自己写串口调试程序、拼报文、解析应答,一上午就没了。换个表型,数据标识又不一样,还得重新改。
前几天在 GitHub 上看到一个用 .NET 8 写的 DL/T645 主站调试工具,内置仿真从站——没有真表也能跑,克隆下来直接启动。

项目简介
MeterSim645 是按照 DL/T645-2007 规约实现的电能表调试上位机。通过 RS485 串口轮询,电量、电压、电流、功率、频率等数据实时显示。从连接、轮询、组帧、解析到展示,整条链路都串起来了。
有些朋友对 DL/T645-2007 协议可能还不太熟悉,这里简单说一下。它是国内电能表通信的事实标准,变电站、配电台区的表计基本都走这个协议。帧结构以 68 开头,地址域用 6 字节 BCD 表示,数据域加 0x33 掩码,算术和校验,默认 2400 bps 偶校验。

几个核心亮点
① 内置仿真从站,没有真表也可以运行
这是最省事的地方。仿真从站加内存回环,克隆完 dotnet run 就起来了。不用查表、查线、对波特率,直接跑。仿真数据按电网特性做了标定:频率在 49.90~50.10 Hz 间随机游走,功率因数钳在 0.93~0.99,三相电压在 209~235 V 波动,电能只增不减,跟接真表看到的表现一样。
② 单元测试全覆盖
协议编解码是一个字节出错就整体崩掉的活儿。项目里的 139 个单元测试全部通过,覆盖了编解码契约、帧扫描器、收发统计,还涉及命令状态机、波动数据源值域断言、CSV 导出转义等边界场景。黄金报文向量也在里面,编解码正确性拿捏得死死的。对做规约对接的老哥来说,这些测试用例就是一份活着的 DL/T645 参考手册。

③ 严格三层结构
Core 是纯类库,不依赖任何 UI 框架,协议、模型、轮询服务都在里面。设计上把 ITransport 接口放在 Core 里,服务层只依赖抽象。无论另一端是真实串口还是内存回环,切换只改一行装配代码。
④ 深色工业 HMI 风格
深色 HMI 主题,标题栏支持拖动、双击最大化。卡片墙按电能、电压、电流、功率分组,涨跌用箭头标记,一目了然。断开连接后卡片变灰,但最后的数值仍保留,不会一断开就清空。三相电压趋势图采用 120 点滚动窗口,250 V 红虚线作为上限警戒线。整个界面是为工业现场环境设计的。
怎么用
直接用 git 下载代码:
git clone https://github.com/agentthink/MeterSim645.git
cd MeterSim645
dotnet build
dotnet test
dotnet run --project src/Dlt645Master.App
启动后默认走仿真链路,不需要连接真实电表。点击连接,徽标变成绿色,再点启动轮询,卡片墙数值就会跳起来。三相曲线滚动、报文监视滚屏、收发分色,哪帧是问哪帧是答一眼就能分清。
这些数据可以导出为 CSV 或 Excel 格式,直接打开不会乱码。报文监视区也支持导出,把原始帧保存为文本文件。
写在最后
目前只支持 DL/T645-2007,Modbus、IEC 61850 暂不支持。真实串口接入和多表轮询还在规划中,眼下主要用作单表调试和协议验证。需要的朋友可以下载试一下。
开源地址:https://github.com/agentthink/MeterSim645
|