IEC104协议学习

1 IEC104结构

APDU(Application Protocol Data Unit,应用协议数据单元)

APCI(Application Protocol Control Information,应用协议控制信息)
ASDU(Application Service Data Unit,应用服务数据单元)

整个APDU的最大长度是255字节。

APDU = APCI 或者 APDU = APCI + ASDU

第一个字节:启动字符固定16进制数68H,十进制为104(正好代表104规约吧),二进制为:0110 1000。

第二个字节:APDU长度,注意APDU长度并不包括1字节的启动字符和1字节的APDU长度本身,而由于只有1字节代表数据长度,其最大值为255(2^8 - 1),所以最大值为255 - 2 = 253,又由于APCI除了这两个字节外还包括了4个字节的控制域(1~4),那么剩下的ASDU(可选的应用服务数据单元)长度为253 - 4 = 249字节。

在协议中的第二个字节会记录本APDU的长度,但是这个记录的长度数是除去前面两个字节之外的长度数。

2 APCI结构

APCI(应用控制信息,类似于帧头),由一个1 byte 的起始字节0x68 + 1 byte ADPU的长度 + 4 个1 byte控制位域(CF)组成。

2.1 控制域

控制域(Control Field, CF)

控制域主要是有两个功能:

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

2.2 IEC104报文帧的分类

四个控制域,每个控制域一个字节,一共8位。

第一个控制域的最低2位,确定了帧的格式。

最后一个bit为0,表示I帧。

最后一个bit为1, 倒数第二个bit为0,表示S帧。

最后一个bit为1,倒数第二个bit为1,表示U帧。

IEC104协议的帧格式有三种(I帧、U帧、S帧)

I帧为信息帧,用于传输数据,长度大于6个字节,为长帧;

S帧为确认帧,用于确认接收的I帧,长度为6个字节,为短帧;

U帧为控制帧,用于控制启动/停止/测试,长度为6个字节,为短帧;

2.3 报文I帧

编号的信息传输格式,主要用于传输应用数据,并捎带确认对方的发送。

I帧的APDU总是包含ASDU。

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

两个15位的序号数字,第一个控制域和第二个控制域,低位在前,高位在后,组成16位整数,再扣掉最后一位固定的0,是发送序列号。类似的,第三个控制域和第四个控制域,是接收序列号。

序列号从0到32767。

发送器在发送一个iFrame后,会将发送端的发送序号自动加1,同时将该iFrame保存在发送缓冲区中, 直到它接受到一个ADPU,该APDU中接收序号表明接收到发送端发送的对应发送序号&以下的iFrame,这些iFrame会被从发送缓冲区移除。
接受器接收到一个iFrame后,会将接收端的接收序号自动加1,当接收序号到达设定的数量后,会给发送端回应一个sFrame 的Ack。如果在一定的时间内,接收端接收的iFrame 未到达该设定的数量,接收端也会发送一个sFrame的Ack。如果接收端在一定的时间内都处于idle状态,且存在没有回应的iFrame, 接收端就会给其回应一个sFrame的Ack。
TCP 连接建立后,发送/接收序号应当被置0;

发送/接收序号由CF位域由LSB 和MSB 构成,I-Format的帧序号只有15bit, 如下图所示:

2.4 报文S帧

编号的监视功能格式,用于对I格式报文序号确认,不传送信息。固定6字节。
S格式报文

下行:68 04 01 00 10 00【接收序列号为8

S帧报文的发送序列号都为0
S帧只用于APCI中(意思就是S帧的apdu报文只会有apci不会存在asdu),不能用于传输信息,只用给对方信息的确认,比如子站发送8条报文,结束后主站就会给子站发送一个确认帧(S帧),告诉子站我收到了8条报文。
比如:接收计数为RxCounter
控制域1 = 0x01
控制域2 = 0x00
控制域3 = RxCounter & 0xFE
控制域4 = (RxCounter >> 8) & 0xFF

