前面两篇文章国产CMS61850那些事-总述_LinuxZQ的博客-CSDN博客,cms61850那些事-实现_LinuxZQ的博客-CSDN博客分别对国产61850做了一些简单介绍和相关实现。本文接着给大家提供一款服务端demo,可以用来进行抓包等相关学习。
与之前分享的mms 61850一样,仍然以终端式的软件提供。不过这次没有提供windows下的软件测试了,本demo基于x86 linux下运行,系统要求ubuntu18.04及以上。其它debian,centos未进行测试,如果无法运行,可联系作者协助解决。
一、程序可测试范围
本demo提供模数据, 缓存及非缓存报告,遥控,定值。不含goose及文件,rpc测试。
二、程序部署
在此处下载cms61850服务端测试demo 国产61850服务端,将附件解压至任意目录,解压后文件如下:
config文件夹为配置所在,基本上我们只需要关注./config/CMS61850/cms.json
default默认配置,用户不需要关心及修改
gmssl为国密证书,验收国密时需要
Lib为运行所需要的动态库
Main为主测试程序
run.sh为运行脚本,测试程序时,只需要执行这个脚本即可
三、程序配置介绍
首先介绍我们的关键配置cms.json
{
"CMS61850" :
{
"associate" : ---->配置协商参数的
{
"apduSize" : 65535, ---->apdu大小
"asduSize" : 65531, ---->asdu大小
"protocol" : 513, ---->协议版本,仅支持513
"safe" : ---->安全参数
{
"application" : ---->应用层安全
{
"enable" : true, ---->是否使能
"rootCA" : "./gmssl/sm2.ca.pem", ---->根域名
"serverCert" : "./gmssl/sm2.PNC.sig.crt.pem", ---->服务端证书
"serverKey" : "./gmssl/sm2.PNC.sig.key.pem" ---->客户端证书
}
},
"timeDiff" : 600 ---->校验时间差值
},
"connectNum" : 16, ---->支持最大的客户端连接数
"errorNum" : 4, ---->最大支持错误的交互次数
"icdPath" : "./config/CMS61850/IEC61850.icd", ---->icd文件目录
"port" : 8102, ---->端口
"transport" : ---->tls加密参数,暂不支持
{
"enable" : false,
"encCert" : "./gmssl/encCert.pem",
"encPass" : "./gmssl/encPass.pem",
"rootCA" : "./gmssl/rootca.pem",
"sigCert" : "./gmssl/sigCert.pem",
"sigPass" : "./gmssl/sigPass.pem"
}
}
}
本demo中提供了一个简单的icd文件,若是替换自己的icd文件进行测试,可修改cms.json文件中的icdPath字段即可
datamap.cfg
本文件程序运行时会自动生成,参考了mmslite的概念,对icd文件中的节点进行了规整输出,方便用户进行查看和相关测试。内容如下
其中第一列为icd文件中的域,由iedName + ldName组成
第二列为具体的节点信息
第三列为节点的数据类型
四、程序运行
本demo已内置了一个月的运行权限,从本文发布的事件开始算的,若后面下载的同学无法运行了,可联系作者获取license。
打开linux下终端,切入程序解压的目录,执行./run.sh即可
程序内置了控制接口,运行后按回车键,按提示依次输入用户名密码,用户名admin 密码admin123。
验证成功后,会出现#提示符。我们可以输入指令进行节点值的更新,比如在使能非缓存报告块的情况下,更新节点的值(这个节点就可以从datamap.cfg文件中找)。目前仅支持stVal, mag.f, mag.i节点类更新,以程序中的datamap为例,若更新
则输入指令如下
cms61850 KHPDFMONT airGGIO6.1 stVal 1
可以看出,值更新后,发送了相应的报告事件。
指令一共分为五段,解释如下:
cms61850 功能名称
KHPDFMONT datamapcfg中的域
airGGIO6.1 数据点名称
stVal 数据点下的节点名称
1 值
当值成功更新后,airGGIO6.1下的q及t会自动更新
若再以更新airGGIO6.tmp.mag.f为例,只需要输入
cms61850 KHPDFMONT airGGIO6.tmp mag.f 1.89 即可
定值测试,模拟下发YT2的值为18,用户基于SDK开发,只需要注册相应的回调函数,即可进行相应处理
遥控测试,YK1点的位置,若下发的遥控位置与当前状态相同,则会报position reached的错误
若是位置不同,则会上报成功
遥控存在的错误原因会比较多,比如SBO的点,未选择直接控制,会报错,或者选择的值与实际遥控的值不一致也会报错等
五、总结
更多的功能,文章中就不再展示了,用户可以自己多多测试。程序部分开源实现见
https://github.com/LinuxZQ93/CMS61850