☰
DLMS/COSEM 蓝皮书解读(二十六):Auto connect(class_id = 29)—— 自动拨号与主动连接(出站管理)
2026/10/7 2:43:48 网站建设 项目流程

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
属性静态/动态数据类型MinMaxDefShort name
logical_namestaticoctet-stringx
modestaticenumx + 0x08
repetitionsstaticunsignedx + 0x10
repetition_delaystaticlong-unsignedx + 0x18
calling_windowstaticarrayx + 0x20
destination_liststaticarrayx + 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 namex + 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_name0-0:2.2.0.255
mode(2) 窗口内允许自动拨号
calling_window[{start="每日 23:00", end="每日 23:30"}](日字段 0xFF)
repetitions3
repetition_delay60(秒)
destination_list["+994193500"]

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

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

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

connect的 ACTION 请求(parameterdata = integer(0)):

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

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

示例 3:SN 短名访问

base namex: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 字节为帮助理解而构造(实际以设备对象列表为准)。

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

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

立即咨询