4. 信息体地址编码规则:信息体地址的组成、站内点号与信息体地址的换算关系

好,咱们今天聊点硬核的——信息体地址。说实话,我刚入行那会儿,被这个地址绕得晕头转向。明明就是个编号,怎么还分什么站内点号、信息体地址?后来在项目里被坑过一次,才彻底搞明白。今天我把这些经验掰开揉碎讲给你听。

4.1 信息体地址到底是什么?

信息体地址,说白了就是每个数据点在IEC104报文里的“身份证号”。你想想看,一个变电站里成千上万个遥测、遥信、遥控点,总得有个唯一的标识吧?这个标识就是信息体地址。

在IEC104协议里,信息体地址占用3个字节,也就是24位。取值范围从0到16777215。嗯,这里要注意:实际工程中我们很少用到这么大的范围,但协议给你留足了扩展空间。

核心概念:信息体地址 ≠ 站内点号。这是很多新手容易混淆的地方。信息体地址是报文层面的地址,站内点号是工程层面的编号。两者之间需要换算。

4.2 信息体地址的组成结构

我个人习惯把信息体地址拆成三部分来看:

  • 站地址(RTU地址):标识哪个厂站
  • 信息体地址(对象地址):标识哪个数据点
  • 类型标识:标识是遥测、遥信还是遥控

但注意,在IEC104的ASDU结构中,信息体地址是独立于站地址的。也就是说,每个站都有自己的信息体地址空间。举个例子:站A的遥测点1,和站B的遥测点1,在报文里信息体地址可以都是1,但站地址不同。

我的经验:我在做某省调项目时,遇到过两个站的信息体地址完全一样的情况。当时排查了半天,最后发现是站地址配置错了。所以记住:信息体地址+站地址,才是真正的全局唯一标识。

4.3 站内点号与信息体地址的换算关系

这是今天最核心的内容。站内点号是工程人员习惯用的编号,比如“遥测点1”、“遥信点100”。而信息体地址是协议层用的编号。两者怎么换算?

常见的换算方式有两种:

方式一:线性映射(最常用)

说白了就是:信息体地址 = 起始地址 + 站内点号 - 1

举个例子:

  • 遥测起始地址设为 4001
  • 站内遥测点号 1 → 信息体地址 = 4001 + 1 - 1 = 4001
  • 站内遥测点号 100 → 信息体地址 = 4001 + 100 - 1 = 4100

避坑指南:我曾经遇到一个项目,厂家把起始地址设成了4000,但文档里写的是4001。结果所有遥测点都偏移了1个地址。排查了整整两天才找到原因。所以,起始地址一定要和文档严格对应

方式二:分段映射(用于多类型数据)

实际工程中,遥测、遥信、遥控往往使用不同的地址段。比如:

数据类型 起始地址 结束地址 说明
遥信(YX) 1 4096 最多4096个遥信点
遥测(YC) 4097 8192 最多4096个遥测点
遥控(YK) 8193 12288 最多4096个遥控点
遥调(YT) 12289 16384 最多4096个遥调点

这种分段方式的好处是:看到信息体地址,马上就能知道是什么类型的数据。比如地址5000,肯定在遥测段内,是遥测点。

我个人习惯:在做点表配置时,我会把分段规则写在注释里。比如:

// 遥信段:1-4096
// 遥测段:4097-8192  
// 遥控段:8193-12288
// 遥调段:12289-16384

这样后期维护时,看一眼就知道地址范围,不用再去翻文档。

4.4 实际工程中的换算示例

咱们来一个完整的例子。假设某变电站的点表如下:

站内点号 数据类型 描述 信息体地址
1 遥信 断路器1位置 1
2 遥信 断路器2位置 2
... ... ... ...
1 遥测 母线电压 4097
2 遥测 线路电流 4098
... ... ... ...
1 遥控 断路器1分合 8193

你看,站内点号都是1、2、3...但加上数据类型后,信息体地址就完全不同了。这就是为什么我说:信息体地址 = 数据类型段起始地址 + 站内点号 - 1

4.5 信息体地址编码规则总结

来,我画个图帮你理清思路:

信息体地址编码规则 信息体地址组成 3字节(24位) 范围:0 ~ 16777215 独立于站地址 站内点号 ↔ 信息体地址 线性映射: 信息体地址 = 起始地址 + 点号 - 1 分段映射:按数据类型分区 常见分段规则 遥信:1 ~ 4096 遥测:4097 ~ 8192 遥控:8193 ~ 12288 核心要点 1. 信息体地址是报文中的唯一标识,站内点号是工程编号 2. 换算公式:信息体地址 = 起始地址 + 站内点号 - 1 3. 不同数据类型使用不同地址段,避免冲突 4. 配置时务必核对起始地址,偏移1位就会导致数据错乱

重要提醒:信息体地址的编码规则,不同厂家、不同项目可能不一样。有的用线性映射,有的用分段映射,甚至有的用哈希映射。拿到一个新项目,第一件事就是确认地址编码规则。我曾经因为想当然地套用旧规则,导致整个点表重做,那叫一个惨。

4.6 实战中的避坑指南

最后,分享几个我踩过的坑:

  1. 地址从0开始还是从1开始? 大部分工程从1开始,但有些厂家从0开始。一定要确认清楚。
  2. 起始地址是否包含在点号内? 比如起始地址4001,站内点号1对应的是4001还是4002?我见过两种做法都有。
  3. 地址段之间留不留空隙? 建议留一些预留地址,方便后期扩展。比如遥信段用1-4000,遥测段从4500开始,中间留500个地址备用。
  4. 文档和实际配置是否一致? 这是最常见的问题。拿到点表后,最好抽几个点做实际报文抓包验证。

我的小技巧:每次做完点表配置,我都会写一个简单的校验脚本。比如用Python读取点表,自动计算信息体地址,然后和报文里的实际地址比对。这样能发现90%以上的配置错误。

好了,信息体地址这块就讲到这里。说白了就是记住那个换算公式,然后多留个心眼,别被起始地址给坑了。下一节咱们聊聊实际报文解析,到时候你会看到这些地址是怎么在报文里出现的。


公众号:蓝海资料掘金营,微信deep3321