1. DLT645协议解析

(一)初识 DLT645协议      

       DLT645协议是一种国内电表远传协议,与Modbus协议类似,采用请求应答式交互模型,采集器和电表一问一答进行通信,电气层可以是经典的RS485有线通信,也可以是非接触式红外无线通信。

       非接触式红外读表方式最为常见,它的特点是易于工程实施,电表、计量柜不需要停电接线,将支持DLT645标准的红外读表器放置在电表前方就可以读到电表电量、电压、电流、功率等数据。本篇文章主要是初步认识DLT645,后面几篇文章会介绍新科TH076红外读表器和DLT645协议数据帧的详细解析。


         DLT645是国内电力行业通信标准,国网南网的表基本都支持,距今为止有两个版本,DL/T645-1997协议和DL/T645-2007协议,以下简称97协议和07协议,两者帧结构类似,新出厂的表具都会支持07协议,电表厂商为了向前兼容,支持07的表,会同时支持97协议,用两种协议都可以进行通信。

        下图展示的是DLT645-2007协议读取电表电量的交互过程,数据请求帧里面请求的数据类型是当前正向有功电量。


             PC请求帧:   68 AA AA AA AA AA AA 68 11 04 33 33 34 33 AE 16

             电表应答帧: 68 01 72 00 72 00 00 68 91 08 33 33 34 33 33 33 33 33 E7 16

        数据请求帧和应答帧都以十六进制68开头,以16结尾,本节文章主要是初步认识DL/T645协议,具体数据帧字段构成和解析,将会在下篇文章载出。        

        支持DLT645协议的表,会在表盘位置写明DL/T645-2007或者1997的字样,有少数表会表DLT614,614协议是645协议的超集。

        支持645协议的表,表盘上会有明显位置放置红外收发窗口,一般是一个椭圆形窗口,内部有一个发送报文的红外发光二极管和一个接收报文的38K一体化红外接收头。

        DLT645协议其实规定了两种红外通信方式,调制型通信和非调制型红外(另一种说法叫做近红外,其实两种红外的波长都一样,都是940nm),电表厂商一般都会采用调制型红外,采用37.9k红外调制信号收发信号,调制型会比非调试型的光电耦合传输更方便,有更高的抗干扰性和通信距离。

        贴几张平时调试时候留下的图,覆盖了几个主要电表厂商,有科陆、华立、浩宁达,赫美、安科瑞、凤凰仪表、深宝电等,大家先认识下,注意看2个表盘特征:

        1)表盘DLT645字样

        2)表盘红外收发串口

电表和读表器 

(二)DLT645-2007协议数据帧结构解析        

        书接上回,下图展示的是DLT645-2007协议读取电表电量的交互过程,数据请求帧里面请求的数据类型是当前正向有功电量。

串口助手通过TH076红外读表器连接电表
            PC请求帧:   68 AA AA AA AA AA AA 68 11 04 33 33 34 33 AE 16

          电表应答帧:  FE FE 68 72 00 32 09 17 20 68 91 08 33 33 34 33 B9 34 33 33 6D 16

        PC请求帧是广播请求当前正向有功电能的DTL646-2007协议数据帧,我们暂时跳过它,首先分析它的应答帧。DLT645-2007协议规定了数据帧结构,如下图:

DLT645-2007帧结构
 根据帧结构定义,我们分析出应答帧是电表回复的正向有功电能数据,由固定前导码FE、固定68帧头、表地址、控制码、数据长度、数据类型、校验、帧尾组成,下面将对数据帧不同字段进行着色,方便展示。

                        

        其中红色部分数据为固定值,FE FE为前导码,用于发送方让接收方提前准备好接收数据,不同厂家不同型号的表前导码FE的个数是不同的,还有些厂家不会发送前导码FE,我们解析接收数据的一般方法是忽略前面N个FE,寻找数据帧中的68帧头作为一帧的起始位置,下面我们进行解析。


