3、Server(服务器):Server的概念、Server实例化、Server在通信中的角色

好,咱们今天聊聊Server。说实话,很多刚接触IEC 61850的朋友,一上来就被Server、Logical Device、Logical Node这些概念搞晕了。我当年也一样,翻着标准文档,脑子里全是问号:「这Server到底是个什么东西?是台电脑吗?还是一个软件?」

嗯,今天我就用我自己的理解,帮你把这个概念彻底理清楚。

3.1 Server的概念——它到底是什么?

简单说,Server就是IEC 61850数据模型的根容器。你想想看,一个智能电子设备(IED),比如一个保护装置、一个测控装置,它里面有很多数据——电压、电流、开关状态、保护定值……这些数据怎么组织?怎么让别人访问?

Server就是那个「总管家」。它负责把所有数据装进去,并且告诉外面的人:「嘿,我的数据在这里,你可以通过这个网络端口来找我。」

核心理解: Server = 一个IED对外暴露的数据模型的顶层容器。每个IED只有一个Server实例。

我在项目中遇到过有人问:「那一个物理装置里能不能有多个Server?」理论上可以,但实际工程中,一个IED通常只建模一个Server。你想想看,一个装置对外就一个IP地址,一个通信端口,搞多个Server反而给自己找麻烦。

3.2 Server的实例化——从抽象到具体

概念说完了,咱们看看Server怎么实例化。说白了,就是怎么在SCL文件里把这个Server写出来。

IEC 61850-6标准里定义了SCL(Substation Configuration Language)语言,Server的实例化就在这个文件里完成。我习惯用下面这个结构来理解:

<Server>
  <LDevice inst="P1">
    <LN0 lnClass="LLN0" lnType="LLN0_Example"/>
    <LN lnClass="XCBR" inst="1" lnType="XCBR_Example"/>
  </LDevice>
  <LDevice inst="M1">
    <LN0 lnClass="LLN0" lnType="LLN0_Example"/>
    <LN lnClass="MMXU" inst="1" lnType="MMXU_Example"/>
  </LDevice>
</Server>

你看,一个Server下面可以挂多个Logical Device(逻辑设备)。每个Logical Device里又有Logical Node(逻辑节点)。这就是IEC 61850数据模型的层次结构。

我的小技巧: 刚开始学的时候,可以把Server想象成一个文件柜,Logical Device就是抽屉,Logical Node就是文件夹,Data就是里面的文件。这样记,特别直观。

我曾经在调试一个变电站自动化系统时,发现SCL文件里Server的accessPoint属性配错了,结果客户端死活连不上。查了两天才发现,原来是accessPoint里的IP地址和实际网口对不上。嗯,这种坑,踩过一次就记住了。

3.3 Server在通信中的角色——它到底干哪些活?

Server在通信中扮演的角色,我总结为三个核心职责:

  1. 数据提供者:客户端(比如监控后台)通过MMS协议来读Server里的数据。Server负责把数据从模型里取出来,打包成MMS报文发回去。
  2. 服务响应者:客户端可以发各种请求——读数据、写数据、报告订阅、控制操作。Server必须一一响应。比如客户端发个「遥控分闸」命令,Server要检查权限、执行操作、返回结果。
  3. 事件发布者:当数据变化时(比如开关变位),Server会主动发报告(Report)给订阅的客户端。这就是GOOSE和SV之外的另一种通信方式——报告服务。

下面这张图,是我自己画的一个Server通信角色示意图,你看一眼就明白了:

Server 数据模型容器 服务响应者 事件发布者 监控后台 (客户端) 远动网关 (客户端) 保护信息子站 (客户端) 工程师站 (客户端) MMS请求/响应 报告订阅/推送 MMS请求/响应 报告订阅/推送 Server在通信中的角色

你看,一个Server可以同时跟多个客户端通信。每个客户端都可以通过MMS协议来读写数据,也可以订阅报告。Server就像一个「数据中台」,统一管理所有数据访问。

3.4 Server的通信服务——它具体提供哪些服务?

IEC 61850-7-2里定义了Server必须支持的服务。我挑几个最常用的给你说说:

服务名称 服务功能 我遇到的实际场景
GetServerDirectory 获取Server下的所有Logical Device列表 客户端启动时,先调这个服务看看Server里有哪些设备
GetLogicalDeviceDirectory 获取Logical Device下的所有Logical Node 想知道某个设备里有哪些功能节点
GetAllDataValues 读取某个对象的所有数据值 一键读取整个断路器的所有状态
SetDataValues 写数据值(比如修改定值) 修改保护定值,注意要带权限校验
Report 报告服务(数据变化主动推送) 开关变位时,Server主动告诉后台
Select/Operate 控制服务(遥控操作) 远程分合闸,先选择再执行

注意: Server的服务不是随便就能调用的。每个服务都有访问控制(Access Control),比如写定值需要密码,遥控操作需要双确认。我曾经在调试时忘了配访问权限,结果客户端写定值一直返回「服务拒绝」,折腾了半天才发现是权限表没配。

3.5 Server的实例化过程——从SCL到运行

最后,咱们把整个过程串起来。一个Server从设计到运行,大概经历这几步:

  1. 系统规格描述(SSD):设计人员画出变电站一次接线图,定义好需要哪些IED。
  2. IED能力描述(ICD):设备厂商提供每个IED的SCL文件,里面定义了Server的模板——有哪些Logical Device、Logical Node、Data。
  3. 系统配置描述(SCD):系统集成商把ICD文件拼起来,配置好通信参数(IP地址、端口等),生成全站的SCD文件。
  4. 实例化配置(CID):把SCD文件里对应某个IED的部分提取出来,生成CID文件,下装到实际装置里。
  5. 运行:装置启动,解析CID文件,在内存里创建Server实例,开始对外提供服务。

嗯,这一步一步走下来,Server就从纸面上的模型变成了运行中的服务。我在现场调试时,最怕的就是SCL文件语法错误,解析失败,Server起不来。后来我养成了一个习惯:下装前先用SCL校验工具跑一遍,能省掉80%的现场问题。

我的建议: 刚开始学的时候,别急着看标准文档。先找个实际的SCL文件打开看看,对照着Server、LDevice、LN这些标签,一行一行读。读懂了文件结构,再回头看标准,你会发现豁然开朗。

好了,Server这部分就聊到这儿。说白了,它就是IED对外的一个「数据窗口」,所有通信都通过它来交互。理解了这个,后面Logical Device和Logical Node就好办了。


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