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在通信中扮演的角色,我总结为三个核心职责:
- 数据提供者:客户端(比如监控后台)通过MMS协议来读Server里的数据。Server负责把数据从模型里取出来,打包成MMS报文发回去。
- 服务响应者:客户端可以发各种请求——读数据、写数据、报告订阅、控制操作。Server必须一一响应。比如客户端发个「遥控分闸」命令,Server要检查权限、执行操作、返回结果。
- 事件发布者:当数据变化时(比如开关变位),Server会主动发报告(Report)给订阅的客户端。这就是GOOSE和SV之外的另一种通信方式——报告服务。
下面这张图,是我自己画的一个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从设计到运行,大概经历这几步:
- 系统规格描述(SSD):设计人员画出变电站一次接线图,定义好需要哪些IED。
- IED能力描述(ICD):设备厂商提供每个IED的SCL文件,里面定义了Server的模板——有哪些Logical Device、Logical Node、Data。
- 系统配置描述(SCD):系统集成商把ICD文件拼起来,配置好通信参数(IP地址、端口等),生成全站的SCD文件。
- 实例化配置(CID):把SCD文件里对应某个IED的部分提取出来,生成CID文件,下装到实际装置里。
- 运行:装置启动,解析CID文件,在内存里创建Server实例,开始对外提供服务。
嗯,这一步一步走下来,Server就从纸面上的模型变成了运行中的服务。我在现场调试时,最怕的就是SCL文件语法错误,解析失败,Server起不来。后来我养成了一个习惯:下装前先用SCL校验工具跑一遍,能省掉80%的现场问题。
我的建议: 刚开始学的时候,别急着看标准文档。先找个实际的SCL文件打开看看,对照着Server、LDevice、LN这些标签,一行一行读。读懂了文件结构,再回头看标准,你会发现豁然开朗。
好了,Server这部分就聊到这儿。说白了,它就是IED对外的一个「数据窗口」,所有通信都通过它来交互。理解了这个,后面Logical Device和Logical Node就好办了。
公众号:蓝海资料掘金营,微信deep3321