1、报文结构

image.png

2、APCI(6个字节)

2.1、启动字符

默认固定为 68H,意思就是只要是IEC104协议就是以68H开头;

2.2、APDU的长度

一个协议报文APDU的总长度为255个字节,除去前面两个字节,总字节不能超过253个字节

2.3、控制域

2.3.1、控制域的功能

控制域主要有两个功能

  • 报文的类型(I帧、S帧和U帧报文)
  • 记录收发报文的个数

    2.3.2、I帧报文

    image.png
    说明:

  • I帧报文格式规定控制域1和控制域3的最低位为0;

  • 其他部分用于发送序列号和接受序列号的计数

比如:发送计数为 TxCounter 接收计数为RxCounter
控制域1 = TxCounter & 0xFE
控制域2 = (TxCounter >> 8) & 0xFF
控制域3 = RxCounter & 0xFE
控制域4 = (RxCounter >> 8) & 0xFF
[

](https://blog.csdn.net/chenyitao736866376/article/details/99120024)

2.3.3、S帧报文(01 00 xx xx )

image.png
说明:

  • S帧报文为6个字节
  • S帧报文格式规定控制域1的第0位为1,第1位为0和控制域3第0位为0;
  • S帧报文的发送序列号都为0
  • S帧只用于APCI中(意思就是S帧的apdu报文只会有apci不会存在asdu),不能用于传输信息,只能用给对方信息的确认,比如子站发送8条报文,结束后主站就会给子站发送一个确认帧(S帧),告诉子站我收到了8条报文

比如:接收计数为RxCounter
控制域1 = 0x01
控制域2 = 0x00
控制域3 = RxCounter & 0xFE
控制域4 = (RxCounter >> 8) & 0xFF

2.3.4、U帧报文(xx 00 00 00)

image.png
说明:


  • U帧报文格式规定控制域1最低两位为1,控制域2、3、4全部为0;
  • U帧只用于控制,并且只存在APCI中(意思就是U帧的apdu报文只会有apci不会存在asdu;
  • 测试、停止和开启在一个U帧报文中只可能存在其他的一种;

2.3.4.1、开启

U帧启动主要是用于 主站连接子站时,主站给子站发送一个U帧启动报文

1、主站 发送【开启】
image.png
主站发送:68 04 07 00 00 00

2、子站 回复【开启确认】
image.png子站回复:68 04 0B 00 00 00

2.3.4.2、停止

1、主站 发送【停止】
image.png
主站发送:68 04 13 00 00 00

2、子站 回复【停止确认】
image.png子站回复:68 04 23 00 00 00

2.3.4.3、测试

测试U帧一般用于子站判断主站是否还在连接子站,主站判断子站是否还在运行,保证数据传输的畅通性;

1、主站 发送【测试】
image.png
主站发送:68 04 43 00 00 00

2、子站 回复【测试确认】
image.png子站回复:68 04 83 00 00 00

3、ASDU

3.1、类型标识(1个字节)

占一个字节,标识后面信息体的数据类型,注意:一个信息体中的所有数据类型都是一致的,并且数据类型都是通过类型标识定义。

3.1.1、类型分类:

3.1.1.1、监视方向的用户类型

image.png
image.png
说明:

  • Tips: 标度化值和归一化值占2个字节,短浮点数占4个字节
  • 标度化值:类似INT16
  • 标度化值:(转换比较复杂,参考网上的一个公式)取值范围,通常将大于1的数映射到1以内的空间,通常就是用实际值除以额定值,即得到归一化的小数(只要双方约定好,什么形式的转化无所谓)
  • 短浮点值:类似float
  • 一般为从站发送给主站

    3.1.1.2、控制方法的用户类型

image.png
image.png
说明:

  • 一般为主站发送给从站

3.1.1.3、监视方向的系统类型

image.png

  • Tips:
    当厂站(从站)短重新上电、初始化参数、重新分配缓存区等情况下,厂站需要给主站发送该类型,而主站收到该类型的APDU包,主站一般会做一次总召唤;
    从站发送给主站

3.1.1.4、控制方法的系统类型

image.png

  • Tips:
    一般为主站发送给从站

    3.2、可变结构限定词(1个字节)

    image.png
    SQ = 0 :信息对象的地址不连续(意思就是每个信息对象都会一个对象地址)
    SQ = 1 : 信息对象的地址连续 (只有第一个信息对象有地址,其他对象的地址就是累加1)

Tips:总召唤时,为了压缩信息传输时间SQ=1;而在从站主动上传变化数据时,因为地址不连续,采用SQ=0;
[

](https://blog.csdn.net/chenyitao736866376/article/details/99120024)

3.3、传送原因(2个字节)

占两个字节
image.png

  • T = 0 未试验 ; T = 1 试验 (一般 T= 0
  • P/N = 0 肯定 ; P/N = 1 否定 (正常为P/N = 0;P/N = 1说明该报文无效
  • 源发地址:用来记录来自哪个主站的响应数据,一般写 0;
  • 传送原因:(下面提到的上行:[从站发送给主站]、下行:[主站发送给从站])

image.png
image.png

红色标记的是一些常用的;其中【6,7,8,9,10】在一些遥控,设定值时用的比较多
例如:从站发送一个 传送原因为 突发 的报文 ,则传送原因这个2个字节的情况如下:
突发 = 3
image.png

3.4、应用服务数据单元公共地址(2个字节)

占两个字节
image.png

  • 规定高位字节 0x00
  • 站地址: 1-254 为站地址;255为全局地址;

    3.5、信息体

    3.5.1、连续信息传输型

    时标有三种,但是另外两种基本不用

    3.5.1.1、带绝对时标(遥测)

    image.png

  • 说明:连续、带时标的 ASDU数据部分结构如上表分为:

    • 地址编号:第一个信息体数据的地址(只会出现一次)
    • 重复信息体数据+品质描述词 (地址=第一个地址按顺序+1推算出来)
    • 最后以绝对时标结束

3.5.1.2、不带绝对时标(遥测)

image.png

  • 说明:连续、不带时标的 ASDU数据部分结构如上表分为:
    • 地址编号:第一个信息体数据的地址(只会出现一次)
    • 重复信息体数据+品质描述词 (地址=第一个地址按顺序+1推算出来)

3.5.1.3、带绝对时标(遥信)

image.png

  • Tips:对于遥信,状态量和品质描述词 合在了一个字节中

3.5.1.4、不带绝对时标(遥信)

image.png

  • Tips:对于遥信,状态量和品质描述词 合在了一个字节中

3.5.2、非连续信息传输型

3.5.2.1、带绝对时标(遥测)

image.png

  • 说明: 不连续、带时标的 ASDU数据部分结构如上表分为:
    • 每一个信息体数据都会有一个地址编号
    • 绝对时标结尾

3.5.2.2、不带绝对时标(遥测)

image.png

  • 说明: 不连续、带时标的 ASDU数据部分结构如上表分为:
    • 每一个信息体数据都会有一个地址编号

3.5.2.3、带绝对时标(遥信)

image.png

3.5.2.4、不带绝对时标(遥信)

image.png

3.5.3、品质描述符

分为 遥信品质描述词 和 遥测品质描述词;

3.5.3.1、遥信品质描述符

单点信息品质描述词
image.png

  • BL : 封锁标志;BL=0 未被封锁;BL=1 封锁;
  • SB: 取代标志;SB=0 未被取代;SB = 1 被取代;
  • NT:刷新标志;NT=0 刷新成功;NT=1 刷新未成功;
  • IV:有效标志;IV = 0 状态有效;IV = 1 状态无效;
  • RES: 保留位
  • SPI:遥信状态值(0=开;1=合) 【具体的值,占一个bit位】

[

](https://blog.csdn.net/chenyitao736866376/article/details/99120024)
双点信息品质描述词
image.png

  • BL : 封锁标志;BL=0 未被封锁;BL=1 封锁;
  • SB: 取代标志;SB=0 未被取代;SB = 1 被取代;
  • NT:刷新标志;NT=0 刷新成功;NT=1 刷新未成功;
  • IV:有效标志;IV = 0 状态有效;IV = 1 状态无效;
  • RES: 保留位
  • SPI:遥信状态值(0=不确定状态或中间装填;

1=确定状态的开;
2=确定状态的合;
3=不确定状态或中间装填)【具体的值,占2个bit为必然有4个值】

3.5.3.2、遥测品质描述符

image.png

  • BL : 封锁标志;BL=0 未被封锁;BL=1 封锁;
  • SB: 取代标志;SB=0 未被取代;SB = 1 被取代;
  • NT:刷新标志;NT=0 刷新成功;NT=1 刷新未成功;
  • IV:有效标志;IV = 0 状态有效;IV = 1 状态无效; (tips:如何无效说明该遥测数据无效)
  • RES: 保留位;
  • OV:溢出标志;OV=0 未溢出;OV=1 遥测超出量程,发生溢出

[

](https://blog.csdn.net/chenyitao736866376/article/details/99120024)

3.5.4、绝对时标

image.png

  • IV : IV = 0 时标有效;IV=1时标无效;
  • RES:保留位

3.5.5、遥控和设定值

3.5.5.1、单点遥控

image.png
单点遥控信息:
image.png

  • S/E = 0 遥控执行命令;S/E=1 遥控选择命令;
  • QU = 0 被控占内部确定遥控输出方式,不有控制站选择;
    • 1 短脉冲方式输出
      2 长脉冲方式输出
      3 持续脉冲方式输出
      其他值没有定义
  • RES :保留位
  • SCS : 设置值; 0 = 控开 ;1 = 控合

3.5.5.2、双点遥控

image.png
单点遥控信息:
image.png

  • S/E = 0 遥控执行命令;S/E=1 遥控选择命令;
  • QU = 0 被控占内部确定遥控输出方式,不有控制站选择;

1 短脉冲方式输出
2 长脉冲方式输出
3 持续脉冲方式输出
其他值没有定义

  • DCS; 0 无效控制

1 控分
2 控合
3 无效控制

  • Tips:一个从站系统单点和双点只能存在一种

3.5.5.3、设定值(遥测)

Tips:除了类型编号: 136 存在多点设定外,其他都是单个信息体设置值
image.png
QOS:设定命令限定词
image.png

  • S/E : 0 设定执行;1 设定选择;
  • 设定命令限定词: 基本就是 0 ,因为其他并没有定义;

4、过程描述

1、建立tcp连接;
2、主站给从站发送启动帧;报文:68 04 07 00 00 00
3、从站收到启动帧,给主站发送启动确认帧;报文:68 04 0B 00 00 00
4、主站给从站发送总召唤;报文:68 0E 00 00 00 00 64 01 06 00 01 00 00 00 00 14
5、从站收到主站的总召唤命令,给主站发送总召唤确认;
6、报文:68 0E 00 00 02 00 64 01 07 00 01 00 00 00 00 14
7、从站上传遥信,遥测,电度等I帧信息帧,发送完毕从站发送总召唤结束帧;
8、主站收到从站发送的结束帧,会回复一个S帧的确认帧;
9、进入下一个周期(其中如何数据有变化,从站需要主动上报)