版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、用C#構(gòu)建的電氣控制仿真控件庫朱菊香,史東麗,丁金根(常州鐵道高等職業(yè)技術(shù)學(xué)校電氣工程系江蘇常州213011)摘 要:用C#語言來實現(xiàn)一組Windows控件庫??丶彀艘恍┏S玫碾姎庠O(shè)備, 如開關(guān)、繼電器、接觸器以及三相異步電動機(jī)等電氣設(shè)備。這些控件與普通的Windows控件 一樣,可在父窗體上任意拖放,調(diào)整屬性,控件呈現(xiàn)的外觀與電氣控制原理圖一致,并能通 過編程來模擬運行,實現(xiàn)了動態(tài)圖紙的功能。關(guān)鍵詞:C#; .net Framework;自定義控件;仿真;動態(tài)圖紙1引言我們在從事與電氣控制相關(guān)的教學(xué)過程中發(fā)現(xiàn),學(xué)生即使花很長的時間也未 必能讀懂一個電氣控制系統(tǒng)的原理圖。究其原因是普通的
2、原理圖不夠形象,不能 動態(tài)地顯示出每一時刻系統(tǒng)的狀態(tài),從而增加了學(xué)生理解的難度。因此,用微軟 公司的Visual C#制作了一個電氣控制系統(tǒng)的仿真控件庫,利用這個控件庫可方 便地制作出能實時仿真的動態(tài)原理圖。選用C#是因為它簡單、功能強(qiáng)大、類型安全,而且是面向?qū)ο蟮模珻#憑借 它的許多創(chuàng)新,在保持C+表示形式的同時,實現(xiàn)了應(yīng)用程序的快速開發(fā)。用C# 創(chuàng)建自己的控件要比其它高級語言更方便快捷,并可應(yīng)用于任何一種支持.net 的語言(目前Basic、C+、Delphi等均已支持.net)。2仿真控件庫的總體設(shè)計思想電氣控制仿真庫就是一組基于.net的Windows控件,它將電氣控制系統(tǒng)中 常用的接
3、觸器、繼電器、按鈕、開關(guān)、電動機(jī)等元件的圖形符號及其基本功能封 裝在Windows控件中,在父窗體上放置控件就像在圖紙上畫出元件圖形符號一 樣。運行時用鼠標(biāo)點擊窗體上按鈕或開關(guān)的圖標(biāo)來模擬按動動作,就像操作實際 器件一樣,其余元件通過其編程接口來改變行為,根據(jù)相互間的邏輯關(guān)系作出準(zhǔn) 確的動作。仿真庫采用事件驅(qū)動的方式來模擬實際器件的動作。如圖1所示。圖1系統(tǒng)框圖由圖1可知,整個系統(tǒng)的仿真過程和PLC的運行過程是極其相似的。鼠標(biāo)點 擊按鈕、開關(guān)等輸入元件,產(chǎn)生輸入元件的狀態(tài)改變事件,在其事件處理函數(shù)中進(jìn)行元件圖標(biāo)的重繪和輸入元件映像區(qū)的更新工作。電路掃描與執(zhí)行過程則根據(jù) 輸入映像區(qū)和觸點狀態(tài)映像
4、區(qū)的值并按照元器件之間的連接關(guān)系來改變接觸器、 繼電器這些輸出元件的狀態(tài)。執(zhí)行結(jié)束后再刷新輸出元件映像區(qū),若狀態(tài)有改變 則重繪輸出元件圖標(biāo)并更新觸點狀態(tài)映像區(qū)。針對系統(tǒng)的仿真原理,電氣控制仿真控件庫應(yīng)具備如下基本功能:1、能響應(yīng)鼠標(biāo)輸入,開放鼠標(biāo)事件處理函數(shù);2、能在設(shè)計態(tài)和運行態(tài)方便地設(shè)置元件屬性;3、能根據(jù)屬性值自動刷新圖標(biāo)外觀,實現(xiàn)所見即所得功能;4、能自動判別元件的狀態(tài)是否改變,并為其配置事件處理函數(shù)。另外,仿真庫的圖形符號應(yīng)盡量符合國家標(biāo)準(zhǔn),要與實際圖紙的表示方式一 致。3仿真控件庫的詳細(xì)設(shè)計C#所使用的Windows窗體控件是一組基于.NET Framework的可重用組件, 根據(jù)
5、實現(xiàn)方法的不同,可將自行開發(fā)控件分為復(fù)合控件、擴(kuò)展控件和自定義控件 三類。其中復(fù)合控件就是將多個Windows控件封裝在同一個窗體容器中,也即 將若干個Windows控件的功能合成一個可重新使用的單元,它保留了每個被包 含的Windows控件所有固有的功能,可以有選擇地公開和綁定它們的屬性。由于 復(fù)合控件繼承于UserControl類,它已經(jīng)供了大量默認(rèn)的鼠標(biāo)、鍵盤處理功能, 所以不需要太多額外的開發(fā)工作,并且可以在控件表面任意繪圖,結(jié)合仿真控件 庫所要實現(xiàn)的基本功能,本人將復(fù)合控件定為仿真庫的基礎(chǔ)控件。不管是哪一種控件,都包含有屬性(Property)、方法(Method)和事件(Event
6、) 三部分內(nèi)容,應(yīng)當(dāng)將實際電氣元件的特性與功能和控件的相關(guān)部分正確地聯(lián)系起 來。以按鈕為例,它的名稱和編號可歸入到“屬性”,其圖形符號的繪制可納入 到“方法”,而按鈕由通到斷或由斷到通的動作相當(dāng)于控件的“事件”?,F(xiàn)將部分 對應(yīng)關(guān)系列表如下:屬性元件的名稱、編號觸點的類型:常開、常閉觸點的狀態(tài):斷開、閉合線圈的狀態(tài):得電、失電時間繼電器的整定值事件按鈕的壓下與彈起觸點的閉合與由斷開線圈的得電與失電時間繼電器的延時到方法元件圖形符號的繪制表1實際元件與控件的對應(yīng)關(guān)系神QS轉(zhuǎn)換開關(guān)類ElecBa昵(所著控件基類) wire (獨立的導(dǎo)線類)ElecPart (除FU外所有元件的基類)牛,F(xiàn)U (揩斷
7、器類)*(ElecPart3P (主電路元件基類)|KMMaiiiCantact寸接觸器主觸點類,魏繼皂醇布牢HMoto電動機(jī)類ANdrmalCoil線園基類XTimerC奇1時而蓬電器線圈類+:CantactQr單觸點元件基類XcMContactor輔島觸 點類XFRCmactor熱繼電器觸點類Hsb主令開關(guān)類圖2類層次圖上表右欄所列項目中,有些是所有元器件共有的,如名稱、編號等,而有的 則是某些元器件所特有的,如線圈狀態(tài)、時間繼電器整定值等。根據(jù)元器件之間 的異同點及相互關(guān)系,歸納出如圖2所示的控件類繼承層次關(guān)系(限于篇幅,未 將所有控件類列出)。3.1 ElecBase類的實現(xiàn)ElecB
8、ase類是所有控件的基類,包含了所有控件的公共特性,因為它本身繼 承于UserControl類,所以已經(jīng)具備了一個空白的控件界面。ElecBase只有兩 個屬性,即元件的名稱和編號。先為這兩個屬性指定成員變量,以保存屬性值, 然后再用get(讀取)、set(設(shè)置)語句將屬性和它們對應(yīng)的成員變量建立映射 關(guān)系。要注意的是必須在set分程序內(nèi)調(diào)用Refresh()函數(shù),這樣在每次修改 屬性后都使控件通過調(diào)用Paint方法來重新繪制自己的外觀以更新顯示。代碼如 下:protected intm_Index;/元件編號protected string m_TypeName;/類型名稱public in
9、t Index (get ( return m_Index;set ( m_Index = value;Refresh(); public string TypeName (get (return m_TypeName;set (m_TypeName = value;Refresh(); 為了能直觀地表示控件是否被選中,需要ElecBase類對鼠標(biāo)移入、移出事件 作簡單處理,可控制一bool變量來指示當(dāng)前鼠標(biāo)是否在控件區(qū)域內(nèi)。當(dāng)鼠標(biāo)滑入 控件區(qū)域時,控件將顯示一紅色邊框,當(dāng)鼠標(biāo)移出控件區(qū)域時紅色邊框消失Paint 的處理函數(shù)如下:private void ElecBass_Paint(obje
10、ct sender, PaintEventArgs e) ( System.Drawing.Pen MyPen = new Pen(Color.Red, 2);if (m_MouseEnter = true) (/指示鼠標(biāo)是否進(jìn)入控件區(qū)域的成員變量e.Graphics.DrawRectangle(MyPen, 1, 1, Width - 2, Height -2);由于其它所有的控件均繼承于ElecBass,所以諸如NormalCoil、ElecPart3P 等這些控件都自動具備了名稱和編號這兩個屬性,并在鼠標(biāo)進(jìn)入控件區(qū)域時能顯 示紅色外框。3.2 ElecPart類的實現(xiàn)ElectPart在
11、ElecBass的基礎(chǔ)上增加了一些屬性和事件。添加的屬性有 OnOffState、LastState、CurrentPass,它們都是bool型屬性,添加的事件有 OnOpenToClose、 OnCloseToClose和OnStateChange。OnOffState用以指示元件的當(dāng)前狀態(tài),true表示閉合或得電,false表示斷 開或失電;LastState保存了OnOffState的前一個狀態(tài),之所以要添加LastState 屬性,是因為在圖1所示的電路掃描與執(zhí)行過程中完全以LastState值為運行的依 據(jù),這與典型的PLC梯形圖掃描算法是類似的。而CurrentPass用來指示是否
12、有電 流流過元件。OnOpenToClose、OnCloseToClose和OnStateChange則分別為元件由 斷到通、由通到斷及兩者之一發(fā)生時的事件。下面是屬ttOnOffState的實現(xiàn)代碼,其它屬性的實現(xiàn)都是雷同的:protected bool m_OnOffState; / 對于觸點On表示閉合,Off 表示斷開/對于線圈On表示得電,Off 表示失電protected bool m_LastState;/ 上一個OnOff狀態(tài)protected bool m_CurrentPass; /是否有電流通過 public bool OnOffState (get ( return m
13、_OnOffState; set ( m_LastState = m_OnOffState;m_OnOffState = value;if (m_LastState = false & m_OnOffState = true) (/ 如果狀態(tài)由Off轉(zhuǎn)為OnOnOpenToClose(System.EventArgs.Empty); / 則 觸發(fā) OnOpenToClose 事件OnStateChange(System.EventArgs.Empty); / 和 OnStateChang e 事件else if (m_LastState = true & m_OnOffState = fals
14、e) (/ 如果狀態(tài)由ON轉(zhuǎn)為OFFm_CurrentPass = false;OnCloseToOpen(System.EventArgs.Empty);/ 則觸發(fā) OnCloseToClose 事件OnStateChange(System.EventArgs.Empty);/ 和OnStateChang e 事件else return;Refresh();為了能在控件的事件列表中顯示OnOpenToClose、OnCloseToClose和 OnStateChange,必須添加形如下的事件聲明:public event EventHandler OffToOn; /觸點由斷開轉(zhuǎn)為閉合或線
15、圈由失電轉(zhuǎn)為得電protected virtual void OnOpenToClose(System.EventArgs e) (if (OffToOn != null) (OffToOn(this, e);3.3其余控件類的實現(xiàn)從圖2可知,除FU類直接繼承自ElectBase外,其余控件類都繼承于 ElectPart,已具有屬性O(shè)nOffState和事件OnOpenToClose、OnCloseToClose、 OnStateChange。但不論是ElecBase還是ElecPart,其屬性和事件都是共性的, 也都沒有實現(xiàn)繪制元件圖形的方法,因此,ElecBase和ElecPart都不能直
16、接應(yīng)用 于宿主程序,需要從這兩個基類派生出實際可用的具有特定外觀和性質(zhì)的控件。 這就需要依據(jù)實際元器件的特點來設(shè)計派生類。1)對于Contactor(觸點)類和SB(按鈕)類,需要增加常開、常閉這一屬 性;2)對于ElecPart3P (應(yīng)用于主電路的元件)類,僅一個CurrentPass是不夠 的,須再增加兩個,形如CurrentPassU、CurrentPassV、CurrentPassW、;3)對于TimerCoil (時間繼電器線圈)類應(yīng)添加延時時間等屬性和延時時間 到這一事件。由于添加屬性及事件的方法前以描述,這里不再贅述??丶庥^的繪制則復(fù) 雜一些,也是派生類與父類之間最大的區(qū)別。
17、它是通過控件各自的Paint方法來 實現(xiàn)。繪制控件的基本步驟如下:1)判斷當(dāng)前元件的ON、OFF狀態(tài),若是觸點,還需判斷是常開、常閉,這決 定了元件的形狀;2)判斷是否有電流流過元件,這影響到繪制圖形的顏色;3)在控件表面繪制圖形及其名稱和編號。Al lb圖3部分控件圖形在控件表面繪制圖形一般有兩種方法。一種方法是貼圖,即預(yù)先用繪圖軟件 畫好元件的圖形,再將圖片加載到控件中去。另一種方法是用繪圖函數(shù)直接在控 件表面描出元件圖形。對于后一種方法,首先要依據(jù)國家頒布的電氣元件的標(biāo)準(zhǔn) 符號確定各個圖素在控件表面的坐標(biāo),再利用繪圖函數(shù)按這些坐標(biāo)畫圖,雖然比 較麻煩,但好處是圖形符號不會失真。圖3給出了用這種方法繪出的部分控件圖 形。4結(jié)語用C#實現(xiàn)的電氣控制仿真控件庫就像平常使用的ActiveX控件一樣,只是它 是基于.net Framework的,凡是支持.net Framework的語言均可方便的使用這些 控件。它提供了電氣控制電路仿真的底層支持,簡單的將這些控件陳列于窗體之 上是不能實現(xiàn)仿真功能的,還需要在外部按電路連接關(guān)系編寫掃描程序,也即圖 1所示的電路掃描與執(zhí)行過程,這個過程與梯形圖掃描算法類似,筆者將另文闡 述。這套電氣控制仿真庫在
溫馨提示
- 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. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 安全員A證考試考前沖刺模擬題庫【原創(chuàng)題】附答案詳解
- 安全員A證考試試題預(yù)測試卷(培優(yōu))附答案詳解
- 安全員A證考試能力測試B卷附參考答案詳解(a卷)
- 未來五年紙尿褲企業(yè)縣域市場拓展與下沉戰(zhàn)略分析研究報告
- 2025年選調(diào)生選拔考試(面試)歷年參考題庫含答案詳解
- 未來五年財產(chǎn)文書代理服務(wù)企業(yè)數(shù)字化轉(zhuǎn)型與智慧升級戰(zhàn)略分析研究報告
- 未來五年小麥油菜企業(yè)ESG實踐與創(chuàng)新戰(zhàn)略分析研究報告
- 人力資源有限公司招聘9人模擬試卷附答案詳解(考試直接用)
- 未來五年服裝模特服務(wù)企業(yè)縣域市場拓展與下沉戰(zhàn)略分析研究報告
- 安全員A證考試題庫(得分題)打印及參考答案詳解(達(dá)標(biāo)題)
- 人事社保專員年度工作總結(jié)
- 2025年河南省公務(wù)員考試《行測》真題和參考答案(網(wǎng)友回憶版)
- 體系培訓(xùn)文件課件9001
- 外科急危重癥護(hù)理
- 生物實驗室樣本管理制度
- 客戶投訴理賠管理制度
- GB/T 45451.1-2025包裝塑料桶第1部分:公稱容量為113.6 L至220 L的可拆蓋(開口)桶
- GB/T 44819-2024煤層自然發(fā)火標(biāo)志氣體及臨界值確定方法
- 《風(fēng)力發(fā)電廠調(diào)試規(guī)程》
- 搞笑小品劇本《我的健康誰做主》臺詞完整版-宋小寶徐崢
- 正大天虹方矩管鍍鋅方矩管材質(zhì)書
評論
0/150
提交評論