劉祿恒
摘 要:數(shù)據(jù)采集系統(tǒng)一直是工控系統(tǒng)的核心要件。論述一種基于Modbus協(xié)議、Fins協(xié)議和IEC104協(xié)議的通用多協(xié)議數(shù)據(jù)采集系統(tǒng),該系統(tǒng)根據(jù)不同協(xié)議的特點(diǎn)將數(shù)據(jù)進(jìn)行標(biāo)準(zhǔn)化處理,支持?jǐn)?shù)據(jù)實(shí)時(shí)訂閱、冗余處理和統(tǒng)一發(fā)布。應(yīng)用結(jié)果表明,該系統(tǒng)是一個(gè)實(shí)時(shí)性強(qiáng)、易擴(kuò)展、易維護(hù)的高效穩(wěn)定的數(shù)據(jù)采集系統(tǒng)。
關(guān)鍵詞:多協(xié)議;數(shù)據(jù)采集;標(biāo)準(zhǔn)化處理;框架
中圖分類號(hào):TP393 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):2095-1302(2015)06-00-02
0 引 言
數(shù)據(jù)采集,是指從傳感器和其它待測(cè)設(shè)備等模擬和數(shù)字被測(cè)單元中采集信號(hào),再由計(jì)算機(jī)進(jìn)行存儲(chǔ)、處理、顯示或打印的過程。數(shù)據(jù)采集過程往往表現(xiàn)出“數(shù)據(jù)量大”、“數(shù)據(jù)增長速度快”、“數(shù)據(jù)冗余”、“設(shè)備通信協(xié)議不統(tǒng)一”等特點(diǎn),這往往會(huì)導(dǎo)致采集系統(tǒng)無法適應(yīng)不斷增長的處理需求,系統(tǒng)擴(kuò)展性能低,難以維護(hù)[1]。本文論述了一種基于Modbus協(xié)議、Fins協(xié)議和IEC104協(xié)議的多協(xié)議數(shù)據(jù)采集系統(tǒng),該系統(tǒng)根據(jù)不同協(xié)議的特點(diǎn)將數(shù)據(jù)進(jìn)行標(biāo)準(zhǔn)化處理,支持?jǐn)?shù)據(jù)訂閱、冗余處理和統(tǒng)一發(fā)布。
1 系統(tǒng)總體結(jié)構(gòu)
1.1 系統(tǒng)層次結(jié)構(gòu)
系統(tǒng)總體結(jié)構(gòu)如圖1所示,系統(tǒng)主要由采集框架層,緩存判重層和數(shù)據(jù)管理層三部分組成,其中采集框架層包含輪詢框架和主動(dòng)上傳框架,不同協(xié)議可根據(jù)協(xié)議的特性來選擇相應(yīng)框架,比如Modbus和Fins協(xié)議都沒有定義主動(dòng)上傳的功能所以采用輪詢框架,而IEC104中有主動(dòng)上傳的功能則采用主動(dòng)上傳框架。緩存判重層可以將不同協(xié)議間的數(shù)據(jù)進(jìn)行標(biāo)準(zhǔn)化處理,減少數(shù)據(jù)冗余和數(shù)據(jù)發(fā)布時(shí)的負(fù)載。數(shù)據(jù)管理層是將采集上來的數(shù)據(jù)統(tǒng)一管理,然后再分發(fā)給各個(gè)訂閱者。訂閱者可以是數(shù)據(jù)庫或者顯示界面,數(shù)據(jù)管理層可以直接存儲(chǔ)到數(shù)據(jù)庫,也可通過共享內(nèi)存或者套接字存儲(chǔ)到數(shù)據(jù)庫或者顯示到界面上。如果是顯示到界面上,增加訂閱的功能便可減少顯示界面查詢數(shù)據(jù)庫的延遲,提高采集系統(tǒng)的實(shí)時(shí)性。
1.2 系統(tǒng)線程模型
系統(tǒng)總體表現(xiàn)為一個(gè)進(jìn)程,不同協(xié)議的數(shù)據(jù)采集工作在不同的線程里。輪詢框架下的每個(gè)協(xié)議有兩個(gè)線程,主動(dòng)上傳框架下的協(xié)議采用一個(gè)線程。數(shù)據(jù)管理模塊中等待訂閱的工作為一個(gè)線程,數(shù)據(jù)的發(fā)布為一個(gè)線程。
圖1 系統(tǒng)總體結(jié)構(gòu)圖
2 關(guān)鍵技術(shù)
2.1 輪詢框架的實(shí)現(xiàn)
輪詢框架的核心為兩個(gè)線程和兩個(gè)鏈表,線程分為主線程和工作線程,主線程主要維護(hù)兩個(gè)定時(shí)器,工作線程進(jìn)行實(shí)際采集和設(shè)備重新連接的工作。主線程的兩個(gè)定時(shí)器分別對(duì)應(yīng)工作線程的兩個(gè)鏈表,兩個(gè)鏈表分別為數(shù)據(jù)采集設(shè)備鏈表和重新連接的設(shè)備鏈表。
輪詢框架分為兩個(gè)線程,可以隔離定時(shí)器和實(shí)際的采集或重連工作,減少彼此之間的影響。網(wǎng)絡(luò)通訊有很多不確定的因素,在一個(gè)設(shè)備上的采集延遲可能會(huì)影響到其他設(shè)備上的數(shù)據(jù)采集。將定時(shí)器和實(shí)際工作設(shè)備兩者隔離就能保證各設(shè)備上一定次數(shù)的信息采集,確保系統(tǒng)正常穩(wěn)定的運(yùn)行。
2.2 主動(dòng)上傳框架的實(shí)現(xiàn)
主動(dòng)上傳框架采用Reactor編程模式,對(duì)各socket描述符進(jìn)行監(jiān)聽,有數(shù)據(jù)到來就對(duì)協(xié)議進(jìn)行解析,回調(diào)提前注冊(cè)好的信息處理函數(shù),取出數(shù)據(jù)。如果設(shè)備發(fā)生故障則關(guān)閉socket描述符,啟動(dòng)重新連接設(shè)備的定時(shí)器,定期進(jìn)行設(shè)備重連。
IEC104協(xié)議本身規(guī)定了4個(gè)定時(shí)器,包括為連接建立超時(shí)進(jìn)行重連的定時(shí)器t0(30秒)、發(fā)送或測(cè)試APDU的超時(shí)定時(shí)器t1(15秒)、無數(shù)據(jù)報(bào)文時(shí)確認(rèn)的超時(shí)定時(shí)器t2(10秒,t2
2.3 不同協(xié)議數(shù)據(jù)的標(biāo)準(zhǔn)化處理
由于不同協(xié)議間模擬點(diǎn)的數(shù)據(jù)信息表示可能不一致,比如Modbus和Fins協(xié)議模擬點(diǎn)的數(shù)據(jù)信息選用uint16_t來表示,而IEC104協(xié)議選用float來表示,所以系統(tǒng)統(tǒng)一定義了一個(gè)數(shù)據(jù)結(jié)構(gòu)--struct Data,不同協(xié)議下模擬點(diǎn)的信息統(tǒng)一用std::unique_ptr
2.4 緩存判重去冗余
系統(tǒng)總體用一棵紅黑樹來緩存最近一次采集的所有協(xié)議下所有設(shè)備的數(shù)據(jù)信息,這樣每次進(jìn)行發(fā)布的都是所有設(shè)備下有數(shù)據(jù)變化了的點(diǎn)信息,大大減少了數(shù)據(jù)冗余和發(fā)布時(shí)的負(fù)載,明顯提高了系統(tǒng)性能。另外有了緩存模塊,設(shè)備信息的顯示界面可以不需要讀取設(shè)備列表上的配置文件,而從網(wǎng)絡(luò)上直接獲取設(shè)備列表。
2.5 數(shù)據(jù)管理統(tǒng)一發(fā)布
數(shù)據(jù)管理模塊參考了muduo的日志庫[3],線程模型在前端線程收集數(shù)據(jù),數(shù)據(jù)信息到達(dá)一定大小或者數(shù)據(jù)發(fā)布定時(shí)器超時(shí)之后將數(shù)據(jù)傳給背景線程,由背景線程來統(tǒng)一發(fā)布給訂閱者,比如數(shù)據(jù)庫和顯示界面等。這樣可以在不影響數(shù)據(jù)采集效率的前提下,提高數(shù)據(jù)發(fā)布效率,免除系統(tǒng)在發(fā)布上的等待。另外系統(tǒng)采用Reactor + one loop per thread 編程模式等待來自網(wǎng)絡(luò)的訂閱并實(shí)施數(shù)據(jù)信息在網(wǎng)絡(luò)上的發(fā)布。傳統(tǒng)的采集系統(tǒng)都是先將數(shù)據(jù)存到數(shù)據(jù)庫中,然后工控系統(tǒng)其他組件再從數(shù)據(jù)庫中讀取數(shù)據(jù),這樣往往會(huì)造成很大的延時(shí),所以支持訂閱和統(tǒng)一發(fā)布的采集系統(tǒng)對(duì)工控系統(tǒng)的實(shí)時(shí)性大有裨益。
采集系統(tǒng)采用如圖2所示的協(xié)議格式來進(jìn)行統(tǒng)一的數(shù)據(jù)發(fā)布。報(bào)文最開始用3個(gè)字節(jié)的“HEI”來對(duì)報(bào)文定界,其后是4個(gè)字節(jié)的報(bào)文長度,方便接收方對(duì)報(bào)文進(jìn)行處理。然后是設(shè)備個(gè)數(shù)及設(shè)備上的具體點(diǎn)信息。
圖2 數(shù)據(jù)發(fā)布的協(xié)議
由于數(shù)據(jù)標(biāo)準(zhǔn)化的處理,數(shù)據(jù)發(fā)布在協(xié)議上也做了一些妥協(xié),多了一個(gè)字節(jié)的標(biāo)識(shí)來判斷設(shè)備上是否包含模擬點(diǎn)。設(shè)備信息如圖3所示。
圖3 設(shè)備信息內(nèi)容
3 運(yùn)行結(jié)果及分析
為了對(duì)系統(tǒng)做性能上的評(píng)測(cè),編寫Modbus協(xié)議和IEC104協(xié)議設(shè)備端的仿真程序,模擬這兩個(gè)協(xié)議下多個(gè)設(shè)備上的多種點(diǎn)信息,多個(gè)不同的模擬點(diǎn)分別模擬正弦曲線(如圖4),二次函數(shù)曲線,指數(shù)曲線,對(duì)數(shù)曲線,平方根曲線等的變化,不同的數(shù)字點(diǎn)只需要模擬一系列隨機(jī)0/1值的變化即可。
圖4 設(shè)備上的模擬點(diǎn)數(shù)據(jù)按正弦曲線變化
采集系統(tǒng)會(huì)根據(jù)協(xié)議的特點(diǎn)實(shí)時(shí)將數(shù)據(jù)采集上來,然后統(tǒng)一發(fā)布。數(shù)據(jù)顯示的界面如圖5所示,圖中顯示的是IEC104協(xié)議下設(shè)備0的數(shù)據(jù)信息,該設(shè)備下模擬點(diǎn)號(hào)16 385的值為12 198.6,數(shù)字點(diǎn)號(hào)1的值為0。
圖5 數(shù)據(jù)顯示界面
在界面上選擇不同的協(xié)議并選擇協(xié)議下各相應(yīng)設(shè)備上不同點(diǎn)的信息,將數(shù)據(jù)與設(shè)備仿真端的數(shù)據(jù)對(duì)比,發(fā)現(xiàn)程序運(yùn)行無誤。
設(shè)備的仿真端程序總共模擬了50個(gè)設(shè)備的變化,系統(tǒng)均能實(shí)時(shí)準(zhǔn)確的將各協(xié)議下各設(shè)備的各個(gè)點(diǎn)信息采集上來,說明了該系統(tǒng)性能的高效性。
采集系統(tǒng)在采集框架層完成之后才增加的對(duì)FINS協(xié)議的支持,說明了系統(tǒng)容易擴(kuò)展,容易維護(hù)的特性。而采集系統(tǒng)支持?jǐn)?shù)據(jù)實(shí)時(shí)訂閱、冗余處理和統(tǒng)一發(fā)布,說明了系統(tǒng)是一個(gè)實(shí)時(shí)性能可靠的數(shù)據(jù)采集系統(tǒng)。
4 結(jié) 語
本文論述了一種基于Modbus協(xié)議、Fins協(xié)議和IEC104協(xié)議的通用多協(xié)議數(shù)據(jù)采集系統(tǒng), 該系統(tǒng)根據(jù)不同協(xié)議的特點(diǎn)將數(shù)據(jù)進(jìn)行標(biāo)準(zhǔn)化處理,支持?jǐn)?shù)據(jù)實(shí)時(shí)訂閱、數(shù)據(jù)冗余處理和統(tǒng)一發(fā)布。實(shí)驗(yàn)結(jié)果表明,該系統(tǒng)是一個(gè)易擴(kuò)展,易維護(hù)的實(shí)時(shí)性強(qiáng)的高效穩(wěn)定的數(shù)據(jù)采集系統(tǒng)。
參考文獻(xiàn)
[1]彭新一,黃競(jìng)斌,黃志煒 .“一種面向大規(guī)模分布式數(shù)據(jù)采集的標(biāo)準(zhǔn)化方法” [C]. Proceedings of 2010 The 3rd,International Conference on Computational Intelligence and Industrial Application,2010(7).
[2] Telecontrol equipment and systems Part 5-104: Transmission protocols Network access for IEC 60870-5-101 using standard transport profiles[S]. IEC 60870-5-104:2000, IDT
[3]陳碩.《Linux多線程服務(wù)端編程》[M].北京:電子工業(yè)出版社,2013。
[4] Modbus Application Protocol Specification V1.1b, Modbus-IDA. http://www.Modbus-IDA.org
[5]鞠陽,張惠剛.IEC60870-5-104遠(yuǎn)動(dòng)規(guī)約的設(shè)計(jì)及其應(yīng)用[J].繼電器,2006,34(17):55-58.
[6] FINS communications. http://paginas.fe.up.pt/~pfs/recursos/plcs/omron/cs1/eth_manual/sec5.pdf