2. SCD文件结构解析

SCD(Substation Configuration Description,变电站配置描述)文件本质上是一份符合IEC 61850-6规定的XML文档。理解SCD,第一步不是去背元素名,而是先看清它的“骨架”:这份XML用什么Schema约束、根元素是谁、命名空间如何声明、各层级之间是包含关系还是引用关系。只有把结构关系理顺,后续的校验、比对、合并和工具解析才有稳定的判断依据。

一、Schema组织方式:一份主Schema加多份被导入的命名空间Schema

IEC 61850-6为SCD定义了主Schema文件SCL.xsd,它并不把所有类型都写在一个文件里,而是通过<xs:import>把不同命名空间下的类型定义引入进来。典型组织方式是:主Schema负责SCL根元素及其直接子元素(Header、Substation、Communication、IED、DataTypeTemplates)的声明;被导入的Schema分别负责通信参数、变电站拓扑、IED能力描述、数据类型模板等类型。这样做的结果是:一个元素属于哪个命名空间,决定了它由哪份Schema约束、允许出现哪些子元素和属性。

因此,在做SCD校验时,不能只看“元素名对不对”,还要看“这个元素是否出现在它被允许的命名空间和位置上”。例如<Communication>下的<SubNetwork>与<IED>下的<AccessPoint>,虽然都涉及通信,但分属不同层级、由不同Schema片段约束,混用就会直接导致校验失败。

二、根元素与命名空间:SCL是唯一根,命名空间决定语义归属

SCD文档有且只有一个根元素<SCL>。根元素上通常声明默认命名空间和带前缀的扩展命名空间,例如:

<SCL xmlns="http://www.iec.ch/61850/2003/SCL"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="http://www.iec.ch/61850/2003/SCL SCL.xsd"
     version="2007" revision="B">
  ...
</SCL>

这里xmlns声明的是SCL默认命名空间,所有未加前缀的元素默认属于该命名空间;xsi:schemaLocation告诉校验器去哪里找Schema;version和revision是SCL版本标识,不同版本对元素和属性的允许范围不同,是校验时必须先确认的参数。命名空间一旦写错或漏写,解析器可能把元素当作“无命名空间元素”处理,导致整份文件的类型校验全部失效。

三、层级结构:五棵子树挂在同一个根下

在<SCL>根之下,SCD按功能划分为五个一级子元素,它们之间不是简单的顺序排列,而是各自承担不同职责、又通过引用相互关联:

  • <Header>:文件头,记录id、version、revision、toolID、nameStructure等元数据,用于标识这份SCD由谁在什么版本下生成。
  • <Substation>:变电站一次系统拓扑,包含电压等级、间隔、设备、导电设备与连接节点,描述“物理上有什么”。
  • <Communication>:通信网络与子网,包含SubNetwork、ConnectedAP、Address、GSE、SMV等,描述“报文怎么走”。
  • <IED>:智能电子设备能力描述,包含AccessPoint、Server、LDevice、LN、DataSet、ReportControl等,描述“设备能做什么”。
  • <DataTypeTemplates>:数据类型模板库,包含LNodeType、DOType、DAType、EnumType,为IED中的逻辑节点提供类型定义。

这五棵子树的关系可以概括为:Substation描述一次设备,IED描述二次设备能力,Communication描述两者之间的通信路径,DataTypeTemplates为IED提供类型字典,Header提供整体元信息。SCD校验中大量错误,正是这五者之间的引用对不上,例如IED中引用了DataTypeTemplates里不存在的LNodeType,或ConnectedAP指向了Communication中不存在的SubNetwork。

SCD 文档层级结构:一个根元素 + 五棵功能子树 <SCL> xmlns=…/2003/SCL version=2007 Header 元数据 / 版本标识 Substation 一次系统拓扑 Communication 通信网络与子网 IED 设备能力描述 DataTypeTemplates 类型模板库 id / version revision toolID nameStructure 属性为主,无深层子元素 VoltageLevel Bay ConductingEquipment ConnectivityNode 按电压等级→间隔→设备展开 SubNetwork ConnectedAP Address / P GSE / SMV 按子网→接入点→地址展开 AccessPoint Server / LDevice LN / LN0 DataSet / ReportControl 按访问点→服务器→逻辑设备展开 LNodeType DOType DAType EnumType 类型定义,被IED引用 ConnectedAP 引用 SubNetwork LN 引用 LNodeType IED 通过 Substation 名称与一次设备建立关联 校验关注点: ① 根元素唯一且命名空间正确 ② 五棵子树位置合法 ③ 跨子树引用(IED→DataTypeTemplates、ConnectedAP→SubNetwork、IED→Substation)必须可解析

