2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩35頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、<p>  畢 業(yè) 論 文</p><p>  題 目: 電力系統(tǒng)設(shè)計-通訊系統(tǒng)設(shè)計 </p><p>  作 者: 學(xué) 號: </p><p>  系 : </p><p>  專 業(yè):

2、 </p><p>  班 級: </p><p>  指導(dǎo)者: </p><p>  評閱者: </p><p><b>  年 月</b>

3、;</p><p>  畢業(yè)設(shè)計(論文)中文摘要</p><p><b>  目 次</b></p><p><b>  1 引言1</b></p><p>  2 電力系統(tǒng)分析1</p><p><b>  2.1 定義1</b></

4、p><p>  2.2 電力系統(tǒng)圖1</p><p>  2.3 發(fā)展簡況2</p><p><b>  2.4系統(tǒng)構(gòu)成2</b></p><p>  3 電力系統(tǒng)的運行和控制3</p><p>  3.1 電力系統(tǒng)的運行3</p><p>  3.2 電力系統(tǒng)的控

5、制4</p><p>  3.3安全控制按其功能分類5</p><p>  3.4 提高系統(tǒng)穩(wěn)定的基本措施5</p><p>  4 計算機(jī)監(jiān)控系統(tǒng)5</p><p>  4.1 星型網(wǎng)絡(luò)5</p><p>  4.2 擴(kuò)展環(huán)型網(wǎng)絡(luò)6</p><p>  5 Delphi在電力系

6、統(tǒng)中的應(yīng)用6</p><p>  5.1 主控程序(PTX)7</p><p>  5.2 GPRSServer10</p><p>  5.3 ClientIn18</p><p>  5.4 ServerIn18</p><p>  6 ActiveX控件22</p><

7、p>  6.1 COM技術(shù)規(guī)范的發(fā)展史22</p><p>  6.2 Active 舉例23</p><p><b>  結(jié)論31</b></p><p><b>  致謝32</b></p><p><b>  參考文獻(xiàn)33</b></p>

8、<p><b>  1 引言</b></p><p>  隨著經(jīng)濟(jì)的發(fā)展,社會的進(jìn)步,計算機(jī)越來越深入到我們?nèi)粘5墓ぷ鲗W(xué)習(xí)及生活中,成為我們?nèi)粘I钪胁豢扇鄙俚妮o助工具。隨著科學(xué)技術(shù)的不斷提高,計算機(jī)科學(xué)日漸成熟,其強(qiáng)大的功能已為人們深刻認(rèn)識,它已進(jìn)入人類社會的各個領(lǐng)域并發(fā)揮著越來越重要的作用。它已經(jīng)深入到日常工作和生活的方方面面,比如文字處理、信息管理、輔助設(shè)計、圖形圖像處理

9、、教育培訓(xùn)以及游戲娛樂等。各行各業(yè)的人們無須經(jīng)過特別的訓(xùn)練就能夠使用電腦完成許許多多復(fù)雜的工作。然而,雖然現(xiàn)在世界上已經(jīng)充滿了多如牛毛的各種軟件,但它們依然不能滿足用戶的各種特殊需要,人們還不得不開發(fā)適合自己特殊需求的軟件。以前開發(fā)Windows應(yīng)用軟件是專業(yè)人員的工作,需要掌握許多專業(yè)知識和經(jīng)過特殊的培訓(xùn)才能勝任?,F(xiàn)在不同了,即使你沒有接受過嚴(yán)格的程序設(shè)計訓(xùn)練,使用Delphi編程語言也一樣能夠開發(fā)出功能強(qiáng)大、適合自己特殊需求的應(yīng)用程

10、序了。Delphi編程語言繼承了其他語言易學(xué)易用的特點,特別適合于初學(xué)者學(xué)習(xí)Windows系統(tǒng)編程。 </p><p><b>  2 電力系統(tǒng)分析</b></p><p><b>  2.1 定義</b></p><p>  由發(fā)電、變電、輸電、配電和用電等環(huán)節(jié)組成的電能生產(chǎn)、傳輸、分配和消費的系統(tǒng)。由發(fā)電、輸電、變電

11、、配電和用電等環(huán)節(jié)組成的電能生產(chǎn)與消費系統(tǒng)。它的功能是將自然界的一次能源通過發(fā)電動力裝置轉(zhuǎn)化成電能,再經(jīng)輸電、變電和配電將電能供給到各用戶。為實現(xiàn)這一功能,電力系統(tǒng)在各個環(huán)節(jié)和不同層次還具有相應(yīng)的信息與控制系統(tǒng),對電能的生產(chǎn)過程進(jìn)行丈量、調(diào)節(jié)、控制、保護(hù)、通訊和調(diào)度,以保證用戶獲得安全、經(jīng)濟(jì)、優(yōu)質(zhì)的電能。</p><p><b>  2.2 電力系統(tǒng)圖</b></p><

12、p>  由發(fā)電、變電、輸電、配電和用電等環(huán)節(jié)組成的電能生產(chǎn)與消費系統(tǒng)。它的功能是將自然界的一次能源通過發(fā)電動力裝置(主要包括鍋爐、汽輪機(jī)、發(fā)電機(jī)及電廠輔助生產(chǎn)系統(tǒng)等)轉(zhuǎn)化成電能,再經(jīng)輸、變電系統(tǒng)及配電系統(tǒng)將電能供給到各負(fù)荷中心,通過各種設(shè)備再轉(zhuǎn)換成動力、熱、光等不同形式的能量,為地區(qū)經(jīng)濟(jì)和人民生活服務(wù)。由于電源點與負(fù)荷中心多數(shù)處于不同地區(qū),也無法大量儲存,故其生產(chǎn)、輸送、分配和消費都在同一時間內(nèi)完成,并在同一地域內(nèi)有機(jī)地組成一個整

