国网101/104规约测试软件:报文解析与模拟主站联调实战指南
简介面向电力系统自动化测试与运维人员的国网101/104规约测试软件包内置101和104报文解析工具与模拟主站测试工具支持单点遥信、双点遥信、远程升级、文件读取、定值设置等典型功能符合《配电自动化系统应用 DL/T634.5104-2009 实施细则》要求。压缩包共有169个文件以cfg、dat报文配置与数据文件为主同时包含exe主程序、dll动态库以及txt、xml说明与配置文件整体大小约21.62MB便于快速部署使用。软件可辅助工程师完成规约报文逐字段解码、子站通信性能与链路状态验证、远程参数整定及故障快速定位适用于产品研发、出厂检测和现场运维等多个阶段。目前已有779人学习下载适合电网运检人员、设备厂商与自动化工程师作为日常规约调试的实用工具。 干电力远动这一行的人办公桌上要是没几个顺手的规约测试工具联调起来是真的难受。最近我在配合一个变电站的远动终端设备改点翻来覆去用的就是这套国网101和104测试软件。它其实是个组合包里面既有101和104的报文解析工具又有国网101-104模拟主站测试工具。前者负责把抓回来的十六进制报文一行行拆开让你看清每个字节在说什么后者直接扮演调度主站跟RTU或测控装置走一遍链路建立、总召唤、遥控、时钟同步这些全流程。对做变电站调试、厂站端联调、规约一致性测试的朋友来说这套工具能省掉大半写脚本、抓包、手工算校验的苦活。不管你是刚接触电力规约的新人还是被各种非标报文折磨过的老手这篇文章里的思路和踩坑记录应该都用得上。1. 这套工具到底解决什么问题1.1 101和104规约的关系很多刚入行的朋友会把101和104当成两个完全不相关的协议其实它们本质上是同一套应用层数据只是换了不同的“运输方式”。101规约是IEC 60870-5-101走串口通信常见RS-232或者RS-485波特率一般是9600或更高。它定义了FT1.2帧格式分固定帧长和可变帧长链路层有主站轮询、从站应答这套逻辑。变电站里的测控装置、RTU以前基本都是靠101把遥测、遥信、电度这些数据送回调度。104规约是IEC 60870-5-104说白了就是“101的ASDU搬到TCP/IP上跑”。它把原来串口那一套链路层逻辑简化成APCI通过TCP连接传输默认端口是2404。现在的调度数据网、综合自动化系统基本都是104为主。但应用层的ASDU结构像类型标识、信息体地址、传送原因这些两个规约是高度一致的。这也是厂家把解析工具和模拟主站工具打包在一起的原因你调试101时踩过的ASDU坑在104里一样会遇到只是帧头和传输方式不同。工具统一处理这两类报文联调时就不用换来换去。1.2 国网场景下为什么需要专属工具标准IEC规约是一回事国网工程应用是另一回事。国网系统内很多项目会参考Q/GDW相关规范和DL/T 634.510X系列标准实际工程中常见的差异包括链路地址可能采用2字节而不是IEC默认的1字节且字节序通常是低字节在前信息体地址范围、遥测/遥信起始地址不同省网、不同项目可能完全不同对特定类型标识的使用要求更精细比如软遥信、SOE事件、电度召唤都有明确规范104规约的公共地址、TCP端口在某些内网项目里也有特殊约定。通用型的报文分析软件比如Wireshark自带的104解析插件能看个大概但遇到国网扩展和非标地址配置解析结果经常对不上更不用说模拟主站去主动做总召唤和遥控了。所以这套工具的价值就在于把国网工程里常见的地址配置、类型配置做成了可配置项解析和模拟都能贴合实际项目。2. 报文解析工具怎么用才有价值2.1 从一串十六进制到看得懂的字段报文解析工具的界面通常不复杂核心功能就是把十六进制报文粘贴进去然后自动识别帧格式、剥离链路层、解析ASDU。用的时候别光看结果要跟着它的解析路径走一遍才知道规约帧到底长什么样。以101规约可变帧长报文为例68 0E 0E 53 01 00 64 01 06 00 01 00 00 00 00 14 D4 16工具会按FT1.2帧格式拆成这些部分字段字节值含义启动字符10x68可变帧长标识长度L10x0E后续含控制域到校验和的字节数长度L重复10x0E与前一字节相同控制域C10x53主站发送数据/确认FCB/FVC确认位有效链路地址A20x01 0x00链路地址1低字节在前类型标识10x64总召唤100可变结构限定词VSQ10x01离散信息1个信息体传送原因COT10x06激活公共地址20x00 0x01公共地址1信息体地址30x00 0x00 0x00地址0总召唤时固定召唤限定词10x14总召唤20帧校验CS10xD4从控制域到召唤限定词的累加和结束字符10x16帧结束这个例子是主站主动发起的总召唤。类型标识0x64在101和104里都是总召唤传送原因0x06是激活意思就是“主站要求从站把全部遥测遥信上送一遍”。解析工具如果能把这些字段逐项拆出来联调效率立刻不一样。2.2 解析时最容易忽视的三个细节第一个是控制域里的FCB和FCV位。很多刚上手的人只看功能码不看帧计数位。实际上101规约主站每发送一帧确认帧FCB位要翻转一次0→1→0→1从站会校验这个翻转关系。解析工具可以标出这一个帧的FCB值但你要结合前后帧去判断主站翻转是否正确。如果从站一直不回帧先看看是不是FCB翻转没按规约走。第二个是链路地址和公共地址的字节序。IEC标准里多字节地址一般低字节在前但有些老设备、非标设备是高字节在前。解析工具按低字节在前解析能读出地址1如果设备实际是0x0001高字节在前解析结果就完全对不上。这种问题在联调现场经常伪装成“链路不通”实际上是地址序设置反了。第三个是ASDU里信息体的连续和离散结构。可变结构限定词的最高位是SQ位SQ1表示信息体地址连续后面每个信息元素只带数据和品质描述SQ0表示信息体地址离散每个信息元素都要跟完整的信息体地址。解析工具需要处理好这个位否则连续几个遥测数据会解析成一堆乱码。遇到所谓“解析错位”先看是不是把连续结构当成离散结构处理了。2.3 用解析工具验证一个真实报文的完整过程我在现场调试时有个习惯任何从站上送的报文都要先跑一遍解析工具再人工核对关键字段。比如从站主动上送一个单点遥信变位报文原始报文类似68 0F 0F 89 01 00 01 01 03 00 01 00 01 00 00 00 01 13 16解析工具会告诉我类型标识0x01是单点遥信传送原因0x03是突发变位公共地址1信息体地址0x000001信息元素值1合位。这些关键信息一眼就能看到。但我不会只看结论。我还会人工确认控制域0x89表示从站以“响应帧/数据”方式上送同时ACD位为0说明从站没有等待主站的其他请求。然后我再回头翻装置日志确认是不是这个间隔确实发生了遥信变位。工具帮我把十六进制翻译成人话但最后签字的逻辑判断还是得靠人。3. 模拟主站测试工具的实战流程3.1 连接配置与链路建立模拟主站工具最常用的场景就是代替真实调度主站去测厂站端设备。第一步永远是配置连接参数。如果是101规约要配置串口号、波特率、数据位、校验位、停止位。大部分厂站设备默认是9600,8,E,1但也有一些老装置用偶校验、两个停止位必须跟现场确认。串口参数错了链路层根本起不来工具显示的现象就是“发送复位链路命令后无响应”。如果是104规约配置就简单多了填对端IP和端口号。默认端口2404但国网内网项目里遇到非标端口的概率不低比如自定义成2405或者3404所以工具一定要支持端口可配置。连接方向也要注意调试软件一般既能主动作为TCP客户端去连厂站也能作为TCP服务端监听厂站主动接入。真实调度主站通常是服务端厂站侧终端主动建链所以模拟主站如果需要贴近现场必须两种模式都能切。链路建立的过程101和104稍有区别。101要发复位链路命令从站返回确认然后主站请求链路状态从站回链路状态链路才算建立。104不用专门做“链路复位”TCP连接建立后主站直接发送U帧STARTDT激活从站回STARTDT确认随后就可以传数据了。如果工具能把这些状态机步骤可视化联调会省心很多。3.2 典型测试操作总召唤、时钟同步、遥控链路建立后第一步通常是总召唤。工具界面上一般有“总召唤”按钮点下去工具会生成一个类型标识0x64、传送原因0x06的ASDU通过101或104封装发送。这时候你观察的重点有两个。第一从站有没有回“总召唤确认”帧也就是传送原因0x07、类型标识0x64的帧第二从站有没有紧接着把所有遥测遥信数据全部上送。有的老设备只回确认不上数据或者上送数据到一半就停这都是规约实现不完整的表现。模拟主站工具的价值就在于它把响应的时序和帧间隔记录下来你能直观看到从站行为是否符合标准。时钟同步也一样。工具发送类型标识0x67103的时钟同步命令从站应该回确认。现场经常遇到的问题是时钟同步命令里的时间精度不对比如毫秒位没填好或者时区处理错误导致装置时间同步后差8小时。这个问题解析工具也能帮忙直接把报文中带的时间字段拉出来看对比实际时间就知道是工具的问题还是设备的问题。遥控测试是模拟主站的重头戏。先选择控制方向选择、执行、撤销。遥控选择命令类型标识是0x2D45执行命令是0x2E46撤销是0x2F47双点遥控的信息元素通常用0x81合和0x01分。标准流程是主站下发“遥控选择”命令从站回“选择确认”主站下发“遥控执行”命令从站回“执行确认”同时执行出口动作。有的装置逻辑是选择确认后必须在一定时间内收到执行命令超时则自动撤销。模拟主站工具如果支持选择与执行之间的时间间隔配置就能专门用来测装置的防抖和超时控制逻辑。3.3 把手动测试变成可回归的用例模拟主站工具除了手工点按钮最好还要支持报文序列脚本。常见做法是把“总召唤→等待数据→时钟同步→遥控选择→遥控执行→验证返回”整条链路录制成一个测试序列然后一键执行。我在项目里通常会把测试序列分成三类链路层用例复位链路、请求链路状态、TESTFR激活验证从站在各种状态下的帧响应应用层用例总召唤、电度召唤、时钟同步、单点/双点遥控验证ASDU内容和时序异常用例故意构造CRC错误帧、超长帧、未知类型标识看从站是否可靠丢弃或报警。把这些固化成用例每次改配置或者升级装置后跑一遍比每次手动敲十六进制报文靠谱得多。4. 联调中的高频问题与排查思路4.1 总召唤无响应这是碰到最多的现象。报文发出去从站没反应。我用工具排查的顺序基本固定先看链路层通不通101则看复位链路和链路状态请求有没有确认帧104则看TCP连接和STARTDT激活有没有成功再看ASDU公共地址对不对总召唤帧里的公共地址必须和从站配置一致很多厂站地址不是1而是按调度命名设置的最后看召唤限定词国网部分项目要求召唤限定词是0x14但个别设备要求0x00或者自定义值需要看具体规约实施细则。如果以上都正常就把报文用解析工具完整拉一遍重点看控制域功能码和FCB位。主站发出的总召唤控制域一般是0x53FCB所在位会随帧序号翻转。有些从站对FCB要求很严格上一条帧没翻转它直接就丢弃当前帧。4.2 遥控执行返回超时遥控选择能确认执行也返回确认但现场机构不动作或者动作了但信号没回来。模拟主站工具能帮你把流程拆开看检查执行命令里的信息体地址是否和选择命令一致选择一个地址、执行另一个地址是低概率但确实存在的手误检查双点信息的值0x81代表合0x01代表分所以遥控用的最大值和最小值位必须按“双点信息”规则处理不能默认当成单点检查执行命令的传送原因选择用0x06激活执行也用0x06激活但如果用了0x12事件激发之类老设备可能不认。工具里如果记录了每次遥控命令的往返时间还可以对比“选择→确认”与“执行→确认”的时延判断是网络问题还是装置内部出口逻辑耗时。4.3 解析错位与粘包、半包处理101走串口容易出半包和粘包104走TCP同样有TCP粘包问题。解析工具要能正确处理“一次收到多帧”或者“一帧分两次收”的情况。我遇到过好几次这样的情况抓回来的日志里报文被解析成乱码仔细一看其实前面少了半帧或者两帧粘在一起。解析工具如果提供“按启动字符0x68重新对齐”的功能就能快速定位问题。现场排查时还有一个笨但有效的办法把原始十六进制按字节递增输出人工数长度字段确认L字段和实际剩余字节数是否一致。如果L说后面15个字节实际只剩13个那就是通讯中断导致的半包。粘包更好理解就像水管里连续流过来两瓶水接口程序没分开第二瓶水被当成第一瓶的剩余部分。解析工具需要把每帧按L字段截断余下的再作为下一帧解析。模拟主站工具也最好能做到自动拆包重组否则收到的数据本来就错位后面所有判断都没有意义。4.4 高频问题速查表现象可能原因排查动作链路建立失败串口参数错误或TCP端口不对核对波特率/校验位/端口号总召唤无响应公共地址不匹配解析报文看ASDU公共地址总召唤回确认但无数据被召唤对象为空或装置未启用检查装置遥测遥信配置遥控选择超时信息体地址错误或FCB翻转错解析工具核对地址和控制域遥控执行超时双点值写错或装置逻辑拒绝核对0x81/0x01和传送原因数据解析乱码字节序不匹配或半包粘包检查地址字节序、L字段对齐时间同步后差8小时时区或毫秒字段处理错误解析时间字段和装置本地时间对比需要说明的一点是模拟主站工具能复现现象、辅助定位但有些问题根子不在规约层而在接线、出口继电器、信号回路这些二次回路上。测试软件好用但不能代替现场查线。5. 实操总结与工具扩展方向这套工具用下来我最深的体会是它真正解决的是“规约不可见”的问题。101和104的报文全是十六进制如果不解析人和设备之间就像隔着一堵墙。有了解析工具墙就变成玻璃窗你能看到每一个字段的意图有了模拟主站你还能反过来主动给设备出题看它是不是按标准交卷。不过工具也不是万能的。它再怎么智能也替代不了调试人员对规约本身的理解。我建议每个用这套工具的人都亲手抄写几帧报文人工计算一遍校验和再用工具验证。这样做一次之后你对帧结构、ASDU布局的理解会扎实很多后面遇到工具解析不出来的非标报文也更有底气。另外如果这套工具能开放脚本接口或者支持配置文件导入导出使用价值会再上一个台阶。比如把项目里整套点表遥测地址、遥信地址、遥控地址导入后自动生成测试用例然后一键跑完整套联调。我目前的临时方案是把常用报文序列存成文本模板测试时用工具载入再配合解析工具抓包比对。等以后手头项目多了我会专门整理一套按点表批量生成测试用例的脚本让模拟主站工具在出厂验收和现场联调中发挥更大作用。最后再分享一个操作习惯每次联调完我都会把现场抓到的关键报文和解析结果导出存档标注好项目名称、设备型号、规约版本和调试点。这些东西看着不起眼到第二个项目遇到类似问题时翻出来对比一下往往能直接定位问题省掉大把从头排查的时间。工具是死的使用习惯是活的把工具和生产流程结合起来才算真正把它用透了。本文还有配套的精品资源点击获取