張 帆,張理放,毛永梅
(內(nèi)蒙古電力科學(xué)研究院,內(nèi)蒙古 呼和浩特 010010)
當(dāng)前社會(huì)對電力的需求不斷增長,對供電質(zhì)量的要求越來越高。這就需要供電公司提供高質(zhì)量的電力服務(wù),不斷進(jìn)行技術(shù)革新,發(fā)展智能電網(wǎng)技術(shù),在電力領(lǐng)域?qū)崿F(xiàn)自動(dòng)化、智能化配電管理和用電管理。電能數(shù)據(jù)采集終端介于主站與智能電表之間,搜集各個(gè)數(shù)據(jù)采集點(diǎn)和用戶的用電數(shù)據(jù),同時(shí)搜集、傳輸、管理以及轉(zhuǎn)發(fā)電能表數(shù)據(jù),通過海量數(shù)據(jù)來保障電力企業(yè)管理工作的順利進(jìn)行?;贏RM的電能數(shù)據(jù)采集終端,能耗低,電池使用時(shí)間長,環(huán)境適應(yīng)能力強(qiáng),可以在-25~85 ℃范圍內(nèi)工作。該終端使用的系統(tǒng)是自由的、開源的以及穩(wěn)定的LINUX系統(tǒng)。
LINUX系統(tǒng)并非實(shí)時(shí)操作系統(tǒng),但是通過性能改進(jìn)可以滿足數(shù)據(jù)采集終端的實(shí)時(shí)需求。在CPU中不斷改進(jìn)調(diào)度相應(yīng)的時(shí)間和系統(tǒng)中斷性能,引入多線程算法,保證重要事件發(fā)生時(shí)可以搶占中心資源進(jìn)行高效運(yùn)算,進(jìn)而保證數(shù)據(jù)的實(shí)時(shí)性與同步性,更好地滿足電能數(shù)據(jù)采集方面的實(shí)時(shí)需求。
如圖1所示,基于ARM的電能數(shù)據(jù)采集終端系統(tǒng)由采集模塊、輸入與現(xiàn)實(shí)模塊以及通信模塊組成。應(yīng)用程序存放在NOR Flash中,電能數(shù)據(jù)終端采集的數(shù)據(jù)則存放在NAND Flash中,可以充分滿足電能終端系統(tǒng)運(yùn)行需要。對LINUX系統(tǒng)外圍硬件進(jìn)行編譯,操作系統(tǒng)可移植入CPU,構(gòu)建適合電力企業(yè)的開發(fā)環(huán)境。ARM終端同時(shí)需要應(yīng)對多個(gè)事件。電力傳輸中的事件要求數(shù)據(jù)可以實(shí)時(shí)傳輸,保證中心給予快速解決。多個(gè)事件需要并行執(zhí)行,因此終端引入了多線程設(shè)計(jì),以保證數(shù)據(jù)采集效率。
圖1 電能數(shù)據(jù)采集終端結(jié)構(gòu)
該終端通過4類接口與總機(jī)設(shè)備進(jìn)行數(shù)據(jù)通信。首先,遠(yuǎn)程接口。主機(jī)與各個(gè)ARM數(shù)據(jù)采集終端上的采集APP進(jìn)行數(shù)據(jù)交互,屬于遠(yuǎn)程連接。該接口包括載波接口、GPRS接口以及TCP/IP接口等。其次,本地接口。本地軟件要和ARM數(shù)據(jù)采集終端的各類軟件進(jìn)行數(shù)據(jù)交互,在通信過程中主要以字節(jié)流完成信息傳遞。此類接口包括RS接口和紅外接口等。再次,為了設(shè)備的使用性能良好,要求其具備人機(jī)交互接口。
該接口應(yīng)該界面應(yīng)操作簡單、明確以及快速,以方便工作人員使用。此類接口屬于數(shù)據(jù)采集端軟件,可以完成搜索功能,基于特定數(shù)據(jù)模型進(jìn)行人機(jī)交互,包括鍵盤、顯示器以及LCD顯示屏等。最后,其他接口。數(shù)據(jù)采集終端不僅要和主機(jī)相連,以供工作人員操作,也要與其他采集模塊相連,如交直流模擬和脈沖采集等。終端采集軟件APP利用讀寫函數(shù)調(diào)用與其他模塊之間的接口,如圖1所示的A/D轉(zhuǎn)換接口、維護(hù)接口以及USB升級接口。
2.1.1 數(shù)據(jù)采集功能
終端軟件的最基本功能是采集數(shù)據(jù)。數(shù)據(jù)是后續(xù)進(jìn)行一系列分析應(yīng)用工作的基礎(chǔ)。數(shù)據(jù)采集功能是對智能終端設(shè)備和電能脈沖信息進(jìn)行采集,要求實(shí)時(shí)性強(qiáng),采集準(zhǔn)確度高。
2.1.2 數(shù)據(jù)管理功能
數(shù)據(jù)采集功能獲取的數(shù)據(jù),要和總機(jī)系統(tǒng)中存儲(chǔ)的歷史電能數(shù)據(jù)比較,通過對比完成數(shù)據(jù)準(zhǔn)確度檢查,判斷數(shù)據(jù)監(jiān)控電能系統(tǒng)運(yùn)行是否正常。對數(shù)據(jù)進(jìn)行遠(yuǎn)程傳輸,所有數(shù)據(jù)均要進(jìn)行妥善存儲(chǔ),以備后續(xù)使用。LINUX系統(tǒng)運(yùn)用編程語言為存儲(chǔ)的數(shù)據(jù)建立數(shù)據(jù)庫,因LINUX系統(tǒng)的開放性強(qiáng),只要在系統(tǒng)允許的范圍內(nèi)工作,資源占用率較低,使得系統(tǒng)具備較高的查詢速度。
2.1.3 數(shù)據(jù)控制功能
通過智能控制終端,用戶的用電費(fèi)率和階梯費(fèi)率等信息都可以進(jìn)行遠(yuǎn)程監(jiān)控計(jì)算,且對用戶的用電量和用電行為有監(jiān)督作用,以保證設(shè)備穩(wěn)定運(yùn)行。
2.1.4 綜合管理功能
整個(gè)電能數(shù)據(jù)采集系統(tǒng)通過數(shù)據(jù)對用電企業(yè)、設(shè)備運(yùn)維以及用戶用電情況等各方面進(jìn)行控制。因此,在企業(yè)成本控制、服務(wù)質(zhì)量、用戶電量統(tǒng)計(jì)、合規(guī)用電以及電氣設(shè)備運(yùn)行維護(hù)等方面,均可以通過數(shù)據(jù)進(jìn)行分析。如果發(fā)現(xiàn)異常問題,則可以及時(shí)作出反饋。
2.1.5 操作和維護(hù)功能
該功能是為了維護(hù)數(shù)據(jù)采集系統(tǒng)的基本信息,如進(jìn)出權(quán)限和系統(tǒng)時(shí)間等。系統(tǒng)基礎(chǔ)信息完成設(shè)定后,該功能可以對這些數(shù)據(jù)進(jìn)行存儲(chǔ)。工作人員根據(jù)一定權(quán)限可以進(jìn)行查詢設(shè)置,管理設(shè)備、報(bào)表以及數(shù)據(jù)等,記錄運(yùn)行維護(hù)情況。
2.1.6 系統(tǒng)接口功能
數(shù)據(jù)采集系統(tǒng)要和營銷系統(tǒng)、控制系統(tǒng)以及裝配系統(tǒng)等進(jìn)行連接,保證采集的數(shù)據(jù)可以在電力全系統(tǒng)內(nèi)進(jìn)行聯(lián)通交互。其他模塊也可以利用采集的數(shù)據(jù)開展工作,從而為電力系統(tǒng)的全業(yè)務(wù)提供數(shù)據(jù)支持[1]。
2.1.7 其他功能
除了以上功能,電能數(shù)據(jù)采集系統(tǒng)還要能夠與其他應(yīng)用程序互通互聯(lián),保證數(shù)據(jù)可以在程序之間進(jìn)行傳遞和共享。通過功能設(shè)計(jì),以保證終端數(shù)據(jù)采集的及時(shí)、準(zhǔn)確以及高效,保證采集系統(tǒng)可靠,真實(shí)還原現(xiàn)場情況,然后將數(shù)據(jù)送達(dá)到控制中心完成數(shù)據(jù)處理。通過程序可以將控制中心的數(shù)據(jù)傳遞到各終端軟件,以實(shí)現(xiàn)各種功能。整個(gè)系統(tǒng)的兼容性較好,可以引入IC卡和USB接口設(shè)備等進(jìn)行數(shù)據(jù)轉(zhuǎn)載。
根據(jù)終端軟件要實(shí)現(xiàn)的功能,完成了遠(yuǎn)程通信模塊和主要任務(wù)控制模塊的軟件設(shè)計(jì)。
2.2.1 遠(yuǎn)程通信模塊
終端數(shù)據(jù)采集系統(tǒng)完成數(shù)據(jù)采集后,要將數(shù)據(jù)以報(bào)文形式傳送到控制中心。在報(bào)文上傳下發(fā)過程中,遠(yuǎn)程通信模塊不僅要保證支持報(bào)文數(shù)據(jù)傳遞,還要根據(jù)事件的重要性等級進(jìn)行處理,即優(yōu)先處理高等級事件。傳遞報(bào)文要求實(shí)時(shí)性強(qiáng),送達(dá)準(zhǔn)確。
2.2.2 主要任務(wù)控制模塊
主要任務(wù)控制模塊的工作流程,如圖2所示。該模塊屬于多任務(wù)采集模塊,在運(yùn)行時(shí)刻使線程互相獨(dú)立。該模塊工作時(shí),根據(jù)數(shù)據(jù)采集系統(tǒng)獲得的數(shù)據(jù)將所有系統(tǒng)相關(guān)參數(shù)完成初始化,包括內(nèi)存、采集周期以及事件隊(duì)列等。根據(jù)事件優(yōu)先級來排列數(shù)據(jù)項(xiàng)。在主任務(wù)進(jìn)行過程中,要判斷系統(tǒng)的各項(xiàng)參數(shù)。如果達(dá)到數(shù)據(jù)采集要求,則開始進(jìn)行采集任務(wù)和數(shù)據(jù)傳遞工作。主任務(wù)進(jìn)行過程中,數(shù)據(jù)采集軟件要對控制中心下發(fā)的命令做出反饋和監(jiān)控,如抄表命令。執(zhí)行抄表命令是,當(dāng)前任務(wù)會(huì)被中止,并在抄表命令完成后再開啟中止的任務(wù)。整個(gè)任務(wù)周期完成后,要監(jiān)測系統(tǒng)內(nèi)所有參數(shù),查看參數(shù)是否被更改過。若被更改,則進(jìn)行初始化,完成初始化后進(jìn)入下一任務(wù)周期[2]。
基于ARM的數(shù)據(jù)采集終端系統(tǒng)經(jīng)過多年的研究和實(shí)踐,已經(jīng)是較為成熟的系統(tǒng),在硬件及軟件兼容性方面較好,開放性強(qiáng)。該系統(tǒng)比較擅長進(jìn)行數(shù)據(jù)的實(shí)時(shí)處理和傳輸,妥善處理多線程事件。電力系統(tǒng)中的電能數(shù)據(jù)可以通過本地?cái)?shù)據(jù)處理系統(tǒng)進(jìn)行妥善處理。本地?cái)?shù)據(jù)處理系統(tǒng)一般由基本數(shù)據(jù)處理和總體數(shù)據(jù)處理兩個(gè)模塊組成,且兩個(gè)模塊各有進(jìn)程。
2.3.1 基本數(shù)據(jù)處理模塊
基本數(shù)據(jù)處理模塊負(fù)責(zé)對數(shù)據(jù)采集點(diǎn)出現(xiàn)的異常數(shù)據(jù)進(jìn)行分析,生成對應(yīng)事件。模塊在運(yùn)行完成后,將信息隊(duì)列、共享內(nèi)存、采集點(diǎn)參數(shù)和系統(tǒng)參數(shù)均進(jìn)行初始化再進(jìn)入主任務(wù)。進(jìn)入主任務(wù)后對數(shù)據(jù)進(jìn)行采集和分析,分析與主任務(wù)是否符合。符合條件,則利用通信模塊上傳數(shù)據(jù),采集終端的數(shù)據(jù)要和系統(tǒng)內(nèi)的歷史數(shù)據(jù)進(jìn)行對比監(jiān)測,如果數(shù)據(jù)有改動(dòng),則將歷史數(shù)據(jù)上傳到通信模塊,由遠(yuǎn)程通信模塊上傳至主站。整個(gè)周期所有數(shù)據(jù)處理完成后,監(jiān)測數(shù)據(jù)采集點(diǎn)的各個(gè)參數(shù),監(jiān)測事件發(fā)生的條件和事件生命周期等是否改變。如果改變,則對系統(tǒng)進(jìn)行初始化后才可以開啟下一個(gè)事件處理線程[3]。工作流程如圖3所示。
2.3.2 總體數(shù)據(jù)處理模塊
總體數(shù)據(jù)處理模塊負(fù)責(zé)對總加組中的數(shù)據(jù)進(jìn)行系統(tǒng)統(tǒng)計(jì),待完成總加后,由存儲(chǔ)模塊接收相關(guān)的數(shù)據(jù)。存儲(chǔ)模塊工作任務(wù)完成后,要把各個(gè)系統(tǒng)參數(shù)進(jìn)行初始化,包括事件隊(duì)列、內(nèi)存以及采集點(diǎn)等,然后進(jìn)入下一個(gè)事件線程??偧咏M數(shù)據(jù)的計(jì)算有固定的公式,根據(jù)公式完成計(jì)算,完成采集數(shù)據(jù)與歷史數(shù)據(jù)的對比檢查工作,確定是否滿足差動(dòng)條件。如果滿足差動(dòng)條件,誘發(fā)差動(dòng)事件,遠(yuǎn)程通信模塊對這些數(shù)據(jù)進(jìn)行存儲(chǔ)和傳輸??刂浦行脑谶h(yuǎn)程數(shù)據(jù)模塊接收到信息后,完成采集數(shù)據(jù)與歷史數(shù)據(jù)對比生成曲線。該曲線存儲(chǔ)在數(shù)據(jù)存儲(chǔ)模塊,用以后續(xù)的數(shù)據(jù)分析。完成這一周期的數(shù)據(jù)處理后,對各個(gè)采集點(diǎn)的參數(shù)、工作周期、總加參數(shù)和差動(dòng)事件進(jìn)行監(jiān)測,以確定這些數(shù)據(jù)都沒有變化。若有變化,則重新啟動(dòng)并初始化,之后則進(jìn)入下一周期的處理任務(wù)[4]??傮w數(shù)據(jù)處理流程如圖4所示。
除了上述功能以外,基于ARM數(shù)據(jù)采集終端的應(yīng)用軟件還包含其他功能,如采集狀態(tài)量功能、對交流模擬量功能、直流模擬量進(jìn)行采集功能、對脈沖量進(jìn)行采集的功能、局部狀態(tài)指示功能以及終端維護(hù)功能等[5]。
數(shù)據(jù)采集功能在整個(gè)系統(tǒng)中處于基礎(chǔ)地位。當(dāng)前,企業(yè)自動(dòng)化和智能化水平不斷提高,設(shè)備運(yùn)行、維護(hù)的控制和對用戶行為的檢測都采用智能化系統(tǒng),促使各類智能儀表、智能終端以及智能傳感器得到了大量應(yīng)用。所有控制功能均基于數(shù)據(jù)采集,而數(shù)據(jù)采集與全系統(tǒng)功能無縫結(jié)合,使得數(shù)據(jù)應(yīng)用更加廣泛,提升了數(shù)據(jù)采集的效率與經(jīng)濟(jì)性。
圖2 主采集任務(wù)控制模塊工作流程圖
圖3 基本數(shù)據(jù)處理模塊工作流程
圖4 總和數(shù)據(jù)處理模塊工作流程
在LINUX系統(tǒng)下開展多線程任務(wù)編程工作,需要將pthread.h和libpthread.a相連。
(1)pthread_create函數(shù),用以創(chuàng)建多任務(wù)線程中的某個(gè)任務(wù)線程。函數(shù)原型為:
pthread_join函數(shù),用以暫停當(dāng)前線程,直至事件要求的另一個(gè)線程完成工作后,再將此線程開啟。函數(shù)原型為:
這個(gè)函數(shù)是進(jìn)行線程阻攔工作的。當(dāng)調(diào)用該函數(shù)時(shí),要將當(dāng)前線程暫停,開始另一個(gè)事件要求的線程。待優(yōu)先等級較高的線程完成后,中斷的線程再重新開啟。系統(tǒng)會(huì)將資源給到優(yōu)先等級較高的線程,待返回到中斷線程后,系統(tǒng)再將資源調(diào)回到該線程。
(3)pthread_exit函數(shù),終止當(dāng)前線程函數(shù),原型為:
該函數(shù)作為線程返回碼,當(dāng)pthread_join函數(shù)的參數(shù)thread_return的值不為空時(shí),則發(fā)生線程返回,函數(shù)終止。
對于不同的進(jìn)程,要讓各個(gè)進(jìn)程存在于不同的空間并擁有自己的數(shù)據(jù)空間,通過通信方式傳遞數(shù)據(jù)是比較費(fèi)時(shí)非自愿的方式。多線程的好處在于統(tǒng)一進(jìn)程下的所有線程之間可以存在于同一個(gè)數(shù)據(jù)空間,共享數(shù)據(jù)。一個(gè)線程的數(shù)據(jù),另一個(gè)線程在運(yùn)行時(shí)也可以使用,更加省時(shí)省力、方便快捷、節(jié)省資源。線程運(yùn)行中要對變量進(jìn)行修改,但是部分變量不能被多個(gè)線程修改,因此要增加static函數(shù)確保線程可以修改部分變量。
基于ARM的電能數(shù)據(jù)采集終端需要處理的數(shù)據(jù)量較大,因?qū)崟r(shí)性和準(zhǔn)確性的需要,引入多線程事件管理技術(shù),運(yùn)用兩個(gè)以上函數(shù),充分實(shí)現(xiàn)事件線程之間的轉(zhuǎn)換,合理分配系統(tǒng)資源,根據(jù)事件優(yōu)先級進(jìn)行處理,節(jié)省系統(tǒng)資源的同時(shí),保證數(shù)據(jù)傳輸過程順利進(jìn)行。
基于ARM的電能數(shù)據(jù)采集終端可對實(shí)時(shí)采集電力傳輸網(wǎng)絡(luò)的各類數(shù)據(jù)和用電負(fù)荷等信息加以準(zhǔn)確檢測,系統(tǒng)整體安全可靠、拓展性強(qiáng)、經(jīng)濟(jì)性較好、節(jié)省資源以及經(jīng)濟(jì)價(jià)值較高,可滿足當(dāng)前電力系統(tǒng)的服務(wù)要求。未來在電力領(lǐng)域的智能化發(fā)展中,ARM芯片必將發(fā)揮更大的作用,為電力事業(yè)發(fā)展提供強(qiáng)力技術(shù)支持,提高用電服務(wù)水平。