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 信息体地址编码规则总结
来,我画个图帮你理清思路:
重要提醒:信息体地址的编码规则,不同厂家、不同项目可能不一样。有的用线性映射,有的用分段映射,甚至有的用哈希映射。拿到一个新项目,第一件事就是确认地址编码规则。我曾经因为想当然地套用旧规则,导致整个点表重做,那叫一个惨。
4.6 实战中的避坑指南
最后,分享几个我踩过的坑:
- 地址从0开始还是从1开始? 大部分工程从1开始,但有些厂家从0开始。一定要确认清楚。
- 起始地址是否包含在点号内? 比如起始地址4001,站内点号1对应的是4001还是4002?我见过两种做法都有。
- 地址段之间留不留空隙? 建议留一些预留地址,方便后期扩展。比如遥信段用1-4000,遥测段从4500开始,中间留500个地址备用。
- 文档和实际配置是否一致? 这是最常见的问题。拿到点表后,最好抽几个点做实际报文抓包验证。
我的小技巧:每次做完点表配置,我都会写一个简单的校验脚本。比如用Python读取点表,自动计算信息体地址,然后和报文里的实际地址比对。这样能发现90%以上的配置错误。
好了,信息体地址这块就讲到这里。说白了就是记住那个换算公式,然后多留个心眼,别被起始地址给坑了。下一节咱们聊聊实际报文解析,到时候你会看到这些地址是怎么在报文里出现的。
公众号:蓝海资料掘金营,微信deep3321