IEC104通讯协议

  • ~7.12K 字
  1. 104 规约帧结构
    1. I帧的格式
    2. S帧的格式
    3. U帧的格式
  2. 标准104常见报文
    1. 站初始化
    2. 链路测试
    3. 站总召唤(遥测遥信)
    4. 站总召唤(电度)
    5. 突变报文
    6. 循环报文
    7. SOE报文
    8. 时钟同步
    9. 遥控
    10. 遥调
  3. 附录1:U帧控制域八位位组1
  4. 附录2:短时标CP24Time2a
  5. 附录3:长时标CP56Time2a
  6. 附录4:常用的数据类型
  7. 附录5:常用的传送原因

IEC104规约作为网络通信规约,由客户端和服务端组成。
主站作为客户端,子站作为服务器端。服务器端口默认2404
启动时,由主站向子站发起TCP链接,当链路建立之后,主站召唤一次全站数据,随后定时召唤总数据。子站定时上送循环数据并实时上送突变数据。

104 规约帧结构

IEC104 规约帧(我们一般称为报文)分为三种类型:

  • “I 帧”:可计数的信息传输功能的帧。
  • “S 帧” :可计数的确认功能的帧。
  • “U 帧”:启动、停止、测试功能的帧。

I帧的格式

I格式帧常常包含两个部分APCIASDU,其控制域第一个八位组的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]]
  • 长时标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]]

时钟同步

  • 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: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: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: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组计数量召唤