解析表号:

        从第一个68开始到第二个68之间的绿色数据为表号字段,在DLT645协议中规定,表号字段,数据字段都是逆序的,也就是与实际表号循序相反,我们要得到实际表号,需要反转数据帧中的表号字段 72 00 32 09 17 20,反转后我们得到:20 17 09 32 00 72,对比实际表号,确认解析正确。

面板表号

解析控制码:
      

        应答帧中紫色1字节数据91为帧控制码,它表示本数据帧的帧类型,我们可以根据这个字节判断识别是07还是97协议,也可以通过此字节判断是请求帧还是应答帧,DLT645-2007协议定义如下:

控制码位定义
        解析控制码,我们需要将十六进制的控制码 91 转换成二进制数据 10010001,高位的1对应上图控制码中的D7位,我们将转换后二进制数据一一对应到上图中,得出 91 的含义为主站发送的读数据应答帧,从站正确应答,且无后续数据帧。


解析数据段长度:
          

        应答帧中黑色1字节数据 08 为数据段长度,它表示从本帧数据中数据段的长度,也就是从长度字节 08 之后有多少个字节是数据段。本帧中长度字段为 08,表示数据段长度为8字节,我们可以据此,将数据段截取出来,即:

                                            


解析数据段的数据项标识:

                  

        应答帧中黄色和蓝牙部分数据为数据段,数据段分为两部分,数据项标识部分和数值部分。数据像标识部分为黄色部分 33 33 34 33 ,它也是逆序传输的,且需要统一逐个减去十六进制0x33后才是真实值,步骤如下:

第一步:减去十六进制0x33

                                            33 33 34 33    -------减33------->  00 00 01 00

第二步:四个字节反转顺序

                                            00 00 01 00   -------反转------->  00 01 00 00

        得到数据项标识 00 01 00 00,查询DLT645-2007协议,可以知道,00 01 00 00 标识当前正向有功总电能,即我们常用的电量值。

DLT645协议数据标识定义
tips:减0x33计算可用windows计算器完成,记得切换到程序员十六进制下。

windows计算器


解析电量:
  

        应答帧中蓝色部分数据是当前正向有功电能,也就是我们常用的电量,同样的,它也是逆序传输的,且需要统一逐个减去十六进制0x33后才是真实值,下面我们对 B9 34 33 33 进行三步处理:

第一步:减去十六进制0x33

                                           B9 34 33 33   --------减33-------->  86 01 00 00

第二步:四个字节反转顺序

                                           86 01 00 00   --------反转-------->  00 00 01 86

第三步:在指定位置加入小数点

                                           00 00 01 86   ------加小数点----->  00 00 01.86

三步骤完成得出当前电量为1.86kW.h,对比电表实际示数,发现计算正确,下图是实际电表👇

实际值
            第三步中的小数点位置在DL645协议中由规定,查询得知,它的固定格式为: XXXXXX.XX   不同类型的数据项小数点格式不同,解析其他数据项时,应根据协议规定套用不同数据格式。

数据格式定义

解析和计算校验和:
 

        通信校验是很重要,但是DLT645只有一个字节的简单校验和,即接收帧中紫色6D,他固定为倒数第二字节,它的值是它前面从第一个68起始符开始到最后一字节数据段的单字节累加和(单字节累加,忽略溢出),如下图删除线指示的累加范围:

    

计算方式是十六进制加法:

                68+72+00+32+09+17+20+68+91+08+33+33+34+33+B9+34+33+33=46D

        计算结果为十六进制的46D,超出一个字节的高位溢出部分我们忽略,也就是忽略高位4,最后计算出的校验和为6D,经过对比我们收到的校验码也是6D,校验通过。

 

