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