IEC104规约作为网络通信规约,由客户端和服务端组成。
主站作为客户端,子站作为服务器端。服务器端口默认2404。
启动时,由主站向子站发起TCP链接,当链路建立之后,主站召唤一次全站数据,随后定时召唤总数据。子站定时上送循环数据并实时上送突变数据。
104 规约帧结构
IEC104 规约帧(我们一般称为报文)分为三种类型:
- “I 帧”:可计数的信息传输功能的帧。
- “S 帧” :可计数的确认功能的帧。
- “U 帧”:启动、停止、测试功能的帧。
I帧的格式
I格式帧常常包含两个部分APCI和ASDU,其控制域第一个八位组的bit0=0。I帧包含特定信息。
| 名称 | 信息内容 | ||
|---|---|---|---|
| 起动字符 | 68H | APCI | APDU |
| APDU长度 | ≤253 | APCI | APDU |
| 控制域八位位组1 | 发送序列号N(S) | LSB | 0 | APCI | APDU |
| 控制域八位位组2 | MSB | 发送序列号N(S) | APCI | APDU |
| 控制域八位位组3 | 接收序列号N® | LSB | 0 | APCI | APDU |
| 控制域八位位组4 | MSB | 接收序列号N® | APCI | APDU |
| ASDU类型标识 | 1,21,30,45,46等 | ASDU | APDU |
| 可变结构限定词 | 信息体个数 | ASDU | APDU |
| 传送原因八位位组1 | 3, 6, 7, 10, 14等 | ASDU | APDU |
| 传送原因八位位组2 | 00H | ASDU | APDU |
| 公共地址八位位组1 | 01H | ASDU | APDU |
| 公共地址八位位组2 | 00H | ASDU | APDU |
| 信息体地址八位位组1 | 01H | ASDU | APDU |
| 信息体地址八位位组2 | 40H | ASDU | APDU |
| 信息体地址八位位组3 | 00H | ASDU | APDU |
| 信息元素集 | …… | ASDU | APDU |
S帧的格式
S格式的帧只有APCI,其控制域第一个八位组的bit0=1并且bit1=0。S帧主要用来确认收到的帧的计数。
例如:
RX:68 0E 3A 00 14 00 01 01 03 00 01 00 01 00 00 01 I帧,不带时标的单点遥信
TX:68 04 01 00 3C 00 S帧确认
| 名称 | 信息内容 | |
|---|---|---|
| 起动字符 | 68H | |
| APDU长度 | 04H | |
| 控制域八位位组1 | 01H | bit0=1 |
| 控制域八位位组2 | 00H | |
| 控制域八位位组3 | 接收序列号N® | LSB | 0 | bit0=0 |
| 控制域八位位组4 | MSB | 接收序列号N® |
U帧的格式
U格式的帧也只有APCI,其控制域第一个八位组的bit0=1并且bit1=1,U帧仅有三种类型:启动帧(启动,启动响应)、测试帧(测试,测试响应)、停止帧(停止、停止响应)。
例如:
68 04 07 00 00 00 U格式启动帧
68 04 0B 00 00 00 响应帧
| 名称 | 信息内容 | |
|---|---|---|
| 起动字符 | 68H | |
| APDU长度 | 04H | |
| 控制域八位位组1 | 测试|停止|启动|11 | [[#附录1:U帧控制域八位位组1]] |
| 控制域八位位组2 | 00H | |
| 控制域八位位组3 | 00H | bit0=0 |
| 控制域八位位组4 | 00H |
标准104常见报文
站初始化
TX:68 04 07 00 00 00 U格式启动帧
RX:68 04 0B 00 00 00 响应帧
链路测试
TX:68 04 43 00 00 00 链路测试报文
RX:68 04 83 00 00 00 响应帧
站总召唤(遥测遥信)
- TX:
68 0e 00 00 00 00 64 01 06 00 01 00 00 00 00 14激活- 链路层:
68 0e 00 00 00 00 - 帧类型:I帧
- 类型:64 总召唤
- 信息体个数:01
- 传说原因:06 00 激活
- 公共地址:01 00 地址为1
- 链路层:
- RX:
68 0e 00 00 02 00 64 01 07 00 01 00 00 00 00 14确认- 传说原因:07 00 确认
- RX:
68 0e 02 00 02 00 46 01 04 00 01 00 00 00 00 00初始化结束:被初始化- 类型:46 初始化结束
- 传送原因:04 00 被初始化
- RX:
68 32 08 00 02 00 0d 05 14 00 01 00 01 40 00 74 fe c5 42 00 02 40 00 fb ca e8 43 00 03 40 00 e0 fe 8f 41 00 04 40 00 66 99 c9 42 00 05 40 00 0c 44 5c 42 00响应总召唤(遥测)- 链路层:
68 32 08 00 02 00 - 帧类型:I帧
- 类型:0d 短浮点数
- 信息体个数:05
- 传说原因:14 00 响应总召唤
- 公共地址:01 00 地址为1
- 信息体1地址:01 40 00 十进制为16385
- 信息体1值:74 fe c5 42 十进制为98.997
- 信息体1值质量位:00 正常
- 信息体2依次类推……
- 链路层:
- RX:
68 1e 0a 00 02 00 01 05 14 00 01 00 01 00 00 01 02 00 00 80 03 00 00 00 04 00 00 00 05 00 00 00响应总召唤(遥信)- 链路层:
68 1e 0a 00 02 00 - 帧类型:I帧
- 类型:01 单点遥信
- 信息体个数:05
- 传说原因:14 00 响应总召唤
- 公共地址:01 00 地址为1
- 信息体1地址:01 00 00 十进制为1
- 信息体1值:1 合位
- 信息体1值质量位:0 正常
- 信息体2值:0 分位
- 信息体1值质量位:8 异常
- 链路层:
- RX:
68 0e 0e 00 02 00 64 01 0a 00 01 00 00 00 00 14结束
站总召唤(电度)
- TX:
68 0e 02 00 12 00 65 01 06 00 01 00 00 00 00 05激活- 类型:65 电度总召唤
- RX:
68 0e 12 00 04 00 65 01 07 00 01 00 00 00 00 05确认 - RX:
68 2a 14 00 04 00 0f 04 25 00 01 00 01 64 00 f6 27 00 00 00 02 64 00 7a d2 03 00 00 03 64 00 08 23 07 00 00 04 64 00 f0 67 3e 00 00响应总召唤(电度)- 链路层:
68 2a 14 00 04 00 - 帧类型:I帧
- 类型:0f 累计值
- 信息体个数:04
- 传说原因:25 00 响应计数量总召唤
- 公共地址:01 00 地址为1
- 信息体1地址:01 64 00 十进制为25601
- 信息体1值:f6 27 00 00 合位 十进制为10230
- 信息体1值质量位:00 正常
- 信息体2依次类推……
- 链路层:
- RX:
68 0e 16 00 04 00 65 01 0a 00 01 00 00 00 00 05结束
突变报文
- RX:
68 22 18 00 04 00 0d 03 03 00 01 00 01 40 00 4d fe d9 42 00 02 40 00 96 64 e8 43 00 05 40 00 b2 ee ee 41 00- 类型:0d 短浮点数
- 传说原因:03 00 突发
循环报文
- RX:
68 32 30 00 02 00 0d 05 01 00 01 00 01 40 00 d6 97 e1 42 00 02 40 00 60 31 e9 43 00 03 40 00 fa 64 36 41 00 04 40 00 6d aa 72 42 00 05 40 00 c7 ff df 41 00- 传说原因:01 00 周期循环
SOE报文
-
短时标SOE
- RX:
68 26 0e 00 02 00 02 04 03 00 01 00 01 00 00 01 db 5f 1e 09 00 00 01 db 5f 1e 11 00 00 01 db 5f 1e 1a 00 00 01 db 5f 1e- 类型:02 短时标SOE
- 信息体个数:04
- 传说原因:03 00 突发
- 公共地址:01 00 地址为1
- 信息体1地址:01 00 00 十进制为1
- 信息体1值:1 合位
- 信息体1值质量位:0 正常
- 信息体1短时标:db 5f 1e [[#附录2:短时标CP24Time2a]]
- RX:
-
长时标SOE
- RX:
68 36 0e 00 02 00 1e 04 03 00 01 00 01 00 00 01 31 dc 19 06 05 0a 11 09 00 00 01 31 dc 19 06 05 0a 11 11 00 00 01 31 dc 19 06 05 0a 11 1a 00 00 01 32 dc 19 06 05 0a 11- 类型:1e 长时标SOE
- 信息体个数:04
- 传说原因:03 00 突发
- 公共地址:01 00 地址为1
- 信息体1地址:01 00 00 十进制为1
- 信息体1值:1 合位
- 信息体1值质量位:0 正常
- 信息体1长时标:31 dc 19 06 05 0a 11 [[#附录3:长时标CP56Time2a]]
- RX:
时钟同步
- TX:
68 14 08 00 12 00 67 01 06 00 01 00 00 00 00 8a 75 29 0d 17 0c 19- 类型:67 时钟同步命令
- 信息体个数:04
- 传说原因:06 00 激活
- 公共地址:01 00 地址为1
- 信息体地址:00 00 00
- 信息体长时标:8a 75 29 0d 17 0c 19
- RX:
68 14 12 00 0a 00 67 01 07 00 01 00 00 00 00 3a 59 29 0d 17 0c 19
遥控
-
遥控选择
- TX:
68 0E 14 00 30 00 2E 01 06 00 01 00 01 60 00 81双点遥控分选择 - RX:
68 0E 30 00 16 00 2E 01 07 00 01 00 01 60 00 81双点遥控返校 - TX:
68 0E 14 00 30 00 2D 01 06 00 01 00 01 60 00 80单点遥控分选择 - RX:
68 0E 30 00 16 00 2D 01 07 00 01 00 01 60 00 80单点遥控分选择返校
- TX:
-
遥控执行
- TX:
68 0E 14 00 30 00 2E 01 06 00 01 00 01 60 00 01双点遥控分执行 - RX:
68 0E 30 00 16 00 2E 01 07 00 01 00 01 60 00 01双点遥控执行返校 - TX:
68 0E 14 00 30 00 2D 01 06 00 01 00 01 60 00 00单点遥控分执行 - RX:
68 0E 30 00 16 00 2D 01 07 00 01 00 01 60 00 00单点遥控分执行返校
- TX:
-
遥控撤销
- TX:
68 0E 14 00 30 00 2E 01 08 00 01 00 01 60 00 81双点遥控分撤销 - RX:
68 0E 30 00 16 00 2E 01 09 00 01 00 01 60 00 81双点遥控撤销返校 - TX:
68 0E 14 00 30 00 2D 01 08 00 01 00 01 60 00 80单点遥控分撤销 - RX:
68 0E 30 00 16 00 2D 01 09 00 01 00 01 60 00 80单点遥控分撤销返校
- TX:
遥调
- TX:
68 12 26 00 28 00 32 01 06 00 01 00 01 62 00 00 00 c8 42 80短浮点遥调选择 - RX:
68 12 28 00 28 00 32 01 07 00 01 00 01 62 00 00 00 c8 42 80短浮点遥调选择返校 - TX:
68 12 28 00 2a 00 32 01 06 00 01 00 01 62 00 00 00 c8 42 00短浮点遥调执行 - RX:
68 12 2a 00 2a 00 32 01 07 00 01 00 01 62 00 00 00 c8 42 00短浮点遥调执行返校
附录1:U帧控制域八位位组1
U帧控制域八位位组1解析:
- bit0:固定为1
- bit1:固定为1
- bit2:启动
- bit3:启动响应
- bit4:停止
- bit5:停止响应
- bit6:测试
- bit7:测试响应
附录2:短时标CP24Time2a
CP24Time2a是国际通信协议(IEC 60870-5-101/104)中用于标记数据时间的格式,因其占3个字节,只记录分钟、秒、毫秒,被称为“短时标”。
- 短时标:db 5f 1e
- db 5f 转化为十进值为24539,表示24秒539毫秒。
- 1e bit0-bit5为分钟,转化为10进制为30;bit7为IV,当前IV=0,若IV=1表示时间不可靠。
- 最后解析为:当前机器时间的年月日小时,30分24秒239毫秒。
附录3:长时标CP56Time2a
- 长时标:31 dc 19 06 05 0a 11
- 31 dc 转化为十进值为56369,表示56秒369毫秒。
- 19 bit0-bit5为分钟,转化为10进制为25。
- 06 bit0-bit4转化为10进制为6,表示6时。若bit7=1时,表示夏令时;当前bit7=0,表示标准时间。
- 05 bit0-bit4为转化为10进制为5,表示5日。bit5-bit7转化为10进制表示星期。(注:此字段不常用,可忽略)
- 0a bit0-bit3转化为10进制为10,表示10月。
- 11 bit0-bit6转化为10进制为17,表示2017年(2000+17),bit7为IV,当前IV=0,若IV=1表示时间不可靠。
- 最后解析为:2017年10月5日6时25分56秒369毫秒。
附录4:常用的数据类型
104报文第7个字节。
| 类型(16进制) | 类型(十进制) | 描述 |
|---|---|---|
| 09 | 9 | 带品质描述的归一化值,每个遥测值占3个字节 |
| 0a | 10 | 带短时标带品质描述的规一化值,每个遥测值占6个字节 |
| 0b | 11 | 带品质描述的标度化值,每个遥测值占3个字节 |
| 0c | 12 | 带短时标带品质描述的标度化值,每个遥测值占6个字节 |
| 0d | 13 | 带品质描述的浮点值,每个遥测值占5个字节 |
| 0e | 14 | 带短时标的短浮点数 |
| 15 | 21 | 不带品质描述的规一化值 |
| 22 | 34 | 带长时标的测量值规一化 |
| 23 | 35 | 带长时标的测量值标度化 |
| 24 | 36 | 带长时标的测量值短浮点 |
| 01 | 1 | 单点遥信,每个遥信占1个字节 |
| 02 | 2 | 带短时标单点遥信 |
| 03 | 3 | 双点遥信,每个遥信占1个字节 |
| 04 | 4 | 带短时标双点遥信 |
| 1e | 30 | 带长时标单点遥信 |
| 1f | 31 | 带长时标双点遥信 |
| 0f | 15 | 带品质描述的累计值 |
| 10 | 16 | 带品质描述带短时标的累计值 |
| 25 | 37 | 带品质描述带长时标的累计值 |
| 46 | 70 | 初始化结束 |
| 2d | 45 | 单点遥控 |
| 2e | 46 | 双点遥控 |
| 2f | 47 | 升降命令 |
| 30 | 48 | 设定规一化值命令 |
| 31 | 49 | 设定比例系数值命令 |
| 32 | 50 | 设定浮点数值命令 |
| 3a | 58 | 带长时标单点遥控 |
| 3b | 59 | 带长时标双点遥控 |
| 3c | 60 | 带长时标升降命令 |
| 3d | 61 | 带长时标设定规一化值命令 |
| 3e | 62 | 带长时标设定比例系数值命令 |
| 3f | 63 | 带长时标设定浮点数值命令 |
| 64 | 100 | 总召唤 |
| 65 | 101 | 电能脉冲召唤命令 |
| 67 | 103 | 时钟同步命令 |
| 69 | 105 | 复位进程命令 |
附录5:常用的传送原因
104报文第9、第10个字节。
| 传送原因(16进制) | 传送原因(10进制) | 描述 |
|---|---|---|
| 01 | 1 | 周期循环 |
| 02 | 2 | 背景扫描 |
| 03 | 3 | 突发 |
| 04 | 4 | 初始化 |
| 05 | 5 | 请求或被请求 |
| 06 | 6 | 激活 |
| 07 | 7 | 激活确认 |
| 08 | 8 | 停止激活 |
| 09 | 9 | 停止激活确认 |
| 0a | 10 | 激活结束 |
| 0b | 11 | 远程命令引起的返送信息 |
| 0c | 12 | 当地命令引起的返送信息 |
| 0d | 13 | 文件传送 |
| 14 | 20 | 响应总召唤 |
| 25 | 37 | 响应计数量总召唤 |
| 26 | 38 | 响应第 1组计数量召唤 |
| 27 | 39 | 响应第 2组计数量召唤 |
| 28 | 40 | 响应第 3组计数量召唤 |
| 29 | 41 | 响应第 4组计数量召唤 |