四、关键元素与属性:从“能定位”到“能校验”

在五棵子树中,真正决定SCD能否被工具正确解析和校验的,是若干关键元素及其属性。下面按子树说明最需要关注的字段。

所属子树关键元素关键属性校验关注点
HeaderHeaderid、version、revision、toolID版本与工具标识是否完整,revision是否与工程阶段一致
SubstationSubstation、VoltageLevel、Bay、ConductingEquipmentname、desc、typename在同一父级下是否唯一,type是否为合法枚举
CommunicationSubNetwork、ConnectedAP、Address、GSE、SMVname、type、apName、iedName、ldInst、cbNameConnectedAP的iedName/apName必须能在IED中找到
IEDIED、AccessPoint、Server、LDevice、LN、LN0name、manufacturer、type、inst、lnClass、prefixLN的lnClass与inst组合是否唯一,LDevice的inst是否合法
DataTypeTemplatesLNodeType、DOType、DAType、EnumTypeid、lnClass、cdc、typeid是否唯一,被引用的id是否真实存在

以IED子树为例,一个典型的层级是:<IED name="IED1">下挂<AccessPoint name="S1">,AccessPoint下挂<Server>,Server下挂<LDevice inst="PROT">,LDevice下挂<LN0 lnClass="LLN0">和若干<LN>。其中LN的lnClass和inst共同决定逻辑节点实例的唯一标识,而LN的lnType属性必须指向DataTypeTemplates中某个LNodeType的id。如果这个id写错或缺失,工具在展开逻辑节点数据对象时就会失败。

再看Communication子树,<ConnectedAP iedName="IED1" apName="S1">必须与IED子树中<IED name="IED1">下的<AccessPoint name="S1">严格对应。这是SCD校验中最常见的跨子树引用检查之一。类似地,<GSE>和<SMV>中的ldInst、cbName必须能在对应IED的LDevice和LN0中找到匹配的控制块。

实用判断:拿到一份SCD后,先确认根元素和命名空间,再按“Header→Substation→Communication→IED→DataTypeTemplates”的顺序检查五棵子树是否齐全;然后重点核对三类引用:IED→DataTypeTemplates、ConnectedAP→IED/AccessPoint、GSE/SMV→LN0控制块。这三类引用全部可解析,SCD的结构校验才算基本通过。

五、命名空间与版本:容易被忽略但影响全局的两个参数

命名空间决定了元素由哪份Schema约束,而version和revision决定了这份Schema的版本范围。IEC 61850-6的2007版与后续版本在部分元素和属性上存在差异,例如某些扩展属性在旧版本中不被允许。如果一份SCD声明的是2007版,却使用了后续版本才引入的元素,校验器会直接报“元素不在允许列表中”。因此,在解析和校验前,应先读取根元素上的version、revision和xmlns,再选择对应的Schema文件进行校验,而不是拿一份固定Schema去套所有SCD。

此外,SCD中常出现带前缀的扩展命名空间,用于承载厂商私有信息。这类扩展元素在标准Schema中通常被声明为xs:any允许出现,但校验时仍需确认它们是否出现在合法位置、是否破坏了标准元素的顺序要求。标准SCL对子元素顺序有明确约束,扩展元素插入位置不当,同样会导致校验失败。

六、结构解析的落地检查清单

  1. 根元素是否为<SCL>,且默认命名空间为http://www.iec.ch/61850/2003/SCL。
  2. version与revision是否与工程实际使用的SCL版本一致。
  3. Header、Substation、Communication、IED、DataTypeTemplates五棵子树是否齐全,位置是否符合Schema顺序。
  4. 各子树内name、id在同一父级下是否唯一。
  5. IED中每个LN的lnType是否能在DataTypeTemplates中找到对应LNodeType。
  6. Communication中每个ConnectedAP的iedName和apName是否能在IED子树中定位。
  7. GSE/SMV中的ldInst、cbName是否与对应LDevice、LN0中的控制块一致。
  8. 扩展命名空间元素是否出现在Schema允许的位置,是否影响标准元素顺序。

把上述结构关系理清后,SCD就不再是一堆难以阅读的XML标签,而是一张有明确层级、明确引用、明确约束的配置网络。后续的校验、比对、合并和版本管理,都是在这张网络的基础上展开的。