13、體,電能生產(chǎn)必須時刻保持與消費平衡。因此,電能的集中開發(fā)與分散使用,以及電能的連續(xù)供給與負(fù)荷的隨機(jī)變化,就制約了電力系統(tǒng)的結(jié)構(gòu)和運行。據(jù)此,電力系統(tǒng)要實現(xiàn)其功能,就需在各個環(huán)節(jié)和不同層次設(shè)置相應(yīng)的信息與控制系統(tǒng),以便對電能的生產(chǎn)和輸運過程進(jìn)行丈量、調(diào)節(jié)、控制、保護(hù)、通訊和調(diào)度,確保用戶獲得安全、經(jīng)濟(jì)、優(yōu)質(zhì)的電能。建立結(jié)構(gòu)公道的大型電力系統(tǒng)不僅便于電能生產(chǎn)與消費的集中治理、同一調(diào)度和分配,減少總裝機(jī)容量,節(jié)省動力設(shè)施投資,且有利于地區(qū)能源

14、資源的公道開發(fā)利用,更大限度地滿足地區(qū)國民經(jīng)濟(jì)日益增長的用電需要。電力系統(tǒng)建設(shè)往往是國家及地區(qū)國民經(jīng)濟(jì)發(fā)展規(guī)劃的重要組成部分。電力系統(tǒng)</p><p><b>  2.3 發(fā)展簡況</b></p><p>  在電能應(yīng)用的初期,由小容量發(fā)電機(jī)單獨向燈塔、輪船、電力系統(tǒng)。</p><p>  車間等的照明供電系統(tǒng),可看作是簡單的住戶式供電系統(tǒng)。白

15、熾燈發(fā)明后,出現(xiàn)了中心電站式供電系統(tǒng),如1882年T.A.托馬斯·阿爾瓦·愛迪生在紐約主持建造的珍珠街電站。它裝有6臺直流發(fā)電機(jī)(總?cè)萘考s670千瓦),用110伏電壓供1300盞電燈照明。19世紀(jì)90年代,三相交流輸電系統(tǒng)研制成功,并很快取代了直流輸電,成為電力系統(tǒng)大發(fā)展的里程碑。20世紀(jì)以后,人們普遍熟悉到擴(kuò)大電力系統(tǒng)的規(guī)??梢栽谀茉撮_發(fā)、產(chǎn)業(yè)布局、負(fù)荷調(diào)整、系統(tǒng)安全與經(jīng)濟(jì)運行等方面帶來明顯的社會經(jīng)濟(jì)效益。于是,電

16、力系統(tǒng)的規(guī)模迅速增長。世界上覆蓋面積最大的電力系統(tǒng)是前蘇聯(lián)的同一電力系統(tǒng)。它東西橫越7000千米,南北直通3000千米,覆蓋了約1000萬平方千米的土地。中華人民共和國的電力系統(tǒng)從50年代開始迅速發(fā)展。到1991年底,電力系統(tǒng)裝機(jī)容量為14600萬千瓦,年發(fā)電量為6750億千瓦時,均居世界第四位。輸電線路以220千伏、330千伏和500千伏為網(wǎng)絡(luò)骨干,形成4個裝機(jī)容量超過1500萬千瓦的大區(qū)電力系統(tǒng)和9個超過百萬千瓦的省電力系統(tǒng),大區(qū)之

17、間的聯(lián)網(wǎng)工作也已開始。此外,1989年,臺灣省建立了裝機(jī)容量為1659萬千瓦的電力系統(tǒng)</p><p><b>  2.4系統(tǒng)構(gòu)成</b></p><p>  電力系統(tǒng)的主體結(jié)構(gòu)有電源、電力網(wǎng)絡(luò)和負(fù)荷中心。電源指各類發(fā)電廠、站,它將一次能源轉(zhuǎn)換成電能;電力網(wǎng)絡(luò)由電源的升壓變電所、輸電線路、負(fù)荷中心變電所、配電線路等構(gòu)成。它的功能是將電源發(fā)出的電能升壓到一定等級后輸送到

18、負(fù)荷中心變電所,再降壓至一定等級后,經(jīng)配電線路與用戶相聯(lián)。電力系統(tǒng)中網(wǎng)絡(luò)結(jié)點千百個交織密布,有功潮流、無功潮流、高次諧波、負(fù)序電流等以光速在全系統(tǒng)范圍傳播。它既能輸送大量電能,創(chuàng)造巨大財富,也能在瞬間造成重大的災(zāi)難性事故。為保證系統(tǒng)安全、穩(wěn)定、經(jīng)濟(jì)地運行,必須在不同層次上依不同要求配置各類自動控制裝置與通訊系統(tǒng),組成信息與控制子系統(tǒng)。它成為實現(xiàn)電力系統(tǒng)信息傳遞的神經(jīng)網(wǎng)絡(luò),使電力系統(tǒng)具有可觀測性與可控性,從而保證電能生產(chǎn)與消費過程的正常進(jìn)

19、行以及事故狀態(tài)下的緊急處理。</p><p>  3 電力系統(tǒng)的運行和控制</p><p>  3.1 電力系統(tǒng)的運行</p><p>  電力系統(tǒng)的運行狀態(tài)可以分成正常狀態(tài)和異常狀態(tài)兩種。正常狀態(tài)又可分為安全狀態(tài)和警戒狀態(tài);異常狀態(tài)又分成緊急狀態(tài)和恢復(fù)狀態(tài)。電力系統(tǒng)的運行包括了所有這些狀態(tài)及其相互間的轉(zhuǎn)移,如圖所示。 </p><p>&

20、lt;b>  電力系統(tǒng)運行</b></p><p>  安全狀態(tài)  系統(tǒng)的頻率、各節(jié)點的電壓、各元件的負(fù)荷均處于規(guī)定的允許值范圍內(nèi),并且一般的小擾動不致使運行狀態(tài)脫離正常運行狀態(tài)。由于目前電能尚不能大量存貯,任何瞬間必須保證發(fā)電、輸電、用電之間的平衡,而用電負(fù)荷又隨時會發(fā)生變化,所以正常安全狀態(tài)實際上始終處于一個動態(tài)的平衡之中,必須進(jìn)行正常的調(diào)整,包括頻率和電壓,即有功功率和無功功率的調(diào)整。&l

