当前位置: 首页 > news >正文

DLMS COSEM 数据对象 与 ASN.1 BER 编码 —— 详解一览

什么是 ASN.1?

ASN.1 编码是通信协议中非常重要的一种数据表示和传输方式,尤其在 DLMS/COSEM、SNMP、X.509、TLS 等标准中大量使用。

ASN.1 全称是 Abstract Syntax Notation One(抽象语法标记语言第一版)
它是一种描述数据结构的语言,不是编码方法,而是规范一种“数据结构的定义方式”。

✨ 类似 XML / JSON 是描述数据的格式,ASN.1 是更底层、适合机器传输的那种。


📦 什么是 ASN.1 编码?

ASN.1 编码定义了如何把 ASN.1 描述的结构转换为二进制格式传输

其中最常见的编码规则是:

编码规则全称特点
BERBasic Encoding Rules最常用、结构灵活,DLMS/COSEM 采用此格式
DERDistinguished ERBER 的简化版,应用于证书等(如 X.509)
PERPacked ER高压缩率,用于无线通信

🧪 ASN.1 BER 编码格式:TLV(三段式)

[TAG] [LENGTH] [VALUE]

各部分说明:

部分说明
TAG表示数据类型,如 INTEGER、STRING、SEQUENCE 等
LENGTH表示 VALUE 的长度,支持短格式(1字节)或长格式(多字节)
VALUE实际的数据内容(如数字、字符串、结构等)

🎯 常见 ASN.1 Tag 值示例

类型TAG (十六进制)含义
BOOLEAN01布尔值
INTEGER02整数
OCTET STRING04字节串(如密码、密钥等)
NULL05空值
OBJECT IDENTIFIER06对象标识符(协议ID等)
SEQUENCE30结构体封装(构造类型)

📘 示例:AARQ 报文中的 ASN.1 编码

30 1A 02 01 01 04 10 4D 4C 4D 00 00 00 00 01 23 45 67 89 AB CD EF

解码说明:

字节序列含义
30SEQUENCE
1A长度 26 字节
02 01 01INTEGER,值为 1
04 10 ...OCTET STRING,16 字节系统标题

📌 应用场景(DLMS/COSEM 相关)

场景使用 ASN.1 编码部分
AARQ / AARE 报文建立 AA,封装用户安全上下文
加密载荷 Ciphered Payload加密前的结构体需 ASN.1 封装
安全设置中定义认证机制使用 OBJECT IDENTIFIER 编码
注册协议(如 CIASE)包装注册结构体

✅ 特点总结

特点说明
灵活性高支持多种结构体嵌套
结构清晰易于层级封装,例如 SEQUENCE + 子字段
协议通用性强适用于各种通信协议,如 SNMP、TLS、DLMS
不易手工编写通常需工具(如 Wireshark、ASN.1 Viewer)辅助解析

🎯 总结:

ASN.1 是结构化的语言,BER 是它的“口语表达”。
它在 DLMS 中用于封装安全上下文和握手结构,和 COSEM 数据类型不一样,COSEM 更偏向具体的值,ASN.1 更偏向结构和权限表达。


什么是 COSEM 数据模型 ?

在 DLMS 协议中,COSEM 编码是一种用于表示设备数据模型(COSEM 对象模型)中数据的结构化编码方式。它主要用于封装数据内容,如对象属性值、方法参数和返回值等。

📚 1. 什么是 COSEM?

COSEM 全称是 Companion Specification for Energy Metering,是 DLMS 协议的核心组成部分,用于描述“电表或设备的数据模型”和“通信结构”。

COSEM 对象由:

  • OBIS(对象标识符)
  • 属性(如数值、电压等)
  • 方法(操作,如复位、设置等)组成。

🔧 2. 什么是 COSEM 编码?

COSEM 编码是指 DLMS 协议中使用的一套数据类型编码规则,用于对上述对象的数据进行序列化,供传输使用。它不是 ASN.1 的 BER 编码,但有相似的结构,是为电表通信量身定制的一种轻量级类型编码方案


🧩 3. COSEM 数据类型及编码规则(Tag-Based)

COSEM 使用 “类型 + 长度 + 值”的结构,类似 TLV(Tag-Length-Value),如下:

