DLT645 1997 协议解析
DLT645.zip
工具
源码
规约解析
DL/T645-07:
数据帧格式:
注意事项:
(1)前导字节-一般在传输帧信息前,都要有0~4个FE不等,所以这里要注意,对于主站来说,直接发送4个FE作为前导字节即可。而从站回复,就不一定了,根据厂家不同而不同,
我见过回复信息中,没有FE的,也有4个FE的,所以对于接受程序,一定要慎重。
(2)传输次序-所有的数据项都是先传低字节,再传高字节,这里的数据项,主要涉及到地址域和数据域,因为其他都是1个字节。
(3)差错控制-通信偶校验。
(4)数据与传输运算方式:主站加0x33,从站减0x33(为嘛这么定义,可能是考虑BCD码吧)
97协议和07协议区别
1. 控制码不同:
发 收
C=01H C=81H(97)
C=11H C=91H(07)
2. 标识码不同
比如:A相电压
B611(97)
02010100 (07)
网上下载的测试工具
源码工具.net开发
97协议测试
当前正向有功电量: 9010
电表地址:00 00 00 12 05 73
68 73 05 12 00 00 00 68 01 02 43 C3 63 16
68 73 05 12 00 00 00 68 81 06 43 C3 86 59 36 33 2F 16
调用代码
private void btnSend_Click(object sender, EventArgs e)
{
string addr = txtAddr.Text.Trim();
string data = txtData.Text.Trim();
byte control = 0x01;
switch (cmbControl.SelectedIndex)
{
case 0: control = (byte)0x01; break;// 97协议
case 1: control = (byte)0x11; break;// 07协议
}
if (string.IsNullOrEmpty(addr))
{
AddMessage("电表地址不允许为空");
return;
}
if (string.IsNullOrEmpty(data))
{
AddMessage("数据标识不允许为空");
return;
}
MeterEntity entity = dlt.Read(addr, control, data);
AddMessage("SEND " + entity.Send);
if (!string.IsNullOrEmpty(entity.OutMsg))
{
AddMessage("执行出错,errmsg=" + entity.OutMsg);
}
else
{
AddMessage("RECV " + entity.Recv);
AddMessage("analysis,Addr=" + entity.Addr + ",Control=" + entity.Control + ",Flg=" + entity.DataFlg + ",Data=" + entity.Data);
}
}
97和07对比测试
测试用例参考博客地址:https://blog.csdn.net/AlphaGQ/article/details/79498743
A相电压测试(97协议)
A相电压测试(07协议)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了