一、IEC 104协议概述
1. 什么是IEC 104协议
- IEC 60870-5-104,简称IEC 104,是国际电工委员会(IEC)制定的用于电力系统远程控制和监视的通信协议,继承了IEC 60870-5-101协议的应用层,适用于广域网环境。
- 从IEC 101到IEC 104的演进 :
- IEC 60870-5-101(IEC 101):基于串行通信,适用于点对点或多点的远动通信。
- IEC 60870-5-104(IEC 104):基于TCP/IP的网络通信,适应了现代网络的发展需求。
2. IEC 104的定位
- 应用层协议:定义了应用数据的格式和传输方式。
- 传输层协议:利用TCP/IP协议栈,实现可靠的数据传输。
- 面向广域网的远动通信:适用于电力系统中主站与子站之间的远程数据交换。
3.IEC 104协议的技术特点
- 长连接机制:维持客户端和服务器之间的持续连接,提高了通信效率。
- 数据优化:采用ASDU(应用服务数据单元)结构,支持批量数据传输,减少了通信开销。
- 支持遥测 、遥信 、遥控 、遥调等多种功能,满足电力系统的多样化需求。
二、IEC 104协议的主要功能
1.遥信(状态信息的传输)
遥信是指将远程设备的状态信息(如开关状态、告警信号)通过通信网络传送到控制中心,以便监视和记录。
- 应用场景:
- 开关状态监视:实时监测断路器、隔离开关等设备的合分状态。
- 故障报警:当设备出现故障或异常时,立即上报告警信息。
- 特点:
- 及时性:状态变化需要及时上报,便于控制中心快速做出响应。
- 可靠性:信息传输必须准确无误,避免误报和漏报。
- 信息类型:
- 单点信息(SPS):表示单个状态量,如开/关。
- 双点信息(DPS):表示设备具有两种互斥的状态,如合位、分位、异常。
2. 遥测(测量值的传输)
遥测是指将远程设备的运行数据(如电压、电流、功率等测量值)通过通信网络传送到控制中心,用于监测和分析。
- 应用场景:
- 电参量监测:实时获取电压、电流、有功功率、无功功率、频率等关键参数。
- 环境参数监测:获取设备环境的温度、湿度、压力等数据。
- 特点:
- 连续性:需要持续、定期地传输数据,形成时间序列。
- 准确性:测量数据需满足一定的精度要求,以保证分析的可靠性。
- 数据类型:
- 模拟量(测量值):连续变化的物理量,通常以浮点数或定点数形式传输。
- 计数器值:如电能表读数,用于计量和结算。
3. 遥调(远方参数的调整)
遥调是指控制中心对远程设备的运行参数进行调整,如改变设定值、调节运行模式等。
- 应用场景:
- 电压调节:调整变压器的分接头位置,改变输出电压。
- 无功功率补偿:调节电容器组的投入或切除,优化电网功率因数。
- 频率控制:通过调整发电机的出力,维持电网频率稳定。
- 特点:
- 精确性:参数调整需要精确到一定的数值范围。
- 安全性:参数调整可能影响电网运行,需要严格的审批和确认流程。
- 实现方式:
- 设定值下发:控制中心下发新的参数设定值,设备接收后进行调整。
- 参数查询:可以远程读取设备当前的参数设定,以便做出合理调整。
4. 遥控(控制命令的下发)
遥控是指从控制中心(如调度中心或主站)通过通信网络向远程设备(如变电站的开关设备)发送控制命令,以实现对设备的远程操作。
- 应用场景:
- 断路器合闸/分闸:远程控制断路器的开启或关闭,调节电力线路的通断。
- 设备启停:远程启动或停止发电机、变压器等大型设备。
- 特点:
- 安全性高:为了防止误操作,通常采用选择-执行(Select-Before-Operate)的两步控制方式。
- 实时性要求高:需要及时响应控制命令,以保障电网的安全稳定运行。
- 实现方式:
- 选择命令:先发送选择命令,确认目标设备和操作类型。
- 执行命令:收到设备确认后,再发送执行命令,完成实际操作。
- 确认机制:设备执行后反馈执行结果,供控制中心确认。
三、IEC 104协议的结构
在104协议中ADPU是核心概念,APDU(Application Protocol Data Unit,应用协议数据单元)是用于在电力系统和工业自动化系统中的远程终端设备(RTU)与控制中心(SCADA 系统)之间传输数据的基本单元。APDU 由两部分组成:APCI(Application Protocol Control Information,应用协议控制信息)和 ASDU(Application Service Data Unit,应用服务数据单元)。APDU 的结构和功能确保了数据传输的可靠性和有效性。
104协议根据控制字段的不同,可以分为三种类型的数据帧:
I 帧(信息帧,Information Frame):
- 用于传输实际的数据。
- 包含发送序列号(N(S))和接收序列号(N(R))。
S 帧(监视帧,Supervisory Frame):
- 用于控制流量和确认数据接收。
- 仅包含接收序列号(N(R))。
U 帧(无编号帧,Unnumbered Frame):
- 用于控制和管理命令,如连接建立和释放。
- 包含具体的控制命令码。
1. ACPI(应用协议控制信息)
包含控制数据传输的控制信息,包括启动字符、APDU 长度和控制字段等,具体结构如下:
启动字符(Start Character) :固定值 0x68
,表示 APCI 的开始。
APDU 长度(APDU Length):表示整个 APDU(包括 APCI 的控制字段 和 ASDU)的长度,最大为253字节。
控制字段(Control Field):由四个字节组成,包含不同类型的控制信息,具体格式取决于帧的类型(I 帧、S 帧、U 帧)。
I 帧的控制字段如下图所示:
I 帧控制字段分为发送序列号和接收序列号,序列号有15位,其中低字节的最低位为0,可表示的最大序列号为65535。
S 帧的控制字段如下图所示:
S 帧没有发送序列号,只有接收序列号,但是 S 帧的第一个字节最低位为1。S 帧只有 ACPI,没有 ASDU。
U 帧的控制字段如下图所示:
U 帧只有第一个字节的高6位有效,用来表示对应的控制指令。一般都是先发生效,然后回复确认,U 帧也是只有 ACPI,没有 ASDU。
2. ASDU(应用服务数据单元)
包含实际的应用层数据和相关的控制信息,包括类型标识符、可变结构限定符、传输原因、公共地址和信息对象等,具体结构如下:
类型标识符(Type Identifier, TI):标识 ASDU 的类型,指示所传输的数据或命令的种类。一个字节,类型有单点信息、标度化测量值等,每种类型其信息对象所占用的字节个数不一样。
可变结构限定符(Variable Structure Qualifier, VSQ):指示 ASDU 中信息对象的数量以及相关的属性。一个字节,其中最高位表示位为1表示信息对象的地址连续,只有第一个信息对象有地址,其他对象的地址就是累加1。最高位为0,就表示每个信息对象地址不连续,需要表示出来,除去最高位后剩下的就是信息对象的个数
传输原因(Cause of Transmission, COT):描述数据传输的原因,如周期性传输、背景扫描、响应命令等。一个字节。
原始地址(Originator Address, ORG): 可选,一般默认为0。一个字节。
公共地址(Common Address of ASDU):表示发送或接收设备的地址。两个字节。
信息对象(Information Object):包含实际的数据或命令,包括信息对象地址和数据元素等。信息对象的个数根据可变结构限定符的低7位来决定,每个信息对象都有地址,3个字节。如果是信息对象地址是连续的,只需要表示第一个信息对象地址即可,不连续则每个信息对象地址都需要表示,具体看后面的示例解析。
四、IEC 104协议示例解析
需要说明一下104一般是小端模式,也就是低位字节放在低地址,也就是前面。
S 帧:
这是一个 S 帧的具体内容以十六进制表示。
0x68是起始符号,0x04表示整个 S 帧的长度是4个字节。
0x0001是 S 帧固定格式,0x0060表示接收序列号,是96但是需要除2,因为最低位固定为0,所以是接收到了48个帧。
U 帧:
U 帧有三种,分别为启动、停止和测试。
这是一个启动命令 U 帧的具体内容。
0x68是起始符号,0x04表示整个 U 帧的长度是4个字节。
0x07使用二进制表示是0 0 0 0 0 1 1 1,低二位固定为1不用管,第三位置1表示一个启动命令。
发送了启动 U 帧,需要应答一个确认 U 帧。
0x68是起始符号,0x04表示整个 U 帧的长度是4个字节。
0x0B使用二进制表示是0 0 0 0 1 0 1 1,低二位固定为1不用管,第四位置1表示一个确认启动命令。
I 帧:
这是一个单点信息类型 I 帧的具体内容。
0x68是起始符号,0x1E表示整个 I 帧的长度是30个字节。
0x0010是发送序列号,表示发送了8个 I 帧,0x0002是接收序列号,表示接收到了1个 I 帧。
0x01是类型标识符,表示为单点信息。
0x91是可变结构限定符使用二进制表示为1 0 0 1 0 0 0 1,最高位为1表示信息对象的地址是连续的,剩下的7位为信息对象的个数,也就是有17个信息对象。
0x03是传输原因,具体意思为突发,传输原因有很多,具体看文章末尾的参考链接。
0x00是原始地址,一般默认为0。0x0001是公共地址,按照自己的需求设置。
0x0000001是信息对象地址,表示第一个信息对象的地址为1,后面的信息对象地址依次连续递增,第二信息对象地址为2等等。
0x00是第一个信息对象的具体内容,也就是传输的数据,0x01的第二个信息对象的具体内容,......,0x01是最后一个信息对象的内容,也是第十七个信息对象。
这个 I 帧也是单点信息类型,其他的字段就不解释,来解释一下不一样的。
可变结构限定符是第八个字节0x02使用二进制表示0 0 0 0 0 0 1 0,最高位为0表示信息对象的地址不连续,剩下7位表示有2个信息对象。
0x000015是第一个信息对象0x00的地址,0x000016是第二个信息对象0x00的地址,这里由于特殊原因两个信息对象的地址还是连续递增,但是实际上这两个信息对象的地址是可以随便设置的,没有关系,所以每个信息对象的地址需要写在 I 帧中。
这个 I 帧是标度化测量值类型,主要区别是第7个字节类型标识符是0x0B,在0x004013信息对象地址后,每个信息对象的内容使用3个字节,不像单点信息是1个字节。例如,0x007C+0x00这三个字节其中前两个字节是信息对象的具体值,后面这个字节是信息对象标度化值的质量描述(QDS)。
质量描述(QDS)位分配:
QDS 是一个 8 位(1 字节)数据结构,各位的含义如下:
位 | 名称 | 含义 |
---|---|---|
7 | IV(无效位) | 1 表示数据无效,0 表示数据有效 |
6 | NT(非当前位) | 1 表示数据不是当前值,0 表示数据是当前值 |
5 | SB(替代位) | 1 表示数据为替代值,0 表示数据为实际测量值 |
4 | BL(阻塞位) | 1 表示数据被阻塞,0 表示数据正常 |
3-0 | RES(保留位) | 通常填充 0 或其他定义的状态位 |
常见的填充值:
所有质量描述位为 0 :即
0x00
,表示数据是有效的、当前的、正常的实际测量值,没有替代或阻塞状态。这个值通常用于没有特殊质量状态的正常数据。设置无效位(IV) :
0x80
表示数据无效。常用于传输数据时表示该数据当前不可用或不可信。设置阻塞位(BL) :
0x10
表示数据被阻塞。常用于表示该数据由于某种原因被锁定或不可更改。设置替代位(SB) :
0x20
表示数据是替代值而非实际测量值。用于系统维护或测试阶段时的数据替代。
这里还需要补充的就是每种类型信息对象所占的字节个数不一样,且传输原因也不相同。
在上面两张图中可以看到,单点信息的信息对象格式是 SIQ,而 SIQ 的长度就是一个字节。
表量化测量值的信息对象格式是 SVA + QDS,而 SVA 的长度是二哥字节,QDS 的长度是一个字节,加上一共就3个字节了。这些信息可以在文章末尾的参考连接中找到。
这个 I 帧是一个时间同步类型,其类型标识符为0x67。信息对象格式是 CP56Time2a 表示7个二进制时间,所以在0x000000信息对象地址后面7个字节就是信息对象的内容。
0x63:毫秒的低8位
0x7C:毫秒的高8位(表示总共毫秒数)
0x15:分钟
0x10:小时
0x1E:日期
0x0A:月份
0x18:年份(从2000年开始的偏移)
五、IEC 104模拟工具的使用
通过百度网盘分享的文件:104.zip
链接:https://pan.baidu.com/s/1-IZZhC76OmCj4kTnEMFfPw?pwd=4yft
提取码:4yft
这个压缩包中有104模拟工具的安装包和一些104的资料,希望能帮助到大家学习和运行好 IEC 104协议。
通过连接下载压缩包,解压后在104主站模拟工具里查看使用说明,然后就能正确安装软件了。
软件安装完打开是这样,通过在右上方配置通讯方式既能当客户端也能当服务端,然后把相应的 IP 地址填写好,需要注意的是端口只能是2404。
左上方菜单栏中,有启动、停止和暂停命令,还能保存报文和打开保存过的报文。
打开左上方工具里的选项,还能设置遥信、遥测等起始地址和个数。
下方会显示设置过的遥信,遥测等地址的值。之前说的单点信息就是遥信,而标度化值就是遥测。
可以选中一个报文,点击右键,选择报文解析,软件就能自动解析这个报文的每个字段。
如果大家需要编写代码实现 IEC 104协议,有很多的开源库可以选择,不需要从头开始造轮子,推荐一个使用 C 语言编写很经典的 IEC 104开源库:lib60870。
以上就是 IEC 104协议与示例解析以及模拟工具的使用的全部内容了,如果有什么建议或者疑问欢迎在评论区中讨论嗷~~。
参考连接1:详解IEC104 规约【最详细版】
参考连接2:IEC104协议详解
参考连接3: 从零开始理解IEC104协议之一------104规约帧格式
参考文献:
《远动设备及系统第5-104部分:传输规约-采用标准传输协议集的 IEC 60870-5-101网络访问》
《远动设备及系统第5部分:传输规约-第101篇 基本远动任务配套标准》