ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

DLMS/COSEM 蓝皮书解读(二十四):Modem configuration(class_id = 27)—— Modem 的初始化与 Hayes 命令映射建模

DLMS/COSEM 蓝皮书解读(二十四):Modem configuration(class_id = 27)—— Modem 的初始化与 Hayes 命令映射建模 DLMS/COSEM 蓝皮书解读二十四Modem configurationclass_id 27—— Modem 的初始化与 Hayes 命令映射建模系列说明本系列基于 DLMS UA《Blue Book蓝皮书第 16 版 · 第 2 部分》一个接口类一篇。第 23 篇讲了Utility tablesclass_id 26它是与介质无关的数据集装箱。本篇回到通信外设配置主线Modem configurationclass_id 27解决的是设备通过 ModemPSTN/蜂窝传数据时这个 Modem 怎么初始化、跑多快、怎么把标准 Hayes 命令翻译成某款 Modem 的私有字符串。上篇回顾第 23 篇把非 DLMS 原生表数据装进了集装箱。但很多表计是通过Modem 拨号/短信回传数据的——要让设备知道怎么跟这只 Modem 说话就需要一个专门描述 Modem 初始化序列与命令映射的对象。本篇Modem configuration就是这块Modem 说明书。0. 为什么需要这个类表计回传数据的链路里Modem调制解调器是个黑盒外设它有自己的 AT 命令集、有自己的 CONNECT/NO CARRIER 这类响应。设备想用 Modem必须知道两件事怎么初始化它发哪些 AT 命令、期待什么回应、等多久怎么把标准 Hayes 响应翻译成这只 Modem 的私有字符串不同厂商 Modem 的 “CONNECT 9600” 可能写法不同。蓝皮书原文Modem configuration, Overview“This IC allows modelling the configuration and initialisation of modems used for data transfer from/to a device. Several modems can be configured.”注意两点基数0...n——一个设备可以配多个 Modem比如一个 PSTN、一个 GPRS每个一个实例这个类在Edition 2 把名字从PSTN modem configuration改成了Modem configurationv0 的 Overview 里还保留旧名说明。蓝皮书原文v0, Overview NOTE“The name of this IC was changed to ‘Modem configuration’ in Edition 2.”1. 类蓝图两版属性结构完全一致v1 只是初始化能力增强见下文 2.3且没有方法Specific methods 一栏为空全static靠 SET 配置。Modem configuration 0...n class_id 27, version 0 / 1属性静态/动态数据类型MinMaxDefShort namelogical_namestaticoctet-stringxcomm_speedstaticenum095x 0x08initialization_stringstaticarrayx 0x10modem_profilestaticarrayx 0x182. 属性逐条解读2.1 logical_name标识本Modem configuration对象实例。6 字节 OBISstatic基址x。蓝皮书原文logical_name“Identifies the ‘Modem configuration’ object instance.”2.2 comm_speed设备与 Modem 之间的通信速率注意不一定是 WAN 上的速率。蓝皮书原文comm_speed“The communication speed between the device and the modem, not necessarily the communication speed on the WAN.”staticenumMin0、Max9、Def5 9600 baudShort namex 0x08enum 值波特率(0)300 baud(1)600 baud(2)1 200 baud(3)2 400 baud(4)4 800 baud(5)9 600 baud缺省(6)19 200 baud(7)38 400 baud(8)57 600 baud(9)115 200 baud2.3 initialization_string初始化命令序列发给 Modem 的全部必要初始化命令可能含特殊功能配置。v0的元素结构initialization_string_element :: structure { request: octet-string, response: octet-string }v1的元素结构多了delay_after_response字段——structure { request: octet-string, response: octet-string, delay_after_response: long-unsigned }蓝皮书原文v1, initialization_string“If the array contains more than one initialization_string_element, the requests are sent in a sequence. The next request is sent after the expected response matching the previous request and waiting a delay_after_response time [ms], to allow the modem to execute the request.”即多条命令按序发送发完一条后等匹配预期 response再等delay_after_response毫秒让 Modem 执行完才发下一条。v1 比 v0 多了这个逐条延时能力对慢速/复杂 Modem 更稳。蓝皮书原文 NOTEv1“It is assumed that the modem is pre-configured so that it accepts the initialization_string. If no initialization is needed, the initialization string is empty.”不需要初始化时initialization_string为空数组。2.4 modem_profileHayes 标准命令/响应 → 该 Modem 私有字符串的映射表。staticarray元素类型modem_profile_element :: octet-stringShort namex 0x18。蓝皮书原文modem_profile“Defines the mapping from Hayes standard commands/responses to modem specific strings.”数组必须按以下固定顺序存放这是关键约束顺序即语义元素下标标准字符串元素下标标准字符串0OK9CONNECT 6001CONNECT10CONNECT 2 4002RING11CONNECT 4 8003NO CARRIER12CONNECT 9 6004ERROR13CONNECT 14 4005CONNECT 1 20014CONNECT 28 8006NO DIAL TONE15CONNECT 33 600v1/ CONNECT 36 600v07BUSY16CONNECT 56 0008NO ANSWER诚实差异v1 的元素 15 写的是CONNECT 33 600v0 写的是CONNECT 36 600原文两版此处不一致均按原文呈现未做校正。3. 没有方法纯配置对象本类无 ACTION 方法。初始化动作由设备在底层按initialization_string和modem_profile执行不在 xDLMS 方法里。它和IEC HDLC setup(23)、M-Bus slave port setup(25) 同属通信外设配置容器区别是它管的是Modem 这层AT 命令与 Hayes 翻译不碰链路帧参数。4. 【实战举例】示例 1一块 GPRS 表计的 Modem 配置v1以下 OBIS/命令/字符串为示例非蓝皮书原文实际以设备对象列表为准属性取值说明logical_name0-0:2.0.0.255示例 OBIScomm_speed(5) 9600 baud设备与 Modem 串口速率initialization_string见下3 条 AT 命令序列modem_profile17 个元素按 0–16 顺序填 Hayes 映射initialization_stringv1含delay_after_response[ { requestATCGDCONT1,..., responseOK, delay_after_response500 }, { requestATDT*99#, responseCONNECT, delay_after_response200 }, { requestATW, responseOK, delay_after_response100 } ]含义先配 PDP 上下文等 OK、停 500ms再拨*99#触发 GPRS等 CONNECT、停 200ms最后保存配置等 OK、停 100ms。示例 2modem_profile 的翻译作用某款非标准 Modem 把 “CONNECT 9600” 回成私有串CON9600。则modem_profile元素 12 应存CON9600而非字面的CONNECT 9 600。设备收到 Modem 回的CON9600按 profile 翻译成标准CONNECT 9600上层逻辑才能正确识别连接速率。profile 顺序必须 0–16 严格对齐错一位整张表语义全乱。示例 3SN 短名访问base namex。各属性短名comm_speedx0x08initialization_stringx0x10modem_profilex0x18。comm_speed的 GET 响应enum(5)9600标签1616 01 05 示例A-XDR 编码示意enum 标签以 0x16/22 为例示例 4v0 → v1 迁移要点若旧设备用 v0升级到 v1 时initialization_string的每个元素新增可选delay_after_response字段long-unsigned毫秒。v0 没有该字段、命令间只等匹配 response 即发下一条v1 可显式插入延时适配慢 Modem。modem_profile 的 17 元素顺序与含义两版一致迁移时直接照搬即可仅注意元素 15 两版原文写法不同。示例 5initialization_stringv1的完整 A-XDR 编码把示例 1 的第一条命令{requestATZ, responseOK, delay_after_response100}单独编码以下字节为示例标签取值以设备为准01 01 array1 个元素 02 0D structure13 字节 0B 03 41 54 5A request ATZoctet-string标签 0B长 3值 41 54 5A 0B 02 4F 4B response OKoctet-string标签 0B长 2值 4F 4B 12 02 00 64 delay_after_response 100long-unsigned标签 12长 2值 0064要点v1 每条命令是3 字段 structurerequest/response/delay_after_responsev0 是2 字段无 delay。解析时按 version 选结构否则字段错位。示例 6一份厂商私有 Hayes 串的完整 modem_profile17 项假设某 Modem 把标准串改成了私有写法以下私有串为示例非蓝皮书原文modem_profile应填下标标准串该 Modem 私有串示例0OKOK1CONNECTCNCT2RINGRING3NO CARRIERNOCAR4ERRORERR5CONNECT 1 200CNCT12006NO DIAL TONENODIAL7BUSYBUSY8NO ANSWERNOANS9CONNECT 600CNCT60010CONNECT 2 400CNCT240011CONNECT 4 800CNCT480012CONNECT 9 600CNCT960013CONNECT 14 400CNCT1440014CONNECT 28 800CNCT2880015CONNECT 33 600v1CNCT3360016CONNECT 56 000CNCT56000设备收到 Modem 回的CNCT9600按 profile 元素 12 翻成标准CONNECT 9 600。顺序必须 0–16 逐位对齐少填/错填都会让上层误判连接状态。示例 7野外部署 Modem 的核对清单以下清单为工程归纳非蓝皮书原文确认comm_speed 设备串口与 Modem 握手速率不是空口速率不需要初始化 →initialization_string置空数组需要 → 按 v1含 delay或 v0不含写好 request/response/delaymodem_profile严格按 0–16 填齐 17 项私有串逐条核对 Modem 手册多 Modem 各建一个Modem configuration实例0…n别只配一个注意旧设备可能叫PSTN modem configurationv0class_id 同为 27。示例 8三类 Modem 在本类下的配置对照以下为工程归纳非蓝皮书原文取值以设备对象列表为准Modem 类型logical_name 示例comm_speedinitialization_string 要点modem_profilePSTN 拨号猫0-0:2.0.0.255(5)9600拨号 ATD 序列标准 Hayes 17 项GPRS 模块0-1:2.0.0.255(5)9600ATCGDCONT / ATDT*99#模块私有串映射蜂窝 LTE0-2:2.0.0.255(6)19200ATCGDCONT / APN 相关模块私有串映射共同点都用一个Modem configuration实例、都用comm_speed(设备↔Modem 串口)、都靠modem_profile把标准 Hayes 翻成模块私有串。差异在initialization_string内容拨号 vs 拨 APN与 profile 私有串。5. 工程上容易踩的坑comm_speed 是设备↔Modem速率不是空中速率原文明确 “not necessarily the communication speed on the WAN”。配成 115200 不代表 GPRS 空口就 115200只是串口握手快别拿它当链路带宽评估。modem_profile 顺序即语义数组必须 0–16 按固定顺序插错位置如把 BUSY 放第 7 之外会让设备把 Modem 响应翻译成错误含义。v0/v1 的 initialization_string 结构不同v1 每个元素多delay_after_response(long-unsigned)。按 v0 解析 v1 对象会少一个字段、按 v1 写 v0 对象会越界——解析时务必按 version 分支。空数组 不需要初始化initialization_string为空数组长度 0是合法状态表示 Modem 已预配置好。别把它当配置失败去排错。初始化序列依赖预期 response 匹配多条命令是发一条→等匹配 response→延时→发下一条。若某条 Modem 回的不是预期 response序列会卡住。排错时先单条手测 AT 命令的回显是否和 profile 一致。delay_after_response 单位是毫秒v1 的延时是[ms]不是秒。写成 500 是等 0.5 秒别和别的以秒为单位的定时器混淆。改名历史别踩坑旧资料/旧设备称PSTN modem configurationv0。对接老系统时若找不到 class_id27 的Modem configuration确认是不是旧名PSTN modem configuration——class_id 都是 27。多 Modem 各自一个实例0...n意味多 Modem 多实例、各配各的comm_speed/profile。主站枚举时别只处理第一个实例漏掉第二只 Modem如 GPRS 备份 PSTN。modem_profile 元素 15 两版写法不同v1 写CONNECT 33 600、v0 写CONNECT 36 600原文两版此处不一致。做 v0↔v1 兼容时别硬改按各自版本原样填避免自以为纠错反而错。初始化序列卡住先查 response 匹配排错Modem 不工作时先在串口单发initialization_string里的 AT 命令看 Modem 实际回显是否等于response字段、串序是否与modem_profile一致。九成卡顿是 response 不匹配导致序列停等。comm_speed 别超过 Modem 硬件 UART 上限enum 最高到 (9)115200但若 Modem 硬件 UART 只到 9600设 115200 只是设备侧串口配置Modem 不会提速。配前查 Modem 数据手册。6. 小结 下期预告本篇要点Modem configurationclass_id 27, v0/v1建模Modem 初始化与 Hayes 命令映射无方法、全 static四属性comm_speed(0–9, 缺省 9600)、initialization_string(AT 命令序列)、modem_profile(0–16 固定顺序的 Hayes 映射)v1 的 initialization_string 元素多了delay_after_response毫秒延时命令按序发、等匹配 response 再延时改名自PSTN modem configuration0...n支持多 Modem。下一篇第 25 篇Auto answerclass_id 28—— 自动应答来电/唤醒。本篇把 Modem “怎么初始化配好了下一篇讲Modem 收到来电/短信唤醒时设备怎么决定接不接、几点接、只接谁的电话”——即Auto answer的监听窗口、振铃次数、允许来电白名单与 wake-up 机制是 Modem 配置之后紧接的入站管理环节。参考资料DLMS UA《Blue Book Ed.16 Part 2 – COSEM interface classes》Modem configuration(class_id 27, version 0/1) 章节。文中属性名、数据类型、Short name 偏移、comm_speed enum 取值、initialization_string / modem_profile 结构、引文均与原文一致示例中的 OBIS、AT 命令、modem_profile 取值、A-XDR 字节为帮助理解而构造实际以设备对象列表为准。
返回列表