IEC104-协议解析
IEC104-协议解析
一、IEC104协议结构(平衡式传输协议)
APDU:应用规约数据单元
APCI: 应用规约控制单元
ASDU:应用服务数据单元
平衡式传输协议(IEC104):问答式,主站都可以作为启动发起站。
非平衡式传输协议:问答式,只有主站可以作为启动站。
二、APCI
1、启动字符
默认固定为 68H,意思就是只要是IEC104协议就是以68H开头
2、APDU的长度问题
- 起始一个APDU的总长度不会超过255个字节;
- 在协议中的第二个字节会记录本APDU的长度,但是这个记录的长度数是除去前面两个字节之外的长读数
3、控制域
控制域主要是有两个功能
- 报文的类型(I帧报文、U帧报文或者S帧报文)
- 记录收发报文的个数
3.1、I帧报文
- I帧报文格式规定控制域1和控制域3的最低位为0;
- 其他部分用于发送序列号和接收序列号的计数;
比如:发送计数为 TxCounter 接收计数为RxCounter
控制域1 = TxCounter & 0xFE
控制域2 = (TxCounter >> 8) & 0xFF
控制域3 = RxCounter & 0xFE
控制域4 = (RxCounter >> 8) & 0xFF
3.2、 S帧报文
- S帧报文格式规定控制域1的第0位为1,第1位为0和控制域第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
3.3、U帧报文
- I帧报文格式规定控制域1和控制域3的最低位为0;
- 其他部分用于发送序列号和接收序列号的计数;
- U帧只用于控制,并且只存在APCI中(意思就是U帧的APDU报文只会有APCI不会存在ASDU);
- 测试、停止和开启在一个U帧报文中只可能存在其中的一种;
3.3.1、开启
激活第2位为1 第3位为0,如下表所示
激活确认第2位为0 第3位为1,如下表所示
U帧启动主要是用于 主站连接子站时,主站给子站发送一个U帧启动报文,如下:
1 | 主站发送:68 04 07 00 00 00 |
3.3.2、停止
激活第4位为1 第5位0,如下表所示
激活确认第4为0 第5位1,如下表所示
U帧停止如下:
1 | 主站发送:68 04 13 00 00 00 |
3.3.3、测试
激活第6位为1、第7位为0,如下表所示
激活确认第6位为0、第7位为1,如下表所示
比如:子站发送U帧测试(激活),主站收到测试U帧就会回复一个U帧(确认)
1 | 子站发送:68 04 43 00 00 00 |
Tips:测试U帧一般用于子站判断主站是否还在连接子站,主站判断子站是否还在运行,保证数据传输的畅通性;
到此APCI这一块就没啥了,继续下面ASDU的细化
三、ASDU
1、类型标识(TYP)
- 类型标识:占一个字节,标识出后面的信息体的数据类型
- 一个APDU中信息体中的所有数据的类型都是一致的,并且数据类型在类型标识这个位置标识
完整类型标识,如下图:
1.1、 监视方向过程信息
- Tips: 标度化值和归一化值占2个字节,短浮点数占4个字节
- 标度化值:类似INT16
- 短浮点值:类似float
- 一般为从站发送给主站
1.2、控制方向过程信息
一般为主站发送给从站
1.3、监视方向系统信息
- 当厂站(从站)短重新上电、初始化参数、重新分配缓存区等情况下,厂站需要给主站发送该类型,而主站收到该类型的APDU包,主站一般会做一次总召唤;
- 一般为从站发送给主站
1.4、控制方向系统信息
一般为主站发送给从站
2、可变结构限定词(VSQ)
- SQ = 0 :信息对象的地址不连续(意思就是每个信息对象都会一个对象地址)
- SQ = 1 : 信息对象的地址连续 (只有第一个信息对象有地址,其他对象的地址就是累加1)
Tips:总召唤时,为了压缩信息传输时间SQ=1;而在从站主动上传变化数据时,因为地址不连续,采用SQ=0
3、传送原因(COT)
- 占2个字节
- T=0 未试验;T=1 试验(一般 T=0)
- P/N=0 肯定;P/N=1 否定(正常为P/N=0;P/N=1 说明该报文无效)
- 源发地址:用来记录来时哪个主站的响应数据,一般写0
- 传送原因:(下面提到的上行:[从站发送给主站]、下行:[主站发送给从站])
例如:从站发送一个传送原因为突发的报文,则传送原因这个2个字节的情况如下:
突发 = 3
3、应用服务数据单元公共地址(ADR)
- 占2个字节
- 规定高位字节 0x00
- 站地址: 1-254 为站地址;255为全局地址
4、信息体
4.1、连续信息传输型
4.1.1、带绝对时标(遥测)
- Tips: 时标有三种,但是另外两种基本不用,暂不做说明
- 其中只有类型为【21】的【归一化测量值】不带品质描述词
- 说明:连续、带时标的 ASDU数据部分结构如上表分为:
- 地址编号:第一个信息体数据的地址(只会出现一次)
- 重复信息体数据+品质描述词 (地址=第一个地址按顺序+1推算出来)
- 最后以绝对时标结束
4.1.2、不带绝对时标(遥测)
说明:连续、不带时标的 ASDU数据部分结构如上表分为:
- 地址编号:第一个信息体数据的地址(只会出现一次)
- 重复信息体数据+品质描述词 (地址=第一个地址按顺序+1推算出来)
4.1.3、带绝对时标(遥信)
Tips:对于遥信,状态量和品质描述词 合在了一个字节中
4.1.4、不带绝对时标(遥信)
Tips:对于遥信,状态量和品质描述词 合在了一个字节中
4.2、非连续信息传输型
4.2.1、带绝对时标(遥测)
说明: 不连续、带时标的 ASDU数据部分结构如上表分为:
- 每一个信息体数据都会有一个地址编号
- 绝对时标结尾
4.2.2、不带绝对时标(遥测)
说明: 不连续、带时标的 ASDU数据部分结构如上表分为:
- 每一个信息体数据都会有一个地址编号
4.2.3、带绝对时标(遥信)
4.2.4、不带绝对时标(遥信)
4.3、品质描述词
分为 遥信品质描述词和遥测品质描述词
4.3.1、遥信品质描述词
1、单点信息品质描述词
- 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位】
2、双点信息品质描述词(由两个开关量决定)
- 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个值】
4.3.2、遥测品质描述词
- 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 遥测超出量程,发生溢出
4.4、绝对时标
- IV : IV = 0 时标有效;IV=1时标无效;
- RES:保留位
4.5、遥控和设定值
4.5.1、单点遥控
单点遥控信息
- S/E = 0 遥控执行命令;S/E=1 遥控选择命令;
- QU = 0 被控占内部确定遥控输出方式,不有控制站选择;
- 1 短脉冲方式输出
- 2 长脉冲方式输出
- 3 持续脉冲方式输出
- 其他值没有定义
- RES :保留位
- SCS : 设置值; 0 = 控开 ;1 = 控合
4.5.2、双点遥控
单点遥控信息
- S/E = 0 遥控执行命令;S/E=1 遥控选择命令
- QU = 0 被控占内部确定遥控输出方式,不有控制站选择
- 1 短脉冲方式输出
- 2 长脉冲方式输出
- 3 持续脉冲方式输出
- 其他值没有定义
- DCS = 0 无效控制
- 1 控分
- 2 控合
- 3 无效控制
Tips:一个从站系统单点和双点只能存在一种
4.5.3、设定值
Tips:除了类型编号: 136 存在多点设定外,其他都是单个信息体设置值
QOS:设定命令限定词
- S/E : 0 设定执行;1 设定选择
- 设定命令限定词: 基本就是 0 ,因为其他并没有定义
四、过程描述
- 建立tcp连接;
- 主站给从站发送启动帧;报文:68 04 07 00 00 00
- 从站收到启动帧,给主站发送启动确认帧;报文:68 04 0B 00 00 00
- 主站给从站发送总召唤;报文:68 0E 00 00 00 00 64 01 06 00 01 00 00 00 00 14
- 从站收到主站的总召唤命令,给主站发送总召唤确认;报文:68 0E 00 00 02 00 64 01 07 00 01 00 00 00 00 14
- 从站上传遥信,遥测,电度等I帧信息帧,发送完毕从站发送总召唤结束帧;
- 主站收到从站发送的结束帧,会回复一个S帧的确认帧;
- 进入下一个周期(其中如何数据有变化,从站需要主动上报)
五、用到的参数解释
T0:TCP连接建立的超时时间,即RTU(服务器)端进入等待连接的状态后,若超过此时间主站(客户)端还没有Connect()过来就主动退出等待连接的状态
Tips:其中 t3 > t1 > t2
六、文件传输解析
七、参考文档
1、IEC104规约(一)协议结构阐述 - 卷毛七号 - 博客园 (cnblogs.com)
2、电力101/104规约文件服务报文浅析_104规约 定值读写-CSDN博客
3、【整理】电力 104协议 – 在路上 (crifan.org)
4、从零开始理解IEC104协议之一——104规约帧格式 - 简书 (jianshu.com)