ARTICLE DETAIL

资讯详情

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

DLMS/COSEM 蓝皮书解读(二十):IEC HDLC setup 类(class_id = 23)—— 通信链路的“HDLC 帧层参数“:波特率、窗口、超时、地址

DLMS/COSEM 蓝皮书解读(二十):IEC HDLC setup 类(class_id = 23)—— 通信链路的“HDLC 帧层参数“:波特率、窗口、超时、地址 DLMS/COSEM 蓝皮书解读二十IEC HDLC setup 类class_id 23—— 通信链路的HDLC 帧层参数波特率、窗口、超时、地址系列说明本系列基于 DLMS UA《Blue Book蓝皮书第 16 版 · 第 2 部分》一个接口类一篇。第 19 篇讲了Single action scheduleclass_id 22它是轻量的时间驱动、与费率解耦的周期动作。本篇跳出对象模型逻辑进入物理/链路层前面讲的所有 COSEM 对象最终都要通过一条信道传出去——本篇讲 IEC 62056-3-1 的HDLC 链路层参数怎么在 COSEM 里被建模成一个对象。上篇回顾第 19 篇把调度这件事做到最轻。但调度触发脚本也好、“读写一个 Register也好报文总得从串口/光口出去。链路层用的是什么帧格式、收发窗口多大、字符间隔超时多少毫秒、这台表在 HDLC 网络里的地址是多少——这些不在对象数据里而在通信参数里。IEC HDLC setupclass_id 23就是把这套链路层参数对象化的类和上一篇的IEC local port setup(19) 是本地口这一话题的上下集19 管用什么协议、开口波特率、本地口令”本篇管HDLC 帧层怎么协商。0. 为什么需要 IEC HDLC setupDLMS 在本地口光口 / 串口上跑的是HDLCIEC 62056-46。HDLC 不是插上线就能通的裸串口它有一整套链路层约定双方以什么波特率对话300 baud 还是 115200 baud一发可以连续发几帧才等对方确认收发窗口一帧的信息字段最长多少字节决定一次能塞多少 APDU主站多久不发字符就认为一帧结束inter-octet 超时主站多久不来一帧就主动断连inactivity 超时这台表在 HDLC 网络里的物理地址是多少用来寻址、广播这些参数如果写死在固件里不同厂商、不同介质光纤 / 双绞线 / 无线 Modem 透传就难适配。把它们建模成一个 COSEM 对象IEC HDLC setup就可以用GET/SET读取和配置甚至不同通道建不同实例原文“Several communication channels can be configured”。蓝皮书原文IEC HDLC setup v1, Overview“This IC allows modelling and configuring communication channels according to DLMS UA 1000-2 Ed.11:2021, Clause 8 and IEC 62056-46:2007. Several communication channels can be configured.”v0 的 Overview 措辞略不同但核心一致蓝皮书原文IEC HDLC setup v0, Overview“An instance of the “IEC HDLC setup” contains all data necessary to set up a communication channel according to IEC 62056-46:2007. Several communication channels can be configured.”0.1 这些参数怎么用到 HDLC 帧上背景HDLC 是面向比特的链路层。一次GET/SET的 APDU 会被包进 HDLC 的I 帧信息帧的信息字段里。相关参数作用comm_speed物理层比特率决定了字节在线上飞多快。window_size_transmit/receiveHDLC 的滑动窗口N。发送方连发 N 个 I 帧未收到 RR接收就绪就必须停等接收方收满 N 个未回 RR 也会让对端停。max_info_field_length_transmit/receiveI 帧信息字段上限。一个超长的 APDU比如读整段Profile generic若超过对端 receive 上限就要分帧或靠选择性访问切小。inter_octet_time_out收方判这一帧到此结束的字符间隔阈值——超过此间隔没新字符就认为当前帧收完。inactivity_time_out主站多久不发任何帧表计就主动断 AA。device_address填进 HDLC 帧地址字段主站据此寻址、广播用 0x3FFF。理解了参数落到帧的哪一块配置才有方向而不是拍脑袋填数。0.2 这些参数在链路建立的哪个阶段生效很多工程师以为配完就固定不变其实这些参数贯穿链路生命周期的不同阶段物理连接前端口先按IEC local port setup(19) 的protocol_mode/ 开口波特率亮起来此时还没进 HDLC 协商。进入 HDLC 模式、logon 协商时本篇comm_speed作声明值参与window_size_*/max_info_field_length_*在 AARQ/AARE 的链路协商里取双方较小值生效你声明 2030对端只认 128结果就是 128。AA 建立、运行期inter_octet_time_out持续管帧边界判定inactivity_time_out管无活动多久断连二者实时起作用。全程device_address从第一帧 CALLING 起就用于 HDLC 帧寻址直到断开。简言之协商阶段定窗口/帧长运行阶段管超时/寻址不是配完一成不变。改了参数通常要重连才能按新值协商。1. 类蓝图IEC HDLC setup 0...n class_id 23, version 0 / 1下表以version 1为基准现行主流version 0 的差异见第 1.1 节。属性静态/动态数据类型MinMaxDefShort namelogical_namestaticoctet-string———xcomm_speedstaticenum095x 0x08window_size_transmitstaticunsigned171x 0x10window_size_receivestaticunsigned171x 0x18max_info_field_length_transmitstaticlong-unsigned322030128x 0x20max_info_field_length_receivestaticlong-unsigned322030128x 0x28inter_octet_time_outstaticlong-unsigned20600025x 0x30inactivity_time_outstaticlong-unsigned0120—x 0x38device_addressstaticlong-unsigned0x00100x3FFD—x 0x40该类无方法Specific methods 一栏为空。链路参数是配置项由客户端SET、表计在建立 AA 时按这些值协商/使用不需要专门的 method。三个蓝皮书 NOTE 解释了 v1 相对早期版本的放宽务必留意第 2 节会展开NOTE 1max_info_field_length_transmit / receive 的最大值从 128 放宽到 2030效率考虑。NOTE 2receive 端至少 128 字节才能保证最小性能。NOTE 3inter_octet_time_out 最大值从 1000 ms 放宽到 6000 ms以适应可能长延迟的介质默认值改为 25 ms 以对齐 6.4.4.3.4。1.1 version 0 与 version 1 的差异IEC HDLC setup有两个版本差别集中在信息字段长度和字符间隔超时两项属性version 0version 1max_info_field_length_transmitunsignedMax 128long-unsignedMax 2030max_info_field_length_receiveunsignedMax 128long-unsignedMax 2030inter_octet_time_outMax 1000msDef 25Max 6000msDef 25comm_speed / window_size_* / inactivity_time_out / device_address同 v1同 v0工程含义v1 主要是为了更大的帧一次传更多 APDU减少分帧、更宽容的介质延迟长延迟 PLC/RF 透传场景而演进。老设备v0信息字段上限锁死 128 字节新设备v1可达 2030。协商时取双方较小值所以 v0 表与 v1 主站仍可互通只是 frame 不会超过 128 字节。2. 属性逐条解读2.1 logical_nameoctet-string6 字节 OBIS。每条 HDLC 通道一个实例可挂例如0-0:22.0.0.255示例 OBIS实际以设备对象列表为准。2.2 comm_speed通信速率enum 0~9蓝皮书原文IEC HDLC setup, comm_speed“The communication speed supported by the corresponding port.”枚举 10 档值速率值速率0300 baud59 600 baud1600 baud619 200 baud21 200 baud738 400 baud32 400 baud857 600 baud44 800 baud9115 200 baud默认 59600 baud这是本地口最稳的速率。原文还有一句“This communication speed can be overridden if the HDLC mode of a device is entered through a special mode of another protocol.”即如果设备是从另一种协议的特殊模式进入 HDLC 模式例如先用某个厂商私有握手再切到 HDLC这个速率可能被那条协议的特殊模式覆盖——comm_speed只是声明值实际握手以协商为准。2.3 window_size_transmit / window_size_receive收发窗口蓝皮书原文IEC HDLC setup, window_size_transmit“The maximum number of frames that a device or system can transmit before it needs to receive an acknowledgement from a corresponding station. During logon, other values can be negotiated.”window_size_transmit本方连续发几帧才必须等对方确认ACK。window_size_receive本方连续收几帧才必须回确认。范围unsigned1~7默认 1即发一帧等一确认最保守、最兼容。建立 AAlogon时可协商成更小值实际生效取双方较小值。窗口越大吞吐越高但对端缓冲压力也大现场一般用默认 1 最稳。2.4 max_info_field_length_transmit / receive信息字段最大长度蓝皮书原文IEC HDLC setup, max_info_length_transmit“The maximum information field length that a device can transmit. During logon, a smaller value can be negotiated.”信息字段I 帧里塞 APDU 的那段的最大字节数。v1 范围 32~2030默认 128。注意NOTE 2receive 端至少 128 字节才能保证最小性能。所以max_info_field_length_receive低于 128 是不推荐的。一个长GET比如读一整段Profile generic的 buffer若超过对端接收窗口上限就会被分帧或拒绝——这也是为什么大块数据读取常配合Profile generic的选择性访问按段读来避免单次帧过大。2.5 inter_octet_time_out字符间隔超时毫秒蓝皮书原文IEC HDLC setup, inter_octet_time_out“Defines the time, expressed in milliseconds, over which, when no character is received from the primary station, the device will treat the already received data as a complete frame.”收方在收到主站字符的过程中若相邻两字符间隔超过此值就判定这一帧到此结束无论有没有收到帧结束符。v1 范围 20~6000 ms默认 25 ms。这个值太小如 20在慢介质上会把一帧误切成两帧太大则一帧丢失后要等很久才超时。NOTE 3 把上限从 1000 放宽到 6000正是为了适配 PLC/RF 这类字符可能隔很久才到的透传介质。2.6 inactivity_time_out无活动超时秒蓝皮书原文IEC HDLC setup, inactivity_time_out“Defines the time, expressed in seconds over which, when no frame is received from the primary station, the device will process a disconnection.”主站多久不来任何一帧表计就主动断开连接处理 disconnection。范围 0~120 秒。“When this value is set to 0, this means that the inactivity_time_out is not operational.”置 0 不超时连接一直保持直到主站显式断开或链路物理断开。长连接抄表、或主站希望一直占用通道的场景会用到 0但置 0 也意味着异常掉线时表计不会及时释放会话资源需权衡。2.7 device_addressHDLC 物理设备地址蓝皮书原文IEC HDLC setup, device_address“Contains the physical device address of a device.”表计在 HDLC 网络里的自身地址。支持两种编址单字节寻址范围含义0x00NO_STATION无站地址0x01 – 0x0F保留Reserved for future use0x10 – 0x7D可用地址空间Usable address space0x7ECALLING主站呼地址0x7F广播地址Broadcast双字节寻址范围含义0x0000NO_STATION0x0001 – 0x000F保留0x0010 – 0x3FFD可用地址空间Usable address space0x3FFECALLING主站呼地址0x3FFF广播地址device_address属性的可设范围是0x0010 – 0x3FFD可用地址空间v0/v1 一致。这个地址出现在 HDLC 帧的地址字段里主站据此寻址、广播用 0x3FFF、发起呼叫用 0x7E/0x3FFE。注意它与逻辑设备地址SAP不是一回事——device_address是链路层地址SAP assignment(17) 里的是应用层服务访问点两者在不同层。3. 方法没有方法。链路参数纯配置由客户端SET、表计在链路协商时使用无execute/activate之类 method——这也和IEC local port setup(19) 一致19 同样无方法。4. 【实战举例】下面 OBIS、配置值均为帮助理解而构造的示例非蓝皮书原文实际以设备对象列表为准。示例 1标准本地光口配置v1一台电表本地光口走 HDLC典型配置comm_speed 59600 baud本地口最稳window_size_transmit 1window_size_receive 1一发一确认max_info_field_length_transmit 128max_info_field_length_receive 128最小性能保底inter_octet_time_out 25ms默认inactivity_time_out 120s2 分钟无帧则断连device_address 0x10单字节落在可用空间主站掌机插上光口以 HDLC 帧地址0x10呼叫这台表双方 window1、max_info128 协商一致开始 AARQ/AARE。示例 2v0 老表与新主站的兼容性一台老表只实现IEC HDLC setupversion 0max_info 上限 128。新主站实现 v1想用 2030 大帧与之协商主站提议 max_info 2030老表只能到 128 →协商结果取小 128。链路照常工作只是每帧 APDU 不超过 128 字节大GET自动分帧。这正体现 v1 向后兼容放宽上限不破坏与 v0 的互通只是享受不到大帧红利。示例 3长延迟 PLC 透传放宽 inter_octet表计经 PLC/RF Modem 透传字符到达间隔可能到几百毫秒。若inter_octet_time_out还停留在老默认或 20 ms一帧会被频繁误判结束。此时按 NOTE 3 把上限用到 6000 ms、实际设inter_octet_time_out 500ms更稳妥避免分帧错乱。示例 4常连通道inactivity 置 0集中器希望一直占用某表通道做实时监测不希望 120 s 无活动就断。设inactivity_time_out 0not operational连接保持到显式断开。代价集中器掉电异常时表计不会自动释放该 AA需靠对端重连或复位清理。示例 5SN短名方式访问各属性若用 SN 寻址base_name 设为某值x各属性落在x 偏移属性short namelogical_namexcomm_speedx 0x08window_size_transmitx 0x10window_size_receivex 0x18max_info_field_length_transmitx 0x20max_info_field_length_receivex 0x28inter_octet_time_outx 0x30inactivity_time_outx 0x38device_addressx 0x40例如想GETdevice_address发 SN 读请求 base_name x 0x40SETcomm_speed 写 base_name x 0x08value enum(5)。注意 SN 模式下数据类型仍按属性表comm_speedenum、window_sizeunsigned、max_infolong-unsigned …。示例 6双字节地址的复合设备一台复合表计量 LD 管理 LD 通信 LD在 HDLC 网络上用双字节地址三个 HDLC 实例分别device_address 0x0010 / 0x0011 / 0x0012都在可用空间 0x0010–0x3FFD 内。主站用对应地址分别寻址各物理口广播诊断用 0x3FFF。注意这是链路层物理地址与SAP assignment(17) 的 SAP应用层 LD 门牌是正交的两套寻址。示例 7与 IEC local port setup 的配合上下集IEC local port setup(19) 里设protocol_mode HDLC、开口波特率、password本地认证口令本篇IEC HDLC setup(23) 在 HDLC 模式下进一步定帧层怎么玩速率、窗口、信息字段、超时、地址。两者作用于同一物理口的不同层19 是口的身份与基本协议23 是HDLC 链路的具体参数。配本地口时两个对象要一起看缺一不可。示例 8大 APDU 与 max_info 的取舍主站要一次GET某Profile generic的整段buffer假设 2000 字节。对端max_info_field_length_receive 128v0 或保底值单帧装不下 → 主站必须要么把GET改成带选择性访问按 entry/range 分段读每段 ≤128 字节要么协商更大的 max_info若对端支持 v1 的 2030。若硬发超长帧对端按 max_info 拒收或分片反而更慢。配 max_info 前先估最大 APDU 长度。示例 9不同介质下的推荐参数组合同一套IEC HDLC setup参数在不同物理介质上该取不同值否则要么慢、要么乱介质comm_speedwindow_sizemax_infointer_octetinactivity说明本地光口/串口直连5 (9600)112825 ms120 s最稳默认字符间隔小双绞线短距、稳6~7 (19.2k~38.4k)1~3128~51225~50 ms120 s速率可提窗口略增提吞吐PLC/RF Modem 透传长延迟依 Modem1128500 ms按 NOTE 3 放宽到 6000 内120 s 或 0字符间隔大inter_octet 必须上调防切帧老表 v0 对接51128封顶25 msv0 上限 1000120 s受 v0 上限约束别超要点直连介质用默认即可透传介质必须把inter_octet_time_out放大与 v0 老表对接时max_info封顶 128、inter_octet上限 1000。这些不是拍脑袋是介质物理特性决定的。5. 工程上容易踩的坑max_info 上限 v0(128) vs v1(2030) 别搞混。读老表如果按 v1 去SET一个 500 的 max_info 没问题但GET到的对象若是 v0max_info_field_length的>6. 小结 下期预告本篇要点IEC HDLC setupclass_id 23把IEC 62056-46 的 HDLC 链路层参数对象化速率、收发窗口、信息字段长度、字符/无活动超时、链路地址。9 个属性含logical_name无方法纯配置 链路协商使用。有version 0 / 1核心差异在max_info_field_length128 → 2030和inter_octet_time_out1000 → 6000 msv1 向后兼容 v0。device_address有单/双字节两套地址空间可设范围 0x0010–0x3FFD它是链路层地址别和SAP assignment的应用层 SAP 混淆。与IEC local port setup(19) 是本地口的上下集19 管协议/口令23 管 HDLC 帧层。下一篇第 21 篇IEC twisted pair (1) setupclass_id 24—— 继续通信链路话题但介质换成双绞线。它会定义双绞线信道如 IEC 62056-3-1 的 twisted pair 模式的链路参数和以它为代表的另一种本地口物理介质在 COSEM 里怎么建模。我们会看清它和本篇IEC HDLC setup(23) 的边界一个管 HDLC 帧层一个管双绞线介质本身的链路设置。参考资料DLMS UA《Blue Book Ed.16 Part 2 – COSEM interface classes》IEC HDLC setup (class_id 23, version 0 与 version 1) 章节。文中属性、数据类型、Min/Max/Def、Short name 偏移x / x0x08 … x0x40、comm_speed 与 device_address 枚举/地址空间、三条 NOTE 及引文均与原文一致示例中的 OBIS、配置值与协商结果均为帮助理解而构造实际以设备对象列表及链路协商结果为准。
返回列表