iec104 基于TCP/IP 传输,是一个应用层协议, 其帧结构被称为 APDU,APDU 一般由 APCI 和 ASDU组成。
APDU 被称为应用协议数据单元,也就是一个iec104 的协议帧的官方叫法。一个APDU(也就是协议帧),可以只包含一个ACPI, 或者 一个ACPI + ASDU。
APDU = APCI
or
APDU = APCI + ASDU
APDU 的最大长度为255byte。
ACPI(应用控制信息,类似于帧头),由一个1byte 的起始字节0x68 + 1 byte ADPU 的长度 + 4 个1 byte控制位域(CF)组成。详细如下图所示。
APCI 中第一个控制位域(CF1)的最低2bit,确定了帧的格式,iec104 定义了3种格式的帧。其如下图所示:
被用于有序的控制功能, 固定APDU 长度
U-format 的APDU只有一个APCI,没有ASDU。其功能包括TESTFR
(测试帧), STOPDT (停止数据传输) or STARTDT (开启数据传输,它们可以同时被激活。其CF1的二进制值,如下图所示:
uFrame 用于STARTDT(开启数据传输),STOPDT(关闭数据传输)和TESTFR(测试帧)的激活&确认机制。
STARTDT和STOPDT 用于client(master,也称控制站点)去控制Server(Slave,也称被控制站点)去开启/关闭数据传输;
当连接建立时,用户数据传输是没有被使能的(默认是处于STOPDT状态的),在这种状态下,客户端通过这个连接是不能发送仍何用户数据的(uFrame是可以发送的)。客户端必须发送一个**STARTDT 激活(STARTDT activate)指令去激活用户数据的传输,服务器端将会回应一个STARTDT 确认(STARTDT confirm)**消息。如果没有收到该确认消息,client将会关闭此连接。
只有client才可以发送STARTDT 激活指令。当连接建立好后,client 才可以向server 发送STARTDT激活指令,该指令只能被发送一次。激活后,该连接才可以在仍何时间发送仍何消息, 直到连接被STOPDT激活指令终止。
client & server必须周期性地发送TESTFR帧,去检测所有连接的连接状态,和通信问题等.
client & server必须周期性地发送**TESTFR 激活(TESTFR activate)指令,对应的TESTFR确认(TESTFR confirm)**帧必须被回应。
在一定的时间内,连接没有数据传输时,client/server 就可以启动这个测试进程。
ASDU包含两个主要的段:数据单元识别符(长度固定为6Byte), 和数据段。数据段由一个或者多个信息对象构成。数据单元识别符定义了数据的类型,提供数据标识的寻址,包含额外的信息,如传输原因等。 每一个ASDU可以传输最大127个信息对象。 ASDU 的结构如下:
数据单元识别符包含以下位域:
Type identification (TypeID, 1 byte)
SQ (Structure Qualifier) bit
SQ 位域指定了信息对象&信息元素如何被编址。
Number of objects/elements
T (test) bit
只用于测试,不会控制处理器&更改系统状态
P/N (positive/negative) bit
积极/消极的激活确认。
Cause of transmission (COT)
Originator Address (ORG)
ASDU Address Field (Common Address of ASDU, COA),
ASDU在其结构中传输信息对象,每一个信息对象都被信息对象地址(IOA)编址。IOA用以识别站点内定义的数据。IEC104中,信息对象地址(IOA)的长度为3byte。在控制方向上,该地址为目标地址,监控方向上,该地址为源地址。
在一个ASDU中被传输的所有信息对象,都必须有相同的ASDU Type。如果有多个不同类型的信息对象,它们必须被装载进不同的ASDU中传输。
在IEC104 协议中,每一个ASDU类型,都有一对应的消息对象格式。
例如信息对象有哪些信息元素构成等。
对于每一种ASDU的类型,IEC104 都定义了对应的信息对象类型。 下面我们将分类描述
类型标识 | 描述 | 引用 | 信息对象格式 | 合法的COT |
---|---|---|---|---|
1 | 单点信息 | M_SP_NA_1 | SIQ | 2,3,5,11,20,20+G |
3 | 双点信息 | M_DP_NA_1 | DIQ | 3,5,11,12 |
5 | 步位置信息 | M_ST_NA_1 | VTI + QDS | 2,3,5,11,12,20,20+G |
7 | 32比特串 | M_BO_NA_1 | BSI + QDS | 2,3,5,11,12,20,20+G |
9 | 归一化测量值 | M_ME_NA_1 | NVA + QDS | 2,3,5,11,12,20,20+G |
11 | 标量化测量值 | M_ME_NB_1 | SVA + QDS | 2,3,5,11,12,20,20+G |
13 | 浮点型测量值 | M_ME_NC_1 | IEEE STD 754 + QDS | 2,3,5,11,12,20,20+G |
15 | 累计值 | M_IT_NA_1 | BCR | 2,37,37+G |
20 | 带状态检出的成组单点信息 | M_PS_NA_1 | SCD+QDS | 2,3,5,11,12,20,20+G |
21 | 不带品质描述的归一化测量值 | M_ME_ND_1 | NVA | 1,2,3,5,11,12,20,20+G |
22~29 | 为将来的兼容定义保留 | |||
30 | 带时标CP56Time2a的单点信息 | M_SP_TB_1 | SIQ+ CP56Time2a | 3,5,11,12 |
31 | 带时标CP56Time2a的双点信息 | M_DP_TB_1 | DIQ+ CP56Time2a | 3,5,11,12 |
32 | 带时标CP56Time2a的步位置信息 | M_ST_TB_1 | VTI + QDS+ CP56Time2a | 2,3,5,11,12 |
33 | 带时标CP56Time2a的32比特串 | M_BO_TB_1 | BSI + QDS+CP56Time2a | 3,5 |
34 | 带时标CP56Time2a的归一化测量值 | M_ME_TD_1 | NVA + QDS+CP56Time2a | 3,5 |
35 | 带时标CP56Time2a的标量化测量值 | M_ME_TE_1 | SVA + QDS+CP56Time2a | 3,5 |
36 | 带时标CP56Time2a的浮点型测量值 | M_ME_TF_1 | IEEE STD 754 + QDS+CP56Time2a | 2,3,5,11,12,20,20+G |
37 | 带时标CP56Time2a的累计值 | M_IT_TB_1 | BCR+CP56Time2a | 3,37,37+G |
38 | 带时标CP56Time2a的继电器保护装置事件 | M_EP_TD_1 | CP16Time2a+CP56Time2a | 3 |
39 | 带时标CP56Time2a的继电器保护装置成组启动事件 | M_EP_TE_1 | SEP + QDP+CP16Time2a+CP56Time2a | 3 |
40 | 带时标CP56Time2a的继电器保护装置成组输出电路信息 | M_EP_TF_1 | OCI + QDP+CP16Time2a+CP56Time2a | 3 |
类型表示1~15中,单数是不带时标的信息元素,双数是带时标CP24Time2a的对应信息元素。其对象格式,是给不带时标的信息元素格式的基础上+CP24Time2a。
引用的命名格式如下:
M_ :监视方向的信息元素
_Nx:不带时标
_Tx: 带时标
_xA:type A: 有质量描述副的状态或归一化值
_xB:type B: 有质量描述副的标量值
_xC:type C: 有质量描述副的浮点值
_xD:type D: 没有有质量描述副的归一化值
信息对象格式描述了信息对象由那些信息元素组成。
类型标识 | 描述 | 引用 | 信息对象格式 | 合法的COT |
---|---|---|---|---|
45 | 单命令 | C_SC_NA_1 | SCO | 6,7,8,9,10,44,45,46,47 |
46 | 双命令 | C_DC_NA_1 | DCO | 6,7,8,9,10,44,45,46,47 |
47 | 步调节命令 | C_RC_NA_1 | RCO | 6,7,8,9,10,44,45,46,47 |
48 | 设点命令,归一化值 | C_SE_NA_1 | NVA + QOS | 6,7,8,9,10,44,45,46,47 |
49 | 设点命令,标量值 | C_SE_NB_1 | SVA + QOS | 6,7,8,9,10,44,45,46,47 |
50 | 设点命令,短浮点值 | C_SE_NC_1 | IEEE STD 754 +QOS | 6,7,8,9,10,44,45,46,47 |
51 | 32比特串 | C_BO_NA_1 | BSI | 6,7,8,9,10,44,45,46,47 |
52~57 | 为将来的兼容定义保留 | |||
58 | 带时标CP56Time2a的单命令 | C_SC_TA_1 | SCO+CP56Time2a | 6,7,8,9,10,44,45,46,47 |
59 | 带时标CP56Time2a的双命令 | C_DC_TA_1 | DCO+CP56Time2a | 6,7,8,9,10,44,45,46,47 |
60 | 带时标CP56Time2a的步调节命令 | C_RC_TA_1 | RCO+CP56Time2a | 6,7,8,9,10,44,45,46,47 |
61 | 带时标CP56Time2a的设点命令,归一化值 | C_SE_TA_1 | NVA + QOS+CP56Time2a | 6,7,8,9,10,44,45,46,47 |
62 | 带时标CP56Time2a的设点命令,标量值 | C_SE_TB_1 | SVA + QOS+CP56Time2a | 6,7,8,9,10,44,45,46,47 |
63 | 带时标CP56Time2a的设点命令,短浮点值 | C_SE_TC_1 | IEEE STD 754 +QOS+CP56Time2a | 6,7,8,9,10,44,45,46,47 |
64 | 带时标CP56Time2a的32比特串 | C_BO_TA_1 | BSI+CP56Time2a | 6,7,8,9,10,44,45,46,47 |
65~69 | 为将来的兼容定义保留 |
引用的命名格式 C_ :控制方向的信息对象。
注意:控制方向的信息对象(也叫命令),必须要和对应类型的监视方向上的过程信息对象 产生Map才可以起作用,否则,命令无法起作用。
类型标识 | 描述 | 引用 | 信息对象格式 | 合法的COT |
---|---|---|---|---|
70 | 初始化结束 | M_EI_NA_1 | COI | 4 |
71~99 | 为将来的兼容定义保留 |
类型标识 | 描述 | 引用 | 信息对象格式 | 合法的COT |
---|---|---|---|---|
100 | 总召唤命令 | C_IC_NA_1 | QOI | 6,7,8,9,10,44,45,46,47 |
101 | 电能脉冲召唤命令 | C_CI_NA_1 | QCC | 6,7,8,9,10,44,45,46,47 |
102 | 读命令 | C_RD_NA_1 | 无 | 5 |
103 | 时钟同步命令 | C_CS_NA_1 | CP56Time2a | 3,6,7,44,45,46,47 |
104 | (IEC 101) Test command | C_TS_NB_1 | FBP | 6,7,44,45,46,47 |
105 | 复位进程命令 | C_RP_NC_1 | QRP | 6,7,44,45,46,47 |
107 | 带时标CP56Time2a的测试命令 | C_TS_TA_1 | ||
108~109 | 为将来的兼容定义保留 |
类型标识 | 描述 | 引用 | 信息对象格式 | 合法的COT |
---|---|---|---|---|
110 | 归一化测量值 | P_ME_NA_1 | NVA + QPM | 6,7,9,10,20,20+G,44,45,46,47 |
111 | 标量化测量值 | P_ME_NB_1 | SVA + QPM | 6,7,20,20+G,44,45,46,47 |
112 | 浮点测量值 | P_ME_NC_1 | IEEE STD 754 +QPM | 6,7,20,20+G,44,45,46,47 |
113 | 参数激活 | P_AC_NA_1 | QPA | 6,7,8,9,44,45,46,47 |
114~119 | 为将来的兼容定义保留 |
类型标识 | 描述 | 引用 | 信息对象格式 | 合法的COT |
---|---|---|---|---|
120 | 文件已准备好 | F_FR_NA_1 | NOF + LOF + FRQ | 13 |
121 | 节点已准备好 | F_SR_NA_1 | NOF + NOS + LOF +SRQ | 13 |
122 | 召唤目录,选择文件,召唤文件,选择节 | F_SC_NA_1 | NOF + NOS + SCQ | 5,13 |
123 | 最后的节,最后的段 | F_LS_NA_1 | NOF + NOS + LSQ +CHS | 13 |
124 | 确认文件,确认节 | F_AF_NA_1 | NOF + NOS + AFQ | 13 |
125 | 段 | F_SG_NA_1 | NOF + NOS + LOS +segement | 13 |
126 | 目录 | F_DR_TA_1 | NOF + LOF + SOF +CP56Time2a | 3,5 |
127 | 日至查寻-请求存档文件 | F_SC_NB_1 |
信息元素是构成信息对象的基本单元,就像OOP 中的变量一样,是构成Object的基础。
我们给出一个IEC104的信息元素列表:
监视方向的过程信息
元素类型 | 描述 | 长度(byte) | 使用的信息对象 |
---|---|---|---|
SIQ | 有质量描述符的单点信息 | 1 | 1, 2, 30 |
DIQ | 有质量描述符的双点信息 | 1 | 3 |
BSI | 二进制状态信息 | 4 | 7, 8, 33, 51 |
SCD | 状态更改探测 | 4 | 20 |
QDS | 质量描述符 | 1 | 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 20, 32, 33, 34, 36 |
VTI | 具有瞬态指示值 | 1 | 5, 6, 32 |
NVA | 归一化值 | 2 | 9, 10, 21, 34, 48, 110 |
SVA | 标度值 | 2 | 11, 12, 49, 111 |
IEEE STD 754 | 短浮点数 | 4 | 13, 14, 36, 50, 112 |
BCR | 二进制计数器读数 | 5 | 15, 16, 37 |
保护
元素类型 | 描述 | 长度(byte) | 使用的信息对象 |
---|---|---|---|
SEP | 保护设备的单个事件 | 1 | 17, 38 |
SPE | 保护设备启动事件 | 1 | 18, 39 |
OCI | 保护设备输出电路信息 | 1 | 19, 40 |
QDP | 保护设备事件的质量描述符 | 1 | 18, 19, 39, 40 |
命令
元素类型 | 描述 | 长度(byte) | 使用的信息对象 |
---|---|---|---|
SCO | 单个命令 | 1 | 45 |
DCO | 双命令 | 1 | 46 |
RCO | 调节阶跃指令 | 1 | 47 |
时间
元素类型 | 描述 | 长度(byte) | 使用的信息对象 |
---|---|---|---|
CP56Time2a | 七字节二进制时间 | 7 | 4, 6, 8, 10, 12, 14, 16, 17, 18, 19, 31,32, 33, 34, 36, 37, 38, 39, 40, 103, 126 |
CP24Time2a | 三字节二进制时间 | 3 | 4, 5, 6, 8, 10, 12, 14, 16, 17, 18, 19, 31, 32, 33, 34, 36, 37, 38, 39, 40 |
CP16Time2a | 二字节二进制时间 | 2 | 17, 18, 19, 38, 39, 40, 106 |
限定符
元素类型 | 描述 | 长度(byte) | 使用的信息对象 |
---|---|---|---|
QOI | 讯问资格 | 1 | 100 |
QCC | 反询问命令限定符 | 1 | 101 |
QPM | 测量值参数限定符 | 1 | 110, 112 |
QPA | 参数激活的限定符 | 1 | 111, 113 |
QRP | 重置过程命令的限定符 | 1 | 105 |
QOC | 命令的限定符 | 1 | 45, 46, 47, 48, 49, 50 |
QOS | 设定值命令的限定符 | 1 | 48, 49, 50 |
文件传输
元素类型 | 描述 | 长度(byte) | 使用的信息对象 |
---|---|---|---|
FRQ | 文件就绪限定符 | 1 | 120 |
SRQ | 节就绪限定符 | 1 | 121 |
SCQ | 选择并调用限定符 | 1 | 122 |
LSQ | 最后一节或段限定符 | 1 | 123 |
AFQ | 确认文件或节限定符 | 1 | 124 |
NOF | 文件名 | 2 | 120, 121, 122, 123, 124, 125, 126 |
NOS | 段命名 | 2 | 121, 122, 123, 124, 125 |
LOF | 文件/段的长度 | 3 | 120, 121 |
LOS | 分段长度 | 1 | 125 |
CHS | Checksum | 1 | 123 |
SOF | 文件状态 | 1 | 126 |
杂项
元素类型 | 描述 | 长度(byte) | 使用的信息对象 |
---|---|---|---|
COI | 初始化原因 | 1 | 70 |
FBP | 固定测试位模式,两个八位字节 | 1 | 104 |
bit7 | bit6 | bit5 | bit4 | bit3 | bit2 | bit1 | bit0 |
---|---|---|---|---|---|---|---|
IV | NT | SB | BL | 0 | 0 | 0 | SPI |
bit7 | bit6 | bit5 | bit4 | bit3 | bit2 | bit1~bit0 |
---|---|---|---|---|---|---|
IV | NT | SB | BL | 0 | 0 | DPI |
32 位宽度的数据,可以认为为uint32。
**32 位宽度的数据,可以认为为uint32。**
bit7 | bit6 | bit5 | bit4 | bit3 | bit2 | bit1 | bit0 |
---|---|---|---|---|---|---|---|
IV | NT | SB | BL | 0 | 0 | 0 | OV |
bit7 | bit6~bit0 |
---|---|
是否处于瞬变状态 | 比他6为符号位,取值范围为<-64…63> |
16位的标量值,可以认为int16,转化为归一值需要除以32768。
归一化值(NVA),值的范围为[-1,1]。归一化,即是将大于1的数映射到1以内的空间,通常就是用实际值除以额定值,即得到归一化的小数。具体表示法可以有F13或F16位的。占2个字节。
在电力行业中,通常是将数值归一到满码值。满码值是通信双方约定的一个值,它会影响数值的误差。一般来说,所内监控后台满码值为4095或2047,地调满码值为4095,中调满码值为32767(通常会要求P、Q、I按1倍额定值对应15000的码值的关系转换后上送;母线电压、频率则按1.2倍额定值对应15000的码值的关系转换后上送)。
16位的标量值,可以认为int16
32位,可以认为float32
bit39 | bit38 | bit37 | bit36~bit32 | bit31~bit0 |
---|---|---|---|---|
IV: 无效 | CA:计数量被调整 | CY:是否有进位 | 顺序号SQ | 计数器读数 |
bit7~bit6 | bit5 | bit4 | bit3 | bit2 | bit1 | bit0 |
---|---|---|---|---|---|---|
预留 | SRD:反向保护启动 | SIE:接地电流保护启动 | SL3:C相保护启动 | SL2:B相保护启动 | SL1:A相保护启动 | GS:总启动 |
bit7~bit4 | bit3 | bit2 | bit1 | bit0 |
---|---|---|---|---|
预留 | CL3:C相保护命令输出至输出电路 | CL2:B相保护命令输出至输出电路 | CL1:A 相保护命令输出至输出电路 | GC:总命令输出至输出电路 |
bit7 | bit6 | bit5 | bit4 | bit3 | bit2~bit0 |
---|---|---|---|---|---|
IV | NT | SB | BL | EI | 预留 |
bit7 | bit6~bit2 | bit1 | bit0 |
---|---|---|---|
S/E为选择/执行位, 0代表执行,1代表选择 | 0: 无另外的定义 1:短脉冲持续时间(断路器),持续时间由被控站内的系统参数所确定2:长脉冲持续时间,持续时间由被控站内的系统参数所确定 3:持续输出 | 0 | SCS 0:分/开, 1:合/关 |
bit7 | bit6~bit2 | bit1~bit0 |
---|---|---|
S/E为选择/执行位, 0代表执行,1代表选择 | 0: 无另外的定义 1:短脉冲持续时间(断路器),持续时间由被控站内的系统参数所确定2:长脉冲持续时间,持续时间由被控站内的系统参数所确定 3:持续输出 | DCS: 1代表分/开,2代表合关,0、3代表不允许 |
bit7 | bit6~bit2 | bit1~bit0 |
---|---|---|
同于DCO | 同于DCO | 步进命令: 1:下一步为降档,2: 下一步升档,其他不允许 |
常用来进行调节分接头遥控,不是所有厂家都支持此命令,部分厂家将调节分接头遥控统一至单/双点遥控中。
字节序号 | 描述 |
---|---|
byte0 | Milliseconds(D7–D0) |
byte1 | Milliseconds(D15–D8) |
byte2 | IV(D7) 预留(D6) Minutes(D5–D0) |
byte3 | SU(D7) 预留(D6-D5) Hours(D4–D0) SU = 夏令时,0 = 标准时间, 1 = 夏令时 |
byte4 | DayOfWeek(D7–D5) DayOfMonth(D4–D0) |
byte5 | 预留(D7–D4) Months(D3–D0) |
byte6 | 预留(D7) Year(D6–D0) |
#TODO
#TODO
bit7 | bit6 | bit5~bit0 |
---|---|---|
参数是否运行:0 : 运行, 1 : 不在运行 | 参数是否被改变 0:未改变, 1: 改变 | 参数类型 1:阈值(Threshold) 2:平滑因子(smoothing factor)3.测量值传输的下限(LowLimit)3.测量值传输的上限(HIGHLimit) |
bit7~bit0 |
---|
1. 激活/停止激活这之前装载的参数 2. 激活/停止激活所寻址信息对象的参数 3.激活/停止激活所寻址的持续循环或周期传输的信息对象 |
和SCO & DCO & RCO 完全一致。
bit7 | bit6~bit0 |
---|---|
同于DCO | 0: 默认 1-63: 预留为标准定义 64-127:特殊使用 |
其他和文件传输相关的信息元素不再提及。