DLMS/COSEM 蓝皮书解读(二十六):Auto connect(class_id = 29)—— 自动拨号与主动连接(出站管理)

DLMS/COSEM 蓝皮书解读(二十六):Auto connect(class_id = 29)------ 自动拨号与主动连接(出站管理)

系列说明 :本系列基于 DLMS UA《Blue Book(蓝皮书)第 16 版 · 第 2 部分》,一个接口类一篇。第 25 篇讲了 Auto answer(class_id = 28),管的是"入站(谁来叫我)"。本篇的 Auto connect(class_id = 29)是它对称的"出站"那一半------解决"设备何时主动拨号/发短信/发邮件、重试几次、在哪些时间窗口、连哪些目的地址"。
上篇回顾 :第 25 篇把"入站来电管家"配好了(监听窗口 + 振铃 + 白名单)。但很多场景是设备主动外呼 回传------比如每天定时拨主站、告警时立即拨、或 GPRS 常在线。本篇 Auto connect 就是这块"出站调度器",并且是这三个 Modem 类里唯一带 ACTION 方法 的(connect)。


0. 为什么需要这个类

入站是"等电话",出站是"打电话"。出站要回答:

  • 什么时候打 ?→ mode(随时 / 仅在 calling_window 内 / 告警随时 / 常连接...)+ calling_window;
  • 打几次、失败等多久 ?→ repetitions + repetition_delay;
  • 打给谁 ?→ destination_list(电话号码 / 邮件 / 组合);
  • 怎么打 ?→ mode 还区分 CSD 拨号、SMS、邮件、分组交换(GPRS)等基础设施。

蓝皮书原文(v2, Overview):"In version 2 new capabilities are added to model the connection of the device to a communication network. Network connection may be permanent, within a time window or on invocation of the connect method."

即 v2 把"连接形态"从"拨号"扩展到了"永久连接 / 窗口内连接 / 按需 connect"三种,覆盖 GPRS 常在线场景。

改名史:v0 原名 PSTN auto dial,Edition 2 改为 Auto connect(v0 Overview NOTE:"The name of this IC was changed to 'Auto connect' in Edition 2.")。


1. 类蓝图

三个版本属性结构一致 (v1 是消息发送建模、v2 加了分组交换常连接,mode 取值扩展)。唯一的方法 connect (data) 在 v2 出现(v0/v1 的 Specific methods 栏原文未列方法,仅 v2 列出 connect (data) o x + 0x30)。

复制代码
Auto connect    0...n    class_id = 29, version = 0 / 1 / 2
属性 静态/动态 数据类型 Min Max Def Short name
logical_name static octet-string x
mode static enum x + 0x08
repetitions static unsigned x + 0x10
repetition_delay static long-unsigned x + 0x18
calling_window static array x + 0x20
destination_list static array x + 0x28
方法 必选/可选(m/o) Short name
connect (data) o(可选) x + 0x30

2. 属性逐条解读

2.1 logical_name

标识实例,static,基址 x。

2.2 mode

控制自动连接的时机、消息类型与基础设施 。static,enum,短名 x + 0x08。

v2 的完整 enum(原文逐项):

enum 值 含义
(0) no auto connect;设备永不直接连
(1) auto dialling allowed anytime(忽略 calling_window)
(2) auto dialling allowed within the validity time of the calling_window
(3) "regular" auto dialling within calling_window;"alarm" initiated auto dialling anytime
(4) SMS sending via PLMN(公共陆地移动网)
(5) SMS sending via PSTN
(6) email sending
(7)--(99) reserved
(100) 永久连接通信网络
(101) 窗口内永久连接;窗口外断开,窗口外不可连
(102) 窗口内永久连接;窗口外断开,但 connect 方法调用即连
(103) 通常断开;connect 方法调用即连
(104) (分组交换,详见下)
(105)--(199) reserved
(200)--(255) manufacturer specific modes

蓝皮书原文分组说明:

"Modes (1) to (3) are dedicated to CSD services."

"Modes (4) to (6) are dedicated to sending specific messages using a specific infrastructure."

"Modes (101) to (104) apply to packet switched network connections only (e.g. GPRS)."

