王玉霞,趙鳳霞,張琳娜,鄭鵬
(鄭州大學機械工程學院,河南鄭州450001)
在工件的磨削加工中,砂輪會產生磨損,因此依靠磨床本身來控制工件的加工精度是很難實現的。采用主動量儀對磨削過程進行主動實時測量,是磨床加工過程中的重要環節[1]。但是目前國產的磨加工主動量儀基本上還是停留在以單片機為核心的微機化儀表水平上,甚至有的還處于指針式儀表階段,具有測量精度不穩定、顯示不夠直觀、測量范圍及控制點調整不方便等缺點[2]。徐金虎等[3]針對工控式磨加工主動量儀采用組態王技術實現了現有的主動量儀顯示不夠直觀、設置調整不方便等問題。組態軟件擁有豐富的工具箱、圖庫和操作向導,但是組態王軟件在數據采集速率方面無法滿足磨加工過程中高速數據采集的要求,在實際應用中需要與其他編程技術聯合開發主動量儀的控制程序。祁繼超等[4]針對嵌入式磨加工主動量儀利用WinCE 系統的多線程技術實現測量數據處理。但是,WinCE 系統下的控件庫不夠完善,缺少比如儀表顯示、進程條、實時曲線、歷史曲線等一些常用控件,這些控件圖形的開發繪制過程費時費力,并且不具有配置化使用以及一次組建多次應用的功能。因此有必要開發WinCE 系統下的磨加工主動量儀所需的常用控件,以彌補WinCE 系統的不足,且縮短系列磨加工主動量儀產品的研發周期。
作者在Microsoft Visual Studio 2008 編程環境下,應用C#開發語言,在. NET Compact Framework 平臺下開發了磨加工主動量儀測量控制實時顯示所需的儀表、進程條、實時曲線、歷史曲線等常用控件,并給出這些控件的應用方法。
磨加工主動量儀工作過程中需要實時進行人機交互,將工件的測量結果、所處的加工狀態、加工過程中所設定的基本參數呈現給操作者,所需的主要控件有:儀表顯示(見圖1)、進程條、實時曲線、歷史曲線(見圖2)等。

圖1 儀表

圖2 歷史曲線
(1)儀表顯示
儀表顯示控件動態直觀地顯示主動量儀在工作過程中所采集的數據。在Z 系列磨加工主動量儀中,儀表直觀顯示所加工機械零件的加工余量。加工工件外徑時,指針顯示數值隨著加工進程,從正值趨近于0;加工工件內徑時,指針顯示數值隨著加工進程,從負值趨近于0。
(2)進程條
進程條控件監控機床加工零件時的工作進程。在Z 系列磨加工主動量儀中,進程條控件與儀表顯示控件作用基本一致,只是在表達方式上有所不同。
(3)實時曲線
實時曲線可顯示主動量儀采集數據的當前趨勢,以監控該數據在現場工況變化的情況下的控制穩定性。
(4)歷史曲線
歷史曲線可觀察過去一段時間內某一點的變化趨勢,并供工藝人員分析工藝流程的穩定性和故障原因。
WinCE 中應用程序的圖形輸出是依靠圖形設備接口GDI (Graphic Device Interface)來實現的。GDI+是GDI 版本的繼承者,在其基礎上新增了許多功能。C#語言基于GDI+技術繪制圖形時,使用Graphics 類封裝圖形繪制方法,如DrawLine()(繪制直線)、DrawDllipse()(繪制橢圓)、DrawArc()(繪制圓弧)、FillPolygon()(多邊形填充)等,為圖形界面程序的編輯提供全方位的支持,最大程度上減少了對底層API 的直接調用,提高了編程效率。
嵌入式軟件的開發平臺為. NET Compact Framework(NCF),它繼承了公共語言運行時的完整. NET Framework(NF)結構。NCF 是NF 的一個子集,在NCF平臺下,缺少很多常用控件繪圖函數,所以必須利用其他的方法來實現在NF 平臺下可以輕松實現的繪圖命令[5]。例如,在NF 平臺下,繪制圓弧可以直接使用DrawArc(Pen,Rectangle,startAngle,sweepAngle)命令。但是,NCF 平臺不支持DrawArc 命令,需要運用數學的方法來實現,可以在每段弧上取很多點,連接起來即可,取的點越多,畫弧越像。
在Microsoft Visual Studio 2008 編程環境下,控件的開發技術是一致的,只是在控件的屬性和事件方面有所區別,因此,文中以儀表顯示控件的開發為例詳述主動量儀常用控件開發技術。
在儀表顯示控件中,最多的操作其實是繪制出刻度線,并將實際采集的數據映射到儀表指針上。該控件完全使用了. NET Compact Framework 中的基礎類庫,未使用其他第三方庫。控件基于NCF 的User-Control,用戶自定義設計控件,這樣生成的dll 文件,可以被引用到toolbox 設計框中,實現拖拽式調用。
(1)新建項目
打開Microsoft Visual Studio 2008,選擇新建項目后在打開的對話框中選擇項目類型以及模板,創建新建項目的名稱“BIAOTOU”、解決方案名稱“biaotouDLL”及選擇項目存儲位置,點擊“確定”后,在新彈出的對話框里選擇目標平臺為“Windows Mobile 5.0 Pocket PC SDK”,NCF 版本為3.5 版,模板為“控件庫”,點擊“確定”。這樣就生成了一個空的控件項目。
(2)為控件添加屬性和事件
以圖3 所示控件為例。

