简介:这是一款面向电力系统自动化工程师、规约测试人员及继电保护调试技术人员的专业级通信规约验证工具,专为DL/T634.5101与DL/T634.5104(即国网101/104)协议的开发、联调与现场验收提供支持,解决报文解析难、主站模拟缺、功能验证不全等实际问题。资源包共169个文件,含65个cfg配置文件(用于定义遥信遥测点表与通信参数)、65个dat数据样本(含真实工况下的101/104原始报文)、12个msg协议字典文件(支撑报文结构化解析),以及exe主程序、dll通信组件、xml配置模板等,整体21.62MB,开箱即用。已有795人学习下载,覆盖设备厂商研发测试、电网公司技改调试等典型场景。用户可直接运行模拟主站工具开展单点/双点遥信监控、定值远程设置、文件读取与固件升级等全流程功能验证,并借助内置报文解析器快速定位ASDU类型、可变结构限定词、原因码等关键字段,显著提升规约一致性测试效率与排错精度。
1. 国网101和104测试软件:为什么现场调试总卡在“报文收不到”“主站连不上”“规约解析乱码”这三关?
这不是一个通用协议分析器,而是一套专为电力调度自动化现场工程师、继保调试员、配电终端(DTU/FTU)厂商测试岗量身打造的轻量级实操工具集。它解决的是真实作业流里最扎心的断点:你拿着新出厂的环网柜终端,在变电站通信屏前接好网线,用标准104主站软件连不上;或者抓到一包pcap,Wireshark里全是十六进制,看不出是遥信变位还是对时命令;又或者客户临时要求“验证下你们设备是否完全兼容国网Q/GDW 12075—2021里101扩展帧格式”。这套软件不依赖庞大SCADA平台,不需配置数据库,单机可运行,核心就两件事——把原始字节流翻译成人话(解析报文工具),再把自己变成那个发命令、等响应、校验超时的“假主站”(模拟主站测试工具)。适合刚接手配网自动化项目的新手快速定位链路层/应用层问题,也适合老工程师在无SCADA环境时做终端出厂前最后一道规约合规性快筛。它不替代正式主站系统,但能让你在3分钟内判断:是终端固件bug?是防火墙策略拦了2404端口?还是自己手写的101地址域填错了字节序?
2. 从零跑通:用内置模拟主站发起一次完整104连接与遥信召唤
2.1 理解104连接建立的关键三步:TCP握手、I-格式启动帧、心跳保活机制
IEC 60870-5-104(简称104)本质是TCP之上的应用层协议,其连接建立远比HTTP复杂。很多现场失败根本不是网络不通,而是卡在协议握手环节。模拟主站必须严格遵循以下顺序:
- TCP三次握手成功后,主站立即发送第一个I帧(类型标识=100,可变结构限定词=0x80,传输原因=0x06“初始化”),且该帧必须携带正确的ASDU地址(即被控站地址)和公共地址(通常为1);
- 被控站(终端)回一个I帧(传输原因=0x07“激活确认”),此时连接才真正进入“已激活”状态;
- 此后主站必须按
t0(通常60秒)周期发送S帧(无数据的确认帧)或U帧(TESTFR激活测试帧)维持心跳,否则终端会在t1(通常15秒)超时后主动断开。
提示:国网Q/GDW 12075—2021明确要求
t1≤15s、t2≤10s、t3≤20s、t0≥60s,若模拟主站未按此设置,终端可能直接拒绝响应。
2.2 启动模拟主站并配置基础参数:IP、端口、地址域与超时值
打开软件主界面,切换到【模拟主站】标签页。关键配置项如下(以Windows版v2.3.1为例,界面元素位置统一):
| 配置项 | 推荐值 | 说明 |
|---|---|---|
| 被控站IP | 192.168.10.100 | 终端实际分配的IP,非网关或主站自身IP |
| 端口 | 2404 | 104标准端口,严禁改为其他值(如8080) |
| 公共地址(APCI) | 1 | 主站全局地址,必须与终端配置一致 |
| ASDU地址(被控站地址) | 1 | 终端在104链路中的唯一ID,常见取值1~255 |
| t1超时(ms) | 15000 | 发送I/U帧后等待响应的最大时间,单位毫秒 |
| t2超时(ms) | 10000 | 发送S帧后等待确认的最大时间 |
| t3超时(ms) | 20000 | 连续未收到任何帧的断连阈值 |
| t0心跳周期(s) | 60 | 必须≥60秒,否则违反国网规范 |
配置完成后点击【连接】按钮。此时软件后台会执行:
- 创建TCP socket并connect目标IP:2404;
- 若成功,立即构造并发送首条I帧(类型标识=100,传输原因=0x06);
- 启动t1定时器监听响应。
# (后台日志示例,非用户操作) [2024-06-12 09:15:22] INFO TCP连接建立成功 → 192.168.10.100:2404 [2024-06-12 09:15:22] SEND I帧: 类型=100, 可变结构=0x80, 原因=0x06, ASDU=1, 公共地址=1 [2024-06-12 09:15:22] WAIT t1超时计时器启动(15s)2.3 执行遥信召唤(总召唤)并验证响应完整性
连接成功后,点击【总召唤】按钮。软件将发送类型标识=100(总召唤)、可变结构限定词=0xFF的I帧。注意:总召唤必须在连接激活后进行,且终端必须支持该功能(部分老旧FTU仅支持分组召唤)。
成功响应应包含:
- 多个连续I帧(每帧含最多128个遥信点);
- 每帧的传输原因=0x0A(响应总召唤);
- 所有遥信值按Q/GDW 12075—2021规定的“单点信息”(类型1)或“双点信息”(类型3)编码;
- 最后一帧的可变结构限定词中
SQ=1(序列号有效),且NUM=实际点数。
若只收到1帧且NUM=1,大概率是终端未正确实现总召唤,需改用【分组召唤】逐个读取。
3. 报文解析工具:把pcap文件里的十六进制还原成带语义的规约字段
3.1 导入原始报文:支持pcap、hex文本、串口日志三种输入源
点击【解析报文工具】标签页,顶部有三个导入入口:
- 【导入PCAP】:选择Wireshark抓取的
.pcap文件,软件自动过滤TCP端口2404或101串口流量(若含串口转以太网设备); - 【粘贴HEX】:将终端调试日志中的十六进制字符串(如
68 04 07 00 01 00)直接粘贴,支持空格/换行/0x前缀多种格式; - 【导入串口日志】:读取RS485转USB设备输出的ASCII日志(如
[2024-06-12 09:20:15] TX: 10 40 01 00 01 16)。
注意:101串口报文起始/结束符为
0x10,104以太网报文起始符为0x68,工具会自动识别协议类型,无需手动切换。
3.2 解析结果逐层展开:从APCI到ASDU再到具体信息体
以一段典型104遥信变位报文为例(HEX):
68 15 00 00 00 00 64 01 06 00 01 00 01 00 01 00 00 00 00 00 00 00 00 00 00解析后界面显示为三级树状结构:
- 第一层:APCI(应用规约控制信息)
- 启动字符:
0x68 - APDU长度:
0x15(21字节) - 控制域:
0x00 00 00 00(I帧,发送序号0,接收序号0)
- 启动字符:
- 第二层:ASDU(应用服务数据单元)
- 类型标识:
0x64(单点遥信,类型1) - 可变结构限定词:
0x01(1个信息体,无序号) - 传送原因:
0x06(自发,即遥信变位) - 应用服务数据单元公共地址:
0x0001(被控站地址1)
- 类型标识:
- 第三层:信息体(Information Element)
- 信息体地址:
0x0001(遥信点号1) - 状态值:
0x01(合闸/动作) - 品质描述词:
0x00(无异常)
- 信息体地址:
这种结构化展示让调试员一眼定位:是点号填错(信息体地址=0x0001),还是状态值反了(应为0x00却收到0x01),或是品质位异常(本应0x04却为0x00)。
3.3 自定义解析规则:适配国网扩展帧与私有信息体
Q/GDW 12075—2021在标准101基础上增加了扩展帧格式(如类型136:故障录波启动;类型137:保护事件)。默认解析器无法识别这些类型。此时需点击【规则管理】→【添加自定义ASDU】:
| 字段 | 值 | 说明 |
|---|---|---|
| 类型标识 | 136 | 故障录波启动 |
| 信息体元素 | UINT16,UINT32,BCD | 按国标定义字段类型 |
| 字段名 | 录波序号,故障相别,启动时间 | 便于阅读的中文名 |
| 字节偏移 | 0,2,6 | 从信息体起始位置计算 |
添加后,当解析到类型136报文时,界面将自动按此规则拆解,并高亮显示故障相别=0x03(AB相)等语义化结果。
4. 避坑指南:现场调试中最常踩的5个“玄学”问题及血泪解法
4.1 现象:模拟主站显示“连接成功”,但点击【总召唤】无任何响应
原因:终端虽接受TCP连接,但未正确响应I帧(传输原因=0x06),导致主站未进入“激活”状态。常见于终端固件未完成初始化或看门狗复位中。
解决:勾选【模拟主站】页的“启用连接后自动发送初始化命令”选项,并将t1超时调至20000(20秒),观察日志中是否出现RECV I帧: 原因=0x07。若仍无,用Wireshark抓包确认终端是否真的发出了激活确认帧。
4.2 现象:解析工具将68 04 07 00 01 00识别为104,但实际是101串口报文
原因:该HEX开头68在101串口帧中是无效字符(101起始符为0x10),但软件误判为104以太网帧。
解决:在解析界面点击【强制指定协议】→ 选择“IEC60870-5-101(串口)”,再粘贴10 40 01 00 01 16,即可正确解析为“遥控预置”命令。
4.3 现象:遥信点值全为0x00,但现场开关明明已合闸
原因:终端上报的是“双点遥信”(类型3),而解析工具默认按“单点遥信”(类型1)解码,导致状态位被错读。
解决:在解析结果中找到ASDU层,确认类型标识=0x03,然后右键该信息体→【重解析为双点信息】,状态值将显示为0x03(确定合闸)而非0x00。
4.4 现象:模拟主站发送遥控命令后,终端返回“确认超时”,但Wireshark显示终端已发回确认帧
原因:主站t1超时值(15000ms)小于终端处理延迟(如固件需200ms解析+100ms执行+50ms组帧),导致主站在收到确认前已判定失败。
解决:将t1值临时调大至25000,并勾选【启用命令重发】(最多3次),避免单次抖动导致误判。
4.5 现象:导入pcap后解析出大量U帧: TESTFR_ACT,但无I帧交互
原因:终端处于“测试模式”,仅响应心跳帧,拒绝所有应用层命令(总召唤、遥控等)。
解决:检查终端运行状态指示灯或登录其Web界面,确认是否启用了“调试模式”或“测试使能”开关,关闭后重启终端通信进程。
5. 进阶技巧:用脚本批量验证100台终端的规约一致性与响应时延
5.1 生成标准化测试任务列表:JSON格式定义测试场景
与其手动对每台终端点一遍【总召唤】【遥控】【对时】,不如用脚本驱动。软件支持导入JSON任务列表,文件test_plan.json示例如下:
{ "tasks": [ { "name": "DTU-001_遥信总召", "ip": "192.168.10.101", "port": 2404, "asdu_addr": 1, "steps": [ {"action": "connect", "timeout": 15000}, {"action": "interrogate", "type": "total", "timeout": 30000}, {"action": "disconnect"} ] }, { "name": "DTU-002_遥控测试", "ip": "192.168.10.102", "port": 2404, "asdu_addr": 2, "steps": [ {"action": "connect", "timeout": 15000}, {"action": "control", "ioa": 1001, "value": 1, "timeout": 5000}, {"action": "delay", "ms": 2000}, {"action": "control", "ioa": 1001, "value": 0, "timeout": 5000}, {"action": "disconnect"} ] } ] }逻辑说明:每个
task定义一台终端的完整测试流程;steps数组按顺序执行;control动作需指定信息体地址(ioa)和目标值(1=合闸,0=分闸);delay用于模拟人工间隔。
5.2 执行批量测试并导出结构化报告
在软件中点击【批量测试】→【导入任务列表】,选择test_plan.json,点击【开始执行】。后台将:
- 逐个建立TCP连接;
- 按步骤发送对应帧;
- 记录每步耗时(如“总召唤响应时间:1240ms”);
- 标记失败步骤(如“遥控超时”);
- 生成
report_20240612.csv,含列:设备名, IP, 步骤, 状态(成功/失败), 耗时(ms), 错误码。
设备名,IP,步骤,状态,耗时(ms),错误码 DTU-001_遥信总召,192.168.10.101,interrogate,成功,1240, DTU-002_遥控测试,192.168.10.102,control,失败,5000,TIMEOUT5.3 用Python脚本分析报告,定位共性缺陷
将CSV导入Pandas,快速发现规律:
import pandas as pd df = pd.read_csv("report_20240612.csv") # 统计各步骤失败率 fail_rate = df.groupby('步骤')['状态'].apply(lambda x: (x=='失败').mean()) print(fail_rate) # 输出:interrogate 0.00 # control 0.35 ← 35%遥控失败,需重点查固件版本 # 查看所有遥控失败的设备IP failed_ctrl = df[(df['步骤']=='control') & (df['状态']=='失败')]['IP'].tolist() print("遥控异常设备:", failed_ctrl) # ['192.168.10.102', '192.168.10.105']血泪经验:某次批量测试发现12台同型号DTU在
t1=15000时遥控失败率35%,调大t1至25000后降至0%——这直接推动我们向厂家反馈固件优化需求。工具的价值不在“能测”,而在“能横向对比、量化问题、驱动改进”。
我习惯把每次现场调试的test_plan.json和report_*.csv按日期归档,半年后翻出来,能清晰看到某款终端从“遥控成功率82%”提升到“100%”的过程。这种可追溯、可量化的记录,比口头汇报“基本正常”有力得多。希望帮到你。
本文还有配套的精品资源,点击获取