IEC61850协议标准和之前的101、104协议最大的区分就是在模型这里,模型可以说是一个变电站里面的智能设备的定义,里面定义了网络连接信息、数据上报方式、设备访问控制点等,所以说在不同系统的对接过程中,有了这么一个基于标准定义格式的信息模型,通过定义和实例化的方式(面向对象),那么通过这个模型我们就知道了这里所涉及的智能设备的所有信息。下面我们具体详细说一下模型的由来和模型文件的内容。第一部分和第二部分主要是在上一篇提及的书中摘录的知识点,如果看起来啰嗦可以直接从第三部分开始。
1.基础概念
-
逻辑节点LN(Logical Node)。是 IEC 61850 标准面向对象建模的关键部件,也是面向对象概念的集中体现。变电站自动化系统各种功能和信息模型的表达都归结到逻辑节点上实现。逻辑节点的概念体现了将变电站自动化功能进行模块化分解的一种建模思路。IEC 61850标准建模的思路就是将变电站自动化系统的功能进行分解,分解的过程就是模块化处理,形成一个一个小的模块。每个逻辑节点就是一个模块,代表一个具体的功能。多个逻辑节点协同工作,共同完成变电站内的控制、保护、测量及其他功能。
-
数据DO(Data Object)。通常一个逻辑节点包含多类信息,例如一个断路器有开关位置、跳闸闭锁等多类信息,这些信息在模型中就是数据概念的由来。
-
数据属性DA(Data Attribute)。数据属性包含属性名、数据属性类型和值/值域三大要素。除此之外还有功能约束FC、TrgOp、M/O/C一些辅助信息。
我理解的数据对象就是一个最小的开关(或者最小的物理的设备),这个开关的状态(现在是开还是关)、控制信息(被控开还是被控关)这样。
-
数据集 (DataSet)。是IEC61850标准的核心概念之一,顾名思义,它是一系列“数据”的集合。按照 IEC 61850 标准定义,数据集是有序的数据引用或数据属性引用的集合。IEC 61850 标准引入数据集的目的是利用数据集对数据进行分组,以方便数据传送。变电站 IED 中存在各种数据,有的需要实时传送(如电流值、电压值、频率值等),有的可以慢些传送(如电度值、功率)。
由于高压变电站中存在上百个IED,而网络通信带宽是有限的,如果这些数据不进行分组而一起发送,有可能会影响数据传输的实时性,甚至会造成通信堵塞。引入数据集的概念后,利用数据集可以方便地对数据进行分组和打包。例如可以将需要实时传输的数据组成一个数据集,将对传输时间要求不苛刻的数据分成另一个数据集,分别传送。
按照变电站中“四遥”信息的分类,可以建立相应的遥测数据集和遥信数据集。下表是按照国内 IEC 61850工程实施的习惯,对微机保护装置中需要上送的数据进行总结和分类后预定义的数据集。
-
逻辑设备LD(Logical Device)。逻辑节点中含有数据/数据属性,根据应用需要对数据/数据属性的引用进行分组后形成数据集,数据集通过报告服务向外发送(上送到客户端)。
在逻辑节点及其内部的数据能够代表该设备在变电站自动化系统中具备哪些功能。但是除逻辑节点和数据之外,实际设备中至少还包括以下两类信息:
-
描述设备本身状态的相关信息,如一次设备的铭牌信息,反映物理装置运行状况的上电次数、失电告警、通信缓存区溢出等信息。
-
与多个逻辑节点相关的通信服务。与图3-10中的控制、取代服务不同,有些通信服务(如采样值传输、COOSE、定值服务)需要同时与多个逻辑节点发生信息交互,这些服务不能定义在某个逻辑节点内部。
逻辑节点模型无法容纳以上两类信息,因此建模时需要增加新的组件。因此IEC 61850 标准引入了逻辑设备 LD (Logical Device)的概念。
逻辑设备可以看作是一个包含若干逻辑节点和相关通信服务的容器。按照 IEG 61850标准的规定,所有逻辑设备都必须包含 LLNO(含有该LD的公共信息) 和LPHD (含有与物理装置本身相关的信息)两个逻辑节点
-
-
服务器.
2.模型定义
3.模型配置
模型配置文件,这里值分析ICD文件(IED能力描述文件)
这部分我给出一个具体的ICD的例子展开说说,由于文件太长,我就不在这里在放了,文件我放在gitee图床上,大家可以下载下来。
3.1 配置获取方式
IEC 61850包含“客户端一服务器”和“发布方一订阅者"两种通信模式。在客户端一服务器模式下,客户端要获取服务器端的数据模型,实际上有两种方式可以选择:
- 基于IEC 61850 配置文件的配置方式。如图3-33所示,由于SCD文件中含有全站所有服务器端装置的配置信息,因此客户端可以直接读取并解析SCD 文件来获取每个服务器的数据模型。
- 基于IEC 61850服务的配置方式。客户端在初始化时,通过一系列 ACSI 通信服务(如 GetServerDirectory 等),来动态读取/上召服务器端的整个分层数据模型信息。
因此,IEC61850标准为客户端提供了两种方式来获取服务器端数据模型,两种方式都能达到获得配置信息的目的,却又有着各自的特点。
3.2 配置文件结构
3.3 内容详细讲解
1. 整体结构
<?xml version="1.0" encoding="utf-8"?>
<SCL>
<Header></Header>
<Communication></Communication>
<IED configVersion="v1.00" desc="测控装置" manufacturer="XXXX" name="FK" type="DHJC">
<Services>
... ...
</Services>
<AccessPoint clock="false" name="S1" desc="MMs访问点">
<Server desc="61850" timeout="30">
<Authentication/>
<LDevice desc="自定义装置" inst="MONT">
<LN0 inst="" lnClass="LLN0" lnType="GEXIN_LLN0"></LN0>
<LN inst="1" lnClass="LPHD" lnType="GEXIN_LPHD"></LN>
<LN></LN>
... ...
<LN></LN>
</LDevice>
</AccessPoint>
</IED>
<DataTypeTemplates>
<LNodeType></LNodeType>
<DOType></DOType>
<EnumType></EnumType>
</DataTypeTemplates>
</SCL>
-
Header 一些历史版本信息等
-
Communication.服务器连接信息(IP/端口等,GOOSE配置等)
-
IED
- Services.服务,描述服务的能力配置等信息
- AccessPoint 访问点,一般分为MMS访问点、GOOSE访问点等
- Server
- Authentication
- LDevice.逻辑设备,每一个IED中包含1~n个LDevice,每个逻辑设备包含一个LN0(第3部分单独说)、一个LPHD(一般就是放一些设备物理铭牌信息)和n个LN(逻辑节点)(第2部分单独说)
- Server
-
DataTypeTemplates.对象类型定义
-
LNodeType.逻辑节点的类型定义,其子节点为数据节点DO
-
DOType.数据节点DO的类型定义,其子节点为数据属性DA,数据属性的类型可以是使基本类型,复合类型(自定义类结构体)引用DAType
-
DAType.复合类型(自定义类结构体)DA的类型定义
-
EnumType.枚举类型定义
-
2. LN与四遥
-
遥信(状态类)
<!-- 在IED中实例化 --> <!-- 实例化逻辑节点:lnClass的GGIO是通用过程I/O,这一部分在7-4协议原文中定义,常见的还 有XCBP:断路器.MMXU:测量 inst是实例号 lnType引用DataTypeTemplates中LNodeType的id --> <LN desc="遥信单点信息点位" inst="1" lnClass="GGIO" lnType="GGIO_SPS"> <!-- DOI:Data Object Instance --> <DOI name="Ind1"> <!-- DAI:Data Attribute Instance 这里设置一些默认值,一般是设备名称等信息 --> <DAI name="dU"> <Val>110kV配电装置室1#SF6气体探测器告警</Val> </DAI> </DOI> </LN> <!-- 逻辑节点类型定义:lnClass属性表示该LNodeType是在哪一种兼容逻辑节点类的基础上扩充的 DO的name就是数据对象的名字上面在DOI里的设置默认值时要对应好,type属性引用DOType的id --> <LNodeType desc="" id="GGIO_SPS" lnClass="GGIO"> <DO desc="模式" name="Mod" type="CSG_INC_Mod"/> <DO desc="性能" name="Beh" type="CSG_INS_Beh"/> <DO desc="健康状况" name="Health" type="CSG_INS_Health"/> <DO desc="铭牌" name="NamPlt" type="CSG_LPL"/> <DO desc="110kV配电装置室1#SF6气体探测器告警" name="Ind1" type="CSG_SPS"/> </LNodeType> <!-- cdc:公用数据类这个在7-3协议原文定义,这些都是固定的像SPS(单点信息)、DPS(双点信息)等 DA里面的name也是在7-3中定义。 状态信息:stVal 位置信息true:on false:off、q、t 描述信息:dU fc: 功能约束,用于标识信息类型 ST:状态 MX:测量 CO:控制 BR:缓冲性报告控制块 等等 cdc对应的数据对象有哪些属性,属性名称name叫什么,fc是什么这些都在7-3协议原文定义好了 在下面贴一下协议原文看看 --> <DOType cdc="SPS" desc="单点状态信息类" id="CSG_SPS"> <DA bType="BOOLEAN" dchg="true" fc="ST" name="stVal"/> <DA bType="Quality" fc="ST" name="q" qchg="true"/> <DA bType="Timestamp" fc="ST" name="t"/> <DA bType="Unicode255" fc="DC" name="dU"/> </DOType>
用Java的面向对象思想转换一下就是下面的代码
class CSG_SPS extend SPS{ boolean stVal; Quality q; Timestamp t; Unicode255 dU; } class GGIO_SPS extend GGIO{ CSG_INC_Mod Mod; CSG_INS_Beh Beh; CSG_INS_Health Health; CSG_LPL NamPlt; /* 110kV配电装置室1#SF6气体探测器告警 */ CSG_SPS Ind1; } public static void main(String[] args){ CSG_SPS Ind1 = new CSG_SPS(); Ind1.setDU("110kV配电装置室1#SF6气体探测器告警"); LogicalNode GGIO1 = new GGIO_SPS();//GGIO1 -> LN实例名:prefix+LnClass+inst GGIO1.setInd1(Ind1); ied.addLn(GGIO1); }
-
遥测(测量类)
<LN desc="遥测状态检测点位" inst="2" lnClass="GGIO" lnType="GGIO_MV"> <DOI desc="1#温湿度-1#主变室室北面温度值" name="AnInd1"> <DAI name="dU"> <Val>1#温湿度-1#主变室室北面温度值</Val> </DAI> </DOI> </LN> <LNodeType desc="" id="GGIO_MV" lnClass="GGIO"> <DO desc="模式" name="Mod" type="CSG_INC_Mod"/> <DO desc="性能" name="Beh" type="CSG_INS_Beh"/> <DO desc="健康状况" name="Health" type="CSG_INS_Health"/> <DO desc="铭牌" name="NamPlt" type="CSG_LPL"/> <DO desc="1#温湿度-1#主变室室北面温度值" name="AnInd1" type="CSG_MV"/> </LNodeType> <!-- 这里我刚开始也有个疑问。mag引用CSG_AnalogueValue中也是只有一个浮点数f就可以, 为什么还需要单独引用定义一下,<DA bType="FLOAT32" dchg="true" fc="MX" name="mag.f"/> 因为这样写就是在7-3协议原文定义的,下面贴一下图 --> <DOType cdc="MV" desc="测量值" id="CSG_MV"> <DA bType="Struct" dchg="true" fc="MX" name="mag" type="CSG_AnalogueValue"/> <DA bType="Quality" fc="MX" name="q" qchg="true"/> <DA bType="Timestamp" fc="MX" name="t"/> <DA bType="Struct" fc="CF" name="units" type="CSG_Units"/> <DA bType="Unicode255" fc="DC" name="dU"/> </DOType> <DAType id="CSG_AnalogueValue"> <BDA bType="FLOAT32" name="f"/> </DAType>
-
遥控(控制类)
<LN desc="可控单点信息点位" inst="3" lnClass="GGIO" lnType="GGIO_SPC"> <DOI desc="技防系统主机通讯状态" name="Ind1"> <DAI name="dU"> <Val>技防系统主机通讯状态</Val> </DAI> <DAI name="ctlModel"> <Val>direct-with-normal-security</Val> </DAI> </DOI> </LN> <LNodeType desc="" id="GGIO_SPC" lnClass="GGIO"> <DO desc="模式" name="Mod" type="CSG_INC_Mod"/> <DO desc="性能" name="Beh" type="CSG_INS_Beh"/> <DO desc="健康状况" name="Health" type="CSG_INS_Health"/> <DO desc="铭牌" name="NamPlt" type="CSG_LPL"/> <DO desc="技防系统主机通讯状态" name="Ind1" type="CSG_SPC"/> </LNodeType> <DOType cdc="SPC" desc="可控单点" id="CSG_SPC"> <DA bType="Struct" fc="CO" name="SBOw" type="CSG_SBOw_Oper_SDPC"/> <DA bType="Struct" fc="CO" name="Oper" type="CSG_SBOw_Oper_SDPC"/> <DA bType="Struct" fc="CO" name="Cancel" type="CSG_Cancel_SDPC"/> <DA bType="BOOLEAN" dchg="true" fc="ST" name="stVal"/> <DA bType="Quality" fc="ST" name="q" qchg="true"/> <DA bType="Timestamp" fc="ST" name="t"/> <DA bType="Enum" fc="CF" name="ctlModel" type="ctlModel"/> <DA bType="Unicode255" fc="DC" name="dU"/> </DOType> <DAType id="CSG_SBOw_Oper_SDPC"> <BDA bType="BOOLEAN" name="ctlVal"/> <BDA bType="Struct" name="origin" type="CSG_Originator"/> <BDA bType="INT8U" name="ctlNum"/> <BDA bType="Timestamp" name="T"/> <BDA bType="BOOLEAN" name="Test"/> <BDA bType="Check" name="Check"/> </DAType> <DAType id="CSG_Cancel_SDPC">...</DAType> <DAType id="CSG_Originator"> <BDA bType="Enum" name="orCat" type="orCategory"/> <BDA bType="Octet64" name="orIdent"/> </DAType>
这里的控制参数ctlval上面在协议原文有一行字:见表39定义,表39说“服务这一部分从DL/T 860.72继承”也就是这一个块在协议7-2这里单独定义,SBOw预置,Oper执行,Cancel取消。具体的服务规范在 7-2 的20.5.3部分,可见Oper有一下数据属性
-
遥调(定值类)
<LN desc="可控模拟量点位" inst="4" lnClass="GGIO" lnType="GGIO_APC"> <DOI desc="3#机房空调温度值" name="AnInd1"> <DAI name="dU"> <Val>3#机房空调温度值</Val> </DAI> <DAI name="ctlModel"> <Val>direct-with-normal-security</Val> </DAI> </DOI> </LN> <LNodeType desc="" id="GGIO_APC" lnClass="GGIO"> <DO desc="模式" name="Mod" type="CSG_INC_Mod"/> <DO desc="性能" name="Beh" type="CSG_INS_Beh"/> <DO desc="健康状况" name="Health" type="CSG_INS_Health"/> <DO desc="铭牌" name="NamPlt" type="CSG_LPL"/> <DO desc="3#机房空调温度值" name="AnInd1" type="CSG_APC"/> </LNodeType> <DOType cdc="APC" desc="可控模拟量类" id="CSG_APC"> <DA bType="Struct" fc="CO" name="SBOw" type="CSG_SBOw_Oper_APC"/> <DA bType="Struct" fc="CO" name="Oper" type="CSG_SBOw_Oper_APC"/> <DA bType="Struct" fc="CO" name="Cancel" type="CSG_Cancel_APC"/> <DA bType="Struct" dchg="true" fc="MX" name="stVal" type="CSG_AnalogueValue"/> <DA bType="Quality" fc="ST" name="q" qchg="true"/> <DA bType="Timestamp" fc="ST" name="t"/> <DA bType="Enum" fc="CF" name="ctlModel" type="ctlModel"/> <DA bType="Unicode255" fc="DC" name="dU"/> </DOType> <DAType id="CSG_SBOw_Oper_APC"> <!-- 与遥控单点SPC相比,这里ctlVal是设置浮点数,而非布尔类型 --> <BDA bType="Struct" name="ctlVal" type="CSG_AnalogueValue"/> <BDA bType="Struct" name="origin" type="CSG_Originator"/> <BDA bType="INT8U" name="ctlNum"/> <BDA bType="Timestamp" name="T"/> <BDA bType="BOOLEAN" name="Test"/> <BDA bType="Check" name="Check"/> </DAType> <DAType id="CSG_Cancel_APC">...</DAType>
3. LN0、数据集(DataSet)、报告(ReportControl)
<LN0 inst="" lnClass="LLN0" lnType="GEXIN_LLN0">
<!--
数据集:顾名思义就是数对对象的集合,定义数据集之后,使用 ReportControl报告
定义这些数据发生变动时发送报告FCDA 各属性ldInst:逻辑设备实例名称
lnClass:逻辑节点类型 lnInst:逻辑节点实例号 对应DO的name.
目前国内规范一般按照遥信、遥测分为两各数据集,一个报告遥测量浮点型,一个报
告遥信量布尔型
-->
<DataSet name="ds01Din" desc="遥信单点信息数据集(含可控点)">
<FCDA doName="Ind1" fc="ST" ldInst="MONT" lnClass="GGIO" lnInst="1"/>
<FCDA doName="Ind1" fc="ST" ldInst="MONT" lnClass="GGIO" lnInst="3"/>
</DataSet>
<DataSet name="ds01Ain" desc="遥测状态检测数据集">
<FCDA doName="AnInd1" fc="MX" ldInst="MONT" lnClass="GGIO" lnInst="2"/>
<FCDA doName="AnInd1" fc="MX" ldInst="MONT" lnClass="GGIO" lnInst="4"/>
</DataSet>
<!-- 引用ds01Din数据集-->
<ReportControl bufTime="0" buffered="false" confRev="1" datSet="ds01Din" intgPd="30000"
name="brcb01Din" rptID="MONT/LLN0$BR$brcb01Din">
<!-- 其中数据对象的dchg、qchg当数据变化、品质变化时都触发报告进行上送 -->
<TrgOps dchg="true" dupd="false" period="false" qchg="true"/>
<OptFields dataSet="true" entryID="true" reasonCode="true" seqNum="true" timeStamp="true"/>
<!--
max属性是IED可以支持的报告实例个数。IED初始化时为每个报告生成max个实例,
分别以报告控制块名+实例号(01,02...)进行区分,如brcbAlarmO1、brabAlarm02。
每个client在连接时以不同的报告实例号占用一个报告实例。每个报告实例按
照client指定的属性上送报告
-->
<RptEnabled max="16"/>
</ReportControl>
<ReportControl bufTime="0" buffered="false" confRev="1" datSet="ds01Ain" intgPd="300000"
name="brcb01Ain" rptID="MONT/LLN0$BR$brcb01Ain">
<TrgOps dchg="true" dupd="false" period="true" qchg="true"/>
<OptFields dataSet="true" entryID="true" reasonCode="true" seqNum="true" timeStamp="true"/>
<RptEnabled max="16"/>
</ReportControl>
<DOI desc="Mode" name="Mod">...</DOI>
<DOI desc="Behaviour" name="Beh">...</DOI>
<DOI desc="Health" name="Health">...</DOI>
<DOI desc="Name Plate" name="NamPlt">...</DOI>
</LN0>
报告分为缓存和非缓存两种类型,由IED建模时,通过ReportControl的”buffered”属性设置,buffered=true设置缓冲型报告,对应fc=BR;buffered=false设置非缓冲型报告,对应fc=RP。缓存型报告要求IED在内存中缓存报告,如通信中断期间发生了事件,当通信恢复后,此事件报文应能上送不丢失,通常告警、事件、SOE等报告建模为缓存类型。非缓存型报告不要求IED缓存,通信中断期间的数据可丢失,通常遥测类型的数据建模为非缓存报告。
4.参考资料
IEC61850_模型文件属性详解.doc
IEC61850模型培训.pdf
部分IEC 61850协议原文