2. SCL 文件结构:五大元素详解

好,咱们进入正题。SCL 文件,说白了就是 IEC 61850 的「通用语言」。你想想看,一个变电站里,保护装置、测控装置、智能终端……不同厂家、不同型号,怎么让它们互相理解?SCL 文件就是那个桥梁。

我个人习惯把 SCL 文件比作一栋房子的设计图。你拿到图纸,先看整体结构,再看每个房间的布局,最后看用什么材料。SCL 也是这个逻辑。它由五大元素组成:Header、Substation、Communication、IED、DataTypeTemplates。咱们一个一个拆开讲。

SCL 文件五大元素结构 SCL 根元素 Header Substation Communication IED DataTypeTemplates 文件头信息 一次系统描述 通信配置 智能电子设备 数据类型模板 一个完整的 SCL 文件必须包含这五个部分 缺一不可,顺序固定

2.1 Header —— 文件的「身份证」

Header 是 SCL 文件的第一个元素。它记录了文件的基本信息,比如版本号、修改历史、工具来源等。嗯,这里要注意:Header 虽然简单,但千万别乱填。

我记得有一次,一个同事从某个工具导出的 SCL 文件,Header 里的版本号写错了,结果导入另一个系统时直接报错。折腾了半天才发现是版本不匹配。

<Header id="MySubstation" nameStructure="IEDName" version="2.0" revision="1">
    <History>
        <Hitem version="1.0" revision="0" when="2023-01-15T10:00:00" who="ZhangSan" what="Initial creation"/>
        <Hitem version="2.0" revision="1" when="2023-06-20T14:30:00" who="LiSi" what="Added new bay"/>
    </History>
</Header>
我的小建议:每次修改 SCL 文件,记得更新 History 记录。别嫌麻烦,出了问题查历史记录能救命。

2.2 Substation —— 一次系统的「地图」

Substation 描述的是变电站的一次设备。说白了,就是断路器、隔离开关、变压器这些大家伙。它用层级结构来组织:电压等级(VoltageLevel)→ 间隔(Bay)→ 设备(ConductingEquipment)。

你想想看,一个 220kV 变电站,有主变间隔、出线间隔、母联间隔……每个间隔里又有断路器、刀闸、地刀。Substation 就是把这些关系用树形结构表达出来。

<Substation name="MySubstation" desc="220kV Substation">
    <VoltageLevel name="E1" desc="220kV" nomFreq="50.0" numPhases="3">
        <Voltage unit="V" multiplier="k">220</Voltage>
        <Bay name="Bay1" desc="Main Transformer Bay">
            <ConductingEquipment name="QF1" type="CBR" desc="220kV Circuit Breaker"/>
            <ConductingEquipment name="QS1" type="DIS" desc="Disconnector"/>
        </Bay>
    </VoltageLevel>
</Substation>
关键点:Substation 的层级关系必须和实际物理拓扑一致。我曾经见过一个项目,Bay 的命名和实际图纸对不上,结果现场调试时找设备找了半天。

2.3 Communication —— 通信的「高速公路」

Communication 部分定义的是设备之间怎么通信。它包含子网(SubNetwork)、访问点(ConnectedAP)和 GSE 控制块等信息。说白了,就是告诉设备:你用哪个 IP?走什么协议?报文发到哪?

我个人习惯先画通信拓扑图,再写 Communication 配置。这样不容易漏掉连接。

<Communication>
    <SubNetwork name="StationBus" type="8-MMS">
        <ConnectedAP iedName="IED1" apName="S1">
            <Address>
                <P type="IP">192.168.1.10</P>
                <P type="IP-SUBNET">255.255.255.0</P>
                <P type="IP-GATEWAY">192.168.1.1</P>
            </Address>
            <GSE ldInst="LD0" cbName="GooseCB1">
                <Address>
                    <P type="MAC-Address">01-0C-CD-01-00-01</P>
                    <P type="APPID">0001</P>
                    <P type="VLAN-ID">100</P>
                    <P type="VLAN-PRIORITY">4</P>
                </Address>
            </GSE>
        </ConnectedAP>
    </SubNetwork>
</Communication>
避坑指南:我曾经遇到过 GOOSE 通信不成功,查了半天发现是 VLAN-ID 配错了。记住:MAC 地址、APPID、VLAN-ID 必须全网唯一,不能冲突。

2.4 IED —— 智能设备的「说明书」

IED 是 SCL 文件的核心。它描述了一个智能电子设备的所有信息:型号、版本、访问点、逻辑设备、逻辑节点、数据对象、报告控制块、GOOSE 控制块……

你可以把 IED 部分想象成设备的「完整说明书」。它告诉系统:这个设备有哪些功能?能采集哪些数据?能执行哪些操作?