21、t;/p><p>  警戒狀態(tài)  系統(tǒng)整體仍處于安全的范圍內(nèi),但個別元件或地區(qū)的運行參數(shù)已臨近安全范圍的邊緣,擾動將使運行進(jìn)入緊急狀態(tài)。對處于警戒狀態(tài)的電力系統(tǒng)應(yīng)該采取預(yù)防控制,使之進(jìn)入安全狀態(tài)。</p><p>  緊急狀態(tài)  正常運行狀態(tài)的電力系統(tǒng)遭到擾動(包括負(fù)荷的變動和各種故障),電源和負(fù)荷之間的功率平衡遭到破壞而引起系統(tǒng)頻率和節(jié)點電壓超過了允許的偏移值,或元件的負(fù)擔(dān)超過了安全運行的限

22、制值,系統(tǒng)處于危機(jī)中。對處于緊急狀態(tài)下的電力系統(tǒng),應(yīng)該采取各種校正控制和穩(wěn)定控制措施,使系統(tǒng)盡可能回復(fù)到正常狀態(tài)。近來有人把緊急狀態(tài)進(jìn)一步分為耐受性危機(jī)(它允許持續(xù)幾秒到幾十分鐘)和穩(wěn)定性危機(jī)(它允許持續(xù)時間一般不超過10秒鐘)。這種細(xì)分有利于針對不同的危機(jī)采取不同的控制措施。</p><p>  恢復(fù)狀態(tài)  這時電力系統(tǒng)已被解列成若干個局部系統(tǒng),其中有些系統(tǒng)已經(jīng)不能保證正常地向用戶供電,但其他部分可以維持正常狀

23、態(tài);或者系統(tǒng)未被解列,但已不能滿足向所有的用戶正常供電,已有部分負(fù)荷被切除。當(dāng)處于緊急狀態(tài)下的電力系統(tǒng)不能通過校正和穩(wěn)定控制回復(fù)到正常狀態(tài)時,應(yīng)按對用戶影響最小的原則采取緊急控制措施,使之進(jìn)入恢復(fù)狀態(tài)。然后根據(jù)情況采取恢復(fù)控制措施,使系統(tǒng)回復(fù)到正常運行狀態(tài)。</p><p>  安全控制  預(yù)防性控制、校正控制、穩(wěn)定控制、緊急控制和恢復(fù)控制都以提高電力系統(tǒng)安全性為目標(biāo),所以統(tǒng)一稱為安全控制。</p>

24、<p>  由于供電中斷和電能質(zhì)量的低劣會給國民經(jīng)濟(jì)和人民生活帶來嚴(yán)重影響,所以電力系統(tǒng)的運行必須安全可靠、保證電能質(zhì)量和求取最大的經(jīng)濟(jì)性。</p><p>  為了提高電力系統(tǒng)的安全可靠性,要求系統(tǒng)有一定的備用容量以滿足負(fù)荷變動和事故的需要;要求合理配置無功功率電源;要求設(shè)備處于健康的狀態(tài),系統(tǒng)具有一定的穩(wěn)定性儲備,并配備各種必要的安全措施和裝置。 </p><p>  交流

25、電力系統(tǒng)的頻率、電流和電壓的正弦波形,以及各節(jié)點的電壓幅值是電能質(zhì)量的 3個基本指標(biāo)。為了保證電能質(zhì)量,必須采取電壓調(diào)整、頻率調(diào)整和抑制諧波的措施。</p><p>  電力系統(tǒng)調(diào)度  電力系統(tǒng)在保證安全可靠和電能質(zhì)量的前提下,還應(yīng)力求調(diào)整負(fù)荷,提高設(shè)備利用率,合理利用各種能源資源,實施經(jīng)濟(jì)運行,降低煤耗、廠用電和網(wǎng)絡(luò)損耗,以取得最大的經(jīng)濟(jì)效益。</p><p>  由于電力系統(tǒng)本身的特點

26、:集中的發(fā)電和分散的用電,電力系統(tǒng)分布于廣闊的地域而發(fā)、送、用之間的功率又要求嚴(yán)格的瞬時平衡,因而電力系統(tǒng)的運行需要統(tǒng)一而分級、分層的調(diào)度管理,需要一個和電能傳輸、分配系統(tǒng)相平行的信息采集、傳輸和處理的通信系統(tǒng),以實現(xiàn)正常的調(diào)整和各種安全、經(jīng)濟(jì)的控制。</p><p>  3.2 電力系統(tǒng)的控制</p><p>  電力系統(tǒng)安全控制的目的是采取各種措施使系統(tǒng)盡可能運行在正常運行狀態(tài)。在正常

27、運行 狀態(tài)下,調(diào)度人員通過制定運行計劃和運用計算機(jī)監(jiān)控系統(tǒng)(SCADA或EMs)實時進(jìn)行電力系統(tǒng)運行信息的收集和處理,在線安全監(jiān)視和安全分析等,使系統(tǒng)處于最優(yōu)的正常運行狀態(tài)。</p><p>  同時。在正常運行時,確定各項預(yù)防性控制,以對可能出現(xiàn)的緊急狀態(tài)提高處理能力。這些控制內(nèi)容包括:系統(tǒng)以額定工況運行調(diào)整發(fā)電機(jī)出力、切換網(wǎng)絡(luò)和負(fù)荷、調(diào)整潮流、改變保護(hù)整定值、切換變壓器分接頭等,使系統(tǒng)運行在最佳狀態(tài)。在系統(tǒng)發(fā)

28、生事故時有較高的安全水平當(dāng)電力系統(tǒng)一旦出現(xiàn)故障進(jìn)入緊急狀態(tài)后,則靠緊急控制來處理。這些控制措施包括繼電保護(hù)裝置正確快速動作和各種穩(wěn)定控制裝置等切除故障,防止事故擴(kuò)大,平衡有功和無功,將系統(tǒng)恢復(fù)到正常運行狀態(tài)或重新進(jìn)入正常運行狀態(tài)?!?lt;/p><p>  3.3安全控制按其功能分類 </p><p>  1、提高系統(tǒng)穩(wěn)定的措施有快速勵磁、電力系統(tǒng)穩(wěn)定器(ess)、電氣制動、快關(guān)汽機(jī)和切機(jī)、串