注意 mode (100)--(103) 是分组交换(GPRS 等)专属:100=永久在线;101=仅窗口内在线;102=窗口内在线、窗口外可经 connect 唤醒;103=平时断开、connect 才连。这正是 v2 相对 v0/v1 最大的新增能力------把"拨号"升级为"分组网络常连接管理"。

诚实呈现:v0 的 mode 只有 (0)/(1)/(2)/(3)/(200--255)(原名 PSTN auto dial,无 SMS/邮件/分组交换);v1 加了 (4)/(5)/(6)(SMS/邮件);v2 再加 (100)--(104)(分组交换)。各版 mode 范围不同,解析按 version 分支。

2.3 repetitions

连接失败的最大重试次数 。static,unsigned,短名 x + 0x10。

蓝皮书原文:"The maximum number of retries in case of unsuccessful connection attempts."

2.4 repetition_delay

失败重连的延时(秒) 。static,long-unsigned,短名 x + 0x18。

蓝皮书原文:"The time delay, expressed in seconds until an unsuccessful connection attempt can be repeated. repetition_delay = 0 means delay is not specified"

即 0 = 不指定延时。

2.5 calling_window

连接窗口 :active 起止时间,start_time 隐式定义周期。static,array,元素 window_element ::= structure { start_time: octet-string, end_time: octet-string },短名 x + 0x20,按 date-time 格式。

蓝皮书原文 EXAMPLE(v2):"When the day of month is not specified (equal to 0xFF) this means that the calling window is managed on a daily basis."

2.6 destination_list

目的地址列表 (电话号码 / 邮件 / 组合),满足条件时发往这些目的地;条件与数组元素的对应关系原文不在此定义 。static,array,元素 destination ::= octet-string,短名 x + 0x28。

蓝皮书原文(v2, destination_list):"Contains the list of destinations (for example phone numbers, email addresses or their combinations) where the message(s) have to be sent under certain conditions. The conditions and their link to the elements of the array are not defined here."
改名差异:v0 该属性叫 phone_list(元素 phone_number ::= octet-string);v1/v2 改名为 destination_list(元素 destination),语义一致、名字更泛(因支持短信/邮件)。


3. 方法:connect (data)

这是三个 Modem 类里唯一的方法 ,且为可选(o) 。仅 v2 的属性表列出(Short name x + 0x30)。

蓝皮书原文(v2, connect):

"Initiates the connection process to the communication network according to the rules defined via the mode attribute."

"data ::= integer (0)"

即 connect 按 mode 的规则触发一次连接过程;入参 data 是 integer,且取值固定为 0(占位/保留)。典型用途:mode=(102)/(103) 下,平时不连接,主站或设备事件调用 connect 才拉起网络。

注:v0/v1 的原文 Specific methods 栏为空(未列出方法),故严格按原文------方法 connect 在 v2 才明确出现。v0/v1 设备若需"按需连接",靠 mode 设定 + 底层触发,未必暴露 connect 方法。


4. 【实战举例】

示例 1:每天定时拨号回传(v2,mode=2)

(以下取值为示例,非蓝皮书原文)

属性 取值
logical_name 0-0:2.2.0.255
mode (2) 窗口内允许自动拨号
calling_window [{start="每日 23:00", end="每日 23:30"}](日字段 0xFF)
repetitions 3
repetition_delay 60(秒)
destination_list ["+994193500"]

含义:每天 23:00--23:30 窗口内,设备自动拨 +994193500 回传;失败最多重试 3 次、每次间隔 60 秒。

示例 2:GPRS 常在线但窗口外仅按需(mode=102)

mode=(102):窗口内永久连接;窗口外断开,但 connect 方法一调就连。适合"平时省电、告警时立即上线"------告警事件触发 ACTION connect(0),设备立刻拉起 GPRS。

connect 的 ACTION 请求(parameter data = integer(0)):

复制代码
00 00        (示例:integer 标签 0x00?此处以 integer 标签 0x10/16 为例,值 0)

编码提示:integer 在 A-XDR 标签为 0x10(16)、1 字节值 0 → 10 01 00(示例,实际标签以设备为准)。

示例 3:SN 短名访问

base name x:mode=x+0x08,repetitions=x+0x10,repetition_delay=x+0x18,calling_window=x+0x20,destination_list=x+0x28,connect=x+0x30。

