61850客户端软件构建
? ? ? ? 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" { #endifbool 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討論。
總結
以上是生活随笔為你收集整理的61850客户端软件构建的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 计算机单片机毕设答辩问题,单片机毕业论文
- 下一篇: python数字信号处理pdf_数字信号