29、聯(lián)補償、靜止無功:ff ̄Osvq、超導(dǎo)電磁蓄能和直流 調(diào)制等?!?lt;/p><p>  2、維持系統(tǒng)頻率的措施有低頻減負(fù)荷、低頻降電壓、低頻自起動、抽水蓄能機(jī)組抵頻抽水改發(fā)電、低頻發(fā)電機(jī)解列、高頻切機(jī)、高頻減出力等。 </p><p>  3、預(yù)防線路過負(fù)荷的措施有過負(fù)荷切電源、過負(fù)荷切負(fù)荷等。 </p><p>  3.4 提高系統(tǒng)穩(wěn)定的基本措施 </p>

30、;<p>  1、加強(qiáng)電網(wǎng)網(wǎng)架,提高系統(tǒng)穩(wěn)定。線路輸送功率能力與線路兩端電壓之積成正比,而與線路阻抗成反比。減少線路電抗和維持電壓,可提高系統(tǒng)穩(wěn)定性。在線路上裝設(shè)串聯(lián)電容是一種有效的減少線路阻抗的方法。在長線路中間裝設(shè)靜止無功補償裝置 ̄svq。能有效地保持線路中間電壓水平(相當(dāng)于長線路變成兩段短線路),并快速調(diào)整系統(tǒng)無功。是提高系統(tǒng)穩(wěn)定性的重要手段?!?lt;/p><p>  2、電力系統(tǒng)穩(wěn)定控制和保護(hù)

31、裝置。提高電力系統(tǒng)穩(wěn)定性的控制可包括兩個方面:一是失去穩(wěn)定前,采取措施提高系統(tǒng)的穩(wěn)定性;二是失去穩(wěn)定后,采取措施重新恢復(fù)新的穩(wěn)定運行。</p><p>  所謂穩(wěn)定,是指電力系統(tǒng)可以連續(xù)不斷的向負(fù)荷供電的狀態(tài)。電力系統(tǒng)繼電保護(hù)的充足性、安全性、經(jīng)濟(jì)性和質(zhì)量是電力工業(yè)生產(chǎn)穩(wěn)定必須滿足的幾項基本要求。</p><p>  4 計算機(jī)監(jiān)控系統(tǒng)</p><p>  對于應(yīng)

32、用較為廣泛的星型和環(huán)型網(wǎng)絡(luò)進(jìn)行詳細(xì)分析并進(jìn)行擴(kuò)展,同時結(jié)合有、無主結(jié)構(gòu)分析其應(yīng)用性質(zhì).</p><p><b>  4.1 星型網(wǎng)絡(luò)</b></p><p>  由星形網(wǎng)絡(luò)組成的監(jiān)控系統(tǒng),各網(wǎng)絡(luò)節(jié)點通過中心交換機(jī)連接,同時考慮到冗余需要,利用另外一臺交換機(jī)組成雙網(wǎng)絡(luò),網(wǎng)絡(luò)工作原理如下:</p><p>  有主結(jié)構(gòu):現(xiàn)地控制單元有兩塊CPU模件

33、,實現(xiàn)該單元節(jié)點處的故障冗余,為主的CPU板實時采集各種信號,并針對故障信號采取相應(yīng)處理,同時將采集的信號量數(shù)字化,再傳送給主站;主站負(fù)責(zé)數(shù)據(jù)的接收,同時向操作員站送實時數(shù)據(jù),并將操作員站的命令下達(dá).</p><p>  無主結(jié)構(gòu):現(xiàn)地控制單元實時采集各種信號并針對故障信號采取相應(yīng)處理,主站作為數(shù)據(jù)服務(wù)器,定時向各現(xiàn)地控制單元節(jié)點要數(shù)據(jù)并記錄,操作員站通過交換機(jī)直接與現(xiàn)地控制單元通訊,傳送數(shù)據(jù)與命令.</p

34、><p>  星形網(wǎng)絡(luò)的優(yōu)點是結(jié)構(gòu)相對簡單,由于普遍通訊協(xié)議為TCP/IP,開發(fā)額外的系統(tǒng)應(yīng)用程序比較簡單,缺點是系統(tǒng)安全性能不高,若交換機(jī)壞,則網(wǎng)絡(luò)就面臨崩潰,對主站依賴性強(qiáng).此種網(wǎng)絡(luò)結(jié)構(gòu)在一些系統(tǒng)升級改造的電站應(yīng)用較多.</p><p>  4.2 擴(kuò)展環(huán)型網(wǎng)絡(luò)</p><p>  擴(kuò)展環(huán)型網(wǎng)絡(luò)是在環(huán)型網(wǎng)絡(luò)的基礎(chǔ)上,加上各其他功能節(jié)點,或通過轉(zhuǎn)換與其他應(yīng)用網(wǎng)絡(luò)連接,

35、而現(xiàn)地計算機(jī)控制依舊處于環(huán)型網(wǎng)絡(luò)上.</p><p>  由擴(kuò)展環(huán)型網(wǎng)絡(luò)組成的監(jiān)控系統(tǒng),各網(wǎng)絡(luò)節(jié)點通過環(huán)型鏈路交換數(shù)據(jù),利用兩條環(huán)鏈構(gòu)成冗余,除現(xiàn)地單元、操作員站外的其他應(yīng)用計算機(jī)屬于另一個TCP/IP網(wǎng),主站與應(yīng)用程序這些功能計算機(jī)通過協(xié)議轉(zhuǎn)換連接到兩個網(wǎng)絡(luò)中.網(wǎng)絡(luò)工作原理如下:</p><p>  此種網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)較適合于無主結(jié)構(gòu),若應(yīng)用為有主結(jié)構(gòu),TCP/IP網(wǎng)段的信息交換將由于主站