示例 4:v0 → v2 迁移

  • v0 叫 PSTN auto dial,属性 phone_list;v2 改名 destination_list(更泛);
  • 想用 GPRS 常连接,必须 v2 + mode 100--103;
  • 想暴露 connect 方法,必须 v2;
  • v0/v1 mode 不含短信/邮件/分组交换,升级时重设 mode 范围。

示例 5:calling_window 的完整 A-XDR 编码

把示例 1 的窗口 [{start="每日 23:00", end="每日 23:30"}] 编码(以下字节为示例,date-time 标签以 0x13/19 为例,实际以设备为准):

复制代码
01 01                      array,1 个窗口
  02 12                    structure,18 字节
    13 07 FF FF FF FF 23 00 00   start_time = date-time(日字段 0xFF 表"每日")
    13 07 FF FF FF FF 23 30 00   end_time   = date-time

要点:calling_window 是 window_element 的 array ,每个元素 structure{start_time, end_time} 都是 octet-string(date-time 格式)。Auto answer(28) 的 listening_window 结构完全一致,可复用同一套解析。

示例 6:GPRS 常连接四档(mode 100--103)速查

(以下为原文 mode 语义归纳,非蓝皮书原文步骤)

mode 窗口内 窗口外 典型用途
(100) 永久在线 也在线(忽略窗口) 实时性要求极高、不计流量
(101) 永久在线 断开且不可连 仅窗口内在线,省电
(102) 永久在线 断开,但 connect 可唤醒 窗口内在线 + 告警按需上线
(103) 平时断开 connect 才连 极省电,全靠事件触发

选择口诀:要实时选 100;要省电选 101;省电但允许告警唤醒选 102;纯事件驱动选 103。

示例 7:connect 方法的调用(v2 特有)

mode=(102)/(103) 下,平时不连接。告警事件或主站 ACTION 触发:

复制代码
ACTION connect
  parameter: data = integer(0)

设备按 mode 规则拉起分组网络连接(如 GPRS 附着、PDP 激活)。参数 data 固定为 integer(0)(原文定义),不要传非零值。

示例 8:SMS / 邮件发送(mode 4/5/6)的消息流

(以下为原文 mode 语义归纳,非蓝皮书原文步骤)

  • mode=(4) SMS via PLMN :经蜂窝网发短信。设备把待发内容(经 destination_list 里的号码)通过 PLMN 短信中心发出;适合小数据量告警/心跳。
  • mode=(5) SMS via PSTN:经 PSTN 发短信(短信网关走固网)。
  • mode=(6) email:发邮件(destination 里是邮件地址)。

共同点:都是"发消息 "而非"建连接会话",所以没有 xDLMS 会话开销,适合低带宽/低功耗回传小报文。与 mode 1--3(CSD 拨号建会话)本质不同------CSD 是要建一条可跑 xDLMS 的链路,短信/邮件只是把报文扔出去。

提醒:destination_list 的"哪个条件触发发给哪个目的地"蓝皮书不定义,由设备约定;SMS/邮件内容格式也由应用层定,DLMS 不管。


