日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

61850客户端软件构建

發(fā)布時(shí)間:2024/8/1 编程问答 63 豆豆
生活随笔 收集整理的這篇文章主要介紹了 61850客户端软件构建 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

? ? ? ? 61850很久沒有再次更新,今天再更新一版客戶端的使用。同樣,沒有可視化的操作界面,只有終端式操作。但麻雀雖小五臟俱全,擁有最基本的遙信遙測(cè)數(shù)據(jù),以及遙控定值。作為學(xué)習(xí)驗(yàn)證數(shù)據(jù)來說,已經(jīng)足夠了。

一、程序部署及使用

? ? ? ? 首先將附件解壓至任意目錄,如下所示

?

? ? ? ? ?在運(yùn)行之前,首先需要服務(wù)端的icd文件,放到本目錄。比如就叫IEC61850.icd。會(huì)議前篇61850服務(wù)端的構(gòu)建,icd文件是我們自己編寫的。測(cè)試的時(shí)候,可以用我們提供的服務(wù)端程序進(jìn)行快速自測(cè)。

? ? ? ? 其次需要了解的文件,是mmslite.json。內(nèi)容如下:

????????

? ? ? ? 里面的內(nèi)容需要與實(shí)際icd內(nèi)容一致,比如我們想讀取jwjs.icd的服務(wù)端內(nèi)容,那么這里的ICDName就填寫jwjs.icd。

? ? ? ? IEDName對(duì)應(yīng)icd內(nèi)容如下字段

????????

? ? ? ? accessPoint對(duì)應(yīng)

?

? ? ? ? ldConfig就是邏輯設(shè)備了,本demo支持多邏輯設(shè)備讀取,按照數(shù)組形式正確填寫即可?

? ? ? ? ldYcConfig就是就是遙測(cè)報(bào)告塊的具體信息了,ldDevice指邏輯設(shè)備名稱,對(duì)應(yīng)

? ? ? ? ycRpName及ycRptId分別對(duì)應(yīng)

?

? ? ? ? ?在填寫時(shí),要仔細(xì)檢查,填錯(cuò)將無法正確訂閱報(bào)告塊,也就無法取得相應(yīng)數(shù)據(jù)

? ? ? ? 遙信相關(guān)信息與遙測(cè)填寫方法一致

? ? ? ? ycReadTag為遙測(cè)對(duì)應(yīng)的名字標(biāo)簽,一般為mag,但有個(gè)別廠商可能設(shè)置為其它值,對(duì)應(yīng)配置如下:

環(huán)境監(jiān)測(cè)的邏輯設(shè)備模型中的溫度類型為CN_MV,我們進(jìn)一步看其點(diǎn)的模型定義?

?

?此處為mag,當(dāng)發(fā)現(xiàn)此處不一樣時(shí),可修改json中相應(yīng)的配置

? ? ? ? 其實(shí),這些信息都可以通過解析xml進(jìn)行自動(dòng)填充,demo就沒去做這樣的功能了,需要我們自己填寫,這樣也方便我們更加理解61850的相關(guān)概念

? ? ? ? 最后強(qiáng)調(diào)一點(diǎn),本客戶端是在線連接,ip也需要正確填寫,對(duì)應(yīng)如下

? ? ? ? 很多客戶在提供icd文件時(shí),這里的ip可能是亂填寫的,當(dāng)我們發(fā)現(xiàn)此處的ip與服務(wù)實(shí)際的ip不一致時(shí),需要修改成一致。

? ? ? ? 當(dāng)以上配置修改成功后,雙擊demo.exe即可運(yùn)行,本demo可連續(xù)運(yùn)行30分鐘,時(shí)間到后,再次雙擊可繼續(xù)運(yùn)行。運(yùn)行界面如下:

?????????

? ? ? ? 當(dāng)連接服務(wù)成功后,會(huì)有綠色打印提示并且會(huì)有功能選項(xiàng)彈出,如果連接失敗,就會(huì)出現(xiàn)相應(yīng)錯(cuò)誤,這時(shí)候就需要仔細(xì)檢查相關(guān)配置了。

? ? ? ? input func number:標(biāo)識(shí)輸入要測(cè)試的功能項(xiàng),比如要獲取遙測(cè)值,那么就輸入1按回車

????????

? ? ? ? ?此處展示了數(shù)據(jù)節(jié)點(diǎn)名稱以及對(duì)應(yīng)的值,前面的數(shù)據(jù)點(diǎn)模型中,我們其實(shí)可以看到,一個(gè)數(shù)據(jù)點(diǎn)下有很多屬性,比如除了值意外,還含有時(shí)間,品質(zhì)等。但一般程序來說,讀取到值就已經(jīng)可以了。也就說此處的value節(jié)點(diǎn)名稱以EnvHum舉例,應(yīng)為SENV1$MX$EnvHum$mag$f。至于這里為什么是這種形式的組成,可參考我前面的61850服務(wù)端構(gòu)建的文章,此處不再詳述。