36、性能限制而受到遲滯,對應(yīng)用快速性不利.</p><p>  在無主結(jié)構(gòu)模式下,現(xiàn)地控制單元實時采集各種信號并針對故障信號采取相應(yīng)處理,主站作為數(shù)據(jù)服務(wù)器,記錄各現(xiàn)地控制單元節(jié)點數(shù)據(jù),操作員站在環(huán)網(wǎng)上直接與現(xiàn)地控制單元通訊,傳送數(shù)據(jù)與命令.在環(huán)網(wǎng)之外的TCP/IP網(wǎng)絡(luò)通過與主站、應(yīng)用程序工作站通訊,取得各種信息并可發(fā)送命令.</p><p>  擴(kuò)展環(huán)型網(wǎng)絡(luò)的優(yōu)點是在結(jié)構(gòu)上,分層應(yīng)用明顯,各

37、節(jié)點功能清楚,系統(tǒng)安全性能高,兩個不同協(xié)議網(wǎng)段間的故障互相沒有影響,網(wǎng)絡(luò)穩(wěn)定性好.缺點結(jié)構(gòu)相對復(fù)雜,網(wǎng)絡(luò)投入較大,開發(fā)應(yīng)用程序時,需考慮到兩個網(wǎng)段的不同協(xié)議.目前國內(nèi)某在建大型水電站的計算機(jī)監(jiān)控系統(tǒng)采用的就是這種結(jié)構(gòu).</p><p>  5 Delphi在電力系統(tǒng)中的應(yīng)用</p><p>  這里主要講Delphi在這個工程里作為中間層起到的作用</p><p>

38、;  1.調(diào)用下層api函數(shù)。</p><p>  2.負(fù)責(zé)通訊(上位機(jī)和下位機(jī))。</p><p>  3.負(fù)責(zé)對下位機(jī)傳上來的數(shù)據(jù)進(jìn)行解碼,容錯和控制。</p><p>  4.負(fù)責(zé)對上位機(jī)下發(fā)的數(shù)據(jù)進(jìn)行解碼,容錯和控制。</p><p>  由于考慮到程序整體的穩(wěn)定性大致按功能分為:</p><p>  主控程序

39、(PTX):主要作用是控制這4個模塊的穩(wěn)定性。比如這4個模塊中任何一個崩潰了,需要自動重啟之。</p><p>  無線電接口程序(Server):主要作用和無線電發(fā)射機(jī)進(jìn)行交互,因為整 個工程是無線電和GPRS并用的。</p><p>  GPRS接口程序(GPRSServer):主要作用和GPRS硬件模塊進(jìn)行交互。</p><p>  ActiveX接口程

40、序(ServerIn):主要作用是和網(wǎng)頁中的ActiveX插件進(jìn) 行交互。</p><p>  Java后臺接口程序(ClientIn):主要作用是和Java后臺進(jìn)行交互,當(dāng)然 java用的是jsp平臺。</p><p>  5.1 主控程序(PTX)   </p><p>  這里用到了一個定時器Timer1,它的作用是每隔1s作一次

41、循環(huán)檢測,檢測上面4個模塊是否死機(jī)了,如果死機(jī)就把相應(yīng)的模塊啟動起來</p><p>  procedure TFormTX.Timer1Timer(Sender: TObject);</p><p><b>  var</b></p><p>  dwExitCode:Dword;</p><p>  fprocess

42、Exit:boolean;</p><p><b>  begin</b></p><p>  dwExitCode:=0;</p><p>  fprocessExit:=GetExitCodeProcess(PProcInfo_SERVER.hProcess,dwExitCode);</p><p>  if (f

43、processExit and (dwExitCode<>STILL_ACTIVE)) then //判斷相應(yīng)模塊是否退出了或者是狀態(tài)不為激活狀態(tài)了</p><p><b>  begin</b></p><p>  memo1.Lines.Add('Sever 進(jìn)程終止!');</p><p>  CloseHan

44、dle(PProcInfo_SERVER.hThread);//殺線程</p><p>  CloseHandle(PProcInfo_SERVER.hProcess);//殺進(jìn)程</p><p>  ProccessSuccessful_SERVER;//重啟相應(yīng)的模塊</p><p>  memo1.Lines.Add('Sever 進(jìn)程啟動!'

45、);</p><p><b>  end;</b></p><p>  dwExitCode:=0;</p><p>  fprocessExit:=GetExitCodeProcess(PProcInfo_ServerIn.hProcess,dwExitCode);</p><p>  if (fprocessExi

46、t and (dwExitCode<>STILL_ACTIVE)) then</p><p><b>  begin</b></p><p>  memo1.Lines.Add('ServerIn 進(jìn)程終止!');</p><p>  CloseHandle(PProcInfo_ServerIn.hThread);&

47、lt;/p><p>  CloseHandle(PProcInfo_ServerIn.hProcess);</p><p>  ProccessSuccessful_ServerIn;</p><p>  memo1.Lines.Add('ServerIn 進(jìn)程啟動!');</p><p><b>  end;</

48、b></p><p>  dwExitCode:=0;</p><p>  fprocessExit:=GetExitCodeProcess(PProcInfo_ClientIn.hProcess,dwExitCode);</p><p>  if (fprocessExit and (dwExitCode<>STILL_ACTIVE)) the

49、n</p><p><b>  begin</b></p><p>  memo1.Lines.Add('ClientIn 進(jìn)程終止!');</p><p>  CloseHandle(PProcInfo_ClientIn.hThread);</p><p>  CloseHandle(PProcInfo

50、_ClientIn.hProcess);</p><p>  ProccessSuccessful_ClientIn;</p><p>  memo1.Lines.Add('ClientIn 進(jìn)程啟動!');</p><p><b>  end;</b></p><p>  dwExitCode:=0;&

51、lt;/p><p>  fprocessExit:=GetExitCodeProcess(PProcInfo_GPRSSERVER.hProcess,dwExitCode);</p><p>  if (fprocessExit and (dwExitCode<>STILL_ACTIVE)) then</p><p><b>  begin<

