news 2026/10/11 1:19:00

CMS61850客户端

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
CMS61850客户端

近一年都比较忙,很久没有更新文档了。这次抽了点时间,把CMS61850的客户端再补上。方便大家进一步的学习。当然61850相关的文档已经写的快吐了。不出意外,这应该是最后一篇关于61850的文章了。

本次提供的demo,可直接在windows上运行,仍然采用的是控制台的方式运行。同时也更新了服务端的demo,也可直接在windows上一键运行。同时功能也得到增加,相较之前的linux x86的版本,功能增加,bug修复。大部分功能已通过南瑞测试

话不多说,开启使用说明

一、demo下载地址

下面这个是终端操作的demo,不太方便

CMS6180客户端及服务端demo

最新的界面操作,参考IEDScout设计,请到此文章的地址进行下载试用

国产61850 CMS_Scout发布_61850客户端-CSDN博客

二、服务端如何使用

国产CMS61850那些事-服务端_cms 测试工具 860-CSDN博客

由于功能及版本更新,原来命令输入由cms61850统一改为cms61850Service

如更新数据指令,原demo为cms61850 KHPDFMONT airGGIO6.tmp mag.f 1.89

现在可改为cms61850Service KHPDFMONT airGGIO6.tmp mag.f 1.89

运行方式也改为解压缩后,进入CMS61850Server目录,双击start.bat即可

三、客户端如何使用

解压附件后,进入CMS61850Client目录。双击start.bat即可运行。注意本客户端在获取模型结构时,并没有采取在线获取的方式,而是静态解析icd文件的方式。这就要求客户端使用的icd与服务端的要保持一致。修改加载icd文件的方式见./config/CMS61850/cms.json

比如本demo的json配置如下:

其中client为客户端的配置,service为服务端的配置

本客户端支持多icd同时加载导入,主要看client里的icd数组,icdPath为需要加载的icd文件路径。

同时为了保证客户端能正确连接,如下图,需要正确修改icd内的ip信息为服务器的ip。

客户端在成功连接后,会自动进行报告块的使能,具体使能哪些报告块,需要根据配置来。比如json配置icd里的ldYcConfig代表的就是非缓存报告块的信息,需要正确填写ied名称,逻辑设备名称,以及报告块名称和报告块id,分别对应icd文件中的以下字段

下面的ldYxConfig代表缓存报告块,配置也是同理修改

四、命令行的使用

程序内置了获取数据及遥控,定值的命令操作。程序运行时,按enter健,根据提示,依次输入用户名和密码。admin/admin123。成功后会打印#。

查看非缓存报告:

cms61850Client getMeasure

如图依次会打印相应节点的值以及更新的时间戳

查看缓存报告块:

cms61850Client getSignal

查看遥控列表

cms61850Client getControl

ctlType

0 状态点 1选控 2直控

查看定值列表

cms61850Client getSetting

选择命令

cms61850Client select PNC_IED MONT GGIO6.YK1 1

解释:

PNC_IED:ied名称

MONT :逻辑设备名称

GGIO6.YK1 :节点名称

1 : 值

当用户使用自己的icd时,可根据实际情况修改

控制命令

cms61850Client control PNC_IED MONT GGIO6.YK1 1

定值命令

cms61850Client pulse PNC_IED MONT GGIO6.YT1 2

以上为本次demo提供的所有命令行操作功能。使用上会有些不方便,主要是没时间去写一些界面化的操作,但用来抓包作为学习验证已经可以了。

五、二次开发接口

