王東陽, 楊春生, 江 源, 楊晴雅, 化晨冰, 陳 璐
?
基于前置層和消息總線的數(shù)據(jù)傳輸①
王東陽1, 楊春生1, 江 源1, 楊晴雅1, 化晨冰1, 陳 璐2
1(國網(wǎng)臨沂供電公司, 臨沂 276003)2(安徽南瑞繼遠電網(wǎng)技術(shù)有限公司, 合肥 230088)
大量模塊或者第三方數(shù)據(jù)接入以及上層用戶定制應(yīng)用需求的繁雜性必定要求系統(tǒng)在數(shù)據(jù)傳輸上具備靈活、通用、可擴展等性能, 因此設(shè)計和實現(xiàn)一種驛站中間層數(shù)據(jù)傳輸方案成為開發(fā)人員的一項關(guān)鍵任務(wù). 數(shù)據(jù)接入方面增加統(tǒng)一處理數(shù)據(jù)的前置層, 設(shè)計中采用鏈路連接層、規(guī)約處理層、前置管理層的架構(gòu)并構(gòu)建了前置實時數(shù)據(jù)處理庫; 考慮到跨平臺和數(shù)據(jù)類型區(qū)分處理清晰原則, 構(gòu)建了以ICE中間件和JSON串為核心的消息總線數(shù)據(jù)傳輸, 設(shè)計與上層應(yīng)用程序和前置模塊的交互接口. 總線傳遞機制將應(yīng)用軟件層和前置層區(qū)分來, 按照協(xié)定好的消息類型通過總線實現(xiàn)信息交互, 屏蔽了系統(tǒng)的多種不同的上層應(yīng)用需求和前置開發(fā)通信協(xié)議特性, 提高了開發(fā)人員的工作效率以及系統(tǒng)本身的健壯性、擴展性, 同時也降低了后續(xù)維護人員的維護難度.
消息總線; JSON串; ICE中間件; 前置開發(fā)
隨著一體化設(shè)計要求的提高, 變電站智能輔助監(jiān)控系統(tǒng)[1]一體化設(shè)計涉及到多子系統(tǒng)(安防監(jiān)控、消防火災(zāi)、門禁管理、環(huán)境監(jiān)測與控制等)數(shù)據(jù)接入問題, 之前各廠家按照獨立建設(shè)方案造成了一個個堆積式的信息孤島. 為解決上述這些問題, 前期的輔助監(jiān)控系統(tǒng)采用了點到點緊耦合方法, 這種方法需要對系統(tǒng)做出較大改動, 進行大規(guī)模的代碼重寫, 這一過程的工程任務(wù)其實相當(dāng)于新的系統(tǒng)工作, 并且這種解決方案缺乏柔性, 更不具備特性化定制需求. 另外, 電力變電站輔助系統(tǒng)的各個功能, 用戶往往是分步實施的, 后期建設(shè)的功能如果使用第三方軟件, 接口的標準化顯得至關(guān)重要, 傳統(tǒng)的方法是約定私有的接口方式進行數(shù)據(jù)轉(zhuǎn)化和數(shù)據(jù)交換, 應(yīng)用接入非常困難、投運周期長且影響系統(tǒng)的整體性能.
近年來, 計算機接口技術(shù)的迅速發(fā)展, 網(wǎng)絡(luò)、串行通信等接口技術(shù)及應(yīng)用已相對成熟, 并且中間件技術(shù)[2-4]、總線技術(shù)[5-7]也得以業(yè)界的廣泛關(guān)注, 這些都為本文的工作開展提供了良好的理論基礎(chǔ). 為了實現(xiàn)一體化輔助系統(tǒng)接入的各類信息的采集、控制任務(wù), 本文設(shè)計前置模塊這一重要環(huán)節(jié), 達到接入擴展性好、穩(wěn)定性好以及通信設(shè)備接入簡單便捷等目的. 前置模塊開發(fā)層設(shè)計了鏈路層、應(yīng)用規(guī)約層、前置管理層構(gòu)架思想, 通過各種線纜或無線網(wǎng)絡(luò)連接到一起, 實現(xiàn)了串口設(shè)備、網(wǎng)絡(luò)設(shè)備的信息接入和輸出, 并且設(shè)計了前置實時庫緩存各類接入采集輸出信息, 該實時庫內(nèi)數(shù)據(jù)信息按照接入預(yù)定編號和信息類型(數(shù)字量輸入、數(shù)字量輸出、模擬量數(shù)據(jù))存儲. 基于ICE中間件技術(shù)的總線型集成方法, 它提供了一個靈活、標準的消息通信構(gòu)架, 降低了各應(yīng)用層和前置設(shè)備層之間依賴性和耦合性以及更加容易和有效的被連接, 實現(xiàn)了相互之間的無縫通信, 完成消息總線設(shè)計后, 用戶只需向該消息總線注冊即可發(fā)送和接收數(shù)據(jù). 這種良好的擴展性, 對于新的上層應(yīng)用開發(fā)和前置設(shè)備的接入實現(xiàn)了“即插即用性”, 這種整體性數(shù)據(jù)傳輸架構(gòu)設(shè)計思路將會很好的服務(wù)于變電站輔助系統(tǒng)運行和維護, 為電力輔助系統(tǒng)高級應(yīng)用功能的挖掘和系統(tǒng)可擴展性提供可靠保障.
信息采集包括對各終端設(shè)備的數(shù)據(jù)采集和第三方軟件接入數(shù)據(jù)處理等, 因此, 系統(tǒng)在設(shè)計時必須考慮多種硬件接口(網(wǎng)口、串口等)、多種通信協(xié)議(Modbus協(xié)議、電力104等)的實現(xiàn)問題, 并且還要考慮信息采集接入接口和協(xié)議的擴展性、靈活性, 也就是說系統(tǒng)接入只要確定接口和通信協(xié)議就能夠?qū)崿F(xiàn)信息數(shù)據(jù)的采集. 在實際前置接入規(guī)約開發(fā)中, 我們需要考慮的問題是設(shè)備有效快速的接入, 對于特定設(shè)備其通信協(xié)議是個性的, 通信方式(串口、UDP或者TCP)是可以枚舉的, 數(shù)據(jù)通過消息總線上送方式是由前置開發(fā)者設(shè)計的. 因此, 在整個流程中, 出現(xiàn)因通信協(xié)議內(nèi)容不可控外, 需要根據(jù)現(xiàn)場設(shè)備開發(fā)的情況. 本文思路是將規(guī)約層的通信協(xié)議開放出來, 工程開發(fā)人員根據(jù)不同的設(shè)備再進行開發(fā), 這樣就有利于應(yīng)用于不同場合的設(shè)備增加, 最后優(yōu)勢表現(xiàn)在前置模塊的穩(wěn)定性、通用性和接入能力強等方面. 基于上述考慮, 本文設(shè)計了前置模塊開發(fā)層, 其整體設(shè)計思路如圖1所示, 前置模塊分為鏈路層、規(guī)約層、管理層三層, 并以前置實時庫為數(shù)據(jù)處理核心區(qū)域, 實現(xiàn)信息上傳下送.
圖1 前置層架構(gòu)
系統(tǒng)采用數(shù)據(jù)庫實現(xiàn)配置的管理工作, 整個數(shù)據(jù)信息流從設(shè)備到鏈路層再到前置規(guī)約層, 根據(jù)需求對應(yīng)存入緩沖區(qū)后, 然后通過前置管理層送往消息總線、實現(xiàn)信息傳遞. 現(xiàn)按照開發(fā)步驟和數(shù)據(jù)傳遞過程現(xiàn)將前置層說明如下:
(1) 前置鏈路層: 負責(zé)與接入設(shè)備建立通信鏈路等, 通信方式主要包括串口、UDP、TCP/IP等, 作為接入設(shè)備的共性的部分, 系統(tǒng)對上述通信方式進行封裝, 通過配置實現(xiàn)不同接入設(shè)備調(diào)取不同通信方式.
(2) 前置規(guī)約層: 該層實現(xiàn)各種通信協(xié)議開發(fā), 針對某接入設(shè)備協(xié)議(如Modbus協(xié)議)開發(fā)相應(yīng)規(guī)約, 該規(guī)約一方面實現(xiàn)通過鏈路層與設(shè)備進行信息交互, 另一方面根據(jù)需求實現(xiàn)對前置庫中各類緩沖區(qū)數(shù)據(jù)的寫入. 該層預(yù)留出統(tǒng)一封裝接口, 方便前置開發(fā)人員開發(fā).
(3) 前置庫: 前置庫作為接入采集數(shù)據(jù)處理的核心部分, 為了保證數(shù)據(jù)信息傳輸可靠性, 系統(tǒng)根據(jù)在前置模塊中設(shè)計了原碼, 規(guī)約報文, 模擬量實時數(shù)據(jù)、數(shù)字量輸入輸出和對上轉(zhuǎn)發(fā)數(shù)據(jù)緩沖區(qū). 其中, 原碼緩沖區(qū)為包括通信鏈路頭數(shù)據(jù)在內(nèi)的完整消息, 前置報文緩沖區(qū)為設(shè)備通信協(xié)議的規(guī)約報文, 而模擬量實時數(shù)據(jù)、數(shù)字量輸入輸出緩沖區(qū)數(shù)據(jù)為前置規(guī)約解析出的用戶數(shù)據(jù), 對上轉(zhuǎn)發(fā)數(shù)據(jù)緩沖區(qū)數(shù)據(jù)為系統(tǒng)需要上送后臺數(shù)據(jù).
(4) 前置管理層: 該層一方面通過數(shù)據(jù)庫下裝設(shè)備信息完成配置后, 系統(tǒng)將商用數(shù)據(jù)庫信息通過加載實時庫程序下裝到實時庫中, 以備前置層數(shù)據(jù)流處理所用, 另一方面將前置庫中不同緩沖區(qū)數(shù)據(jù)根據(jù)需求送往消息總線, 實現(xiàn)對上層應(yīng)用或者后臺系統(tǒng)的數(shù)據(jù)傳輸.
信息數(shù)據(jù)的有效可靠的傳遞是系統(tǒng)集成的關(guān)鍵所在, 消息總線傳輸方法為這一關(guān)鍵提供了良好的方案. 首先, 消息總線能夠屏蔽前置開發(fā)層各種模塊差異性, 簡化上層應(yīng)用程序與模塊之間數(shù)據(jù)傳輸, 利用其高效的消息傳輸機制為大型應(yīng)用系統(tǒng)集成開發(fā)提供透明的數(shù)據(jù)轉(zhuǎn)發(fā)服務(wù). 轉(zhuǎn)發(fā)服務(wù)模式有點對點、消息隊列和發(fā)布/訂閱三種模式, 三種模式各有特點, 點對點具有很強的時間和空間耦合性, 使其數(shù)據(jù)傳輸靈活性受限; 消息隊列傳遞消息, 解決了時間和空間耦合性問題, 但是相關(guān)的隊列服務(wù)器需要單獨配置, 存在瓶頸和單點失效問題, 可靠性不強, 如隊列發(fā)生丟失, 可能會影響整個系統(tǒng), 消息延時也會相應(yīng)增加; 發(fā)布/訂閱模式中發(fā)布者和訂閱者之間通過主題相關(guān)聯(lián), 可實現(xiàn)數(shù)據(jù)傳遞雙方空間、時間和消息通信多方面松耦合性, 這種模式在大型系統(tǒng)的集成和開發(fā)中優(yōu)勢明顯, 因此, 本文采用基于發(fā)布/訂閱的消息總線模式. 其次, 考慮到系統(tǒng)跨平臺需求和總線傳輸消息類型較多, 選擇合適的通訊中間件和數(shù)據(jù)包傳輸格式對于整個系統(tǒng)數(shù)據(jù)傳輸至關(guān)重要.
3.1 中間件
中間件能夠解決跨平臺和異構(gòu)網(wǎng)絡(luò)應(yīng)用問題, 在具體應(yīng)用上它是一個API定義的分布式軟件管理架構(gòu), 在分布式的客戶和服務(wù)之間扮演承上啟下的角色, 具有強大的通信能力和良好的擴展性. 以CORBA為代表的中間件為分布式系統(tǒng)帶來了巨大變革, 但是由于中間件復(fù)雜性和學(xué)習(xí)困難性等原因都沒有真正占領(lǐng)計算市場, 而作為原CORBA核心成員在GPL協(xié)議下開發(fā)的輕量級面向?qū)ο蟮姆植际絀CE中間件“提供了一個和CORBA同樣強大卻摒除了CORBA的各種缺陷的中間件”, 其在概念上與CORBA基本一致, 但是ICE解決了過去長期困擾中間件的低效問題, 并提供了數(shù)據(jù)包協(xié)議(UDP)支持、異步方法分派、對象保存和接口聚集等技術(shù)支持, 從而建立了一個更簡單高效的基礎(chǔ)架構(gòu).
ICE結(jié)構(gòu)如圖2所示, 包括客戶端和服務(wù)端、ICE核心、ICE API、對象適配器、ICE代理和ICE骨架等部分, 其中客戶ICE核心、服務(wù)器核心和對象適配器來自于庫文件, 代理和骨架由Slice語言生產(chǎn), 客戶應(yīng)用和服務(wù)器應(yīng)用由上層應(yīng)用程序員編寫.
圖2 ICE結(jié)構(gòu)
本文對ICE的IceStorm在此重點介紹. IceStorm是ICE服務(wù)消息發(fā)布/訂閱服務(wù), 能夠消除消息發(fā)布者和訂閱者之間的耦合關(guān)系, 其充當(dāng)發(fā)布者和訂閱者的中介. 當(dāng)發(fā)布者準備分發(fā)消息時, 它只需要簡單的向IceStorm服務(wù)器發(fā)出一個請求, 而不需要對訂閱者有任何了解, 由IceStorm服務(wù)器負責(zé)把消息遞送給訂閱者, IceStorm還負責(zé)處理由于訂閱者的行為有問題或訂閱者不存在所造成的異常. 發(fā)布者不再需要關(guān)注它的訂閱, 甚至不需要知道此時是否有訂閱者, 與此類似, 訂閱者僅需要與IceStorm服務(wù)器進行簡單的交互, 完成像訂閱和取消訂閱任務(wù), 就可以獲得感興趣的消息. 發(fā)布者可以專注于其應(yīng)用程序特有的功能, 而不是管理訂閱者這樣的瑣事, 訂閱者也可以集中精力解決對消息的處理, 而不用關(guān)心其它瑣事. 要把 IceStorm整合到應(yīng)用程序中, 消息的發(fā)布者和使用者僅需要做出很少的改動. 發(fā)布消息時按照主題進行分類, 訂閱者訂閱感興趣主題, 只有那些被訂閱的主題才會發(fā)布給訂閱者, 訂閱和取消訂閱都很簡單. IceStorm支持任意多個主題, 主題還可以根據(jù)其 cost屬性結(jié)成聯(lián)盟, IceStorm作為聯(lián)盟服務(wù)運行時, 服務(wù)的多個瑣實例可以在不同的機器上運行, 使處理負載分攤到許多CPU上. IceStorm服務(wù)還允許指定服務(wù)標準質(zhì)量, 從而在可靠性和性能之間做適當(dāng)?shù)恼壑? 發(fā)布者把消息發(fā)布給IceStorm服務(wù), 由它發(fā)布給訂閱者. 這樣, 發(fā)布者發(fā)布的單個事件就可以發(fā)送給多個訂閱者, 如果需要把消息分發(fā)給大量的應(yīng)用程序組件, IceStorm是十分合適的選擇. 關(guān)于ICE其他知識介紹, 本文就不逐一說明, 詳細了解請參考ZeroC官網(wǎng)(https://zeroc.com/)ICE資料.
3.2 JSON串
JSON串技術(shù)是一種輕量級的數(shù)據(jù)交換格式, 它是基于JavaScript的一個子集, 采用完全獨立與語言的文本格式, 兼容包括C、C++、JAVA、JavaScript、Python等語言, 并且其易于閱讀和編寫, 同時也易于機器解析和生產(chǎn), 這些特征使得JSON串成為理想的數(shù)據(jù)交換語言. 以某子系統(tǒng)實現(xiàn)的數(shù)據(jù)傳輸過程為例, 說明JSON串的構(gòu)建和解析過程.
(1) 定義數(shù)據(jù)對應(yīng)的結(jié)構(gòu)體格式:
typedef struct tagDoorRemoteOpenBuf
{
int len;
unsigned char type;
int sn;
unsigned char door_no;
char door_tagname[64];
char belong_controlname[64];
}DoorRemoteOpenBuf;
(2) 調(diào)用JSON串相關(guān)庫文件并定義和實現(xiàn)類:
CJsonCppUtil:
Class CJsonCppUtil
{
Public:
CJsonCppUtil(void);
CJsonCppUtil(Json::Value value);
~CJsonCppUtil(void);
bool getDoorRemoteOpenBufStructFromString(string str,DoorRemoteOpenBuf &remoteOpen); //解析JSON串函數(shù)
string parseDoorRemoteOpenBufStruct(DoorRemoteOpenBuf &remoteOpen);//構(gòu)建JSON串函數(shù)
private:
Json::Value m_value;}
其中解析JSON串函數(shù)具體實現(xiàn)過程如下:
bool CJsonCppUtil::getDoorRemoteOpenBufStructFromString(string str,DoorRemoteOpenBuf &remoteOpen)
{
Json::Reader reader;
if (!reader.parse(str, m_value, false))
return false;
remoteOpen.len = m_value["len"].asInt();
remoteOpen.door_no = (unsigned char)m_value["door_no"].asInt();
remoteOpen.sn = m_value["sn"].asInt();
remoteOpen.type = (unsigned char)m_value["type"].asInt();
sprintf(remoteOpen.door_tagname, "%s", m_value["door_tagname"].asString().c_str());
sprintf(remoteOpen.belong_controlname,"%s", m_value["belong_controlname"].asString().c_str());
sprintf(remoteOpen.fes_tagname, "%s", m_value["fes_tagname"].asString().c_str());
return true;}
構(gòu)建JSON串函數(shù)具體實現(xiàn)過程如下:
string CJsonCppUtil::parseDoorRemoteOpenBufStruct(DoorRemoteOpenBuf &remoteOpen)
{
Json::FastWriter writer;
Json::Value obj;
obj["len"] = remoteOpen.len;
obj["door_no"]= remoteOpen.door_no;
obj["sn"] = remoteOpen.sn;
obj["type"] = (Json::Int)remoteOpen.type;
return writer.write(obj);}
該類實現(xiàn)了DoorRemoteOpenBuf結(jié)構(gòu)體的JSON串構(gòu)建和解析功能, 在傳遞消息過程中, 首先相關(guān)應(yīng)用程序按照該結(jié)構(gòu)體格式通過構(gòu)建JSON串方法生產(chǎn)消息總線所需發(fā)布的字符串buf的內(nèi)容, 隨即調(diào)用相關(guān)消息總線接口, 消息發(fā)布者按照既定格式將消息發(fā)出, 而后, 消息訂閱者接收到該消息, 同理調(diào)用解析JSON串函數(shù)獲得相關(guān)結(jié)構(gòu)體數(shù)據(jù), 實現(xiàn)了消息的傳遞. 通過JSON串封裝的數(shù)據(jù)清晰明了, 方便開發(fā)人員協(xié)調(diào)工作, 有效的提高了開發(fā)效率, 避免了數(shù)據(jù)傳輸過程中構(gòu)建和解析數(shù)據(jù)包錯誤導(dǎo)致的bug查找調(diào)試困難問題.
3.3 總線接口
在ICE中間件的基礎(chǔ)之上封裝的消息總線, 提供一對多的消息廣播功能, 實現(xiàn)在復(fù)雜網(wǎng)絡(luò)環(huán)境下數(shù)據(jù)的可靠傳送. 消息總線保證同一個程序向同一個主題發(fā)布的消息, 接收者接收順序與發(fā)送順序相同. 消息總線程序由兩部分組成: 向應(yīng)用程序提供調(diào)用接口的軟件模塊, 通過動態(tài)庫方式實現(xiàn); 完成實際數(shù)據(jù)傳輸、接收的軟件模塊, 通過單獨進程完成. 消息總線結(jié)構(gòu)如圖3所示.
圖3 消息總線結(jié)構(gòu)
應(yīng)用程序使用消息總線的方式包括:
(1) 訂閱主題: 應(yīng)用程序通知消息總線自己關(guān)心的主題, 當(dāng)此主題有消息到達時, 應(yīng)用程序可以收取.
(2) 退訂主題: 應(yīng)用程序通知消息總線自己不再關(guān)心某個主題, 以后此主題的消息對應(yīng)用程序不可見.
(3) 發(fā)布消息: 應(yīng)用程序向某個主題發(fā)送一條消息, 所有訂閱此主題的應(yīng)用程序, 無論位于何處, 都可以收到此消息.
(4) 接收消息: 應(yīng)用程序收取自己關(guān)心主題的消息.
(5) 主題管理模塊: 用于管理本節(jié)點及域內(nèi)其他節(jié)點主題訂閱信息, 這些信息通過節(jié)點間交換的配置信息進行全域同步, 確保每條消息可以準確送至所需的節(jié)點.
以ICE中間件和JSON串為設(shè)計核心構(gòu)建的消息總線, 消息傳遞思路清晰、層次分明, 以總線為聯(lián)絡(luò)通道, 設(shè)計與上層應(yīng)用程序和前置開發(fā)模塊的交互接口, 上層應(yīng)用和前置開發(fā)按照規(guī)定接口通過消息總線實現(xiàn)信息的交互. 消息總線將前置模塊和上層應(yīng)用進行了有效的解耦合, 前置模塊與上層應(yīng)用信息交換時只需與消息總線進行交互, 通過這一方式屏蔽了前置多類設(shè)備與上層多應(yīng)用個性化需求問題, 特定類型的消息通過消息總線由上層應(yīng)用傳遞到前置開發(fā), 前置根據(jù)消息類型將消息分發(fā)給對應(yīng)模塊, 從而實現(xiàn)消息的可靠傳輸.
消息總線采用2個環(huán)形隊列管理本節(jié)點消息:發(fā)布隊列與接收隊列. 發(fā)送隊列用于存放本節(jié)點應(yīng)用程序發(fā)布的消息, 這些消息需要向其他節(jié)點進行傳送; 接收隊列用于存放從網(wǎng)絡(luò)接收到的消息, 本節(jié)點應(yīng)用程序需要接收這些消息. 如果本節(jié)點一個應(yīng)用程序發(fā)布的消息有其他應(yīng)用程序需要接收, 直接從發(fā)布隊列復(fù)制到接收隊列, 為方便開發(fā)人員使用, 本文將消息總線內(nèi)封裝, 定義了對外接口供使用者調(diào)用, 具體實現(xiàn)接口定義如下:
(1) 注冊通道: int register_channel(unsigned int channelID);
(2) 取消注冊通道: int unregister_channel(unsigned int channelID);
(3) 向指定通道發(fā)送消息: int send_to_channel (unsigned int channelID, const char *buf, unsigned int buf_size,unsigned int msg_type = 0, int dst_domainID = -1, bool send_to_myself = true);
(4) 從消息中線讀取消息: int read_from_bus(char *buf, unsigned int &buf_size, MSG_TYPE_INFO &stru_msgType);
圖4為某應(yīng)用系統(tǒng)設(shè)計前置客戶端界面, 現(xiàn)以具體實例對本文所論述系統(tǒng)加以說明, 現(xiàn)有編號為1616設(shè)備2個, 通過串口1接入本機軟件系統(tǒng), 其中次編號為161601設(shè)備為1616設(shè)備地址為1設(shè)備, 次編號為161602設(shè)備為1616設(shè)備地址為2設(shè)備. 本文背景為161601設(shè)備電源未開, 161602設(shè)備正常工作, 從圖中可以看出161601設(shè)備左邊按鈕顯示為紅色, 表示工況退出, 而161602設(shè)備左邊按鈕顯示為綠色, 表示工況正常. 圖示中右邊部分為161602設(shè)備信息交互組幀報文情況, 該報文即為前置規(guī)約層中通訊協(xié)議內(nèi)容. 通過這種前置模塊設(shè)計, 本文實現(xiàn)了多類型設(shè)備的接入, 至此數(shù)據(jù)信息通過終端設(shè)備采集到了前置模塊.
圖 4 前置展示界面
信息到達前置緩沖區(qū)后, 前置管理層將該數(shù)據(jù)組幀丟給消息總線, 相應(yīng)的上層模塊通過注冊消息總線實現(xiàn)數(shù)據(jù)的接收, 并按照用戶業(yè)務(wù)需求進行相應(yīng)處理.
圖5為上層應(yīng)用某變電站實際場景呈現(xiàn), 將變電站現(xiàn)場輔助信息按照業(yè)主一次接線圖定制要求, 將環(huán)境信息、視頻監(jiān)控、報警監(jiān)視等集中展現(xiàn).
圖5 上層應(yīng)用展示界面
本文完成了基于ICE中間件和JSON串技術(shù)的消息總線傳輸設(shè)計, 為需要進行復(fù)雜通信的大型應(yīng)用系統(tǒng)提供了層次清晰、傳遞可靠的消息傳輸解決方法. 該方法能夠?qū)崿F(xiàn)在應(yīng)用層面系統(tǒng)開發(fā)、消息傳輸交互、前置設(shè)備響應(yīng)這種三級構(gòu)架的系統(tǒng)設(shè)計中發(fā)揮出重要作用, 并且應(yīng)用層將消息結(jié)構(gòu)體以JSON串格式下發(fā)和前置層, 按照對應(yīng)格式進行解析保證了該消息的準確傳輸. 前置層采用鏈路層、規(guī)約層和管理層三層構(gòu)架, 有利于各類前置終端設(shè)備的接入. 文章中所闡述的一體化平臺監(jiān)控設(shè)計思路在大型系統(tǒng)設(shè)計中優(yōu)勢明顯.
1 葛暉,王成進,楊建旭,等.基于RT21的智能綜合監(jiān)控管理系統(tǒng).計算機系統(tǒng)應(yīng)用,2014,23(12):77–81.
2 翟明玉,雷寶龍.電網(wǎng)調(diào)度自動化系統(tǒng)消息中間件的特性和關(guān)鍵技術(shù).電力系統(tǒng)自動化,2012,36(14):56–59.
3 丁云亮,谷利澤,楊榆.基于分布式中間件ICE的應(yīng)用架構(gòu)研究.計算機應(yīng)用,2009,29(12):27–31.
4 王重楠,王宗陶,鮑忠貴,等.發(fā)布/訂閱模式測控消息中間件系統(tǒng)設(shè)計.計算機應(yīng)用,2015,35(3):878–881.
5 莫峻,譚建成.智能變電站過程總線通信模型.中國電機工程學(xué)報,2014,7:1072–1078.
6 范菁,熊麗榮,徐聰.分布式企業(yè)服務(wù)總線平臺數(shù)據(jù)集成研究及應(yīng)用.計算機科學(xué),2014,41(2):206–214.
7 王芳芳,廉東本,高天.企業(yè)服務(wù)總線的協(xié)議轉(zhuǎn)換器的研究與設(shè)計.計算機系統(tǒng)應(yīng)用,2013,22(3):132–135.
Date Transmission Based on Hierarchical Front-Frame and Message Bus
WANG Dong-Yang1, YANG Chun-Sheng1, JIANG Yuan1, YANG Qing-Ya1, HUA Chen-Bing1, CHEN Lu2
1(Linyi Power Supply Company, Linyi 276003, China)2(Anhui NARI Jiyuan Electric Power System Tech. Co. Ltd., Hefei 230088, China)
Numerous modules or third-party data access and multifarious upper application require system data transmission with flexible, universal and extensible performance. Therefore, a middle layer data transmission design becomes a key task of developers. Add front layer in data access, which uses the structure of communication link layer, protocol processing layer, management layer, and front real-time data processing library. Considering the clear principle of cross-platform and data type distinction, the message bus data transmission with ICE middleware and JSON string as the core is constructed and the interaction interface between upper application and front module is designed. The bus transfer mechanism separates the application software layer from the pre-layer, and implements the information exchange through the bus according to the agreed message types. It shields the system’s various upper-layer application requirements and the pre-developed communication protocol characteristics, and improves the developer’s work efficiency and the system’s robustness, scalability, and also reduces the follow-up maintenance personnel to maintain the difficulty.
message bus; JSON; ICE; front development
2016-04-09;收到修改稿時間:2016-05-30
[10.15888/j.cnki.csa.005550]