Tag(类型标记)类型名称示例用途
00NULL_DATA空值
01ARRAY数组(如多个表值)
02STRUCTURE结构体
03BOOLEANtrue/false
04BIT STRING位数据
09OCTET STRING字节串
0AVISIBLE STRING字符串(UTF8)
10INTEGER有符号整数
11LONG有符号 16 位整数
12UNSIGNED无符号 8 位整数
06DOUBLE LONG有符号 32 位整数
16LONG64有符号 64 位整数
17UNSIGNED64无符号 64 位整数
其他

🎯 COSEM 数据类型由 DLMS UA 1000-1 标准定义,用于编码对象属性数据等。


📦 4. COSEM 编码 vs ASN.1 编码:区别一览

特性COSEM 编码ASN.1 (BER) 编码
用途设备数据模型的数据表示安全结构(如 AARQ、AARE、认证)封装
编码结构轻量级 TLV(Tag + Len + Value)标准 TLV,支持复杂结构和类标记
编码复杂度简单,定制通用,结构化
是否可嵌套结构体支持结构体、数组更强结构表达(SEQUENCE, SET)
示例应用属性读取响应、设置请求、方法调用安全上下文、握手、注册信息等

🧪 5. 报文例子(COSEM 编码)

02 03 09 06 01 00 1F 07 00 FF   -- Octet String (OBIS)0F 00                    -- Integer: 012 01                    -- Unsigned: 1

解释:

Byte含义
02STRUCTURE 类型
03结构体含 3 个字段
09 06 ...第 1 个字段:Octet String,长度 6(OBIS)
0F 00第 2 个字段:Integer,值为 0
12 01第 3 个字段:Unsigned,值为 1

💡 总结一句话:

COSEM 编码 是 DLMS 协议中专用于编码电能表设备数据模型(如属性值、操作参数)的数据表示方式,以 TLV 格式封装各种基本数据类型,与 ASN.1 编码分别服务于数据层 vs 安全层。


DLMS COSEM 数据对象 与 ASN.1/BER

在 DLMS/COSEM 协议中,经常会遇到两种不同的编码规范:COSEM 数据类型编码ASN.1 BER 编码。这两者虽然在结构上都使用 TLV(Tag-Length-Value)格式,但它们的作用、使用场景、编码规则和数据类型编号都不一样。