52、;/b></p><p>  memo1.Lines.Add('GPRSSERVER 進(jìn)程終止!');</p><p>  CloseHandle(PProcInfo_GPRSSERVER.hThread);</p><p>  CloseHandle(PProcInfo_GPRSSERVER.hProcess);</p><

53、;p>  ProccessSuccessful_GPRSSERVER;</p><p>  memo1.Lines.Add('GPRSSERVER 進(jìn)程啟動!');</p><p><b>  end;</b></p><p><b>  end;</b></p><p>  

54、上面的代碼中分為4個if 語句,每個if中有像ProccessSuccessful_SERVER,ProccessSuccessful_ServerIn,ProccessSuccessful_ClientIn,ProccessSuccessful_GPRSSERVER的函數(shù)</p><p>  我們看看其中一個的定義(其他三個函數(shù)意思基本一樣):</p><p>  procedure T

55、FormTX.ProccessSuccessful_SERVER;</p><p><b>  var</b></p><p>  bSuccess:boolean;</p><p><b>  begin</b></p><p>  if findwindow('TFormServer&#

56、39;,nil)=0 then</p><p><b>  begin</b></p><p>  ZeroMemory(@sStartInfo_SERVER,sizeof(sStartInfo_SERVER)); //zero memory</p><p>  //設(shè)置必要的進(jìn)程參數(shù)</p><p>  sStartI

57、nfo_SERVER.cb:=sizeof(sStartInfo_SERVER);</p><p>  seProcess_SERVER.nLength:=sizeof(seProcess_SERVER);</p><p>  seProcess_SERVER.lpSecurityDescriptor:=Pchar(nil);</p><p>  seProcess

58、_SERVER.bInheritHandle:=true;</p><p>  seThread_SERVER.nLength:=sizeof(seThread_SERVER);</p><p>  seThread_SERVER.lpSecurityDescriptor:=Pchar(nil);</p><p>  seThread_SERVER.bInherit

59、Handle:=true;</p><p><b>  //創(chuàng)建進(jìn)程</b></p><p>  bSuccess:=CreateProcess(Pchar(nil),Pchar(ExtractFilePath(Paramstr(0))+'Server'),@seProcess_SERVER,@seThread_SERVER,</p>&

60、lt;p>  false,CREATE_DEFAULT_ERROR_MODE,pchar(nil),pchar(nil),sStartInfo_SERVER,PProcInfo_SERVER);</p><p>  if (not bSuccess)then</p><p>  Memo1.Lines.Add('Server 服務(wù)器創(chuàng)建失敗!')</p>

61、<p><b>  else</b></p><p>  Memo1.Lines.Add('Server 服務(wù)器創(chuàng)建成功!');</p><p><b>  end;</b></p><p><b>  end;</b></p><p>  這個函數(shù)

62、是用來重啟相應(yīng)的4個模塊中的一個的,當(dāng)然最后一個步驟是當(dāng)PTX結(jié)束時要把4個模塊全部殺死。</p><p>  procedure TFormTX.FormClose(Sender: TObject; var Action: TCloseAction);</p><p><b>  begin</b></p><p>  Timer1.Enab

63、led:=false;</p><p>  TerminateProcess(PProcInfo_SERVER.hProcess,10);</p><p>  PProcInfo_SERVER.hProcess:=0;</p><p>  TerminateProcess(PProcInfo_GPRSSERVER.hProcess,10);</p>&

64、lt;p>  PProcInfo_SERVER.hProcess:=0;</p><p>  TerminateProcess(PProcInfo_ServerIn.hProcess,10);</p><p>  PProcInfo_ServerIn.hProcess:=0;</p><p>  TerminateProcess(PProcInfo_Clien

65、tIn.hProcess,10);</p><p>  PProcInfo_ClientIn.hProcess:=0;</p><p>  TerminateProcess(PProcInfo_DelayTime.hProcess,10);</p><p>  PProcInfo_DelayTime.hProcess:=0;</p><p>

66、<b>  end;</b></p><p>  5.2 GPRSServer</p><p>  為什么叫GPRSServer是因為這個模塊是和下層GPRS硬件模塊通訊所用。</p><p>  在這個模塊中我們將和GPRS通訊的所有細(xì)節(jié)全部封裝到wcomm_dll.dll動態(tài)連接庫中。</p><p>  這個動態(tài)

67、鏈接庫負(fù)責(zé)和下層具體通訊,包括UDP包的封裝,下層通訊隊列的維護(hù)和一些擴(kuò)展功能等等。</p><p><b>  具體代碼如下:</b></p><p>  unit Unit_dll;</p><p><b>  interface</b></p><p><b>  uses</

68、b></p><p>  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,</p><p>  Dialogs, Menus, ComCtrls, ToolWin, StdCtrls, ImgList, ExtCtrls, NMUDP,winsock;</p><p>  cons

69、t MAX_RECEIVE_BUF=1024; //最大接收緩沖區(qū)</p><p>  const MAX_SEND_BUF=1024; //最大發(fā)送緩沖區(qū)</p><p>  const gprs_dll='wcomm_dll.dll';</p><p>  const gprs_smm='gprs_smm.dll';&

70、lt;/p><p>  const misc='misc.dll';</p><p><b>  type</b></p><p>  // 用戶注冊信息結(jié)構(gòu)</p><p>  gprs_user_info=record</p><p>  m_userid:array[1..12

71、] of char; //終端模塊號碼</p><p>  m_sin_addr:Cardinal; //終端模塊進(jìn)入Internet的代理主機(jī)IP地址</p><p>  m_sin_port:word; //終端模塊進(jìn)入Internet的代理主機(jī)IP端口</p><p>  m_local_addr:Card

72、inal; //終端模塊在移動網(wǎng)內(nèi)IP地址</p><p>  m_local_port:word; //終端模塊在移動網(wǎng)內(nèi)IP端口</p><p>  m_logon_date:array[1..20] of char; //終端模塊登錄時間</p><p>  m_update_time:array[1..20]

73、of char; //終端模塊更新信息時間</p><p>  m_status:byte; //終端模塊狀態(tài), 1 在線 0 不在線</p><p>  //m_pid:array[1..12] of char;</p><p><b>  end;</b></p><p><b&g

