1.3 DLT645

2024-03-09 12:20
文章标签 dlt645 1.3

本文主要是介绍1.3 DLT645,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、简介

  目前市面的大部分的电表,通信都是遵循该协议。因为物理层使用RS-485,故为半双工通信,主站指终端设备,从站指多功能电能表。
  数据链路层,默认波特率2400,偶校验,8bit数据,1bit停止位。先传低位,后传高位。D0是字节最低有效位,D7是字节最高有效位,如下图所示
在这里插入图片描述
  帧格式如下表所示

说明帧起始符地址域帧起始符控制码数据域长度数据域校验码结束符
字节0x68A0~A50x68CLDATACS0x16
1、帧起始符
  固定0x68。
2、地址域
  由6个字节A0~A5构成,每个字节2位BCD码,故地址长度为12位十进制数,当地址码长度不足6字节时,高位用0补足。通讯地址0x9999 9999 9999时,为广播地址。特殊的是,地址域支持锁位寻址,从若干低位起,剩余高位补0xAA,作为通配符进行读表操作,从站应答帧会返回实际通信地址。
  什么是BCD码,我们知道,正常情况下,二进制、十进制、十六进制之间有一套转化的算法,例如18=0x12=10010。但是BCD码不同,它用四位二进制来表示十进制,最常用的是8421BCD码,例如8=1000,7=0111,为了方便,还是习惯把二进制用十六进制来表示,故8=0x8,7=0x7,但是问题来了,10怎么用BCD码表示,0xA?不是的,10用BCD表示是0x10。因为1的BCD码是0001,0的BCD码是0000,故10的BCD码是0001 0000,为了方便,表示为16进制,故为0x10。显然,9876的BCD码是0x9876。所以用BCD码的好处就是直观,这在工业领域大量的被应用。
  上面讲的是BCD码是压缩BCD码,它使用4位标识一个十进制数,1个字节可以表示2位十进制数。而非压缩BCD码使用1个字节来表示,故其高4位永远是0,1个字节只能表示1位十进制数。
3、控制码C
  用来表示帧的功能,具体如下所示:
在这里插入图片描述  例如,0x11代表读电表的数据,
D7D6D5D4D3D2D1D0
00010001
  0x91代表电表返回的数据
D7D6D5D4D3D2D1D0
10010001
4、数据域长度L
  表示数据域的字节数,读数据时,L<=200,写数据时,L<=50。L=0,表示没有数据域。
5、数据域DATA
  数据域并不仅仅只包括数据,它还包括数据标识、密码、操作者代码、帧序号等。它的结构随着控制码而改变。在传输过程中,发送方需要对数据域的字节加0x33,再发送,接收方接收到数据域之后,需要对字节减0x33,方才得到原始数据。
6、校验码CS
  校验码是把从帧起始符开始算起,到校验码之前的所有字节求和,然后再取模256。即求和后,只取结果的最低1字节的数据。例如,假设地址为0xAAAA AAAA AAAA,控制码为0x11,数据域长度0x04,数据域0x33,0x34,0x34,0x35。那么该帧的校验码为0x68+0xAA*6+0x68+0x11+0x04+0x33+0x34+0x34+0x35=0x5B1。再取模256,即0xB1,则CS=0xB1。注意,其中的数据域0x33,0x34,0x34,0x35都是已经加上了0x33,原始数据其实是0x00,0x01,0x01,0x02。
7、结束符
  固定0x16。

二、实例

power:{0xFE,0xFE,0xFE,0xFE,0x68,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0x68,0x11,0x04,0x33,0x33,0x33,0x33,0xAD,0x16};
volt:{0xFE,0xFE,0xFE,0xFE,0x68,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0x68,0x11,0x04,0x33,0x34,0x34,0x35,0xB1,0x16};
curr:{0xFE,0xFE,0xFE,0xFE,0x68,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0x68,0x11,0x04,0x33,0x34,0x35,0x35,0xB2,0x16};	
energy:{0xFE,0xFE,0xFE,0xFE,0x68,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0x68,0x11,0x04,0x33,0x33,0x36,0x35,0xB2,0x16};	

  上面是4个获取数据的命令,分别是功率、电压、电流和电能。根据协议依次来分析。

curr:{0xFE,0xFE,0xFE,0xFE,0x68,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0x68,0x11,0x04,0x33,0x34,0x35,0x35,0xB2,0x16};	

  开头的4个0xFE是唤醒命令,目的为了唤醒电表。
  地址域为6个0xAA,表明这是广播地址。
  控制码为0x11,表明是从主站发出的,读数据的命令。
  数据域长度为0x04,表明后面跟的数据域有4个字节。
  数据域为0x33,0x34,0x35,0x35,注意该协议传送数据时是低字节在前,高字节在后。因为传送时,数据域要加0x33,故实际的数据为DI0:0x00,DI1:0x01,DI2:0x02,DI3:0x02。
  由下表可知,显然它对应着获取电流,同时为A相电流。
在这里插入图片描述
  从机返回,以获取电压为例,

