本文主要是介绍智能电表协议DLT645新手解惑,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
初级代码游戏的专栏介绍与文章目录-CSDN博客
我的github:codetoys,所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。
这些代码大部分以Linux为目标但部分代码是纯C++的,可以在任何平台上使用。
我也是接触这个没几天,估计我困惑的别的初学者也困惑吧。
几个协议啥关系
DLT645-1997和DLT645-2007是两个版本,协议基本规则相同,但是数据标识不相同,也就是不兼容!还有一个什么协议名称的,其实是包含了这两个协议。
协议的基本规则
起始位、表号、指令、数据标识、数据、校验、结束位,跟一般的请求/应答协议差不多。
数据标识咋那么复杂
其实也没啥了,反正一个数据标识代表一个或一组数据,相当于“点位”或者“地址”。两个版本的点位是完全不兼容的。
数据咋都是倒过来的
表号和数据都是先发送低字节,数据容易理解一点,不过表号就比较困惑了,估计以前表号是数字吧。但是数据也都是BCD码啊……直接按照人类的方式不好吗?
况且数据还有3字节的,说不成。
虚拟机的串口
用虚拟机和模拟程序通过虚拟串口连接发现串口的奇偶校验无关紧要,甚至——波特率都无关紧要,可能是虚拟机或者虚拟串口的问题吧,真机测试就不行了,必须要一致。
红外读表器是个啥
就是个红外线转485设备,有了这个就不用接线,比较方便。不过红外读表器的波特率比较低,也不是很稳定。电表红外的波特率一般是固定的,1200或2400,1200的红外读表器似乎读不了2400的表(不过具体也不好说,遇到过有红外输出位置但是其实根本没装红外输出功能的表)。
通用地址(表号)AA
不知道表号的情况可以用12个A来代替,但是不是每个表都支持,所以还是要支持设置表号的。我这样讲是因为确实有些程序直接使用12个A做表号来采数,结果却遇到了不这个认账的表,不得不改程序。
开源DLT645库(C)
这个库要根据说明做适当改造,不算很难。
(这里是结束)
这篇关于智能电表协议DLT645新手解惑的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!