<IED name="IED1" manufacturer="CompanyA" configVersion="V1.0">
    <Services>
        <DynAssociation/>
        <GetDirectory/>
        <GetDataObjectDefinition/>
        <DataObjectDirectory/>
        <GetDataSetValue/>
        <SetDataSetValue/>
        <GetDataValues/>
        <SetDataValues/>
        <GetCBValues/>
        <ReportControl buffered="true" bufTime="1000">
            <RptEnabled max="5">
                <ClientLN apRef="S1" iedName="IED2" ldInst="LD0" lnClass="ITCI" lnInst="1"/>
            </RptEnabled>
        </ReportControl>
    </Services>
    <AccessPoint name="S1">
        <Server>
            <Authentication none="true"/>
            <LDevice inst="LD0">
                <LN0 lnClass="LLN0" inst="" lnType="LLN0_Type">
                    <DataSet name="dsGOOSE1">
                        <FCDA ldInst="LD0" lnClass="XCBR" lnInst="1" doName="Pos" fc="ST"/>
                    </DataSet>
                    <GSEControl name="GooseCB1" datSet="dsGOOSE1" confRev="1" appID="0001"/>
                </LN0>
                <LN lnClass="XCBR" inst="1" lnType="XCBR_Type">
                    <DOI name="Pos">
                        <DAI name="stVal"/>
                        <DAI name="q"/>
                        <DAI name="t"/>
                    </DOI>
                </LN>
            </LDevice>
        </Server>
    </AccessPoint>
</IED>
重点:每个 IED 必须有唯一的 name,AccessPoint 的 apName 也必须唯一。这是系统识别设备的唯一标识。

2.5 DataTypeTemplates —— 数据类型的「字典」

DataTypeTemplates 定义了所有用到的数据类型。它包括 LNodeType(逻辑节点类型)、DOType(数据对象类型)、DAType(数据属性类型)和 EnumType(枚举类型)。

说白了,这就是一本「字典」。前面 IED 部分用到的 lnType、doName 等,都要在这里找到对应的定义。如果字典里没有,设备就不知道这个数据长什么样。

<DataTypeTemplates>
    <LNodeType id="LLN0_Type" lnClass="LLN0">
        <DO name="Mod" type="Mod_Type"/>
        <DO name="Beh" type="Beh_Type"/>
        <DO name="Health" type="Health_Type"/>
    </LNodeType>
    
    <LNodeType id="XCBR_Type" lnClass="XCBR">
        <DO name="Pos" type="Pos_Type"/>
        <DO name="BlkOpn" type="BlkOpn_Type"/>
        <DO name="BlkCls" type="BlkCls_Type"/>
    </LNodeType>
    
    <DOType id="Pos_Type" cdc="DPC">
        <DA name="stVal" bType="Dbpos" fc="ST" dchg="true"/>
        <DA name="q" bType="Quality" fc="ST" qchg="true"/>
        <DA name="t" bType="Timestamp" fc="ST"/>
        <DA name="ctlVal" bType="BOOLEAN" fc="CO"/>
        <DA name="operTm" bType="Timestamp" fc="CO"/>
    </DOType>
    
    <EnumType id="Dbpos">
        <EnumVal ord="0">intermediate</EnumVal>
        <EnumVal ord="1">off</EnumVal>
        <EnumVal ord="2">on</EnumVal>
        <EnumVal ord="3">bad-state</EnumVal>
    </EnumType>
</DataTypeTemplates>
经验之谈:我建议把常用的数据类型做成模板库。不同项目直接复用,既保证一致性,又减少出错。比如断路器位置(Pos)的类型,几乎所有项目都一样。

五大元素的关系

这五个元素不是孤立的。它们之间有着紧密的联系:

元素 作用 与其他元素的关系
Header 文件元信息 所有元素的容器
Substation 一次系统拓扑 IED 中的逻辑节点可关联到 Substation 的设备
Communication 通信参数配置 通过 ConnectedAP 的 iedName 关联到 IED
IED 设备功能描述 通过 lnType 引用 DataTypeTemplates 中的类型
DataTypeTemplates 数据类型定义 被 IED 中的逻辑节点引用

举个例子:IED 里定义了一个断路器 XCBR,它的 lnType="XCBR_Type" 指向 DataTypeTemplates 中的定义。而这个断路器在物理上对应 Substation 里的某个 ConductingEquipment。同时,它的 GOOSE 报文通过 Communication 配置的地址发送出去。你看,一环扣一环。

总结一下:SCL 文件的五大元素,就像房子的五个部分:Header 是门牌号,Substation 是户型图,Communication 是水电线路,IED 是每个房间的家具清单,DataTypeTemplates 是家具的规格说明书。缺了任何一个,这房子都住不了人。

嗯,今天就先聊到这。记住:写 SCL 文件,最重要的是保持一致性。名字别写错,引用别断链,版本别乱改。做到这三点,基本不会出大问题。


公众号:蓝海资料掘金营,微信deep3321