.NET在工控圖片儀器組配中的預設和踐行
組件技術軟件設計技術經過了從結構化軟件設計、面向對象軟件設計到組件式軟件設計的發展過程,組件式技術是面向對象技術的發展和提高。它的開發思想就是將復雜的軟件開發分解成若干個功能組件,這些組件可以由不同的廠家用任何語言開發,開發環境也無特別限制。若干組件可以根據具體應用要求可靠而有效的組合在一起完成復雜的任務。
組件(component)是指可方便插入語言、工具、操作系統、網絡軟件系統中的一種獨立可重用的二進制形式的代碼和數據。構件的結構和功能被封裝在內部,對外界提供必要的接口,所有的數據交換都是通過接口實現的。組件就是對象,是對數據和方法的封裝。一個完整的組件應該有自己的屬性、方法、事件。
屬性是組件數據的簡單訪問者,方法是組件的一些簡單而可見的功能,事件是一種特定的操作,在某對象上發生或對某對象發生的。自定義組件的事件就是指對所做組件的某種特定操作,像“按鈕”的單擊事件。
工控儀表組件的設計與實現本文介紹的組件是用C#。NET工具開發的。C#(Csharp)是由Microsoft公司開發一種最新的、面向對象的編程語言。它由C和C++派生出來,融合了VisualBasic的高效和C/C++強大。C#可以自動利用。NET類庫。
C#。NET組件設計方法在C#中,組件就是實現了接口System.Compo-nentModle.Icomponent的類,或者從System.Compo-nentModle.Componet類或其他實現了Icomponent接口的類的派生類。用C#開發的組件主要包括3種方法:從已有的Windows類派生、從UserControl類派生,或者從Control類派生。我們選擇的方法是從UserControl類派生,也就是自行創建一個用戶控件。采用這種方式需要從UserControl類派生自己的控件類,然后添加所需要的功能。UserControl類中定義了Windows窗體控件最基本的功能,包括窗口句柄、消息循環、鼠標鍵盤等用戶界面事件。采用這種方式需添加繪制代碼,可以對組件充分制定。
首先選擇從[模板]列表中選擇[Windows控件庫]選項創建新項目,Visualstudio會在窗體設計器創建新的組件控件。我們要做的工作就是在原始控件上繪制圖形,添加屬性、方法、事件等。具體包括:(1)繪制控件外觀,一般應用GDI+中提供的方法。(2)根據需要添加屬性,編寫get{}set{}訪問程序,存取屬性。(3)根據具體要求編寫方法和事件,設定該控件與用戶的交互。(4)編譯生成。dll文件。
組件的測試方法。代碼編寫完成以后生成。DLL文件。由于它不是可執行文件,不能直接運行該程序,要創建例程來測試這個組件。首先把組件文件(。dll文件)添加到工具箱中;創建Windows應用程序;把組件拖放到Windows應用程序的Form窗體中,可以看到設計的組件的效果,從屬性窗口修改控件屬性,也可以測試控件中設計的方法和事件。
組件設計中涉及的技術一是GDI+技術。GDI+是GDI(GraphicsDeviceInterface圖形設備接口)的改進產品,是Microsoft的下一代二維圖形系統,它是完全面向對象的。GDI+包括3部分:二維矢量圖形繪制、圖像處理和文字顯示。
GDI+中提供了各式各樣的畫筆、畫刷、圖像等圖形對象,此外還包括一些新的繪圖功能。圖形儀表組件中的動態和靜態界面都要用GDI+編程繪制實現。
二是多線程技術。用多線程技術可以編寫能夠同時執行多個任務的應用程序。操作系統使用進程將正在執行的不同應用程序分開。線程是操作系統分配處理器時間的基本單元,并且該進程中可以有多個線程同時執行代碼。與用戶交互的軟件必須盡可能快地對用戶的活動作出反應,以便提供豐富多彩的用戶體驗。但同時它必須執行必要的計算以便盡可能快地將數據呈現給用戶。要提高對用戶的響應速度并且處理所需數據以便幾乎同時完成工作,使用多個線程是一種強大的技術。在本設計中多線程技術用于實現組件的報警功能。計算機在監測到輸入的數據超過警戒值時觸發報警事件,驅動蜂鳴器發出報警聲音。在報警的同時,計算機要繼續顯示并檢測現場,因此需要啟動多個線程,實現兩個功能的并行。
三是要解決控件繪圖中的閃爍問題。在控件運行中,由于數值的改變需要不斷地重繪,這就造成了控件的閃爍。為了解決這個問題可以采用以下幾種辦法:(1)僅重繪控件中改變的部分。
(2)采用雙緩存。具體做法是在控件的構造函數中添加代碼:SetStyle(ControlStyles.UserPaint,true);SetStyle( ControlStyles.AllPaintingInWmPaint,true);//禁止擦除背景SetStyle(ControlStyles.DoubleBuffer,true);//雙緩沖這段代碼的意義如下:UserPaint如果為true,控件將自行繪制,而不是通過操作系統來繪制,此樣式僅適用于派生自Control的類;AllPaintingInWmPaint如果為true,控件將忽略WM_ERASEBKGND窗口消息以減少閃爍,僅當UserPaint位設置為true時,才應當應用該樣式;DoubleBuffer如果為true,則繪制在緩沖區中進行,完成后將結果輸出到屏幕上。雙重緩沖區可防止由控件重繪引起的閃爍。要完全啟用雙重緩沖,還必須將UserPaint和AllPaintingInWmPaint樣式位設置為true.
(3)在內存中繪制圖形。GDI+函數向屏幕輸出并不是立即顯示在屏幕上,而是保存在顯存中,而顯卡每隔一段時間把顯存的內容輸出到屏幕上。而如果控件的繪制不是在一個刷新周期內完成,那勢必會造成閃爍。為解決這個問題,控件的繪制可以在內存中完成,然后利用一條命令再將之繪制到屏幕上。經過試驗,這種方法效果良好。
溫度計、儀表盤組件的設計與實現溫度計組件功能分析:(1)顯示溫度:這是溫度計最基本的功能,通過水銀柱的升降顯示數據的變化,通過刻度讀出溫度值。(2)報警功能:在工業監測中,當檢測到溫度高于警戒溫度時,要進行聲光報警。(3)組件的屬性:對溫度計背景、水銀柱、文本、刻度等的顏色可以根據用戶的需要自由搭配,儀表量程可以根據測量要求設置。如表1所示。
解決讓水銀柱隨輸入的溫度升降的問題。水銀柱實際上是一個矩形,讓水銀柱升降就是改變水銀柱高度。實現方法就是將原來的水銀柱用底色覆蓋,然后用新高度繪制一個新矩形,當連續輸入溫度時,水銀柱不斷重繪,由于人的視覺器官有一定的反應時間差,所以不會察覺重繪,只繪觀察到水銀柱在做升降運動。儀表盤組件的功能要求類似,不同的是要通過指針的轉動顯示速度值。所以關鍵是要通過旋轉坐標系,實現指針的轉動。儀表盤刻度是圓形排列的,要把坐標轉移至中心,逆時針旋轉作圖。儀表盤組件設計中用到的相關方法函數:TranslateTransform:坐標原點移動。
RotateTransform:以原點為中心,將圖形或文本旋轉一定角度。實現儀表指針的轉動要通過輸入的數據計算需要轉動角度y2.y2=(240/Graduate)*Pointvalue其中Graduate為量程,Pointvalue是輸入的數據。使用函數RotateTransform(y2+150),將指針旋轉到指定位置。
應用實例是儀表和溫度計組件在“測溫測速監控管理系統”中的應用。下位機通過串行口發送檢測數據,上位機用高級語言編程實現數據的實時監控和數據管理。系統通過數據庫實現數據管理功能,調用組件,實現數據顯示的圖形化。該系統利用組件技術實現界面模擬儀表的軟件重用,在滿足界面美觀、功能完善的同時,簡化編程工作量、提高設計效率。經過該系統的測試,儀表組件顯示正常,各項功能穩定。
結束語組件技術對提高軟件開發效率、減輕維護負擔、保證軟件質量和版本的健壯、更新都具有非常重要的意義。本文提出利用組件技術,開發一個可移植性強的通用工控圖形儀表組件庫,根據用戶的不同需求嵌入到各種具體的應用設計中,具有極大的靈活性和實用性。http://www.1004-75.com