68 47 73 00 03 16 00 68 11 04 33 32 34 35 86 16 
68 47 73 00 03 16 00 68 91 0A 33 32 34 35 74 56 85 56 7C 56 83 16 

  第一行是主机向从机发送了获取电压的命令,一共获取A、B、C三相电压。
  第二行是从机返回主机的数据,注意数据长度是0A,这其中不仅只包括A、B、C三相电压,同时还包括,数据标识,千万别忘了这一点。

三、DLT645扩展协议

  因为DLT645标准的计量范围只能到999.9,无法超过1000V,故诞生了扩展协议,扩大了计量范围。

这篇关于1.3 DLT645的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/790657

相关文章

usaco 1.3 Prime Cryptarithm(简单哈希表暴搜剪枝)

思路: 1. 用一个 hash[ ] 数组存放输入的数字,令 hash[ tmp ]=1 。 2. 一个自定义函数 check( ) ,检查各位是否为输入的数字。 3. 暴搜。第一行数从 100到999,第二行数从 10到99。 4. 剪枝。 代码: /*ID: who jayLANG: C++TASK: crypt1*/#include<stdio.h>bool h

usaco 1.3 Calf Flac(暴搜)

思路是暴搜。 需要注意的地方是输入的方法,以及输出时的换行。 代码: /*ID: who jayLANG: C++TASK: calfflac*/#include<stdio.h>#include<string.h>#include<math.h>int main(){freopen("calfflac.in","r",stdin);freopen("calfflac.ou

usaco 1.3 Barn Repair(贪心)

思路:用上M块木板时有 M-1 个间隙。目标是让总间隙最大。将相邻两个有牛的牛棚之间间隔的牛棚数排序,选取最大的M-1个作为间隙,其余地方用木板盖住。 做法: 1.若,板(M) 的数目大于或等于 牛棚中有牛的数目(C),则 目测 给每个牛牛发一个板就为最小的需求~ 2.否则,先对 牛牛们的门牌号排序,然后 用一个数组 blank[ ] 记录两门牌号之间的距离,然后 用数组 an

usaco 1.3 Mixing Milk (结构体排序 qsort) and hdu 2020(sort)

到了这题学会了结构体排序 于是回去修改了 1.2 milking cows 的算法~ 结构体排序核心: 1.结构体定义 struct Milk{int price;int milks;}milk[5000]; 2.自定义的比较函数,若返回值为正,qsort 函数判定a>b ;为负,a<b;为0,a==b; int milkcmp(const void *va,c

Mybatis 逆向生成工具mybatis-generator-core-1.3.2.jar的使用

mybatis-generator-core-1.3.2.jar用来生成我们的项目代码,今天分享一下,这个工具,神器之处,在于不仅仅生成dao,mapper还有service层,web层都可以根据数据库反射生成出来。上图 如图,使用mybatis,无非就用××××EntitySqlProvider或××××EntityMapper.xml两种形式书写sql语句,生成方法本文均提供 展开图

1.3 SQL注入之MYSQL系统库

一.系统库释义 提供了访问数据库元数据的方式 元数据是关于数据库的数据,如数据库名和表名,列的数据类型或访问权限。 1.information_schema 库:是信息数据库,其中保存着关于MySQL服务器所维护的所有其他数据库的信息; 例如数据库或表的名称,列的数据类型或访问权限。有时用于此信息的其他术语是数据字典和系统目录。web渗透过程中用途很大。 SCHEMATA 表:提供

Tomcat version 6.0 only supports J2EE 1.2, 1.3, 1.4, and Java EE 5 Web modules (

用eclipse开发web项目不能加载到tomcat6.0服务器,很是郁闷,后来在网上找到了解决办法。 同我前面的文章,地址:http://memory4bh.iteye.com/blog/2082721 通过修改Project facets配置,把web Module设置为3.0,则不能添加到tomcat 6中, 而且通过Project facets无法修改web MOdule。如下:在ecl

第一章 python数据结构和算法--1.3 保留最后 N 个元素

问题 在迭代操作或者其他操作的时候,怎样只保留最后有限几个元素的历史记录? 解决方案 使用 deque(maxlen=N) 构造函数会新建一个固定大小的队列。当新的元素加入并且这个队列已满的时候, 最老的元素会自动被移除掉。 代码示例: from collections import dequeq = deque(maxlen=3) q.append(1)q.append(2)

1.3自然语言的分布式表示-word2vec

文章目录 0基于计数的方法的问题1什么是基于推理的方法2神经网络中单词的表示2.1 MatMul 层的实现 3简单word2vec的实现3.1 CBOW模型的结构3.1.1神经元视角3.1.2层的视角3.1.3多层共享权重时存在的问题 3.2 CBOW模型的学习3.3单词的分布式表示 代码都位于:nlp;其他相关内容详见专栏:深度学习自然语言处理基础_骑着蜗牛环游深度学习世界的

DLT645电表数据 转IEC104项目案例

案例说明 设置网关采集DLT645电表数据数据把采集的数据转成IEC104协议转发给其他系统。 VFBOX网关工作原理 VFBOX网关是协议转换网关,是把一种协议转换成另外一种协议。网关可以采集西门子,欧姆龙,三菱,AB PLC,DLT645,DLT698电表,modbus rtu tcp,环保的HJ212协议,opc ua和opc da,电力的IEC103 IEC104, IE