/** * @file ICMS61850Client.h * @author (linuxzq93@163.com) * @brief cms61850Client组件基类文件 * @version 1.0 * @date 2024-03-19 * * @copyright Copyright (c) 2024 * */ #ifndef __CMS61850_ICMS61850Client_H__ #define __CMS61850_ICMS61850Client_H__ #include <map> #include "Component/IUnknown.h" #include "Component/ComponentMacroDef.h" #include "Function/Function.h" #include "json/json.h" namespace cms { class ICMS61850Client : public base::IUnknown { SIMPLE_DEF_I(CMS61850Client, "CMS61850Client") public: enum DataType { /// 遥测 MEASURE, /// 遥信 SIGNAL, /// 遥脉 PULSE, /// 时间戳 TIMESTAMP, /// 质量 QUALITY, /// 未知,暂不支持 UNKNOWN }; struct CMSData { /// 遥测 float fValue; /// 遥信 uint8_t stValue; ///遥脉 int iValue; /// 时间戳 sec uint64_t timeNow; uint16_t quality; DataType dataType; }; enum CtlType { /// 只是状态 STATUS, /// 选控 SELECT_OPER, /// 直控 DIRECT_OPER }; struct CtlInfo { std::string name; CtlType ctlType; }; struct SettingInfo { int numSG; std::vector<std::string> vecName; }; public: virtual bool init() { return true; } virtual bool start() { return true; } virtual bool stop() { return true; } virtual bool destroy() { return true; } public: /** * @brief 获取各个IP的连接状态 * * @return std::map<std::string, bool> key:ip value:true or false */ virtual std::map<std::string, bool> getConnectState(){return {};} /** * @brief 获取遥测数据 * * key:domName(iedName + ldDevice) value: LeafName(形如SIMG1$MX$O2$mag$f), CMSData * @return std::map<std::string, std::map<std::string, CMSData>> */ virtual std::map<std::string, std::map<std::string, CMSData>> getMeasureData(){return {};} /** * @brief 获取遥信数据 * * key:domName(iedName + ldDevice) value: LeafName(形如SIMG1$ST$O2$stVal), CMSData * @return std::map<std::string, std::map<std::string, CMSData>> */ virtual std::map<std::string, std::map<std::string, CMSData>> getSignalData(){return {};} /** * @brief 获取遥控列表 * * @return std::map<std::string, std::vector<std::string>> */ virtual std::map<std::string, std::vector<CtlInfo>> getControlList(){return {};} /** * @brief 获取定值列表 * * @return std::map<std::string, std::vector<std::string>> */ virtual std::map<std::string, SettingInfo> getSettingList(){return {};} /** * @brief 遥控预置 * * @param iedName * @param ldName * @param leafName, 精确到doName即可。形如TACD60.ktkz。不需要带上oper这些 * @param value * @return true * @return false */ virtual bool select(const std::string &iedName, const std::string &ldName, const std::string &leafName, int value) {return true;} /** * @brief 遥控 * * @param iedName * @param ldName * @param leafName, 精确到doName即可。形如TACD60.ktkz。不需要带上oper这些 * @param value * @return true * @return false */ virtual bool control(const std::string &iedName, const std::string &ldName, const std::string &leafName, int value) {return true;} /** * @brief 遥调(定值) * * @param iedName * @param ldName * @param leafName, 精确到doName即可 * @param value * @return true * @return false */ virtual bool pulse(const std::string &iedName, const std::string &ldName, const std::string &leafName, float value) {return true;} }; } #endif /* __CMS61850_ICMS61850Client_H__ */

六、程序运行

因我的环境可能和大家不一样,虽然我已经尽可能的将依赖库打包,但仍然可能会存在遗漏或者不兼容的情况,可尝试换电脑或者自行百度装一些环境。

本次demo全部采用license的方式,仅提供给实实在在的同学测试学习。不愿意暴漏任何信息的请自行划过。需要license运行测试的,请联系作者

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/11 1:17:07

ubuntu打开Samba服务

打开Samba服务安装Samba sudo apt-get install samba查看Samba是否安装成功, 输入samba: $ samba [2021/02/23 16:30:17.065666, 0] ../lib/util/debug.c:947(reopen_logs_internal) Unable to open new log file /var/log/samba/log.%m: Permission denied [2021/02/23 16:30…

作者头像 李华
网站建设 2026/10/11 1:17:06

STM32CubeMx + makefile --- 添加串口打印 printf

STM32CubeMx makefile — 添加串口打印printf 源码仓库: 码云仓库 环境 工具版本说明开发板小熊派IoT开发板建议相同ubuntu16.04版本关系不大STM32CubeMXV6.3.0建议相同L4软件包STM32Cube FW_L4 V1.16.0建议相同STM32CubeProgrammerv2.8.0版本关系不大交叉编译工具链gcc-arm-…

作者头像 李华
网站建设 2026/10/11 1:16:50

STM32CubeMx开发之路—11使用FSMC操作LCD

STM32CubeMx开发之路—11使用FSMC操作LCD 运行环境 Windows10STM32CubeMX Version 5.2.0Keil5(MDK5) Version 5.28.0.0 简介 本例程主要讲解如何使用FSMC操作LCD STM32CubeMx基本配置 基础配置过程请参考 STM32CubeMx(Keil5)开发之路—配置第一个项目 CubeMX配置 调试打印配…

作者头像 李华
网站建设 2026/10/11 1:16:49

STM32CubeMx开发之路—移植easyflash

STM32CubeMx开发之路—移植easyflash 运行环境 Windows10STM32CubeMX Version 5.4.0Keil5(MDK5) Version 5.28.0.0硬件开发板 F103RB-NUCLEO 简介 本例程主要讲解如何移植easyflash. STM32CubeMx基本配置 基础配置过程请参考 STM32CubeMx开发之路—配置第一个项目 使用print…

作者头像 李华
网站建设 2026/10/11 1:16:02

FusionCore轮速消息不参与定位的三重校验机制解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/11 1:15:18

EMC结构防线:缝隙、开孔与搭接的屏蔽效能实战指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华