74、t;  type</b></p><p><b>  //用戶數(shù)據(jù)結(jié)構(gòu)</b></p><p>  data_record=record</p><p>  m_userid:array[1..12] of char;</p><p>  m_recv_date:array[1..20] of char;&l

75、t;/p><p>  m_data_buf:array[1..MAX_RECEIVE_BUF] of char;</p><p>  m_data_len:word;</p><p>  m_data_type:byte;</p><p><b>  end;</b></p><p><b>

76、;  type</b></p><p>  Arr12 = array[1..12] of Char;</p><p>  Arr16 = array[1..16] of Char;</p><p>  Arr256 = array[1..256] of Char;</p><p>  Arr512 = ar

77、ray[1..512] of Char;</p><p>  Arr1024 = array[1..1024] of Char;</p><p>  //下面定義的時函數(shù)類型,用于指向動態(tài)庫中的函數(shù)</p><p>  function start_gprs_server(a:HWND;b:Cardinal;c:Integer;d:PChar):Integer;s

78、tdcall;</p><p>  function start_net_service(a:HWND;b:Cardinal;c:Integer;d:PChar):Integer;stdcall;</p><p>  function do_read_proc(var a:data_record;b:PChar;c:boolean):Integer;stdcall;</p>

79、<p>  procedure cancel_read_block();stdcall;</p><p>  function stop_gprs_server(a:PChar):Integer;stdcall;</p><p>  function stop_net_service(a:PChar):Integer;stdcall;</p><p>  

80、function do_close_all_user(a:PChar):Integer;stdcall;</p><p>  function do_send_user_data(a:PChar;b:PChar;c:Cardinal;d:PChar):Integer;stdcall;</p><p>  function get_user_at(a:Cardinal;var b:gprs_

81、user_info):Integer;stdcall;</p><p>  function get_max_user_amount:Cardinal;stdcall;</p><p>  function do_close_one_user(a:PChar;b:PChar):Integer;stdcall;</p><p>  function SetWorkMo

82、de(nWorkMode: integer): integer; stdcall;</p><p>  function KillProcess(a:PChar):Integer;stdcall;</p><p>  function DisConnectRas(a:PChar):Integer;stdcall;</p><p>  function GetConn

83、EntryName(a:PChar):Integer;stdcall;</p><p>  //The Following function is SMM</p><p>  //int SMMInit(char *,int,char *,DCB *,char *,char *,int);</p><p>  function SMMInit(var a:Arr1

84、6;b:Integer;var c:Arr16;var d:DCB;var e:Arr12;var f:Arr12;g:Integer):Integer;stdcall;</p><p>  function SMMFree:Integer;stdcall;</p><p>  function SMMSetting(var a:Arr12;b:Integer):Integer;stdca

85、ll;</p><p>  function MakeDTUOnLine(a:Integer;var b:Arr12):Integer;stdcall;</p><p>  function SendDataToDTUBySM(var a:Arr12;var b:Arr256;c:Integer;d:Integer):Integer;stdcall;</p><p>

86、;  implementation</p><p>  //gprs_dll</p><p>  function start_gprs_server; external gprs_dll name 'start_gprs_server';</p><p>  function start_net_service; external gprs_dll

87、 name 'start_net_service';</p><p>  function do_read_proc; external gprs_dll name 'do_read_proc';</p><p>  procedure cancel_read_block; external gprs_dll name 'cancel_read_bl

88、ock';</p><p>  function stop_gprs_server; external gprs_dll name 'stop_gprs_server';</p><p>  function stop_net_service; external gprs_dll name 'stop_net_service';</p>

89、<p>  function do_close_all_user;external gprs_dll name 'do_close_all_user';</p><p>  function do_send_user_data;external gprs_dll name 'do_send_user_data';</p><p>  functi

90、on get_user_at;external gprs_dll name 'get_user_at';</p><p>  function get_max_user_amount;external gprs_dll name 'get_max_user_amount';</p><p>  function do_close_one_user;exter

91、nal gprs_dll name 'do_close_one_user';</p><p>  function SetWorkMode;external gprs_dll name 'SetWorkMode';</p><p>  //gprs_smm</p><p>  function SMMInit;external gpr

92、s_smm name 'SMMInit';</p><p>  function SMMFree;external gprs_smm name 'SMMFree';</p><p>  function SMMSetting;external gprs_smm name 'SMMSetting';</p><p>  

93、function MakeDTUOnLine;external gprs_smm name 'MakeDTUOnLine';</p><p>  function SendDataToDTUBySM;external gprs_smm name 'SendDataToDTUBySM';</p><p>  function KillProcess;exter

94、nal misc name 'KillProcess';</p><p>  function DisConnectRas;external misc name 'DisConnectRas';</p><p>  function GetConnEntryName;external misc name 'GetConnEntryName';

95、</p><p><b>  end.</b></p><p>  其他所用的一些動態(tài)鏈接庫我們在這個項目中用不到。。調(diào)用動態(tài)鏈接庫有兩種方法,靜態(tài)調(diào)用和動態(tài)調(diào)用,以上就是靜態(tài)調(diào)用的方法。通過封裝調(diào)用我們在以后的開發(fā)中就可以直接用這些函數(shù)了。</p><p>  當(dāng)下層硬件發(fā)送數(shù)據(jù)給我們的模塊時,我們會用消息機(jī)制來處理。</p>

96、<p>  處理過程為:下層數(shù)據(jù)通過UDP數(shù)據(jù)包發(fā)送到wcomm_dll.dll,wcomm_dll.dll就會去解析UDP數(shù)據(jù)包,并且要維護(hù)一下數(shù)據(jù)列表。最后向外廣播約定好的windows消息,告訴外層程序數(shù)據(jù)已經(jīng)接收到了。</p><p>  當(dāng)然這個外層程序(GPRSServer模塊)收到了這個特定的windows消息之后,就會通過do_read_proc函數(shù)來讀取數(shù)據(jù),do_read_proc已

