61850客户端软件构建

4 篇文章 4 订阅

        61850很久没有再次更新,今天再更新一版客户端的使用。同样,没有可视化的操作界面,只有终端式操作。但麻雀虽小五脏俱全,拥有最基本的遥信遥测数据,以及遥控定值。作为学习验证数据来说,已经足够了。

一、程序部署及使用

        首先将附件解压至任意目录,如下所示

 

         在运行之前,首先需要服务端的icd文件,放到本目录。比如就叫IEC61850.icd。会议前篇61850服务端的构建,icd文件是我们自己编写的。测试的时候,可以用我们提供的服务端程序进行快速自测。

        其次需要了解的文件,是mmslite.json。内容如下:

        

        里面的内容需要与实际icd内容一致,比如我们想读取jwjs.icd的服务端内容,那么这里的ICDName就填写jwjs.icd。

        IEDName对应icd内容如下字段

        

        accessPoint对应

 

        ldConfig就是逻辑设备了,本demo支持多逻辑设备读取,按照数组形式正确填写即可 

        ldYcConfig就是就是遥测报告块的具体信息了,ldDevice指逻辑设备名称,对应

        ycRpName及ycRptId分别对应

 

         在填写时,要仔细检查,填错将无法正确订阅报告块,也就无法取得相应数据

        遥信相关信息与遥测填写方法一致

        ycReadTag为遥测对应的名字标签,一般为mag,但有个别厂商可能设置为其它值,对应配置如下:

环境监测的逻辑设备模型中的温度类型为CN_MV,我们进一步看其点的模型定义 

 

 此处为mag,当发现此处不一样时,可修改json中相应的配置

        其实,这些信息都可以通过解析xml进行自动填充,demo就没去做这样的功能了,需要我们自己填写,这样也方便我们更加理解61850的相关概念

        最后强调一点,本客户端是在线连接,ip也需要正确填写,对应如下

        很多客户在提供icd文件时,这里的ip可能是乱填写的,当我们发现此处的ip与服务实际的ip不一致时,需要修改成一致。

        当以上配置修改成功后,双击demo.exe即可运行,本demo可连续运行30分钟,时间到后,再次双击可继续运行。运行界面如下:

         

        当连接服务成功后,会有绿色打印提示并且会有功能选项弹出,如果连接失败,就会出现相应错误,这时候就需要仔细检查相关配置了。

        input func number:标识输入要测试的功能项,比如要获取遥测值,那么就输入1按回车

        

         此处展示了数据节点名称以及对应的值,前面的数据点模型中,我们其实可以看到,一个数据点下有很多属性,比如除了值意外,还含有时间,品质等。但一般程序来说,读取到值就已经可以了。也就说此处的value节点名称以EnvHum举例,应为SENV1$MX$EnvHum$mag$f。至于这里为什么是这种形式的组成,可参考我前面的61850服务端构建的文章,此处不再详述。

        定值测试:

        可先获取定值列表,下发定值时会用到

        

         

        domain varName value相信大家都能理解,按照前面获取的列表实际填写即可。regionNum可能不知道什么意思,这个是定值区间 ,一般来说我们填1即可。服务设置的定值区间数值,如下

        

        代表服务最多支持3个区间 

        剩下的功能不一一介绍了,可以实际操作感受

二、二次开放

        本次提供的附件支持二次开放,包含61850Client.h即可。

#ifndef __PLAT_61850CLIENT_H__
#define __PLAT_61850CLIENT_H__

#ifdef WIN32
#include <process.h>
#else
#include <pthread.h>
#endif

#include <map>
#include <vector>

#ifdef __cplusplus
extern "C"
{
#endif

bool start();
bool stop();
/// false表示未连接上
/// true表示连接上
bool getState();
std::map<std::string, double> getMeasureData();
std::map<std::string, char> getSignalData();

/**
*@brief 获取域下面所有对象变量名字,形如SIMG1$MX$O2$mag$f
*@return map<std::string, std::vector<std::string>>
*key 域名(iedName + ldDevice)
*value vector存储所有当前域下面的有名变量列表
*/
std::map<std::string, std::vector<std::string>> getAllVarName();
/**
*@brief 获取域下面所有属于控制变量的名字是getAllVarName的细化
*@return map<std::string, std::vector<std::string>>
*key 域名(iedName + ldDevice)
*value vector存储所有当前域下面的控制变量列表
*@note 以oper结尾的属于直控方式,sbow为选控方式,cancel为取消,一般直控就可以
*/
std::map<std::string, std::vector<std::string>> getControlList();
/**
*@brief 下发控制命令
*@param domain 域
*@param varName 变量名(可从getControlList中拿到)
*@param value 下发控制的值
*@return bool 下发是否成功
*/
bool control(const std::string &domain, const std::string &varName, int value);
/**
*@brief 获取域下面所有属于定值变量的名字是getAllVarName的细化
*@param fc 功能约束,支持两种(SG,SE),一般为SE(表示可编辑定值组)
*@return map<std::string, std::vector<std::string>>
*key 域名(iedName + ldDevice)
*value vector存储所有当前域下面的定值变量列表
*/
std::map<std::string, std::vector<std::string>> getPulseList(const std::string &fc="SE");
/**
*@brief 下发定值命令
*@param domain 域
*@param varName 变量名(可从getPulseList中拿到)
*@param value 下发定值的值
*@param setrange 定值区间号
*@return bool 下发是否成功
*/
bool pulse(const std::string &domain, const std::string &varName, int value, int setrange);
/**
*@brief 获得节点变量的值
*@param domain 域
*@param varName 变量名(可从getPulseList中拿到)
*@param value 获取遥调值
*@return bool 获取是否成功
*@note 理论上getAllVarName节点最深的一层值都可以获取,但注意传入value指针的类型。比如获取一个浮点值
那么value应为浮点型变量的地址,如果为字符串,那么传入的是char数组。尤其注意,value不支持c++类型的变量传入,比如string。
*/
bool getVarValue(const std::string &domain, const std::string &varName, void *value);

/**
*@brief 设置定值区间的值
*@param domain 域
*@param varName 变量名(可从getPulseList中拿到)
*@param value 设置下发的值
*@return bool 设置是否成功
*/
bool setVarValue(const std::string &domain, const std::string &varName, int value);

#ifdef __cplusplus
}
#endif


#endif /* ifndef __PLAT_61850CLIENT_H__ */

大家可基于此,开发一些图形界面操作等。

在调用其它接口前,需调用start启动相应服务

开发需要注意的是,得基于mingw64进行开发,不能基于vs studio。两者符号不兼容。参考编译指令如下

g++ ./demo.cpp -o ./demo -I ./ -L. -lProtCollIEC61850

程序下载路径

61850客户端,支持遥信遥测以及遥控定值等操作-C++文档类资源-CSDN下载

关于61850问题或需求定制请联系微信号HardAndBetter,或者进qq群586166104讨论。

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值