? ? ? ? 定值測(cè)試:

? ? ? ? 可先獲取定值列表,下發(fā)定值時(shí)會(huì)用到

????????

?????????

????????domain varName value相信大家都能理解,按照前面獲取的列表實(shí)際填寫即可。regionNum可能不知道什么意思,這個(gè)是定值區(qū)間 ,一般來說我們填1即可。服務(wù)設(shè)置的定值區(qū)間數(shù)值,如下

????????

? ? ? ? 代表服務(wù)最多支持3個(gè)區(qū)間?

? ? ? ? 剩下的功能不一一介紹了,可以實(shí)際操作感受

二、二次開放

? ? ? ? 本次提供的附件支持二次開放,包含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" { #endifbool start(); bool stop(); /// false表示未連接上 /// true表示連接上 bool getState(); std::map<std::string, double> getMeasureData(); std::map<std::string, char> getSignalData();/** *@brief 獲取域下面所有對(duì)象變量名字,形如SIMG1$MX$O2$mag$f *@return map<std::string, std::vector<std::string>> *key 域名(iedName + ldDevice) *value vector存儲(chǔ)所有當(dāng)前域下面的有名變量列表 */ std::map<std::string, std::vector<std::string>> getAllVarName(); /** *@brief 獲取域下面所有屬于控制變量的名字是getAllVarName的細(xì)化 *@return map<std::string, std::vector<std::string>> *key 域名(iedName + ldDevice) *value vector存儲(chǔ)所有當(dāng)前域下面的控制變量列表 *@note 以oper結(jié)尾的屬于直控方式,sbow為選控方式,cancel為取消,一般直控就可以 */ std::map<std::string, std::vector<std::string>> getControlList(); /** *@brief 下發(fā)控制命令 *@param domain 域 *@param varName 變量名(可從getControlList中拿到) *@param value 下發(fā)控制的值 *@return bool 下發(fā)是否成功 */ bool control(const std::string &domain, const std::string &varName, int value); /** *@brief 獲取域下面所有屬于定值變量的名字是getAllVarName的細(xì)化 *@param fc 功能約束,支持兩種(SG,SE),一般為SE(表示可編輯定值組) *@return map<std::string, std::vector<std::string>> *key 域名(iedName + ldDevice) *value vector存儲(chǔ)所有當(dāng)前域下面的定值變量列表 */ std::map<std::string, std::vector<std::string>> getPulseList(const std::string &fc="SE"); /** *@brief 下發(fā)定值命令 *@param domain 域 *@param varName 變量名(可從getPulseList中拿到) *@param value 下發(fā)定值的值 *@param setrange 定值區(qū)間號(hào) *@return bool 下發(fā)是否成功 */ bool pulse(const std::string &domain, const std::string &varName, int value, int setrange); /** *@brief 獲得節(jié)點(diǎn)變量的值 *@param domain 域 *@param varName 變量名(可從getPulseList中拿到) *@param value 獲取遙調(diào)值 *@return bool 獲取是否成功 *@note 理論上getAllVarName節(jié)點(diǎn)最深的一層值都可以獲取,但注意傳入value指針的類型。比如獲取一個(gè)浮點(diǎn)值 那么value應(yīng)為浮點(diǎn)型變量的地址,如果為字符串,那么傳入的是char數(shù)組。尤其注意,value不支持c++類型的變量傳入,比如string。 */ bool getVarValue(const std::string &domain, const std::string &varName, void *value);/** *@brief 設(shè)置定值區(qū)間的值 *@param domain 域 *@param varName 變量名(可從getPulseList中拿到) *@param value 設(shè)置下發(fā)的值 *@return bool 設(shè)置是否成功 */ bool setVarValue(const std::string &domain, const std::string &varName, int value);#ifdef __cplusplus } #endif#endif /* ifndef __PLAT_61850CLIENT_H__ */

大家可基于此,開發(fā)一些圖形界面操作等。

在調(diào)用其它接口前,需調(diào)用start啟動(dòng)相應(yīng)服務(wù)

開發(fā)需要注意的是,得基于mingw64進(jìn)行開發(fā),不能基于vs studio。兩者符號(hào)不兼容。參考編譯指令如下

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

程序下載路徑

61850客戶端,支持遙信遙測(cè)以及遙控定值等操作-C++文檔類資源-CSDN下載

關(guān)于61850問題或需求定制請(qǐng)聯(lián)系微信號(hào)HardAndBetter,或者進(jìn)qq群586166104討論。

總結(jié)

以上是生活随笔為你收集整理的61850客户端软件构建的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。