97、經(jīng)在wcomm_dll.dll中定義了。</p><p>  而GPRSServer處理Windows消息:</p><p>  procedure ProcessMessage(var Msg:TMessage);message GPRSRECVMESS;</p><p>  這個是消息的定義,再來看看這個消息處理函數(shù)具體做了什么工作:</p>&l

98、t;p>  procedure TFormGPRSServer.ProcessMessage(var Msg:TMessage);</p><p>  var dr:data_record;</p><p><b>  p:PChar;</b></p><p>  bAnswer:Boolean;</p><p>

99、<b>  begin</b></p><p><b>  try</b></p><p>  GetMem(p,1024);</p><p>  if ckAnswer.Checked then</p><p>  bAnswer:=true</p><p><b&g

100、t;  else</b></p><p>  bAnswer:=false;</p><p>  if (do_read_proc(dr,p,bAnswer)>=0) then</p><p><b>  begin</b></p><p>  if dr.m_data_len=0 then</p

101、><p>  PollUserTable</p><p><b>  else</b></p><p>  ProcessData(dr);</p><p><b>  end;</b></p><p><b>  finally</b></p>

102、<p>  FreeMem(p);</p><p><b>  end;</b></p><p><b>  end;</b></p><p>  在以上的這個函數(shù)中我們比較關(guān)心的是ProcessData()這個函數(shù),其他函數(shù)都是一些修飾和保護(hù)等等。</p><p>  來看看Proc

103、essData()這個函數(shù)的實現(xiàn):</p><p>  procedure TFormGPRSServer.ProcessData(dr:data_record);</p><p>  var i,j:Integer;</p><p>  str,S:String;</p><p><b>  re:Pchar;</b>

104、</p><p>  reLong,ReLongTemp:integer;</p><p><b>  label H1;</b></p><p><b>  begin</b></p><p>  str:=dr.m_userid+'---'+dr.m_recv_date+'

105、;---'+IntToStr(dr.m_data_len);</p><p>  for i:=1 to Length(str) do</p><p>  if str[i]=#0 then</p><p>  str[i]:=' ';</p><p>  mmDataWnd.Lines.Add(str);</p

106、><p>  mmDataWnd.Lines.Add('下位機(jī)-->通訊服務(wù)器:'+dr.m_data_buf);</p><p>  /////////////////////////////////</p><p><b>  try</b></p><p><b>  re:=nil;&

107、lt;/b></p><p>  ReLongTemp:=0;</p><p>  if dr.m_data_len>G_cachLeng then //對緩沖區(qū)進(jìn)行保護(hù)</p><p><b>  begin</b></p><p>  fillmemory(@G_cach,G_cachLeng,$FF);

108、</p><p>  mmDataWnd.Lines.Add('緩沖區(qū)溢出!');</p><p><b>  goto H1;</b></p><p><b>  end;</b></p><p>  re:=@dr.m_data_buf;</p><p>

109、  reLong:=dr.m_data_len;</p><p><b>  s:='';</b></p><p>  for j:=0 to reLong-1 do</p><p><b>  begin</b></p><p>  S:=S+inttohex(ord((re+j)

110、^),2)+' ';</p><p><b>  end;</b></p><p>  mmDataWnd.Lines.Add('下位機(jī)-->通訊服務(wù)器:'+S+#13+#10);</p><p>  if G_cachPose>=G_cachleng-1 then</p><p&

111、gt;  G_cachPose:=0;</p><p>  if reLong>(G_cachleng-G_cachPose)then</p><p>  G_cachPose:=0;</p><p>  move(re^,G_cach[G_cachPose],reLong);</p><p>  G_cachPose:=G_cach

112、Pose+reLong;</p><p>  G_reLong:=reLong;</p><p><b>  Doit;</b></p><p><b>  H1:</b></p><p><b>  except</b></p><p>  on EA

113、ccessViolation do</p><p><b>  exit;</b></p><p><b>  end;</b></p><p><b>  end;</b></p><p>  ProcessData()這個函數(shù)其實主要功能就像一個漏斗,將不斷接收到的數(shù)據(jù)流存

114、入一個叫G_cach的緩存中以供后續(xù)操作。這步很必要,因為作為UDP數(shù)據(jù)包來說不能保證一連串的數(shù)據(jù)的完整性,而且在無限傳輸過程中這種不穩(wěn)定性尤其突出,我們可以用無線電傳輸字節(jié)流來試試,看整個數(shù)據(jù)的真確率能不能達(dá)到70%,而當(dāng)緩存好了之后我們要做的事就是Doit這個函數(shù)。</p><p>  看看Doit是如何實現(xiàn)的:</p><p>  procedure TFormGPRSServer.

115、Doit;</p><p><b>  var</b></p><p>  i,DDL:integer;</p><p><b>  label H1;</b></p><p><b>  begin</b></p><p><b>  try

116、</b></p><p><b>  i:=0;</b></p><p>  while i<G_cachLeng-1 do</p><p><b>  begin</b></p><p>  if (ord(G_cach[i])=$10)and(ord(G_cach[i+4])=

117、$16) then</p><p><b>  begin</b></p><p>  CutReceiveData(@G_cach,G_cachPose);</p><p>  fillmemory(@G_cach[i],G_cachPose,$FF);</p><p>  G_cachPose:=0;</p&g

118、t;<p><b>  i:=i+4;</b></p><p><b>  goto H1;</b></p><p><b>  end else</b></p><p>  if (ord(G_cach[i])=$68)and (ord(G_cach[i+3])=$68)and((or

119、d(G_cach[i+ord(G_cach[i+1])+5])=$16)or(ord(G_cach[i+ord(G_cach[i+1])+5])=0) )then</p><p><b>  begin</b></p><p>  CutReceiveData(@G_cach,G_cachPose);</p><p>  fillmemory(

120、@G_cach[i],G_cachPose,$FF);</p><p>  DDL:= ord(G_cach[i+1]);</p><p>  i:=i+DDL+5;</p><p>  G_cachPose:=0;</p><p><b>  goto H1;</b></p><p><b

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論