一般作为一个/多个iFrame的Ack , 固定APDU长度。
S帧只有APCI, 没有ASDU。
在iFrame只是单向情况下, S帧的APDUs必须被发送出去,当相应的iFrame超时,溢出,或者到达iFrame接收的最大允许数量。
S帧只有接收序列号,没有发送序列号。

2.5 报文U帧

不编号的控制功能格式,主要用于传输链路控制命令。固定6字节。

(1)启动数据传输(STARTDT)

下行:68 04 07 00 00 00(开启命令报文)

上行:68 04 0B 00 00 00(开启确认报文)

(2)测试链路(TESTFR)

下行:68 04 43 00 00 00(测试命令报文)

上行:68 04 83 00 00 00(测试确认报文)

(3)停止数据传输(STOPDT)

下行:68 04 13 00 00 00(停止命令报文)

上行:68 04 23 00 00 00(停止确认报文)

U帧被用于有序的控制功能, 固定APDU长度
U帧的APDU只有一个APCI,没有ASDU。
其功能包括TESTFR(测试帧), STOPDT(停止数据传输) or STARTDT(开启数据传输,它们可以同时被激活。U帧只用于控制,并且只存在APCI中(意思就是U帧的apdu报文只会有apci不会存在asdu);
测试、停止和开启在一个U帧报文中只可能存在其中的一种;


其中控制域1的二进制值,如下图所示:

U帧只有第一个控制域的高6位有效,用来表示对应的控制指令。一般都是先发送生效也叫激活命令,然后回复确认命令。

U帧用于STARTDT(开启数据传输),STOPDT(关闭数据传输)和TESTFR(测试帧)的激活&确认机制。

 STARTDT和STOPDT 用于client(master,也称控制站点)去控制Server(Slave,也称被控制站点)去开启/关闭数据传输;
当连接建立时,用户数据传输是没有被使能的(默认是处于STOPDT状态的),在这种状态下,客户端通过这个连接是不能发送仍何用户数据的(U帧是可以发送的)。客户端必须发送一个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 就可以启动这个测试进程。
 

3 ASDU结构

ASDU包含实际的应用层数据和相关的控制信息。报文长度最少占6字节。

类型标识符Type Id:固定一个字节。

可变结构限定符VSQ:固定一个字节。

传输原因COT:一个字节或两个字节,默认两个字节。两个字节的话,包含原始地址OA。

公共地址CA:一个字节或两个字节,默认两个字节。

信息对象地址IOA:一个字节,两个字节或三个字节。默认三个字节。

ASDU包含两个主要的段:数据单元识别符(长度固定为6Byte)和数据段。
数据段由一个或者多个信息对象构成。
数据单元识别符定义了数据的类型,提供数据标识的寻址,包含额外的信息,如传输原因等。
每一个ASDU可以传输最大127个信息对象。 
ASDU的结构如下:

3.1  类型标识符

类型标识符(Type Identifier, TI)

Type identification (TypeID, 1 byte)

一个apdu中信息体中的所有数据的类型都是一致的,类型标识就是对数据类型的解释。

一个字节,类型有单点信息、标度化测量值等,每种类型对应的信息对象所占用的字节个数不一样。

标识 ASDU 的类型,指示所传输的数据或命令的种类。
TypeID 的值,0不可用,1~127用于标准的IEC101协议定义。128~135 用于消息路由,135~255为特殊使用。
对于标准的IEC101协议,有58个类型被定义,其定义如下:

ASDU类型标识符见第4章。

3.2 可变结构限定符

可变结构限定符(Variable Structure Qualifier, VSQ)

SQ (Structure Qualifier) bit

指示 ASDU 中信息对象的数量以及相关的属性。

一个字节,其中最高位表示位为1表示信息对象的地址连续,只有第一个信息对象有地址,其他对象的地址就是累加1。最高位为0,就表示每个信息对象地址不连续,需要表示出来,除去最高位后剩下的就是信息对象的个数。

SQ 位域指定了信息对象&信息元素如何被编址。

3.2.1 最高位为0

SQ=0 (一系列的信息对象):
单个/多个信息元素的寻址如下图所示。
ASDU 可能由一个或者多个相同类型的信息对象组成,这个信息对象的长度被变码成二进制,并被定义在Number of Objects 位域。
SQ=0 表示了一系列的信息对象,这些信息对象都自己的地址,数据单元识别符中用一个7bit 的数据表示信息对象的个数。其如下图所示。因此它们可以装载多达127个信息对象。

下图的 Number of objects = N 这个位置是7位,因为是1个字节除掉了首位0,值最大为127,表示信息对象的数量。

每一个object都有Information object address,也就是信息对象都有自己的地址。

3.2.2 最高位为1

SQ=1 (仅仅只有一个信息对象)
编址一种信息对象的单个或者多个信息元素。
一系列相同的信息对象(例如,相同格式的测量值)被通过information object address 位域寻址。信息对象的地址就是第一个信息元素的地址。信息元素根据不同的偏移被寻址。这个信息元素的长度被变码成二进制,并被定义在Number of Objects 位域。在这种情况,该ASDU只有一个信息对象,信息对象由一系列的信息元素组成。
当SQ=1时,ASDU只有一个信息对象, 这个对象包含了一系列的信息元素。仅仅只有一个信息对象地址,这个信息对象的地址就是第一个信息元素的地址。

下面的Number of elements = N 这个位置是7位,因为1个字节除掉首位1,值最大为127,表示同一种信息对象最多可以有127个元素。

只有第一个object有Information object address,后面的对象的地址依次累加1。

Number of objects/elements

范围为0~127
0 表示没有包含信息对象
1~127 表示信息对象/信息元素的个数

3.3 传输原因

传输原因(Cause of Transmission, COT)

描述数据传输的原因,如周期性传输、背景扫描、响应命令等。一个字节。

3.3.1 测试模式

第1位是T (test) bit
只用于测试,不会控制处理器&更改系统状态

T=0 (非测试模式), T=1 (测试模式)

3.3.2 积极/消极

P/N (positive/negative) bit
积极/消极的激活确认。

当使用控制命令时,这个位域是有意义的。该位域通常表示控制命令是否被成功执行。P=0表示肯定确认,P=1表示否定确认。 非控制命令,这个位域总是置0。

3.3.3 传输原因

Cause of transmission (COT)

COT 用于控制通信种的消息路由,该消息路由会把ASDU路由到正确的程序&任务。控制方向的ASDU会相应的服务确认。
COT 是一个6位码, 它被用于描述目标栈点的信息。
0 没有被定义, 1~47用于标准定义。48-63 为特殊目的使用。

3.4 原始地址

  原始地址(Originator Address, ORG) 
  可选,一般默认为0。一个字节。

Originator Address (ORG)

这个是可选的,它为控制栈点提供了一种明确识别自己的方式。当系统中只有一个控制栈点时,是没有必要的。但多个控制栈点,或者一些栈点是双栈模式是,是有用的。在这种情况下,始发方地址可用于将命令确认引导回特定的控制站而不是整个系统

3.5 公共地址

 公共地址(Common Address of ASDU)
 表示发送或接收设备的地址。两个字节。

ASDU Address Field (Common Address of ASDU, COA),

该地址称为公共地址,是因为它与包含在ASDU内的所有对象相关联。其经常被解释为栈点地址。然而,它可以被构造为形成一个站点/扇区地址,其中各个站点由多个逻辑单元构成。
COA 总是一个或者两个字节的长度。
全局地址也叫做广播地址,它会发送给所有的栈点。控制方向上的广播类ASDU,必须要要被回应,回应是监控方向上的,且必须带上自己的栈点地址。
0不被用, 1~65534 被定义为站点地址。 65535 被定义为广播地址。
当相同功能的应用被启动时,使用广播地址。它仅限于以下ASDU:
TypeID=100 (询问命令): 在公共时间使用特定系统数据快照进行回复
TypeID=101 (反询问命令): 在公共时间冻结总计
TypeID=103 (时钟同步命令): 同步时钟到通用时间。
TypeID=105 (复位进程命令): 同时复位

3.6 信息对象

信息对象(Information Object)

包含实际的数据或命令,包括信息对象地址和数据元素等。

信息对象的个数根据可变结构限定符的低7位来决定,每个信息对象都有地址,3个字节。如果是信息对象地址是连续的,只需要表示第一个信息对象地址即可,不连续则每个信息对象地址都需要表示。

信息对象地址(Information object address, IOA)

ASDU在其结构中传输信息对象,每一个信息对象都被信息对象地址(IOA)编址。IOA用以识别站点内定义的数据。IEC104中,信息对象地址(IOA)的长度为3byte。在控制方向上,该地址为目标地址,监控方向上,该地址为源地址。

通常情况下,IOA 的地址范围被限制到最大65535(2 byte)。在特殊情况下,IOA的第三个字节仅用于结构化信息对象地址的情况,以便在特定系统中定义明确的地址。
如果ASDU 的信息对象地址,没有被用,将被设置为0。
在一个ASDU中被传输的所有信息对象,都必须有相同的ASDU Type。如果有多个不同类型的信息对象,它们必须被装载进不同的ASDU中传输。
在IEC104 协议中,每一个ASDU类型,都有一对应的消息对象格式。
例如信息对象有哪些信息元素构成等。

下图展示了一个单点没有时间的信息对象(ASDU
type=1), 这个对象有两种格式:一个是 SQ=0 和另一个是 SQ=1。这个对象的合法COT 是: 2 (background scan), 3 (spontaneous), 5 (requested), 11, 12 (feedback), 20 +G
(interrogated by station interrogation)。

一些信息对象包含一些元素,例如,下图显示了信息对象类型10(测量值,归一化的时间标签), 这个对象的SQ进为0,包含了3个信息元素: 归一化值NVA(3byte),质量描述符(1byte),和二进制的时间戳(3bytes)。其COT 的合法值为spontaneous (code 3) or requested (code 5)。

4 ASDU类型&描述

4.1 监视方向上的过程信息

类型标识描述引用信息对象格式合法的COT
1单点信息M_SP_NA_1SIQ2,3,5,11,20,20+G
3双点信息M_DP_NA_1DIQ3,5,11,12
5步位置信息M_ST_NA_1VTI + QDS2,3,5,11,12,20,20+G
732比特串M_BO_NA_1BSI + QDS2,3,5,11,12,20,20+G
9归一化测量值M_ME_NA_1NVA + QDS2,3,5,11,12,20,20+G
11标量化测量值M_ME_NB_1SVA + QDS2,3,5,11,12,20,20+G
13浮点型测量值M_ME_NC_1IEEE STD 754 + QDS2,3,5,11,12,20,20+G
15累计值M_IT_NA_1BCR2,37,37+G
20带状态检出的成组单点信息M_PS_NA_1SCD+QDS2,3,5,11,12,20,20+G
21不带品质描述的归一化测量值M_ME_ND_1NVA1,2,3,5,11,12,20,20+G
22~29为将来的兼容定义保留
30带时标CP56Time2a的单点信息M_SP_TB_1SIQ+ CP56Time2a3,5,11,12
31带时标CP56Time2a的双点信息M_DP_TB_1DIQ+ CP56Time2a3,5,11,12
32带时标CP56Time2a的步位置信息M_ST_TB_1VTI + QDS+ CP56Time2a2,3,5,11,12
33带时标CP56Time2a的32比特串M_BO_TB_1BSI + QDS+CP56Time2a3,5
34带时标CP56Time2a的归一化测量值M_ME_TD_1NVA + QDS+CP56Time2a3,5
35带时标CP56Time2a的标量化测量值M_ME_TE_1SVA + QDS+CP56Time2a3,5
36带时标CP56Time2a的浮点型测量值M_ME_TF_1IEEE STD 754 + QDS+CP56Time2a2,3,5,11,12,20,20+G
37带时标CP56Time2a的累计值M_IT_TB_1BCR+CP56Time2a3,37,37+G
38带时标CP56Time2a的继电器保护装置事件M_EP_TD_1QDP+CP16Time2a+CP56Time2a3
39带时标CP56Time2a的继电器保护装置成组启动事件M_EP_TE_1SEP + QDP+CP16Time2a+CP56Time2a3
40带时标CP56Time2a的继电器保护装置成组输出电路信息M_EP_TF_1OCI + QDP+CP16Time2a+CP56Time2a3

类型表示1~15中,单数是不带时标的信息元素,双数是带时标CP24Time2a的对应信息元素。其对象格式,是给不带时标的信息元素格式的基础上+CP24Time2a。
引用的命名格式如下:
M_ :监视方向的信息元素
_Nx:不带时标
_Tx: 带时标
_xA:type A: 有质量描述副的状态或归一化值
_xB:type B: 有质量描述副的标量值
_xC:type C: 有质量描述副的浮点值
_xD:type D: 没有有质量描述副的归一化值
信息对象格式描述了信息对象由那些信息元素组成。

4.2 控制方向上的过程信息

类型标识描述引用信息对象格式合法的COT
45单命令C_SC_NA_1SCO6,7,8,9,10,44,45,46,47
46双命令C_DC_NA_1DCO6,7,8,9,10,44,45,46,47
47步调节命令C_RC_NA_1RCO6,7,8,9,10,44,45,46,47
48设点命令,归一化值C_SE_NA_1NVA + QOS6,7,8,9,10,44,45,46,47
49设点命令,标量值C_SE_NB_1SVA + QOS6,7,8,9,10,44,45,46,47
50设点命令,短浮点值C_SE_NC_1IEEE STD 754 +QOS6,7,8,9,10,44,45,46,47
5132比特串C_BO_NA_1BSI6,7,8,9,10,44,45,46,47
52~57为将来的兼容定义保留
58带时标CP56Time2a的单命令C_SC_TA_1SCO+CP56Time2a6,7,8,9,10,44,45,46,47
59带时标CP56Time2a的双命令C_DC_TA_1DCO+CP56Time2a6,7,8,9,10,44,45,46,47
60带时标CP56Time2a的步调节命令C_RC_TA_1RCO+CP56Time2a6,7,8,9,10,44,45,46,47
61带时标CP56Time2a的设点命令,归一化值C_SE_TA_1NVA + QOS+CP56Time2a6,7,8,9,10,44,45,46,47
62带时标CP56Time2a的设点命令,标量值C_SE_TB_1SVA + QOS+CP56Time2a6,7,8,9,10,44,45,46,47
63带时标CP56Time2a的设点命令,短浮点值C_SE_TC_1IEEE STD 754 +QOS+CP56Time2a6,7,8,9,10,44,45,46,47
64带时标CP56Time2a的32比特串C_BO_TA_1BSI+CP56Time2a6,7,8,9,10,44,45,46,47
65~69为将来的兼容定义保留

引用的命名格式 C_ :控制方向的信息对象。
注意:控制方向的信息对象(也叫命令),必须要和对应类型的监视方向上的过程信息对象 产生Map才可以起作用,否则,命令无法起作用。

4.3 监视方向上的系统信息

类型标识描述引用信息对象格式合法的COT
70初始化结束M_EI_NA_1COI4
71~99为将来的兼容定义保留

4.4 控制方向上的系统信息

类型标识描述引用信息对象格式合法的COT
100总召唤命令C_IC_NA_1QOI6,7,8,9,10,44,45,46,47
101电能脉冲召唤命令C_CI_NA_1QCC6,7,8,9,10,44,45,46,47
102读命令C_RD_NA_15
103时钟同步命令C_CS_NA_1CP56Time2a3,6,7,44,45,46,47
104(IEC 101) Test commandC_TS_NB_1FBP6,7,44,45,46,47
105复位进程命令C_RP_NC_1QRP6,7,44,45,46,47
107带时标CP56Time2a的测试命令C_TS_TA_1
108~109为将来的兼容定义保留

4.5 控制方向上的参数

类型标识描述引用信息对象格式合法的COT
110归一化测量值P_ME_NA_1NVA + QPM6,7,9,10,20,20+G,44,45,46,47
111标量化测量值P_ME_NB_1SVA + QPM6,7,20,20+G,44,45,46,47
112浮点测量值P_ME_NC_1IEEE STD 754 +QPM6,7,20,20+G,44,45,46,47
113参数激活P_AC_NA_1QPA6,7,8,9,44,45,46,47
114~119为将来的兼容定义保留

参数都是控制方向上的,和监控方向的对象相比,其值发生变化时,不会上报,只有总召唤时,可以上报给数据的值。

4.6 文件传输

类型标识描述引用信息对象格式合法的COT
120文件已准备好F_FR_NA_1NOF + LOF + FRQ13
121节点已准备好F_SR_NA_1NOF + NOS + LOF +SRQ13
122召唤目录,选择文件,召唤文件,选择节F_SC_NA_1NOF + NOS + SCQ5,13
123最后的节,最后的段F_LS_NA_1NOF + NOS + LSQ +CHS13
124确认文件,确认节F_AF_NA_1NOF + NOS + AFQ13
125F_SG_NA_1NOF + NOS + LOS +segement13
126目录F_DR_TA_1NOF + LOF + SOF +CP56Time2a3,5
127日至查寻-请求存档文件F_SC_NB_1

5 信息元素详解

 见这个链接:https://blog.csdn.net/changqing1990/article/details/134327980

6 服务端配置

IEC104服务端通道参数配置需要首先配置通道名称、连接个数和服务端口。

  • 通道名称:字符串类型,可包含中文。
  • 连接个数:u64类型,用正整数表示,指TCP服务端建立的通道数量。
  • 服务端口:u64类型,用正整数表示,需设置为未占用端口。
  • 遥信数据类型:u64类型,可取1、3、5、20、30、31、32。指本服务端的遥信类型标识的编号,它的数值与104规约的类型标识一一对应,具体对应关系见表1。
  • 遥测数据类型:u64类型,可取7、9、11、13、15、21、33、34、35、36、37,指本服务端的遥信类型标识的编号,它的数值与104规约的类型标识一一对应,具体对应关系见表1。
  • 是否为主站:布尔类型,TRUE或者FALSE。如果是标准104协议(服务端从站),这里需要配置为FALSE。对于反向非标准104协议(服务端主站),这里需要配置为TRUE,在此情况下,若配置了多个通道,则只取第一个通道。

IEC104服务端可以建立多个通道(标准104协议),对于每个通道,需要配置如下信息:

  • 连接名称:字符串类型。
  • 测点个数:u64类型,用正整数表示这个通道中测点的个数。
  • 客户端IP:字符串类型,格式为IPv4地址格式。
  • 客户端端口:u64类型,用正整数表示。
  • 通道状态点号:u64类型,用正整数表示。
  • 公共地址:u64类型,用正整数表示。
  • 公共地址字节数:u64类型,用正整数表示。
  • 传输原因字节数:u64类型,用正整数表示。
  • 信息体地址字节数:u64类型,用正整数表示,
  • T1超时(ms):u64类型,用正整数表示。默认值15000。
  • T2超时(ms):u64类型,用正整数表示。默认值10000。
  • T3超时(ms):u64类型,用正整数表示。
  • k:u64类型,最大发送报文参数。
  • w:u64类型,最大接收报文参数。
  • 控制方向是否带时标:布尔类型,TRUE或者FALSE。
  • 总召时间间隔(ms):u64类型,服务端不设置。
  • 是否为主站:布尔类型,TRUE或者FALSE。如果是标准104协议(服务端从站),这里需要配置为FALSE。对于反向非标准104协议(服务端主站),这里需要配置为TRUE。
  • 点度量总召时间间隔(ms):u64类型,服务端不设置。
     

7 客户端配置

IEC104客户端通道参数配置与IEC104服务端时的情况基本相同,只是不需要设置通道名称、连接个数和服务端口。另外,客户端IP和客户端端口改为服务端IP和服务端端口。TCP客户端配置中只有一个通道。

  • 连接名称:字符串类型。
  • 测点个数:u64类型,用正整数表示这个通道中测点的个数。
  • 服务端IP:字符串类型,格式为IPv4地址格式。
  • 服务端端口:u64类型,用正整数表示。
  • 通道状态点号:u64类型,用正整数表示。
  • 公共地址:u64类型,用正整数表示。
  • 公共地址字节数:u64类型,用正整数表示。
  • 传输原因字节数:u64类型,用正整数表示。
  • 信息体地址字节数:u64类型,用正整数表示,
  • T1超时(ms):u64类型,用正整数表示。默认值15000。
  • T2超时(ms):u64类型,用正整数表示。默认值10000。
  • T3超时(ms):u64类型,用正整数表示。
  • k:u64类型,最大发送报文参数。
  • w:u64类型,最大接收报文参数。
  • 控制方向是否带时标:布尔类型,TRUE或者FALSE。
  • 总召时间间隔(ms):u64类型,可空缺,空缺代表不需要定时总召。
  • 是否为主站:布尔类型,只能写TRUE。104客户端暂时只支持主站,即标准104协议,故此处配置只能为TRUE。
  • 点度量总召时间间隔(ms):u64类型,可空缺,空缺代表不需要定时总召。

8. IEC 104协议的主要功能


8.1 遥信(状态信息的传输)


遥信是指将远程设备的状态信息(如开关状态、告警信号)通过通信网络传送到控制中心,以便监视和记录。

应用场景:
开关状态监视:实时监测断路器、隔离开关等设备的合分状态。
故障报警:当设备出现故障或异常时,立即上报告警信息。
特点:
及时性:状态变化需要及时上报,便于控制中心快速做出响应。
可靠性:信息传输必须准确无误,避免误报和漏报。
信息类型:
单点信息(SPS):表示单个状态量,如开/关。
双点信息(DPS):表示设备具有两种互斥的状态,如合位、分位、异常。


8.2 遥测(测量值的传输)


遥测是指将远程设备的运行数据(如电压、电流、功率等测量值)通过通信网络传送到控制中心,用于监测和分析。

应用场景:
电参量监测:实时获取电压、电流、有功功率、无功功率、频率等关键参数。
环境参数监测:获取设备环境的温度、湿度、压力等数据。
特点:
连续性:需要持续、定期地传输数据,形成时间序列。
准确性:测量数据需满足一定的精度要求,以保证分析的可靠性。
数据类型:
模拟量(测量值):连续变化的物理量,通常以浮点数或定点数形式传输。
计数器值:如电能表读数,用于计量和结算。


8.3 遥调(远方参数的调整)


遥调是指控制中心对远程设备的运行参数进行调整,如改变设定值、调节运行模式等。

应用场景:
电压调节:调整变压器的分接头位置,改变输出电压。
无功功率补偿:调节电容器组的投入或切除,优化电网功率因数。
频率控制:通过调整发电机的出力,维持电网频率稳定。
特点:
精确性:参数调整需要精确到一定的数值范围。
安全性:参数调整可能影响电网运行,需要严格的审批和确认流程。
实现方式:
设定值下发:控制中心下发新的参数设定值,设备接收后进行调整。
参数查询:可以远程读取设备当前的参数设定,以便做出合理调整。


8.4 遥控(控制命令的下发)


遥控是指从控制中心(如调度中心或主站)通过通信网络向远程设备(如变电站的开关设备)发送控制命令,以实现对设备的远程操作。

应用场景:
断路器合闸/分闸:远程控制断路器的开启或关闭,调节电力线路的通断。
设备启停:远程启动或停止发电机、变压器等大型设备。
特点:
安全性高:为了防止误操作,通常采用选择-执行(Select-Before-Operate)的两步控制方式。
实时性要求高:需要及时响应控制命令,以保障电网的安全稳定运行。
实现方式:
选择命令:先发送选择命令,确认目标设备和操作类型。
执行命令:收到设备确认后,再发送执行命令,完成实际操作。
确认机制:设备执行后反馈执行结果,供控制中心确认。

9. 总召唤功能

IEC104总召唤功能:数据同步的利器 - 哔哩哔哩

# IEC104 Protocol of IEC104 and IEC101 ## by chendajie 2014-2015 ## 电网IEC104/IEC101通信协议 ============================== 隔离协议内容与平台或者硬件相关性,已经在stm32平台和linux平台移植测试通过,可轻松移植到其他平台。 ============================================================================ 队列实现的隔离,目前实现简单的先入先出队列,可根据需求用其他队列算法替换。 移植调用实现: 1.在不同平台下,实现_iec10x结构体的函数指针(利用函数指针实现的接口)。 2.调用RegisterIEC10XMoudle,注册实现的_iec10x接口。 3.创建线程一调用Iex104_Receive管理收包解析。 4.创建线程二调用Iec10x_Scheduled实现出队调度。 5.创建线程三实现状态机Iec104_StateMachine,实现协议状态管理,协议包组包入队。 代码内容 IEC0x目录 iec101.c iec101协议包内容 iec104.c iec104协议包内容 iec10x.c 队列初始化,入队出对实现,队列优先级等相关实现,队列调度实现 PRIO_QUEUE_Iec10x.c 队列具体算法实现 test目录 linux上简单测试代码,仅供参考,作者具体协议应用在stm32上,利用状态机控制数据包入队与出队调度 重要函数: Iec10x_Scheduled:出队调度 IEC10X_Enqueue:入队函数 IEC10X_Dequeue:出队函数 IEC10X_FindQHead:查找最高优先级数据包 IEC10X_XXX:前缀为IEC10X_的函数为各个协议包的组包函数 Iec104_StateMachine: 104协议状态机 Iex104_Receive:收包解析 RegisterIEC10XMoudle:协议模块注册,初始化 重要结构体: 用函数指针实现的移植接口,根据不同平台与硬件特性,选择性实现以下接口 typedef struct _iec10x { char * name; int (* Init)(void); void (* Delay_ms)(uint16_t); void (* CloseLink)(void); void *(* Malloc)(uint8_t NumByte); void (* Free)(void *buffer); uint8_t (* enqueue)(Iec10x_PrioQueue_T *QueueHdr, Iec10x_PrioNode_T *NewNode); Iec10x_PrioNode_T *(* dequeue)(Iec10x_PrioQueue_T * QueueHdr); Iec10x_PrioNode_T *(* FindQHead)(Iec10x_PrioQueue_T * QueueHdr); char (* GetPrio)(void); void (* InitQueue)(Iec10x_PrioQueue_T *PrioQueue); void (* ClearQueue)(Iec10x_PrioQueue_T * QueueHdr); uint8_t (* Send)(int socketfd,char *data,int len); uint32_t (* SetTime)(PCP56Time2a_T time); uint32_t (* GetTime)(PCP56Time2a_T time); int8_t (* GetStationState)(uint16_t Addr, uint8_t DevType); float (* GetStaValue)(uint16_t Addr, uint8_t DevType); uint16_t (* GetLinkAddr)(void); int8_t (* GetInfoNum)(uint8_t *InfoNum, uint8_t DevType); int8_t (* SetConfig)(long Value, uint32_t addr); int8_t (* SaveFirmware)(uint8_t FirmLen, uint8_t *buf,uint32_t FirmwareType, uint32_t Iec10x_Update_SeekAddr); int8_t (* CheckFirmware)(uint32_t FirmwareType, uint32_t TotalLen); int8_t (* UpdateFirmware)(uint32_t FirmwareType); int8_t (* BackoffFirmware)(uint32_t FirmwareType); #ifdef IEC10XLOCK void (* LOCK)(void); void (* UNLOCK)(void); #endif } *PIEC10X_T, IEC10X_T;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值