☰
DMLS协议中文手册:DLMS/IEC62056三层模型与HDLC帧解析
2026/11/4 13:08:17 网站建设 项目流程

简介:DMLS(DLMS)协议中文版是一份面向电能量数据采集终端开发、电能表通信调试及计量自动化相关技术人员的中文协议手册,重点解决与遵循IEC62056/DLMS协议族电能表进行数据交互时的协议理解与实现参考问题。资料共1个doc文档,压缩包约620KB,篇幅集中,便于在开发联调时随查随用。内容从三层协议模型展开,依次梳理物理层的端口操作、基于HDLC的链路层地址校验与CRC校验、拆包组包机制,以及应用层中ASN.1语法、BER与AXDR编码、AARQ/AARE连接帧和请求数据过程;并结合请求电量、瞬时量(电压、电流、功率)、负荷曲线与时间等实例报文,说明报文组织方式与字段含义。目前已有873人学习,适合需要快速建立DLMS协议整体框架、核对应用层编码细节或排查采集通信问题的工程人员参考。

1. DMLS 协议中文手册到底解决什么问题:从三层模型和一次抄表说起

第一次拿到“DMLS 协议中文版”这个文件名,我以为是另一个私有规约;翻开才发现正文讲的是 DLMS/IEC62056 协议族,文件名里的 DMLS 是沿用的旧写法。这份手册面向电能量采集终端与电能表之间的通讯,把物理层、HDLC 链路层、应用层、ASN.1/BER/AXDR 编码以及电量、瞬时量、负荷曲线、时间四类请求实例串成了一条线。

适合正在做采集器、集中器、电表协议对接的工程师,也适合刚接触 0x7e 帧和 AARQ/AARE 的新手。它不是完整标准译文,而是把常见场景和抓包字段拆开讲的手册,遇到组帧、地址、帧计数卡住时,翻对应章节比盲搜快。

2. 协议栈拆到HDLC帧:三层边界、0x7e帧头与四字节地址怎么核对

DLMS 的三层模型看起来简单:物理层负责端口,链路层用 HDLC 保证可靠传输,应用层用 ASN.1 描述对象和请求。真正落到采集终端上,卡人的往往不是“懂不懂三层”,而是拿到一串十六进制报文后,不知道从哪一位开始核对。手册把通讯双方定成 Client-Server:采集器是 Client,电表是 Server,建链、请求、释放都按这个角色走。先把这个角色关系钉死,再看帧头、地址和控制字,排错顺序会清楚很多。

2.1 物理层别急着写代码:先确认端口与超时边界

物理层在手册里没有被展开成驱动细节,原因很实际:嵌入式系统里这一层通常由底层驱动完成,协议栈只关心打开端口、初始化、收发字节、关闭端口这几个动作。采集终端可能走串行通道,也可能走拨号模块,物理介质不同,但上层看到的是一段连续字节流。落地时先把端口参数固定下来:波特率、数据位、停止位、校验位、流控,以及一帧结束后的等待时间。很多“协议不通”其实是串口参数和超时边界没对齐,帧本身没有错。

我一般会做一张最小核对表:端口能打开、能收到 0x7e、发送后能看到回帧、超时时间大于电表最慢响应。超时不要照抄抓包工具的默认值,负荷曲线请求会拆成多帧,电表在两次响应之间可能停顿。把超时设得太短,Client 会在长帧还没收完时发下一帧,现象像“server 不回”,实际是对话节奏乱了。物理层不要求你改驱动,但要求你把“字节流是否连续”这件事确认掉。

提示:先确认端口能稳定收到 0x7e 帧边界,再去看地址和帧计数;边界都不对,后面全是无效劳动。

2.2 HDLC帧的字段顺序:0x7e、A0 21、地址域、控制字与FCS

手册把 HDLC 帧拆成固定顺序:0x7e 开头,帧类型与帧长,目的地址域,源地址域,控制域,可选帧头校验,可选 LLC 帧头,用户数据,帧校验,0x7e 结尾。不含应用层数据时没有帧头校验和 LLC 帧头;包含应用层数据时,帧头也要加 CRC,用户数据前加 LLC 帧头。Client 发往 Server 的 LLC 帧头是 0xe6、0xe6、0x00,Server 回给 Client 的是 0xe6、0xe7、0x00。这三个字节不参与对象定位,但抓包时能帮你快速判断方向。

