国网新制定的国产61850(CMS)协议,又称为国网国产可控GSP协议(也叫CMS,MMS替代协议),采用的编解码规则是PER编码规则。国内可选择的IEC61850协议栈主要有三大协议栈,分别是:美国的MMS-EASE Lite、中国的YX-PIS、德国的libIEC61850。MMS-EASE Lite软件在中国只有少数合法代理商,其他企业销售均存在知识产权风险,开发IEC61850产品直接使用MMS-EASE Lite还需要很多IEC61850功能实现的开发工作要做,要求开发人员很熟悉IEC61850细节。MMS-EASE Lite移植性良好,编码规范因为是上个世纪的产品,这方面存在明显不足。
国网国产可控61850(CMS) GSP协议/61850替代MMS协议出台背景:
EC61850 ACSI映射MMS协议的方法,存在以下问题:
一、MMS协议复杂,实现难度大,对资源要求高,不是电力最优通信协议方案。
二、MMS协议不属于国家标准。不利于国网自主技术安全。
三、MMS协议底层需要购买昂贵版权费的核心动态库mmslite,国内厂商需要额外成本,也有漏洞后门安全隐患或版权风险。
四、MMS协议本身架构冗余,通信效率低。
MMS(Manufacture Message Specification)是制造报文规范,本身是很优秀的规范,这一点是不能否认的,但是用在IEC61850就很牵强,MMS其场景和性能要求和电力的也不适应,更有诸多弊端。IEC61850的变量类型和MMS不一致,需要一一转换,有些转换的也非常牵强,比如IEC61850里的质量类型,MMS中是不存在的
IEC61850国际MMS协议的BER编码规则,每个数据类型都有一个T(tag),然后是编码L(后续直接的长度),最后是编码实际的数据值。编码出来字节流有冗余,报文字节数多,编码效率不高。本来可以一位表示的数据,采用T,L,V结构至少3个字节。PER编解码采用的紧缩型对齐的编码方式,采用的是P,L,V格式,编码效率高,报文相对于BER编码字节数少,编码效率提高30%以上。缺点是程序实现比较复杂,涉及移位操作和字节对齐逻辑。
国网的替代规范IEC61850 CMS,又名为GSP(General Service Protocol通用服务协议),IEC61850采用GSP有以下优点:
1、无需对象模型映射
所有引用可直接采用的IEC61850的引用,大大减少了对象映射的问题;
2、服务接口一一对应
所有ACSI的服务接口都有一一对应GSP服务接口,请求和应答参数一致,每个服务有专门的服务编码,直接针对性的解析,不像MMS解析报文后还需向IEC61850模型映射,对服务进行识别及对变量进行识别的过程;
3、数据变量一致
GSP的变量类型与IEC61850存在差异非常小,几乎可以做到一一对应,这样大幅度减少了类型变化的工作量和出错风险;
4、节约网络流量
采用PER编码,对网络传输的报文进行了压缩,节约了网路流量,提高传输效率;
YX-PIS IEC61850协议栈产品,是在国际上已经获得高度认可的PIS-10的国产化版本,YX-PIS包含对ICE61850/DLT860的完整支持,并且支持当前国网即将推行的MMS替代协议GSP。
YX-PIS高度继承了PIS-10的优点,高度智能化的使用方式,几乎完全不需要开发者考虑IEC61850的实现,只需要关心自身业务层面的开发即可。YX-PIS的MMS版及GSP版两者使用方式和业务接口完全相同,开发者替换无需更改原有业务层代码。
YX-PIS为了简化使用者的使用,支持从CID解析到创建对应的IEC61850在线模型,包括网络关联模型、数据模型、服务模型以及完全符合IEC61850规范的内部运行机制。整个过程全部实现智能化。使用者需要运行什么样的模型,只需要在CID中建立好模型,通过协议栈加载后即可使用。
YX-PIS提供了良好的数据映射机制,开发者只需要处理简单的调用和回调即可
YX-PIS既可以以源码形式提供,也可以以LIB形式提供。
YX-PIS采用标准C编写,编码规范良好,移植性良好,尤其加强了对国产系统SylixOS、鸿蒙的支持。
易用性
YX-PIS的易用性非常好,只有一个样例,一看即会,可以解决所有场景,上手非常简单。
稳定性
稳定性良好,因为一直保持着售后支持,对用户缺陷、意见进行统一更改,经过多年的国内国际用户的使用,已经非常完善。
开发效率
开发效率是国际公认的开发效率最高的协议栈,开发量大幅度减少,缺陷问题及规范更新工作交给发行公司大连云行完成即可。
国产61850-CMS(可控GSP)数据格式PER编解码说明
1) 重复结构(Sequence OF Sequence)
若命令的定义中出现数组结构,在结构体中要定义一个对应类型的数组,并用一个int xxxSize来表示组的长度。
2) 选择属性(Choice)
选择一种定义去编解码。如下图中,GetAllCBValue响应中的value字段,可能是brcb/urcb/lcb/sgcb/gocb/msvcb这六中定义的一种,先选择编解码定义再进行具体的编解码。
3) 可选属性(Optional)
可选属性,如GetLogicalDeviceDirectory中的ldName,它可以存在也可以不存在,这种情况下使用一个int hasLdName来标记是否存在ldName这个成员变量。hasLdName=1时代表存在ldName,hasLdname为 0时代表不存在ldName这个变量。
编码顺序为:字段的个数,字段的类型,可选字段的存在情况,字段的值。