调试 104 通道时,文档看不出的问题基本都出在时序上:STARTDT 没确认就发 I 帧、总召唤没有终止、S 帧丢了没人补。本文把一条 104 连接从建立到对时的报文顺序摊开,所有示例按 IEC 60870-5-104:2006(国内对应 GB/T 18657.104)的帧格式给出,可直接和抓包工具对照。文中只描述标准规定,不涉及任何具体产品的性能宣称。
每个 APDU 都以 0x68 开头,第二字节是长度(控制域 4 字节 + ASDU 的字节数)。三种帧靠控制域第 1 个字节的最低两位区分:
| 类型 | 控制域首字节 | 含义 | 示例 |
|---|---|---|---|
| I 帧 | bit0=0 | 带 ASDU 的信息传输,含 15 位发送序号 N(S) 与接收序号 N(R) | 68 0E 00 00 00 00 … |
| S 帧 | bit0=1, bit1=0 | 仅确认,不含 ASDU | 68 04 01 00 02 00 |
| U 帧 | bit0=1, bit1=1 | 链路控制:STARTDT / STOPDT / TESTFR | 68 04 07 00 00 00 |
TCP 连上只代表链路通,数据传送要由 STARTDT 启动。常用的三个 U 帧报文(控制域 4 字节固定为 第1字节+3 个 0):
启动数据传输 68 04 07 00 00 00 (STARTDT act)
68 04 0B 00 00 00 (STARTDT con)
链路测试 68 04 43 00 00 00 (TESTFR act)
68 04 83 00 00 00 (TESTFR con)
停止数据传输 68 04 13 00 00 00 (STOPDT act)
68 04 23 00 00 00 (STOPDT con)
常见坑:① 收到 STARTDT act 后必须先回 STARTDT con,再发 I 帧;② 空闲时按 t3(默认 20 s)发 TESTFR,t1(默认 15 s)内收不到应答应断开重连;③ 一端只做客户端、另一端只做服务端时,"谁先 STARTDT"要按主站要求,别两侧都等对方。
总召唤用 C_IC_NA_1(类型标识 TI=100),限定词 QOI=20 表示站召唤。下面是一条合法请求(16 字节,序号按实际连接编号,示例取 0):
68 0E 00 00 00 00 | 64 01 06 00 | 01 00 | 01 00 00 | 14 | APCI(6B) | TI VSQ COT | 公共地址 | 信息对象地址 | QOI
应答侧的正常顺序:COT=7 激活确认 → 若干 COT=20 的站召唤数据 → COT=10 激活终止。工程上三个检查点:
k/w 窗口卡住,调窗口或分批上送;开关量变化一般用 M_SP_NA_1(TI=1,无时标)或 M_SP_TB_1(TI=30,带 CP56Time2a 时标),传送原因 COT=3(突发)。一条单点变化上送:
68 0E 04 00 02 00 | 01 01 03 00 | 01 00 | 01 00 00 | 01 N(S)=1 N(R)=0 | TI VSQ COT | 公共地址 | IOA | SIQ(SPI=1)
注意 N(S)/N(R) 是 15 位、到 32767 回绕;接收侧必须按收到的 I 帧数量回 S 帧(w 默认 8),否则对端发满 k(默认 12)个未确认 I 帧后会停止发送 —— 现场表现为"数据突然不动了",很容易误判成设备死机。
对时用 C_CS_NA_1(TI=103),COT=6 激活、COT=7 确认。时间信息是 7 字节 CP56Time2a:
| 字节 | 内容 | 取值 |
|---|---|---|
| 1–2 | 毫秒(低字节在前) | 0–59999 |
| 3 | 分钟 | bit0–5,0–59 |
| 4 | 小时 + 夏令时位 | bit0–4 小时,bit7 为 IV/夏令时标志 |
| 5 | 日 + 星期 | bit0–4 日,bit5–7 星期 |
| 6 | 月 | bit0–3,1–12 |
| 7 | 年 | 0–99(表示 2000–2099) |
常见坑:毫秒只到 59999、分钟字节高 2 位必须为 0;跨时区系统里"对时正确但显示差 8 小时"通常是上位机把本地时间当 UTC 存;年字段是两位,跨 2099 年不做处理。
k/w 是否被对端配得过小;光看日志不算证明。可行的做法是:① 用抓包工具按本文时序逐帧比对(控制域序号、COT、IOA 长度);② 做异常注入 —— 丢 S 帧、乱序、重复帧、错误 COT,看对端是否符合标准的容错行为;③ 把上述用例固化成回归脚本,每次改协议栈都跑一遍。相关工具与实现见 IEC 60870-5-101/103/104 开发包及测试系统 与 报文分析系统。
k/w 参数、t1/t2/t3 超时本文为工程笔记,不含任何产品性能承诺;如发现表述与标准文本不一致,以标准原文为准。勘误可经 联系我们 提交。