DLT645协议解析器及modbus CRC和DLT CS校验码计算,支持两种输入格式,带空格和不带空格。默认需要安装微软VS2012发布包。 比如输入FE FE FE FE 68 AA AA AA AA AA AA 68 13 00 DF 16,解析出结果如下: [11-05 08:39:58:676] 输入数据: FE FE FE FE 68 AA AA AA AA AA AA 68 13 00 DF 16 [11-05 08:39:58:681] 类型=上1结算日C相反向有功电能 [11-05 08:39:58:685] 类型值=76 [11-05 08:39:58:689] 获取结果= 0.00 另外可按键获取如下CRC [11-05 08:39:58:697] *********************************************** [11-05 08:40:08:268] 输入数据:FE FE FE FE 68 AA AA AA AA AA AA 68 13 00 DF 16 [11-05 08:40:08:276] DLT645 CRC=0xCC [11-05 08:40:08:283] *********************************************** [11-05 08:40:10:813] 输入数据:FE FE FE FE 68 AA AA AA AA AA AA 68 13 00 DF 16 [11-05 08:40:10:821] CRC(Modbus)=0x6FE5 [HIGH LOW]=[6F E5] [11-05 09:05:30:239] 输入数据: 68 30 65 00 00 00 00 68 11 04 33 33 33 33 46 16 [11-05 09:05:30:247] 类型=当前组合有功总电能 [11-05 09:05:30:254] 类型值=1 [11-05 09:05:30:264] 获取结果= 0.00 [11-05 09:06:25:098] 输入数据: 68 29 65 00 00 00 00 68 91 08 35 36 36 33 C9 CC 36 33 C9 16 [11-05 09:06:25:112] 类型=上2结算日组合无功1费率3电能 [11-05 09:06:25:127] 类型值=11 [11-05 09:06:25:142] 获取结果=399.96 [11-05 09:33:10:453] 输入数据: FE FE FE FE 68 29 65 00 00 00 00 68 11 04 35 35 34 33 44 16 [11-05 09:33:10:460] 类型=上2结算日正向有功费率2电能 [11-05 09:33:10:467] 类型值=5 [11-05 09:33:10:476] 获取结果= 0.00 [11-05 09:33:10:484] *********************************************** [11-05 09:33:32:065] 输入数据: FEFEFEFE68296500000000681104353534334416 [11-05 09:33:32:074] 类型=上2结算日正向有功费率2电能 [11-05 09:33:32:086] 类型值=5 [11-05 09:33:32:097] 获取结果= 0.00
<think>好的,我现在需要帮用户介绍645通讯协议。首先,我得回忆一下这个协议的相关知识,可能涉及电行业的电表通信标准。 用户可能想了解645协议的基本信息,比如它的应用领域、版本区别、物理层和链路层的特性,还有数据帧结构。需要分点说明,结构清晰。另外,用户可能需要知道这个协议与其他协议(如DL/T 645-1997和2007版本)的区别,以及实际应用中的注意事项。 首先,我应该确认645协议的全称,可能是指DL/T 645,是中国电行业的标准。然后,版本方面确实有1997和2007两个版本,需要提到它们的区别,比如数据格式、功能扩展等。 接下来,物理层通常使用RS-485,这点需要明确。链路层的帧结构包括起始符、地址域、控制码、数据长度、数据域、校验码和结束符。每个部分的具体内容需要详细说明,例如地址域是12位BCD码,控制码区分请求和响应,数据长度是HEX,校验码是纵向冗余校验(LRC)或CRC,根据版本来定。 然后,数据域部分可能包含各种数据标识,比如当前电压、电流等,这些数据项的格式需要解释,比如BCD码或者浮点数。此外,功能码的应用,如读数据、写地址、广播校时等,都是关键点。 安全性方面,2007版本增加了密码保护,这点需要强调。同时,实际应用中需要注意波特率设置、地址配置、数据格式的正确性,以及校验机制的使用,这些都是常见的问题点。 最后,可能需要比较一下其他协议,比如Modbus,说明645协议的特点和适用场景。不过用户没有特别提到,所以可能不需要展开,但可以简要提及。 需要确保回答准确,结构清晰,分点列出,并且使用正确的中文术语。同时,要避免技术错误,比如校验方式在2007版本中的变化,以及数据格式的具体例子,如数据标识04000401代表当前电压。 现在整理这些信息,按照用户要求的格式,使用中文回答,分步骤解释,确保每个部分都明确,并符合系统级指令中的格式要求,比如数学公式用$...$,独立公式用$$...$$,但在这个问题中可能涉及的数学内容不多,但如果有的话要注意格式。例如,校验码的计算可能涉及公式,但可能不需要深入数学细节,所以可能不需要用LaTeX,但如果有的话要正确应用。 总结下来,回答的结构应该是:概述、版本演进、物理层特性、数据帧结构详解、数据域格式、功能码举例、安全性、应用注意事项,最后总结。需要确保每个部分简明扼要,帮助用户逐步理解645协议的关键点。</think>以下是关于DL/T 645通讯协议的详细介绍,分步骤说明其核心内容: --- ### **1. 协议概述** DL/T 645是中国电行业标准《多功能电能表通信协议》的简称,主要用于电能表与数据终端(如集中器、抄表设备)之间的数据传输。它定义了物理层、数据链路层和应用层的规范。 --- ### **2. 版本演进** - **DL/T 645-1997** 早期版本,支持基本数据读取(如电量、电压、电流)。 - **DL/T 645-2007** 升级版本,新增功能: - 支持更多数据类型(需量、事件记录等) - 增加数据安全机制(密码保护) - 优化数据帧格式 --- ### **3. 物理层特性** - **传输介质**:RS-485总线(差分信号,抗干扰强) - **通信速率**:默认2400bps,可配置为1200/4800/9600bps - **拓扑结构**:总线型,最大节点数≤32 --- ### **4. 数据帧结构(以2007版为例)** 一个完整的数据帧格式如下: ``` | 起始符 | 地址域 | 控制码 | 数据长度 | 数据域 | 校验码 | 结束符 | ``` - **起始符/结束符**:固定为`0x68` - **地址域**:12字节(电表地址,BCD码格式,如`123456789012`) - **控制码**:1字节,区分请求类型(读/写)和响应方向 - 示例:`0x11`表示主站读数据请求 - **数据长度**:1字节(HEX格式,表示数据域字节数) - **数据域**:可变长度,包含具体指令或数据(见下文) - **校验码**:1字节,2007版使用**CRC16**校验(1997版用LRC校验) --- ### **5. 数据域格式** 数据域由**数据标识**和**数据内容**组成: - **数据标识**:4字节(如`0x00 0x00 0x04 0x00`表示当前电压) - **数据内容**:BCD码或浮点数,例如: - 电压值`220.5V`可能编码为`0x22 0x05`(需参考协议手册) --- ### **6. 功能码举例** | 控制码 | 功能说明 | |--------|---------------------------| | 0x11 | 主站读数据请求 | | 0x91 | 从站正常响应读数据 | | 0x14 | 写设备地址 | | 0x1A | 广播校时 | --- ### **7. 安全性增强(2007版)** - **密码保护**:写操作需验证4字节密码 - **数据加密**:可选DES加密(需协商密钥) --- ### **8. 实际应用注意事项** 1. **地址配置**:确保电表地址与指令匹配(12位BCD码) 2. **波特率同步**:主从设备需设置相同波特率 3. **校验机制**:2007版必须使用CRC16校验 4. **数据解析**:注意数据域的编码格式(如高低字节顺序) --- ### **9. 与其他协议对比** - **与Modbus区别**: - 645协议专用于电表,Modbus为通用工业协议 - 645地址域更长,支持更多设备唯一标识 - **与IEC 62056区别**: - IEC 62056为国际标准,645为中国本土优化版本 --- ### **总结** DL/T 645协议是电行业电能表通信的核心标准,其2007版在数据安全性和功能扩展上显著改进。实际应用中需严格遵循帧格式和校验规则,以确保通信可靠性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值