通讯协议iec 104
阅读数:238 评论数:0
跳转到新版页面分类
网络/通信
正文
一、概述
IEC 60870-5-104,通常简称为IEC 104,是一个国际电工委员会(IEC)标准,它定义了电力系统自动化设备之间的通信协议。IEC 60870-5是一个关于远程控制设备和系统的通信协议系列标准的第五部分,而IEC 60870-5-104则是这个系列中的一个应用协议,专门用于在不同系统之间通过标准网络(如TCP/IP)进行信息交换。
IEC 104是一个在电力行业广泛使用的网络协议,特别是在欧洲。它通常用于电力传输和分配,实现了控制中心(或主站)与远程终端单元(RTUs)、智能电子设备(IEDs)之间的通信。这个协议支持监控和控制电网的功能,例如遥测(测量值的传输、模拟输入AI)、遥控(控制命令的发送、数字输出DO)、遥信(事件和状态信息的传输、数字输入DI)、遥脉(计数器的传输)、遥调(设点、模拟输出AO)。
1、特点
IEC 104协议的主要特点包括:
- 基于TCP/IP的网络通信,使得它可以通过互联网或其他IP网络远程传输数据。
- 使用了不同的应用服务数据单元(ASDU)类型来传输不同种类的数据。
- 提供了监控方向和控制方向的数据传输机制。
- 支持冗余管理和断线重连机制。
- 允许对传输的数据进行时间标签,确保数据同步。
- 支持选择性和广播的命令控制。
2、专业术语
(1)遥测的上送方式
有定时主动上送(01H)、响应总召唤上送(14H)、越限上送(03H)。
(2)归一化值(NVA)(M_ME_NA)
值的范围为[-1, 1],具体表示法可以有F13或F16位,占两个字节。
(3)标度化值(SVA)(M_ME_NB)
值的范围为[-32768,72767],即带符号整数,占两个字节。
例如,假设一个温度传感器测量的范围是从-50°C到+150°C,这个范围可以被映射到一个16位整数的范围内。在这种情况下,-50°C可能对应于整数值-32768,而+150°C对应于整数值+32767。这样,任何在这个范围内的温度都可以通过一个相应的整数表示。
使用标度值的好处是可以在不丢失精度的情况下,以二进制形式高效地传输模拟信号的测量值。在接收端,这些整数值可以被转换回对应的模拟量测量值,以供进一步处理和显示。
(4)短浮点数(R32-IEEE STD754)
即计算机内浮点数的表示法,占4字节。
IEC 104作为IEC 60870-5协议系列的一部分,继承了该系列的许多特性,但特别针对基于标准网络的通信进行了优化。在实际应用中,IEC 104协议因其稳定性和可靠性而被广泛采用于电力系统的自动化和监控。
3、主站、子站、控制站、被控制站、RTU
(1)主站:也称为控制站,它是电力自动化系统中的中心节点,负责监控、控制和管理整个电力网络。主站通常是一个或多个控制中心,它们运行着监控和控制软件,用来处理来自下属设备的数据,并向这些设备发送控制命令。
(2)子站:在电力系统中,子站通常指的是变电站,它包含了一些必要的设备,如断路器、变压器等,以及用于监控和控制这些设备的RTUs或IEDs(智能电子设备)。子站在IEC 104通信中通常扮演被控站(Controlled Station)的角色。
(3)远程终端单元RTU:RTU是安装在变电站内的设备,用于收集现场传感器和设备的数据(例如电流、电压、断路器状态等),并将这些数据上传到主站。RTU还能接收来自主站的控制命令,并将这些命令执行为现场操作。
总结来说,在IEC 104协议中:
- 主站:通常是控制中心,作为TCP客户端,负责数据的请求和接收。
- 子站/RTU:位于现场,作为TCP服务器,负责数据的采集和上传。
在IEC 104协议的典型应用中,主站主动发起与子站的连接,然后开始数据交换过程。因此,主站作为客户端,子站作为服务器。
这种客户端-服务器模型允许多个主站(作为客户端)连接到同一个子站(作为服务器),从而实现对子站的集中管理和控制。
二、模拟量、数据量
在IEC 60870-5-104协议(简称IEC 104)以及电力自动化和工业控制系统中,"模拟量"和"数字量"是两种基本的数据类型,它们代表了不同的信息和信号。
1、模拟量(Analog Quantity)
模拟量通常指的是可以连续变化的物理量,例如电压、电流、温度、压力等。在IEC 104协议中,模拟量数据通常用于表示遥测(Telemetry)信息。这些信息是连续的,可以通过模拟输入信号来量化,比如使用模拟至数字转换器(ADC)从传感器读取的连续电压水平。在IEC 104通信中,模拟量可以被编码为规一化值、标度化值或浮点值,并带有可能的质量描述符,以提供关于测量质量的额外信息。
2、数字量(Digital Quantity)
数字量指的是只有两个状态的信号,如开/关、是/否或真/假。在电力自动化领域,这通常与遥信(Telecontrol)信息相关,例如断路器的状态(合闸或分闸)、保护装置的启动等。数字量在IEC 104协议中以单点信息或双点信息的形式传输,代表开关量的状态。它们通常是二进制的,意味着它们只能表示两种状态(例如,0或1,合或分)。
在IEC 104协议的数据传输中,模拟量和数字量会被封装在应用服务数据单元(ASDU)中,并带有不同的类型标识符(Type Identification),这样接收端就能够区分数据类型并正确解析。例如,类型标识符M_ME_NC_1可能用于表示浮点数格式的测量值(模拟量),而M_SP_TB_1可能用于表示带有时间标签的单点信息(数字量)。
三、Java中相关的第三方开源库
1、OpenMUC j60870
OpenMUC是一个开源框架,旨在作为通信和数据采集的框架用于能源管理系统。其中j60870库专为IEC 60870-5-104协议设计,可以用来实现主站和远程终端单元(RTUs)之间的通信。这个库提供了相对底层的API,允许您创建自己的IEC 104客户端和服务器。
https://github.com/openmuc/j60870
2、IEC 60870-5-104 Library by Michael Wiedemann
这是一个Java实现的IEC 60870-5-104协议库,也支持IEC 60870-5-101。它提供了一个相对简单的API来创建主站和子站应用程序。
https://github.com/mz-automation/lib60870
3、IEC 60870-5-104 Server/Client Simulator by Ravil Nugmanov
这个项目提供了一个模拟器,可以模拟IEC 104服务器(RTU)和客户端(控制中心)。它可以用于测试和开发目的。
https://github.com/raviln/iec-104
四、IEC 101
IEC 60870-5-101和IEC 60870-5-104都是IEC(国际电工委员会)制定的一系列电力系统通信网络和系统标准IEC 60870-5的一部分。这个系列标准主要用于电力系统的远程监控和控制。IEC 60870-5-101和IEC 60870-5-104在功能上是相似的,但主要区别在于它们各自使用的传输层和应用场景。
1、IEC 101
- 是一个串行通信协议,通常用于通过串行链路(如RS-232或RS-485)进行通信。
- 适用于速度较慢、带宽较低的通信环境。
- 通常用于点对点或多点连接,适用于电网中距离较近的设备通信。
2、IEC 104
- 是基于IEC 101的应用协议,但它使用标准的TCP/IP协议栈进行通信。
- 适用于高速和宽带宽的网络环境。
- 是为远程通信设计的,可以通过互联网或其他IP网络传输数据,适用于广域网通信。
- 支持更复杂的网络拓扑,如星型、树型或网状结构。
简而言之,IEC 101是为串行通信设计的,而IEC 104是为网络通信设计的。两者在消息结构上是兼容的,即它们使用相同的应用层协议(ASDU结构等),这样设计的目的是为了保持在不同类型的通信链路上的一致性和互操作性。因此,从IEC 101迁移到IEC 104或反之,主要涉及到的是传输层的改变,而上层应用逻辑可以保持不变或需要很少的修改。
五、主站和从站之间的通信过程
1、建立连接
- 连接请求:主站(控制站)通过TCP/IP网络向子站(被控制站)发起连接请求。
- 确认连接:子站接受连接请求,并建立起一个TCP连接。
2、启动数据传输
- 启动命令:一旦TCP连接建立,主站发送启动帧(StartDT)命令给子站,请求开始数据传输。
- 启动确认:子站回应确认启动帧(StartDT Ack)以确认数据传输可以开始。
3、数据交换
- 发送/接收ASDU:数据通过应用服务数据单元(ASDU)进行交换。ASDU包含了数据类型标识、传输原因、公共地址和信息对象。
- 遥测数据: 从站定期发送遥测数据(例如电流、电压等)给主站。
- 遥信数据: 从站发送状态变化或事件(例如开关状态变化)给主站。
- 遥控命令:主站发送控制命令(例如断路器的合闸/分闸)给从站。
- 遥调命令:主站发送设置值(如设定点)给从站。
- 时间标签:数据可以带时间标签,以确保同步。
- 周期性或事件驱动的数据上传:子站可以根据配置周期性地上传数据,或者在检测到事件时立即上传数据。
- 数据确认:主站接收数据后,发送确认信息给子站,确保数据传输的可靠性。
- 控制命令:主站可以向子站发送控制命令,如切换断路器。
- 命令执行与确认:子站执行控制命令并向主站发送执行结果。
4、保持连接
- 测试帧:在没有数据交换的时候,主站和从站可以交换测试帧(TestFR)来保持连接活跃。
- 超时:如果在预定的时间内没有通信活动,连接可能会因超时而关闭。
6、断开连接
- 停止数据传输命令:当需要停止数据传输时,主站可以发送停止帧(StopDT)。
- 确认数据传输确认:子站回应确认停止帧(StopDT Ack)。
- 关闭TCP连接:最终,TCP连接可以由任一方关闭。
7、异常处理
- 断线重连:如果连接中断,主站通常会尝试重新建立连接。
- 错误处理:协议定义了错误情况的处理机制,包括无效的ASDU类型、格式错误等。
在实际应用中,IEC 104协议支持复杂的数据交换和控制逻辑,包括冗余管理、同步和异步数据更新等。安全性也是一个重要考虑,因此在某些实现中可能会有加密和认证机制。
六、IEC104协议结构
APDU由两个主要部分组成:应用协议控制信息(APCI)和应用服务数据单元(ASDU)。
1、APCI (Application Protocol Control Information)
APCI是APDU的控制部分,它负责帧的格式化和对传输服务的管理。APCI包括以下部分:
(1)起始标志(Start byte):(1字节)16进制数68H,十进制104(正好代表104规约),二进制为:01101000。
(2)长度:(1字节)表示APDU的总长度,并不包括1字节的启动字节和1字节的APDU长度本身。
(3)控制字段:(4字节)包含了传输帧的类型和发送/接收序列号。这部分用于确保数据的可靠传输。
- 发送序列号:表示主站发送的APDU序列号
- 接收序列号:表示从站接收的APDU序列号
控制字段的具体内容会根据APDU的类型(I格式、S格式或U格式)而有所不同。
- I格式(Information):用于传输带有ASDU的信息。长度大于6个字节。
- S格式(Supervisory):用于不带ASDU的监控功能,如确认或请求确认。长度为6个字节
- U格式(Unnumbered):用于控制功能,如启动或停止数据传输。长度为6个字节
68是起始字符;04是只有4个字节的控制域;控制域1值与表达的含义参看上面两个图就行
2、ASDU(Application Service Data Unit)
SDU是APDU的数据部分,它包含了实际要传输的信息。ASDU由以下部分组成:
(1)类型标识(Type Identification):指示ASDU包含的信息类型(如测量值、控制命令等)。
(2)可变结构限定词(Variable Structure Qualifier):指示信息元素的数量和是否连续。
(3)传输原因(Cause of Transmission):指示数据发送的原因(如周期更新、突发事件等)。
自发的(Spontaneous) | 表示信息是由监测设备自动产生的,通常用于未被请求的事件报告。 |
初始化的(Initialization) | 表示信息是在设备初始化过程中产生的,比如设备启动或重启时。 |
请求的(Requested) | 表示信息是应主站的请求而发送的,通常用于响应轮询。 |
激活的(Activation) | 表示信息是与某个操作的激活相关的,比如执行一个控制命令。 |
激活确认(Activation confirmation) | 表示信息是对激活命令的确认。 |
激活终止(Activation termination) |
表示一个激活过程的结束。 |
远程命令错误(Remote command error) | 表示一个由于错误而未能执行的远程控制命令。 |
(4)公共地址(Common Address):表示ASDU的目标地址或来源地址,通常对应于一个特定的设备或站点。
(5)信息对象(Information Objects):包含实际的数据值,如遥测值、遥信状态等。
七、IEC 104类型标识
IEC 60870-5-104协议中的类型标识(Type Identification)用于指定应用服务数据单元(ASDU)中包含的信息对象的类型。类型标识是一个8位的字段,它定义了信息对象的数据结构和解释。
1、监控方向标识
M_SP_NA_1 | 单点信息 |
M_DP_NA_1 | 双点信息 |
M_ST_NA_1 | 步位置 信息 |
M_BO_NA_1 | 32比特串 |
M_ME_NA_1 | 测量值,归一化值 |
M_ME_NB_1 | 测量值,标度化值 |
M_ME_NC_1 | 测量值,短浮点值 |
M_IT_NA_1 | 累计值 |
M_SP_TB_1 | 带时标56T的单点信息 |
M_DP_TB_1 | 带时标56T的双点信息 |
M_ST_TB_1 | 带时标56T的步位置信息 |
M_BO_TB_1 | 带时标56T的32比特串 |
M_ME_TD_1 | 带时标56T的测量值,归一化值 |
M_ME_TE_1 | 带时标56T的测量值,标度化值 |
M_ME_TF_1 | 带时标56T的测量值,短浮点数 |
M_IT_TB_1 | 带时标56T的累计值 |
M_EP_TD_1 | 带时标56T的继电保护装置事件 |
M_EP_TE_1 | 带时标56T的继电保护装置启动事件 |
M_EP_TF_1 | 带时标56T的继电保护装置成组输出电路信息 |
M_EI_NA_1 | 初始化结束 |
2、控制方向标识
C_SC_NA_1 | 单命令 |
C_DC_NA_1 | 双命令 |
C_RC_NA_1 | 步调节命令 |
C_SE_NA_1 | 设点命令,归一化值 |
C_SE_NB_1 | 设点命令,标度化值 |
C_SE_NC_1 | 设点命令,短浮点数 |
C_BO_NA_1 | 32比特串 |
C_SC_TA_1 | 带时标56T的单命令 |
C_DC_TA_1 | 带时标56T的双命令 |
C_RC_TA_1 | 带时标56T的步调节命令 |
C_SE_TA_1 | 带时标56T的设点命令,归一化值 |
C_SE_TB_1 | 带时标56T的设点命令,标度化值 |
C_SE_TC_1 | 带时标56T的设点命令,短浮点数 |
C_BO_TA_1 | 带时标56T的32比特串 |
C_IC_NA_1 | 总召唤命令 |
C_CI_NA_1 | 电能脉冲召唤命令 |
C_RD_NA_1 | 读命令 |
C_CS_NA_1 | 时钟同步命令 |
C_RP_NA_1 | 复位进程命令 |
C_TS_TA_1 | 带时标56T的测试命令 |
八、心跳机制
1、四个超时时间
t0 |
TCP连接建立的超时时间,即RTU端进入等待连接的状态后,若超过了此时间,主站端还没有connect()过来就主动退出等待连接的状态;规约推荐的缺省值为30秒。 |
t1 |
RTU端启动U格式测试过程后等待U格式测试应答的超时时间,若超过了此时间还没有收到主站端的U格式测试应答,就主动关闭TCP连接;规约推荐的缺省值为15秒。 |
t2 |
RTU端以突发的传送原因向主站端上送了变化信息或以激活结束的传送原因向主站端上送了总召唤、电度召唤后,等待主站端回应S格式的超时时间,若超过了此时间还没有收到,就主动关闭TCP连接;规约推荐的缺省值为10秒。 |
t3 |
当RTU端和主站之间没有实际的数据交换时,任何一端启动U格式测试过程的最大间隔时间;推荐的缺省值为20秒。 |