欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

DLT645 1997 协议解析

程序员文章站 2022-05-27 09:20:46
源码下载 -> 提取码 QQ:505645074 DLT645.zip 工具 源码 规约解析 DL/T645-07: 数据帧格式: 注意事项: (1)前导字节-一般在传输帧信息前,都要有0~4个FE不等,所以这里要注意,对于主站来说,直接发送4个FE作为前导字节即可。而从站回复,就不一定了,根据厂家 ......

源码下载 -> 提取码 qq:505645074

 

dlt645.zip

工具

DLT645 1997 协议解析

源码

DLT645 1997 协议解析

 

 

 

规约解析

dl/t645-07:

数据帧格式:

 DLT645 1997 协议解析

 

注意事项:

1)前导字节-一般在传输帧信息前,都要有0~4个fe不等,所以这里要注意,对于主站来说,直接发送4个fe作为前导字节即可。而从站回复,就不一定了,根据厂家不同而不同,

我见过回复信息中,没有fe的,也有4个fe的,所以对于接受程序,一定要慎重。

2)传输次序-所有的数据项都是先传低字节,再传高字节,这里的数据项,主要涉及到地址域和数据域,因为其他都是1个字节。

3)差错控制-通信偶校验。

4)数据与传输运算方式:主站加0x33,从站减0x33(为嘛这么定义,可能是考虑bcd码吧)

 

网上下载的测试工具

 DLT645 1997 协议解析

DLT645 1997 协议解析

 

源码工具.net开发

 DLT645 1997 协议解析

 

调用代码

 

private void btnsend_click(object sender, eventargs e)

        {

            string outmsg = string.empty;

            string addr = txtaddr.text.trim();

            string data = txtdata.text.trim();

            if (string.isnullorempty(addr))

            {

                addmessage("电表地址不允许为空");

                return;

            }

            if (string.isnullorempty(data))

            {

                addmessage("数据标识不允许为空");

                return;

            }

            meterentity entity = dlt.read(addr, 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);

            }

        }