遠(yuǎn)程電能計量系統(tǒng)的設(shè)計與實(shí)現(xiàn)
1 引言
隨著電力系統(tǒng)自動化程度的提高,以及計算機(jī)技術(shù)在電力系統(tǒng)中日益廣泛的應(yīng)用。傳統(tǒng)的電量計費(fèi)方式由于其效率低、投入大、可靠性差等弊端,已無法適應(yīng)新的形勢要求。建立一套高精度、穩(wěn)定可靠、自動化程度高的電能量自動計量系統(tǒng)具有實(shí)際應(yīng)用意義。可靠、及時的將各數(shù)據(jù)指標(biāo)量從廠站端送入主站的數(shù)據(jù)庫,供后臺計算分析、報表輸出,是該系統(tǒng)正常運(yùn)行的關(guān)鍵。而這部分功能是由遠(yuǎn)程數(shù)據(jù)采集子系統(tǒng)所實(shí)現(xiàn)的。下面,筆者將結(jié)合現(xiàn)場實(shí)際情況介紹該子系統(tǒng)的結(jié)構(gòu)和設(shè)計方法,并就如何在Delphi5.0下編寫該部分的通信軟件進(jìn)行詳細(xì)闡述。
2 系統(tǒng)結(jié)構(gòu)
本數(shù)據(jù)采集子系統(tǒng)由電能表、電能量采集器、前置機(jī)、通信通道、數(shù)據(jù)庫服務(wù)器等硬件設(shè)備組成。系統(tǒng)結(jié)構(gòu)如圖1所示。采集器為東方電子CLL064型,通過RS485總線下接多塊威勝、恒通等多功能電能表。采集器采集電能表中的各項(xiàng)輸出數(shù)據(jù)(包括分時電量、瞬時量、需量、失壓斷相量等),將其在存儲區(qū)中保存一定時間,并隨時接受主站命令將數(shù)據(jù)打包上傳。前置機(jī)采用一般PC機(jī),通過MoxaC168H/PCI多串口卡擴(kuò)展至1-10個串口,分別接多個Modem經(jīng)各種通信通道(包括電力載波、微波、公用電話網(wǎng)等)與采集器進(jìn)行通信。前置機(jī)對采集器上傳數(shù)據(jù)進(jìn)行相應(yīng)處理后,通過DelphiBDE(Borland數(shù)據(jù)庫引擎)存入網(wǎng)絡(luò)數(shù)據(jù)庫服務(wù)器(Sybase Adaptive Server 12.1),供其它子系統(tǒng)查詢計算。
3 通信軟件的設(shè)計
在Windows2000下,用Delphi進(jìn)行串行口通信程序開發(fā),一般有四種方法:利用windows提供的API函數(shù);嵌入?yún)R編語言直接讀寫串口;引入第三方的通信控件;利用第三方提供的通信函數(shù)。
利用Windows API函數(shù)讀寫串口即通過調(diào)用API函數(shù)中CreateFile、ReadFile、WriteFile等函數(shù)操作串口;嵌入?yún)R編要進(jìn)行中斷接口編程,程序員必須掌握豐富的硬件知識。以上兩種方法都要求編寫大量的底層函數(shù),增大了編程的工作量。而后兩種方法對API函數(shù)進(jìn)行了很好的封裝,程序員只需設(shè)置一些簡單的屬性,調(diào)用少數(shù)直觀、簡易的函數(shù)即可完成大部分通信功能。程序員從大量繁瑣的底層編程工作中解脫了出來。下面將對如何利用Microsoft ActiveX通信控件MSComm.OCX進(jìn)行收發(fā)數(shù)據(jù)作詳細(xì)介紹。
3.1 通信控件的引入
要將第三方的控件引入Delphi,首先在菜單項(xiàng)中選中“Component”,再選擇“Import ActiveX”,從彈出的“Import ActiveX”窗口中選中“Microsoft Comm Control6.0(Version 1.1)”,最后點(diǎn)擊Install按鈕進(jìn)行安裝。即可將MSComm控件引入到Delphi5.0中。
3.2 通信控件的屬性
下面給出了幾個基本屬性,其它屬性請參閱MSDNLibrary VisualStudio 6.0。
屬性 描述
CommPort 設(shè)置并返回通訊端口號。
Settings 設(shè)置并返回波特率、奇偶校驗(yàn)、數(shù)據(jù)位、停止位。
PortOpen 設(shè)置并返回通訊端口的狀態(tài)。也可以打開和關(guān)閉端口。
Input 從接收緩沖區(qū)返回和刪除字符。
Output 向傳輸緩沖區(qū)寫數(shù)據(jù)。
3.3 通信的實(shí)現(xiàn)
(1)發(fā)送數(shù)據(jù)
要想利用控件發(fā)送數(shù)據(jù)只需調(diào)用其Output屬性向串口中寫入數(shù)據(jù)。例如,
上述代碼將字符串'The Sended String'通過串口1發(fā)送出去。又如,
上述代碼將二進(jìn)制流‘123’通過串口1發(fā)送出去。
(2)接收數(shù)據(jù)
接收數(shù)據(jù)按照接收數(shù)據(jù)的類型分兩種形式,即如上述的字符串和二進(jìn)制流類型。通過改變InputMode屬性來區(qū)分,當(dāng)其值為comInputModeText時表示以文本方式取回數(shù)據(jù);當(dāng)其值為comInputModeBinary時表示以二進(jìn)制方式取回數(shù)據(jù)。
接收數(shù)據(jù)按照接收的方式也分兩種形式。1)事件驅(qū)動的方式:當(dāng)MSComm代表的串口收到Rthreshold個字符時會觸發(fā)OnComm事件。因此只需通過添加OnComm事件代碼來處理所收到的Rthreshold個字符即可實(shí)現(xiàn)。2)查詢方式:以一定的時間間隔循環(huán)檢測接受緩沖區(qū),即通過InBufferCount的值來判斷是否收到指定的字符數(shù)。
3.4 通信協(xié)議的說明
通信協(xié)議采用IEC60870-5-102《電力系統(tǒng)中傳輸電能量配套標(biāo)準(zhǔn)》。目前,各公司開發(fā)的電能量采集裝置已逐步向該規(guī)約靠攏。下面就該規(guī)約的字節(jié)、幀格式進(jìn)行說明。
每個字節(jié)有一個開始位(二進(jìn)制0),八個信息位,一個偶校驗(yàn)位和一個終止位(二進(jìn)制1)。
本規(guī)約采用3種基本的數(shù)據(jù)幀:單字節(jié)的E5H幀,10H開頭的固定長度幀,68H開頭的可變長幀。如下所示:
4 程序?qū)嵗?/p>
本軟件由兩部組成:一部分是主線程,它負(fù)責(zé)處理主窗口的消息,對用戶的輸入進(jìn)行響應(yīng)。另一部分是通信線程,它負(fù)責(zé)與采集器的通信,由主線程控制其產(chǎn)生和終止。運(yùn)行時,主線程根據(jù)數(shù)據(jù)庫中的參數(shù)定時生成抄表任務(wù),產(chǎn)生通信線程,在這種方式下主線程可控制多個通信線程同時運(yùn)行,從而實(shí)現(xiàn)定時對多臺采集器同時抄錄。另外,主線程還進(jìn)行監(jiān)聽服務(wù),網(wǎng)絡(luò)上的其它工作站籍此可通過TCP/IP套接字與其通信,產(chǎn)生通信線程從而實(shí)現(xiàn)隨時抄表。下面給出通信線程的實(shí)現(xiàn)過程。
在Delphi5.0中創(chuàng)建線程只需從Tthread類繼承一個自己的線程類,例如:TMyThread=class(TThread)。然后對該類的Execute方法進(jìn)行重載,通信線程的實(shí)現(xiàn)部分就在該Execute方法中。程序流程圖如圖2所示。
部分代碼如下:
procedure TMy Thread.Execute;
uar
...
5 結(jié)論
本文介紹了在Delphi5.0下利用ActiveX控件進(jìn)行串行通信和使用多線程的方法,并給出了IEC102規(guī)約的解釋。詳細(xì)闡述了前置機(jī)與采集器通信軟件的功能和設(shè)計方法。作為電量計費(fèi)系統(tǒng)中的核心部分,本軟件在湖北襄樊供電局已得到應(yīng)用,實(shí)際運(yùn)行表明,該通信方式簡單、可靠、穩(wěn)定,具有很好的可移植性、實(shí)時性??晒┢渌倪h(yuǎn)程通信系統(tǒng)借鑒參考。
6 參考文獻(xiàn)
1 Marco Cantu.Delphi4從入門到精通.北京:電子工業(yè)出版社,1999
2 謝希仁編.計算機(jī)網(wǎng)絡(luò)(第二版).北京:電子工業(yè)出版社,1999
3 Charles Petzold著.Windows程序設(shè)計(第五版).北京:北京大學(xué)出版社,1999