5. 工程上容易踩的坑

  1. mode 取值随版本扩展:v0 只有 0--3(+厂商);v1 加 4--6;v2 加 100--103(分组交换)。按 v0 解析 v2 的 mode=102 会不认识------解析务必按 version 分支。
  2. connect 方法只在 v2 明确 :v0/v1 原文未列方法。别假设老设备能 ACTION connect;要按需连接优先选 v2。
  3. repetition_delay 单位是秒 :与 Modem configuration 的 delay_after_response(毫秒)不同,别混淆------一个秒、一个毫秒。
  4. destination_list 的"条件"原文不定义 :哪个目的地址对应哪个条件,蓝皮书故意不规定,由设备/应用约定。排错"为啥没发到某号"要先查设备自己的映射规则,不在类定义里。
  5. calling_window 的日字段 0xFF = 每日:想做"每天窗口"就把 date-time 的日填 0xFF;填具体日则是每月窗口。配错粒度会变成"每月才连一次"。
  6. mode(1) 忽略 calling_window :mode=1(随时拨)下 calling_window 被忽略,设备可能随时外呼------若电话线/流量共享,会干扰用户。共享场景用 mode=2/3 约束到窗口内。
  7. 分组交换 mode 的窗口外行为要分清:100=窗口外也不连;101=窗口外不可连;102=窗口外可经 connect 连;103=平时断、connect 才连。四者"窗口外能否连"差别大,选错要么连不上要么费电。
  8. 改名历史 :旧资料称 PSTN auto dial(v0)。对接老系统找不到 Auto connect 时,确认是不是旧名;class_id 都是 29。
  9. destination_list 与 phone_list 改名但同义 :v0 叫 phone_list、元素 phone_number(octet-string);v1/v2 改名 destination_list、元素 destination(octet-string)。迁移时字段类型不变、只换名字,解析注意别名。
  10. v0 的 connect 方法缺失 :v0/v1 原文 Specific methods 栏为空,v2 才明确 connect (data)。若设备是 v0 且你需要"按需连接",要么升级 v2,要么靠 mode 设定 + 底层触发,不要硬编码调用 connect。
  11. mode(3) 的"alarm anytime"语义 :mode=(3) = "窗口内常规拨号 + 告警随时拨号"。若你只想"告警触发外呼、平时绝不拨",mode(3) 仍会在窗口内常规拨;纯事件驱动应选 mode(102)/(103) 这类分组交换或配合 calling_window 收窄。

6. 小结 & 下期预告

本篇要点:

  1. Auto connect(class_id = 29, v0/v1/v2)是 Auto answer 的对称"出站调度器",管理主动拨号/发信/常连接;
  2. 核心属性:mode(时机+基础设施,v2 加分组交换 100--103)、repetitions/repetition_delay(重试)、calling_window、destination_list;
  3. 唯一的方法 connect(data) 是可选、且仅 v2 明确列出,用于按需拉起连接;
  4. 改名自 PSTN auto dial;v0 的 phone_list 在 v1/v2 改名 destination_list。

下一篇(第 27 篇):COSEM data protection(class_id = 30)------ 给"数据本身"加认证/加密/签名,而不是只保护通道 。本篇讲的是"什么时候、用什么方式把连接拨出去"------连是连上了,可链路上跑的内容还是裸的。下一篇换到另一个维度:不再直接 GET 那个敏感属性,而是通过一个 Data protection 对象间接访问它,由这个中间对象在读/写/调方法前后施加或校验保护。


参考资料:DLMS UA《Blue Book Ed.16 Part 2 -- COSEM interface classes》,Auto connect (class_id = 29, version = 0/1/2) 章节。文中属性名、数据类型、Short name 偏移、mode enum、connect 方法、引文均与原文一致;示例中的 OBIS、窗口、号码、A-XDR 字节为帮助理解而构造(实际以设备对象列表为准)。

相关推荐
CarIise2 小时前
Java实训阶段查漏补缺复习笔记1
java·开发语言·笔记
陈卫军老师2 小时前
陈卫军谈商业底线:营销是术,产品是道
经验分享·笔记·流量运营
智者知已应修善业2 小时前
【51单片机只有一个8*8点阵数据如何滚动起来一片595+一组IO+花样】2022-1-15
c++·经验分享·笔记·单片机·蓝桥杯·硬件架构
Space655364 小时前
常见组学技术笔记:从 DNA 基因组学到 Multi-omics
笔记
lcj25115 小时前
【Linux】 Makefile 详解
linux·笔记·面试
常州晟凯电子科技5 小时前
sigmaStar SSC305DE/SSC308开发笔记之开发环境搭建和SDK编译
人工智能·笔记·嵌入式硬件·物联网·性能优化·视频编解码
wdfk_prog6 小时前
LWIP教程 00:从网线上的电信号到 lwIP——PHY、MAC、DMA 与 `netif` 的完整边界
运维·网络·笔记·学习·ip
小黄蚁6 小时前
无人驾驶入门笔记(一)
笔记·自动驾驶·信息与通信
江屿风7 小时前
【Linux系统】【从菜鸟驿站到操作系统:一节课打通Linux重定向与缓冲区真相】流食般投喂
linux·运维·服务器·开发语言·笔记