0 引言
近些年來(lái)由于電子技術(shù),、計(jì)算機(jī)技術(shù)和通信技術(shù)的快速發(fā)展而加快了各個(gè)行業(yè)的自動(dòng)化進(jìn)程,,在電力行業(yè)內(nèi),也依靠現(xiàn)代化技術(shù)改變了傳統(tǒng)的手工抄表方法,,使得抄表工作在不需要人力的情況下依靠網(wǎng)絡(luò)和計(jì)算機(jī)就能快速而準(zhǔn)確的完成,,提高了抄表過(guò)程中數(shù)據(jù)采集的實(shí)時(shí)性、可靠性,、信息量,。目前的自動(dòng)化抄表系統(tǒng)主要有掌上抄表系統(tǒng),,有線抄表系統(tǒng)和無(wú)線抄表系統(tǒng),其中掌上抄表系統(tǒng)需抄表人員用掌上抄表器抄收數(shù)據(jù),,因此自動(dòng)化程度不夠,;有線系統(tǒng)需要施工布線,既提高了費(fèi)用又增加了難度,;而無(wú)線抄表系統(tǒng)雖不需布線,,安裝也方便,但信號(hào)易受外界干擾,,數(shù)據(jù)傳輸?shù)姆€(wěn)定性較差,,容易抄收失敗。因此主要研究基于GPRS的無(wú)線遠(yuǎn)程抄表系統(tǒng),,利用GPRS技術(shù)連接主站與集中器,,從而縮短了布線的范圍及長(zhǎng)度,并可實(shí)時(shí),、準(zhǔn)確地獲取電表數(shù)據(jù)并上傳數(shù)據(jù)到主站,,重點(diǎn)研究基于GPRS的有線集中器的軟件設(shè)計(jì)。
1 系統(tǒng)結(jié)構(gòu)描述
完整的遠(yuǎn)程抄表系統(tǒng)包括主站,、集中器,、采集器、載波表,、手持終端等,,其系統(tǒng)結(jié)構(gòu)如圖1所示。
主站是運(yùn)行抄表系統(tǒng)的計(jì)算機(jī),,一般放在電力中心,由它來(lái)發(fā)出命令進(jìn)行定時(shí)抄表,、實(shí)時(shí)抄讀或設(shè)置相關(guān)信息等操作,。主站通過(guò)GPRS與集中器通信。
集中器負(fù)責(zé)連接若干個(gè)電表或采集器,,此范圍內(nèi)的所有電表的抄讀工作由集中器統(tǒng)一完成,,然后再將結(jié)果傳送給主站,集中器與主站間通過(guò)GPRS連接,,下行通過(guò)RS 486進(jìn)行連接,。
本文重點(diǎn)介紹集中器中通信軟件的設(shè)計(jì)。
2 集中器通信軟件設(shè)計(jì)
2.1 集中器功能
集中器除了響應(yīng)主站命令外還要負(fù)責(zé)對(duì)電表的定時(shí)抄讀,,因此設(shè)計(jì)集中器軟件時(shí)要明確這2個(gè)功能,,即:響應(yīng)主站命令與定時(shí)抄表。響應(yīng)主站命令任務(wù)的啟動(dòng)是由主站命令到達(dá)觸發(fā)的,,定時(shí)抄表任務(wù)則應(yīng)該由集中器內(nèi)時(shí)間觸發(fā)而啟動(dòng)的,,不同的任務(wù)對(duì)應(yīng)不同的處理流程,。
2.2 響應(yīng)主站流程
集中器向上與主站連接,向下與各終端進(jìn)行通信,。與主站間的通信集中器處于從屬地位,,它只有在接收到主站中的命令時(shí)才做出操作,而不能主動(dòng)與主站發(fā)起通信,;而其與下行終端通信時(shí),,集中器處于主動(dòng)地位,它在適當(dāng)?shù)臅r(shí)候向下終端發(fā)出命令,,而不會(huì)收到下行的主動(dòng)請(qǐng)求幀,。
圖2描述了集中器通信流程,通信的工作始終運(yùn)行在外圍的無(wú)限循環(huán)中判斷和接收主站請(qǐng)求幀,,當(dāng)接收到主站命令后先判斷此數(shù)據(jù)幀是否校驗(yàn)正確,,若錯(cuò)誤檢查錯(cuò)誤原因,并根據(jù)錯(cuò)誤類型設(shè)置錯(cuò)誤代碼,,然后發(fā)送異常應(yīng)答幀,;否則判斷是否是集中器命令,若不是集中器命令則需要判斷是否需要轉(zhuǎn)發(fā),,需要轉(zhuǎn)發(fā)則首先將協(xié)議進(jìn)行轉(zhuǎn)換,,然后將命令轉(zhuǎn)發(fā)出去,接收到轉(zhuǎn)發(fā)響應(yīng)后再向主站響應(yīng),;若是集中器命令,,則根據(jù)操作碼對(duì)集中器進(jìn)行相關(guān)操作,操作完成后返回響應(yīng)幀,,然后進(jìn)入下一個(gè)循環(huán)繼續(xù)等待主站的命令幀,。
2.3 抄表任務(wù)流程
定時(shí)抄表是集中器的重要功能,通常有抄表日抄表,,抄表月抄表,,整點(diǎn)抄表;零點(diǎn)抄表等多種類型,。集中器首先啟動(dòng)抄表任務(wù)功能,,然后不斷檢測(cè)當(dāng)前時(shí)間是否符合設(shè)定的抄表時(shí)間,如果不符合則繼續(xù)下一輪的檢查,;否則獲取到要抄讀的電表信息,,然后向電表發(fā)送抄讀命令幀,收到回復(fù)后先驗(yàn)證數(shù)據(jù)的正確性,,如果數(shù)據(jù)正確則進(jìn)行相關(guān)的入庫(kù)等操作,,否則重發(fā)抄讀命令(一般設(shè)為3次),當(dāng)數(shù)據(jù)處理完成后,,進(jìn)行下一輪循環(huán),。整個(gè)流程如圖3所示
2.4 軟件模塊設(shè)計(jì)
根據(jù)上節(jié)介紹的流程,,在設(shè)計(jì)軟件的時(shí)候?qū)⒄麄€(gè)系統(tǒng)分為如下幾個(gè)部分:
主控模塊 負(fù)責(zé)命令的接收,發(fā)送,,邏輯判斷,,數(shù)據(jù)流的控制等總體調(diào)度和控制工作。
上行協(xié)議解析模塊 負(fù)責(zé)對(duì)主站下發(fā)的命令進(jìn)行幀的校驗(yàn)和解析,,并將解析的結(jié)果保存以便主控的訪問,。
上行協(xié)議封裝模塊 負(fù)責(zé)對(duì)主站回復(fù)幀的封裝工作,具體數(shù)據(jù)由主控模塊提供,。
集中器操作模塊 負(fù)責(zé)根據(jù)主站命令實(shí)現(xiàn)對(duì)集中器的操作工作,。
下行協(xié)議封裝模塊 在需要命令轉(zhuǎn)換時(shí),該模塊負(fù)責(zé)將主站下發(fā)的命令翻譯成下行協(xié)議,,在抄讀任務(wù)啟動(dòng)后負(fù)責(zé)封裝抄讀命令,。
下行通信模塊 負(fù)責(zé)下行命令的發(fā)送和接收。
下行協(xié)議的解析模塊 負(fù)責(zé)將下行命令的回復(fù)幀進(jìn)行校驗(yàn)和解析,。
數(shù)據(jù)處理模塊 負(fù)責(zé)將必要的數(shù)據(jù)存入數(shù)據(jù)庫(kù)或從數(shù)據(jù)庫(kù)中讀取數(shù)據(jù),。
抄表模塊 負(fù)責(zé)定時(shí)啟動(dòng)抄表任務(wù)。
整體的系統(tǒng)模型如圖4所示,。
定時(shí)抄表模塊使用單獨(dú)線程實(shí)現(xiàn),,在模塊中判斷當(dāng)前時(shí)間是否符合抄表設(shè)定的時(shí)間,如果是則將所有要抄讀信息發(fā)送到下行協(xié)議模塊封裝模塊進(jìn)行封裝抄表命令,,然后下發(fā)出去,。在向下通信的過(guò)程中使用了兩個(gè)隊(duì)列來(lái)實(shí)現(xiàn)通信和處理的異步性,在對(duì)多個(gè)表抄讀時(shí)可提高整體系統(tǒng)的效率,。
3 通信軟件的實(shí)現(xiàn)
該軟件系統(tǒng)模擬在Linux操作系統(tǒng)中用C++語(yǔ)言實(shí)現(xiàn),,每個(gè)模塊封裝成單獨(dú)的類,如下所示:
該類對(duì)應(yīng)主控模塊,,其中成員函數(shù)run()中實(shí)現(xiàn)主控模塊的功能,,在系統(tǒng)中構(gòu)造一個(gè)全局的Dispatcher對(duì)象以實(shí)現(xiàn)對(duì)主控模塊的訪問。
該類對(duì)應(yīng)上行協(xié)議的幀,,其中提供成員方法Encode()和Decode()來(lái)實(shí)現(xiàn)對(duì)上行協(xié)議的封裝和解析。在程序中只需創(chuàng)建一個(gè)幀的對(duì)象就可以通過(guò)這些函數(shù)實(shí)現(xiàn)封裝和解析的功能,。下行協(xié)議采用同樣的方法處理:
該類對(duì)應(yīng)集中器操作模塊,,其中方法Do(int Op_Type)實(shí)現(xiàn)具體操作功能,參數(shù)Op_Type表示要做的具體操作,,在函數(shù)內(nèi)部可以使用switch-case語(yǔ)句判斷操作的類型,,然后到各個(gè)分支執(zhí)行。
其余模塊采用相同的方法進(jìn)行封裝,,需要注意的是抄表模塊和下行通信模塊采用單獨(dú)線程處理,,以實(shí)現(xiàn)抄表任務(wù)的定時(shí)啟動(dòng)和下行數(shù)據(jù)傳輸?shù)漠惒叫?。下行?duì)列采取封裝STL中queue模板來(lái)實(shí)現(xiàn),并提供入隊(duì),,出對(duì),,獲取隊(duì)列大小等接口。
4 結(jié)語(yǔ)
集中器軟件設(shè)計(jì)的主要任務(wù)是實(shí)現(xiàn)其的各部分功能,。主要功能包括:集中器控制,、實(shí)時(shí)用電數(shù)據(jù)采集、定時(shí)數(shù)據(jù)采集及存儲(chǔ),、數(shù)據(jù)報(bào)文的轉(zhuǎn)發(fā),、運(yùn)行狀態(tài)記錄及指示、通信管理等,。采用了模塊化設(shè)計(jì)的通信軟件具有穩(wěn)定性好,,效率高等特點(diǎn),能夠進(jìn)一步加快電力行業(yè)自動(dòng)化的建設(shè),。