🧩 一、COSEM 数据类型编码(也称 DLMS 数据类型

✅ 作用:

用于表示 COSEM 对象模型中的属性值或参数值,常见于:

  • GET/SET 请求与响应报文体
  • Action 请求参数
  • Profile Generic 的数据结构

📦 编码结构(TLV):

[Tag] [Length] [Value]

🏷 常见 Tag 值(数据类型):

数据类型Tag (Hex)示例说明
NULL00无值
ARRAY01用于封装一个数据项数组
STRUCTURE02用于封装结构体类型的数据
BOOLEAN03布尔值
INTEGER0F有符号整型(8位)
UNSIGNED11无符号整型(8位)
LONG10有符号整型(16位)
UNSIGNED LONG12无符号整型(16位)
OCTET STRING09字节序列
VISIBLE STRING0A可打印字符
BCD13二进制编码十进制
ENUM16枚举类型
LONG6414有符号整型(64位)

📍 应用场景:

  • DLMS 服务层:如 Get-Request, Set-Request, Action-Request 的数据体
  • Profile Generic 表格值
  • 普通读写数据交换

🧬 二、ASN.1 BER 编码(Basic Encoding Rules)

✅ 作用:

ASN.1 是一种描述数据结构的抽象语法,由 BER 进行具体编码。DLMS 用它在高层协议封装中描述 Application Association(AA)建立过程中的数据结构

📦 编码结构(TLV):

[Tag] [Length] [Value]

但它的 Tag 更加复杂(支持 Class + Primitive/Constructed + TagNumber)

🏷 常见 Tag 值(通用类):

ASN.1 数据类型Tag (Hex)类别示例用途
INTEGER02原始/通用各种标识、版本号等
OCTET STRING04原始/通用System Title、密码等
OBJECT IDENTIFIER06原始/通用协议标识符
SEQUENCE30构造/通用AARQ 报文中 user-info 包含结构
BOOLEAN01原始/通用表示 true/false

📍 应用场景:

  • Application Association(AA)建立过程:AARQ / AARE 报文
  • Security context 封装(如 ciphered payload)
  • 设备注册协议(CIASE)数据结构

🔍 三、如何快速区分这两种编码?

比较项COSEM 数据类型编码ASN.1 BER 编码
使用场景GET/SET/Action 交互数据AARQ/AARE、加密封装、注册协议等
编码标准DLMS UA 规范定义ISO 8825 BER
Tag 值特点多以 0x01~0x16 表示常见类型常见有 0x04, 0x06, 0x30
Tag 对应含义映射到 COSEM 类型映射到 ASN.1 数据结构
示例09 06 01 02 03 04 05 0604 06 01 02 03 04 05 06
是否支持结构嵌套是(Structure、Array)是(Sequence、Set)
是否常用于加密封装否(加密后体才用它)是(加密体、系统标题、认证码)

📌 补充示意图:协议使用栈

              +----------------------+| ASN.1 编码(AARQ)   | ← 安全上下文封装、系统标题、认证数据+----------------------+| COSEM/DLMS 应用层    | ← Get/Set/Action 请求结构+----------------------+| HDLC/Wrapper 层      | ← 报文传输、帧头帧尾+----------------------+

🧠 总结记忆口诀:

  • COSEM编码在“内容”层,表征属性的数据类型
  • ASN.1 编码在“封装”层,服务交互或加密用结构体

📦 DLMS 报文中 COSEM 编码 vs ASN.1 编码对比

📌 场景说明:

以下两个典型场景:

  1. 场景一(COSEM 编码):读取一个对象的属性,比如读取设备名称(Visible String)
  2. 场景二(ASN.1 编码):AARQ 报文中携带 System Title,用于安全上下文初始化

🧪 报文一:COSEM 数据类型编码(例如 GET Response)

09 0C 44 4C 4D 53 5F 44 45 56 49 43 45 5F 31

🔍 解码:

字节含义
09数据类型:Octet String
0C数据长度:12 字节
44...31数据内容:“DLMS_DEVICE_1”

使用场景:读取对象属性,比如设备名称、序列号等。
位置:DLMS 的 Get-Response-PDU 中的数据体。


🧪 报文二:ASN.1 BER 编码(例如 AARQ user-information)

04 10 4D 4C 4D 00 00 00 00 01 23 45 67 89 AB CD EF

🔍 解码:

字节含义
04ASN.1 数据类型:Octet String
10数据长度:16 字节
4D...EF内容:System Title,含制造商 ID + 唯一标识

使用场景:建立应用关联(AA),用于加密会话身份识别。
位置:AARQ APDU 中的 user-information 字段里。


🎯 图解对比

【COSEM 编码】
Get Response PDU:
+----------+-----------+------------------------+
|  Tag=09  | Length=0C | Value="DLMS_DEVICE_1" |
+----------+-----------+------------------------+【ASN.1 编码】
AARQ User Info:
+----------+-----------+------------------------+
|  Tag=04  | Length=10 | Value=System Title     |
+----------+-----------+------------------------+

🧠 总结对照表

项目COSEM 数据体编码ASN.1 BER 编码
编码标准DLMS UA 1000-1 Part 2ISO/IEC 8825 (BER)
使用场景属性值读写、参数传输应用层握手、注册、安全上下文
示例 Tag09 (Octet String)04 (Octet String)
示例长度与内容09 0C ...04 10 ...
是否表示结构体/对象是(Array/Structure)是(Sequence/Set)

区分 COSEM 数据类型编码ASN.1 BER 编码 是理解 DLMS 协议报文结构的关键。它们虽然都采用 TLV(Tag-Length-Value)格式,但应用场景、语义和 Tag 值完全不同。


✅ 一张表快速区分 COSEM 编码 vs ASN.1 编码

比较项COSEM 数据类型编码ASN.1 BER 编码
📌 使用位置报文的数据部分,用于传输对象属性值报文的封装头部/结构部分,如 AARQ/AARE
🔐 作用表达 DLMS 数据模型的具体值类型封装 AA 信息、安全上下文,进行结构化表达
📦 典型数据体Get-Response-DataSet-Request-With-DataAARQ, AARE, Security Payload
🏷 Tag 举例01(Array), 02(Structure), 09(Octet String)04(Octet String), 06(OID), 30(SEQUENCE)
📜 编码规范DLMS UA 1000-1 Part 2(DLMS定义)ASN.1 BER(ISO/IEC 8825)
🧠 解码思路值本身,表示实际对象的数据封装结构,表示"谁"、“怎么封装”、“结构层级”
🧪 Tag 识别规律多在 0x01 ~ 0x16 区间常见 0x040x060x300xA1
🚩 常见入口字段Get-Response-With-Data, Set-Request-With-DataAARQ, AARE, user-information
📚 是否结构化嵌套通过 STRUCTURE / ARRAY 实现通过 SEQUENCE / SET 实现
📌 常见字符串编码 tag0x09 = Octet String0x04 = Octet String

🔍 快速实战判断方法

✅ 看上下文:

  • 报文是 业务数据交互(Get/Set/Action)?→ COSEM 编码
  • 报文是 连接认证/握手/加密数据封装?→ ASN.1 编码

✅ 看字段位置:

  • 出现在 AARQ / AARE / AssociationRequest? → ASN.1
  • 出现在 GetResponseNormal 里面? → COSEM

✅ 看 Tag 值:

Tag 值可能代表属于哪个编码
0x09Octet StringCOSEM
0x04Octet String (ASN.1)ASN.1
0x30SEQUENCEASN.1
0x01ArrayCOSEM
0x02StructureCOSEM

🧪 示例对比

🟩 COSEM 示例

09 06 01 02 03 04 05 06
  • 09 = Octet String
  • 06 = 长度
  • 后续为 6 字节内容
    ✅ 表示读取了某个对象属性,COSEM 格式

🟦 ASN.1 示例

04 10 4D 4C 4D 00 00 00 00 01 23 45 67 89 AB CD EF
  • 04 = ASN.1 的 Octet String
  • 10 = 长度为 16 字节
    ✅ 表示 system title 封装在 AARQ 中,ASN.1 格式

🎯 总结口诀(超实用):

业务值交互用 COSEM,结构封装握手看 ASN.1;0x09 是 Octet,封装里看 0x04;Get/Set 是数据,AARQ 是握手。


在这里插入图片描述

相关文章:

  • 视觉/深度学习/机器学习相关面经总结(2)(持续更新)
  • 【C++ 类和数据抽象】消息处理示例(2)
  • 展销编辑器操作难度及优势分析​
  • 微博安卓版话题热度推荐算法与内容真实性分析
  • Linux CentOS 安装Python 3.8.0
  • 代数拓扑和黎曼几何有什么联系吗?
  • 贪心算法和动态规划
  • 服务器异地备份,服务器异地备份有哪些方法?
  • 如何识别DDoS攻击类型及有效防护?一篇简明指南
  • OA 系统如何做好 DDoS 防护?从架构设计到实战防御的完整方案
  • 【HPC存储性能测试】01-OpenMPI部署
  • 树状数组单点操作+前缀K差分->区间K操作 -#131-#132
  • npm、pnpm 和 yarn 包管理工具
  • SpringBoot常用注解解析汇总
  • 吴恩达深度学习作业之风格转移Neural Style Transfer (pytorch)
  • Python生活手册-元组:保险柜与瑞士军刀
  • 深度学习新趋势:利用MLP取代卷积层——S2-MLPv2模型解析
  • DBeaver连接人大金仓数据库
  • 2025年度规划八步法:日事清目标管理+使命愿景模型驱动组织架构优化与业务流程升级
  • 虚拟列表+无限滚动的实现
  • 跨海论汉|专访白馥兰:对中国农业史的兴趣,从翻译《齐民要术》开始
  • 稳就业稳经济五方面若干举措将成熟一项出台一项
  • 利物浦提前四轮英超夺冠,顶级联赛冠军数追平曼联
  • 仲裁法修订草案二审稿拟增加规定规制虚假仲裁
  • 学大教育:去年净利润1.797亿元,学习中心增加约60所
  • 中宣部版权管理局:微短剧出海面临版权交易不畅、海外维权较难等难题