圖3 儀表示例
①首先聲明變量。分析圖3 儀表的變量,對圓心位置、圓心大小、指針顏色、指針長度以及長短刻度的各個參數進行變量聲明。
②屬性封裝
封裝是一種信息隱藏機制,在面向對象程序設計中得到了極其廣泛的應用,其目的在于將程序的使用者與程序的設計者進行分離,讓使用者不必了解具體功能的實現細節,而只需根據設計者提供的方法來使用不同的功能,同時使得設計者在進行設計更新時,不會影響到使用者的正常使用[6]。
C#中采用get (訪問方法)、set (修改方法)對變量進行封裝。當使用get、set 將變量封裝為屬性以后,可以控制它們的可見性(能否被讀取、能否被修改、能被誰操作等),修改的時候可以對將要修改的值進行驗證是否合法,防止被其他類意外修改。
將儀表顯示控件的刻度值顏色變量封裝成屬性的代碼如下所示:

其他變量也用“get/set”方法封裝成屬性,代碼不再一一寫出。
愛情就是愛情吧!她想,女人對男人千般好,并非充氣娃娃的特權。再說這世上哪個女人不是男人的充氣娃娃呢?哪個女人在某一些特殊的時間里不是男人的充氣娃娃呢?身體上的充氣娃娃,或者,靈魂里的充氣娃娃。低到塵埃里,張愛玲說的吧?女人既然可以心甘情愿地低至一粒塵埃,為什么不能心甘情愿地變成一個玩偶呢?
如上述代碼所示,“get/set”方法可使得“Color刻度值顏色”屬性以及其他屬性均在toolbox 屬性框中出現,如圖4 所示。

圖4 屬性框截圖
(3)圖形繪制
圖形繪制時使用GDI+技術。調用的名稱空間包括Systerm.Drawing 和Systerm.Drawing.Text 等。
圖3 中儀表刻度線及刻度值的繪制。首先聲明刻度線所在的圓弧半徑、起始與終止弧度、刻度值所在圓弧半徑值、指針半徑以及每一刻度的弧度值等,然后利用for 循環語句以及各個變量之間的函數關系,實現刻度線、刻度值的正確繪制以及指針的正確指示。主要代碼如下所示:


在這里值得一提的是,由于儀表和進度條繪制過程較為復雜,圖形刷新較快,容易造成屏幕閃爍,雙緩沖繪圖技術的運用很好地解決了以上問題。NCF GDI+中特有的雙緩沖功能,只要重寫OnPaintBackground 方法即可。

(4)控件生成
代碼編寫完成后,即可生成DLL 文件,這樣就完成控件的生成。生成后的DLL 文件放于Bin 目錄下,在需要時可通過引用DLL 文件來使用,也可以在VS 工具箱里以添加組件的形式加載到工具箱中,和其他系統控件一樣作為工具使用,同時也可以將整個項目添加到一個新的項目中使用。
所開發的控件可以作為一個相對獨立的程序單位被其他應用程序重復調用。在應用時,開發人員通過拖拽式調用把控件放在Form 窗口中,然后配置控件的屬性進行相應的函數連接,控件就能完成其復雜的功能。下面以儀表顯示控件為例進行說明。
(2)在解決方案資源管理器中,右擊解決方案,單擊“添加現有項目”,顯示“現有項目”對話框。單擊“biaotouDLL”項目,將該項目添加到解決方案里,這樣就可以看到在工具箱里出現自定義控件。
(3)從工具箱中選擇自定義控件,添加到Form窗口,可以更改圓心位置、控件大小、背景顏色等屬性等。儀表顯示控件如圖5 所示。

圖5 儀表控件
(4)在解決方案資源管理器中,右擊“Testmybiaotou”項目,然后單擊“生成”。并將該項目設為啟動項目。
(5)單擊“Debug”調試按鈕或“Crtl +F5”執行程序。在SDK 模擬器中測試控件的可用性。見圖6。

圖6 SDK 模擬器中儀表控件
將儀表顯示控件應用到磨加工主動量儀軟件系統中,更改控件背景顏色、刻度間隔、刻度顏色等控件屬性,并將主動量儀瞬時采集、處理的最終結果通過消息傳遞方式傳遞到主線程中,在測量結果上以儀表形式顯示出來。在磨加工主動量儀上的應用結果如圖7 所示,進程條控件在磨加工主動量儀上的應用如圖8 所示。

圖7 儀表顯示

圖8 進度條顯示
針對基于WinCE 系統的磨加工主動量儀產品開發的需要,應用C#開發語言,在. NET Compact Framework 平臺下開發了磨加工主動量儀測量控制實時顯示所需的儀表、進程條、實時曲線、歷史曲線等常用控件。所開發的控件不依賴任何第三方插件,在Visual Studio 2008 開發環境中,通過編譯生成. dll 文件,可以在多種語言環境下添加引用,顯示直觀,調整方便,提高了代碼的重用性和擴展性,滿足了磨加工主動量儀的測量控制顯示需求,縮短了產品的研發周期。
[1]王鴻偉.可在線測量圓度的新型主動測量儀[J].工具技術,2004,38(10):76-77.
[2]鄭鵬,張琳娜,劉武發,等.新型磨加工主動測量控制儀的研究[J].儀器儀表學報,2013,10(34):2365-2372.
[3]徐金虎,張琳娜,鄭鵬,等.基于組態王的磨加工主動測量儀的數據處理[J].機床與液壓,2013,41(13):75-80.
[4]祁繼超,張琳娜,鄭鵬,等.嵌入式主動量儀數據處理技術的研究與實現[J].機床與液壓,2013,41(23):101-103
[5]曹宏濤,顧振.基于WinCE 機艙延伸報警系統的設計[J].船舶機電設備,2012(1):48-52.
[6]劉云根,李洋.Delphi 封裝機制實現方法的研究[J].計算機與現代化,2004(4):3-5.