简介:南瑞继保网络103规约文档面向电力系统自动化、远动通信方向的工程师与调试人员,聚焦IEC 60870-5-103标准在南瑞继保设备上的实现与扩展。内容围绕主从通信结构展开,涉及遥测、遥信、遥控、遥调四遥功能,并延伸至兼容性扩展、安全增强、性能优化、故障处理、自定义服务、网络适应性及数据编解码等关键议题,适合从事变电站设计、调试与维护的技术人员查阅参考。资源包共1个doc文件,约3.38MB,便于离线阅读与归档。目前已有1980人学习下载,说明其在电力通信协议学习群体中具有一定参考价值。读者可借此梳理103规约的报文结构、命令帧与应答帧处理逻辑,理解南瑞继保在标准基础上的功能码扩展与通信机制调整,为现场调试、二次开发及系统集成提供协议层面的支撑,也可作为排查通信异常、优化传输效率时的辅助资料。
1. 南瑞继保网络103规约:为什么它成了电力远动里绕不开的“方言”
如果你拆开一座 110kV 变电站的通信屏柜,大概率会看到几台装置用同一条以太网线或串口线连着后台。它们之间跑的那套“方言”,十有八九就是 103 规约。很多人第一次接触它,会觉得它像一份加密电报:报文短、字段密、一问一答,还带着校验和。可一旦你搞懂它为什么长这样,就会发现这套设计其实是被电力系统的物理约束逼出来的——串口带宽窄、电磁干扰强、装置 CPU 弱,任何一点冗余都是奢侈。
南瑞继保网络103规约,本质上是把 IEC 60870-5-103 这套国际标准,按国内变电站的实际工况做了工程化落地。它解决的核心问题只有一个:让主站和几十上百台从站装置,在不可靠的物理链路上,依然能可靠地完成遥测、遥信、遥控、遥调这“四遥”数据交换。你不需要背下所有报文格式,但必须理解它为什么用主从轮询、为什么帧长卡得那么死、为什么校验要放在固定位置。搞懂这些,调试时看到“报文超时”或“校验错”才不会两眼一抹黑。
2. 主从轮询与帧结构:103 规约为什么不能“谁想说就说”
2.1 主从模式不是选择,而是被串口逼出来的
103 规约的链路层采用严格的主从结构:一个主站,多个从站,主站发问,从站才答。从站之间不会互相通信,也不会主动上报——除非你用了南瑞继保扩展的“突发上送”机制,但那是后话。为什么这么设计?因为早期远动通道就是一对双绞线或音频电缆,多个装置挂在同一对线上,如果允许任意装置随时发言,信号就会撞在一起,变成一团乱麻。主从轮询相当于给每个从站分配了固定的发言时间片,主站按地址顺序点名,被点到的从站才能占用信道。
这种机制在链路层叫“非平衡传输”。主站发出的帧叫“请求帧”,从站回的叫“响应帧”。每个帧都带一个链路地址,从站只响应跟自己地址匹配的请求。地址范围通常是 1 到 254,0 是广播地址,255 是全局地址。广播帧所有从站都收,但不回复;全局帧则要求所有从站都回复,主站再逐个处理。实际工程里,主站轮询一圈的时间直接决定了遥测刷新周期。如果一条总线上挂了 30 台装置,每台轮询耗时 20ms,那刷新周期就是 600ms 左右。想再快?要么减少装置数量,要么提高波特率,要么把非关键数据放到慢速轮询组里。
2.2 帧格式:为什么固定长度反而是优点
103 规约的帧结构分可变帧长和固定帧长两种。可变帧长用于传输数据,固定帧长用于链路控制。先看可变帧长的结构:
| 字段 | 长度 | 说明 |
|---|---|---|
| 启动字符 | 1 字节 | 固定 0x68 |
| 长度 | 1 字节 | 用户数据长度 |
| 长度 | 1 字节 | 重复长度,用于校验 |
| 启动字符 | 1 字节 | 再次固定 0x68 |
| 控制域 | 1 字节 | 帧类型和传输方向 |
| 链路地址 | 1 字节 | 从站地址 |
| 应用服务数据单元 | N 字节 | 具体数据 |
| 校验和 | 1 字节 | 从控制域到数据单元的算术和 |
| 结束字符 | 1 字节 | 固定 0x16 |
固定帧长则省掉了长度字段和数据单元,只有 5 个字节:启动字符 0x10、控制域、链路地址、校验和、结束字符 0x16。固定帧长用来做链路确认、请求链路状态、复位链路等。为什么要把帧长卡得这么死?因为从站装置的串口接收缓冲区往往只有几十字节,如果帧长不固定,解析逻辑就要处理任意长度,RAM 和 CPU 都吃不消。固定帧长让从站可以用状态机逐字节判断,收到 0x10 就知道是短帧,收到 0x68 就进入长帧解析。这种“看头识帧”的做法,在低端单片机上是最高效的。
校验和只算控制域到数据单元,不包括启动字符和结束字符。算术和取低 8 位,实现起来就是一个循环累加。别小看这个简单校验,它在变电站强电磁环境下能挡掉大部分位翻转。如果校验错,从站直接丢弃,主站超时重发。重发次数一般设 3 次,超过就报链路中断。
2.3 控制域:一个字节里塞进了帧类型和传输方向
控制域是 103 规约里最“抠门”的设计。一个字节 8 个 bit,要同时表达帧类型、传输方向、帧计数位和请求访问位。常见的控制域值有:
- 0x10:主站发送的“请求链路状态”
- 0x11:从站回复的“链路状态”
- 0x0A:主站发送的“复位链路”
- 0x0B:从站回复的“链路复位确认”
- 0x08:主站发送的“召唤一级数据”
- 0x09:从站回复的“一级数据响应”
- 0x0A:主站发送的“召唤二级数据”
- 0x0B:从站回复的“二级数据响应”
这些值不是随便定的,而是按 IEC 60870-5-103 的链路控制规则编码。bit4 到 bit7 表示帧类型,bit0 到 bit3 表示功能码。主站和从站用不同的功能码区分方向。比如 0x10 和 0x11 只差最低位,但方向完全相反。这种设计让从站解析控制域时,只需要查表就能知道该做什么,不需要复杂的条件判断。
一级数据和二级数据的区分也很关键。一级数据是优先级高的,比如遥信变位、保护动作事件;二级数据是常规遥测。主站轮询时,先召唤一级数据,再召唤二级数据。如果从站有一级数据待发,就在响应帧里带上;如果没有,就回一个固定帧表示“无一级数据”。这样主站不用等太久,就能把紧急事件先收上来。
3. 应用层报文:遥测、遥信、遥控是怎么编码的
3.1 信息对象地址与功能类型
应用服务数据单元(ASDU)是 103 规约应用层的核心。一个 ASDU 包含类型标识、可变结构限定词、传送原因、公共地址、信息对象地址和具体信息元素。类型标识决定这是什么数据,比如 0x09 是测量值,0x01 是带时标的遥信,0x2E 是带时标的电能量。可变结构限定词说明信息对象的数量是单个还是多个。传送原因说明这是周期上送、突发上送还是响应总召唤。
信息对象地址(IOA)是每个数据点的唯一编号。在 103 规约里,IOA 通常由功能类型(FUN)和信息序号(INF)组成。FUN 表示装置内的功能块,比如保护功能、测量功能、控制功能;INF 表示该功能块内的具体信息序号。南瑞继保在实现时,会对 FUN 和 INF 做扩展,把一些自定义的保护定值、故障录波信息映射到保留地址段。这样主站不需要改协议栈,只要按地址表解析就行。
3.2 遥测编码:为什么用归一化值而不是浮点数
遥测值在 103 规约里通常用归一化值表示,范围是 -1 到 1 之间的定点数,用两个字节传输。最高位是符号位,剩下 15 位表示数值。实际物理量要乘以一个系数才能还原。比如额定电压 100V 对应归一化值 1.0,那实际 80V 就是 0.8,编码为 0x6666。为什么不用 IEEE 754 浮点数?因为浮点数占 4 个字节,解析需要 FPU,而很多保护装置用的单片机没有硬件浮点单元。归一化值用整数运算就能处理,省 CPU 省带宽。
南瑞继保在一些扩展报文里也支持短浮点数,但那是给后台监控系统用的,不是给保护装置之间的实时通信。实时通信里,归一化值加系数的方式已经够用。系数一般存在主站的点表里,从站只负责传原始码值。这样从站不需要知道 CT/PT 变比,换互感器时只改主站点表,不用下装装置。
3.3 遥控与遥调:为什么需要“选择-执行”两步
遥控和遥调是 103 规约里安全性要求最高的操作。主站不能直接发“合闸”命令,必须先发“选择”命令,从站确认后,再发“执行”命令。这叫“选择-执行”机制。为什么这么麻烦?因为电力系统里误遥控的代价可能是跳闸停电。选择命令相当于问从站:“你准备好执行这个操作了吗?”从站检查自身状态、闭锁条件、操作权限,都通过后才回肯定确认。主站收到确认,再发执行命令。如果从站没准备好,就回否定确认,主站放弃操作。
南瑞继保在网络 103 规约里,对遥控报文增加了校验字段和超时重传机制。选择命令和执行命令之间有时间窗口,通常是 30 秒。超时没执行,从站自动撤销选择状态。执行命令里还带遥控性质(直接控制、选择控制)和控制值(合、分)。从站收到执行命令后,先校验选择状态是否还在,再驱动出口继电器。整个过程从站要记录操作日志,包括操作时间、操作源、操作结果,方便事后追溯。
4. 避坑与排查:调试 103 规约时最容易翻车的几个点
4.1 现象:主站一直报“链路超时”,但从站指示灯正常闪烁
原因:链路地址不匹配。主站轮询的地址和从站实际设置的地址不一致,从站收到帧后发现地址不是自己的,直接丢弃,不回复。主站等不到响应,就报超时。从站指示灯闪烁是因为它确实收到了电信号,但没通过地址过滤。
解决:用串口监听工具抓包,看主站发的链路地址是多少,再核对从站拨码或配置。南瑞继保的装置一般在液晶菜单里能看到通信地址,有些型号用拨码开关,有些用配置工具下装。注意广播地址 0 和全局地址 255 的区别,别把全局地址当广播用。
4.2 现象:遥测值跳变,偶尔出现满码或零码
原因:校验和计算范围搞错。有些开发者自己写解析程序时,把启动字符和结束字符也算进校验和,导致校验结果和从站不一致。从站校验失败就丢弃,主站超时重发,重发几次后可能收到一个恰好校验通过的错帧,数据就跳变了。
解决:严格按规约算校验和,只累加控制域到数据单元。用抓包工具对比原始字节和校验值,确认累加范围。南瑞继保的报文里,校验和是算术和取低 8 位,不是 CRC。别把 CRC 校验的代码直接搬过来用。
4.3 现象:遥控选择成功,执行时从站回否定确认
原因:选择状态超时。主站发完选择命令后,隔了太久才发执行命令,超过从站设定的选择保持时间。从站已经自动撤销了选择状态,执行命令来的时候找不到对应的选择记录,就回否定。
解决:检查主站遥控流程的代码,选择和执行之间的间隔不能超过从站配置的超时时间。一般设 10 到 30 秒。如果网络延迟大,适当调大从站的超时参数。南瑞继保的装置里,这个参数叫“遥控选择超时”,在定值菜单里能改。
4.4 现象:总召唤时从站回复的数据不完整,缺少某些遥测点
原因:信息对象地址映射表不一致。主站的总召唤请求里带了召唤分组,从站只上送该分组内的点。如果主站的点表里某个点归到了 A 组,但从站配置里归到了 B 组,总召唤 A 组时就不会上送这个点。
解决:核对主站和从站的信息对象地址表,确保 FUN 和 INF 的映射一致。南瑞继保的装置一般提供点表导出功能,导出来和主站点表逐行比对。特别注意扩展地址段,标准 103 规约没定义的地址,不同厂家可能映射到不同功能。
4.5 现象:网络 103 规约在 TCP 上跑,偶尔丢帧但串口监听正常
原因:TCP 粘包。103 规约原本是为串口设计的,帧与帧之间靠启动字符和结束字符定界。放到 TCP 流里,如果接收方一次读到的数据包含多个帧,或者一个帧被拆成多次读到,解析就会出错。有些实现没有处理粘包,直接把一次 recv 的数据当成一帧,结果丢帧。
解决:在 TCP 接收缓冲区里做帧同步,按启动字符 0x68 或 0x10 找帧头,再按长度字段截取完整帧。不要假设一次 recv 就是一帧。南瑞继保的网络 103 实现里,一般会在应用层加一个帧缓存队列,收到数据先入队,再逐帧解析。
5. 从标准到工程:南瑞继保做了哪些取舍
标准 103 规约只定义了最基本的远动通信框架,但国内变电站的实际需求远比标准复杂。南瑞继保在实现网络 103 规约时,做了几层工程化扩展,这些扩展不是拍脑袋加的,而是被现场问题逼出来的。
第一层扩展是网络传输适配。标准 103 基于串行链路,南瑞继保把它映射到 TCP/IP 上,保留了原有的链路控制机制,但在 TCP 层之上增加了帧同步和超时重传。这样做的好处是保护装置不用改硬件,直接用以太网口就能接入。代价是 TCP 的流式传输和 103 的帧定界有天然冲突,必须在应用层做粘包处理。常见的实现思路是在 TCP 连接建立后,主站和从站约定一个固定的帧间隔,或者用启动字符做帧头搜索。我一般会建议在接收端维护一个滑动窗口,按 0x68 和 0x16 配对提取完整帧,再交给协议栈解析。
第二层扩展是信息对象地址的重新映射。标准 103 的 FUN 和 INF 范围有限,南瑞继保把保护装置的定值、故障录波、事件顺序记录等数据映射到扩展地址段。这些扩展地址不在标准里,但主站只要按点表解析就能用。这种做法的风险是不同版本的装置可能映射不同,升级固件后点表要跟着改。所以现场调试时,第一步永远是核对点表版本。
第三层扩展是安全机制。标准 103 没有身份验证和加密,南瑞继保在一些对安全要求高的场景里,增加了操作员权限校验和报文认证码。遥控命令里带操作员 ID 和校验码,从站验证通过才执行。这增加了报文长度,但换来了操作安全性。取舍点在于:加密会消耗 CPU,低端装置可能跑不动,所以只在关键操作上启用,常规遥测还是明文。
第四层扩展是性能优化。标准 103 的确认机制比较慢,南瑞继保在一些实现里用了“窗口确认”,主站可以连续发多帧再等确认,减少往返延迟。但窗口不能开太大,否则从站缓冲区溢出。一般窗口大小设 3 到 5,根据装置处理能力调整。
这些取舍背后有一个共同逻辑:电力系统通信的第一要求是可靠,第二是实时,第三才是效率。任何优化都不能牺牲可靠性。所以你会看到 103 规约的帧长很短、校验很简单、重传很频繁。这些设计在通用通信领域看起来“落后”,但在变电站里,它们是最不坏的选择。
从那以后我每次调试 103 规约,都强制走一遍“抓包-对点表-验校验-测遥控”的流程,不跳过任何一步。希望帮到你。
本文还有配套的精品资源,点击获取