帧类型与帧长字段占两个字节。手册明确 DLMS 使用 Frame Type 3,也就是高四位为 A;S 位表示该帧是否被分割;帧长以字节为单位,不包括两个 0x7e。以手册里的 SNRM 示例开头7e a0 21为例,0xa0 的高四位是 A,S 位为 0,长度低八位是 0x21,合起来是 33 字节。这个 33 是去掉两个 0x7e 之后的长度,核对时不要把它当成整段抓包长度。

字段作用核对要点
0x7e帧边界成对出现,拆帧时先按它切
帧类型与帧长类型、S位、长度高四位为 A,长度不含 0x7e
目的地址域接收方地址Client 发时填 Server 地址
源地址域发送方地址Client 地址通常一字节
控制域帧计数、P/F 位RRR/SSS 与帧类型要匹配
帧头校验对帧头做 CRC有应用数据时才出现
LLC 帧头标识方向Client 发 e6 e6 00,Server 回 e6 e7 00
用户数据应用层 PDU默认最大 128 字节
帧校验对整帧做 CRC16按标准附录实现

控制字里的 RRR 是接收帧计数,SSS 是发送帧计数。手册给了计数变化:链路建立后第一次请求,Client 发 AARQ 时 RRR=0、SSS=0;Server 回响应时 RRR=1、SSS=0;Client 再请求时 RRR 加 1、SSS 加 1,Server 回响应再各自加 1。这个计数不是装饰,错一位就可能被对端当成重复帧或失序帧。抓包时把每一帧的 RRR/SSS 抄出来,画成两列,比盯着整段十六进制看要快。

2.3 扩展编址与四字节server地址:为什么一字节地址经常不通

HDLC 使用扩展编址:地址字节最低位为 0,表示后面还有地址字节;最低位为 1,表示地址域结束。Client 地址永远是一个字节,最低位置 1,所以可用的 Client 地址只有 128 个。Server 地址分成 upper HDLC address 和 lower HDLC address,upper 表示逻辑地址,lower 表示物理地址;upper 总是要有,lower 在确认不需要时可以不出。手册列了三种 Server 地址结构:一字节只出现 upper,两字节出现 upper 和 lower 各一字节,四字节出现 upper 和 lower 各两字节。

这里有一个很容易翻车的点:手册提到某型号电表实测只有四字节 Server 地址结构可用。也就是说,抓包里看到00 22 00 23这样的目的地址域,不要自作主张缩成一字节或两字节去试。地址长度不对,Server 可能连 UA 都不回,或者回了 DM。排查时先看目的地址域和源地址域的边界位,再看地址内容,不要只看“像不像地址”。

地址结构出现内容适用场景
一字节只有 upper地址空间简单的设备
两字节upper 一字节 + lower 一字节需要区分逻辑与物理地址
四字节upper 两字节 + lower 两字节手册中某型号电表实测可用
特殊地址广播等保留地址按标准定义使用,不要猜

2.4 SNRM/UA建链与DISC/DM断链:链路参数在UA里看什么

建立链路层连接靠 Client 发 SNRM,Server 回 UA 表示建立,回 DM 表示链路断开。UA 里常带链路参数:WINDOW_SIZE 描述一次可发送的数据帧数目,MAXIMUM_INFORMATION_FIELD_LENGTH 描述一帧中用户数据的最大长度。默认值是 WINDOW_SIZE=1、MAXIMUM_INFORMATION_FIELD_LENGTH=128 字节。SNRM 里的参数标识和长度要按手册示例排:0x05 是发送最大信息域长度,0x06 是接收最大信息域长度,0x07 是发送窗口,0x08 是接收窗口。每个参数后面跟长度和值,值可能是 1 字节,也可能是 4 字节,

本文还有配套的精品资源,点击获取

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询