libiec61850探究【1】-第一个MMS通讯实例
libIEC61850交流QQ群:610793899
近期用北京微自恒通提供的61850 SDK構建本地Server端,由于沒有任何61850方面的基礎,惡補了一下。說實話,提供的方案可用,但是說明文檔實在太過粗略,對新手未免不太友好。
在使用微自恒通公司的SDK構建了基本的Server端模型、流程代碼骨架之后,我就考慮用libIEC也做下類似的事情,順便加深對于61850的理解,此處作為手賬記錄吧。
按照慣例,先交代一下背景:
libIEC官網:libIEC61850 / lib60870 | open source libraries for IEC 61850 and IEC 60870-5-101/104
 我們后續使用的代碼也在此處下載。
libIEC版本:1.5.0
OS:Ubuntu 16.04 x64(虛擬機)
首先,下載libIEC61850 1.5.0的代碼,并解壓到~/code/目錄下。
進入code/libiec61850-1.5.0目錄,看到完整的目錄結構,處于“短平快”的策略,我在examples目錄下找到了兩個例子作為熟悉的跳板:
/server_example_simple
/server_example_dynamic
前者包含CID模型定義、CID模型到.C/.H文件的生成,個人感覺這個demo的對初學者來說意義比較大,一定要好好利用這個。因為我們后期一定會采用這樣的流程來作為整體結構:1)CID模型文件定義;2)將CID模型文件編譯成static_model.h/static_model.c;3)在其他文件中引用static_model.c/static_model.h中自動生成的LD/LN/DO/DA(設備/節點/數據對象/數據屬性)。
> cd server_example_simple
> make model
該步驟過后,當前目錄中應該已經生成了static_model.h/static_model.c文件。
> make
> sudo ./server_example_simple
和微自恒通SDK不同的是,libIEC的Server端不需要配置本機IP地址以及端口號,IP應該是全部放開,端口默認102.
在本地可以使用IEDScout連接Server端IP地址,可以看到Server的模型目錄結構。
當然,此處的數據更新還沒有,而server_example_dynamic給我們提供了一個簡單的例子。
但是server_example_dynamic不好的地方是所有的LD/LN/DO/DA都是在主程序.C文件中動態定義的,而不是通過CID模型文件定義。server_example_dynamic.文件中模型定義部分略去不談(其實和CID文件定義,然后編譯CID文件生成.C文件是一樣的意思),動態賦值的只和主函數中如下代碼相關:
float val = 0.f;while (running) {IedServer_lockDataModel(iedServer);IedServer_updateUTCTimeAttributeValue(iedServer, temperatureTimestamp, Hal_getTimeInMs());IedServer_updateFloatAttributeValue(iedServer, temperatureValue, val);IedServer_unlockDataModel(iedServer);val += 0.1f;Thread_sleep(100);}IedServer_updateUTCTimeAttributeValue是更新時間的函數,
IedServer_updateFloatAttributeValue是更新MX(測量值FLOAT32)的函數,
只需要把對應static_model.c文件中的DA地址傳進去就可以了,這樣的話,基本的流程代碼結構就比較完整了,后續我們把模擬量、回調函數什么的加上,提高程序的異步處理能力。
總結
以上是生活随笔為你收集整理的libiec61850探究【1】-第一个MMS通讯实例的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 【Zigbee】进阶篇(2) Zigbe
- 下一篇: 多媒体技术期末复习资料
