王玉霞,趙鳳霞,張琳娜,鄭鵬
(鄭州大學(xué)機(jī)械工程學(xué)院,河南鄭州450001)
在工件的磨削加工中,砂輪會產(chǎn)生磨損,因此依靠磨床本身來控制工件的加工精度是很難實現(xiàn)的。采用主動量儀對磨削過程進(jìn)行主動實時測量,是磨床加工過程中的重要環(huán)節(jié)[1]。但是目前國產(chǎn)的磨加工主動量儀基本上還是停留在以單片機(jī)為核心的微機(jī)化儀表水平上,甚至有的還處于指針式儀表階段,具有測量精度不穩(wěn)定、顯示不夠直觀、測量范圍及控制點調(diào)整不方便等缺點[2]。徐金虎等[3]針對工控式磨加工主動量儀采用組態(tài)王技術(shù)實現(xiàn)了現(xiàn)有的主動量儀顯示不夠直觀、設(shè)置調(diào)整不方便等問題。組態(tài)軟件擁有豐富的工具箱、圖庫和操作向?qū)?,但是組態(tài)王軟件在數(shù)據(jù)采集速率方面無法滿足磨加工過程中高速數(shù)據(jù)采集的要求,在實際應(yīng)用中需要與其他編程技術(shù)聯(lián)合開發(fā)主動量儀的控制程序。祁繼超等[4]針對嵌入式磨加工主動量儀利用WinCE 系統(tǒng)的多線程技術(shù)實現(xiàn)測量數(shù)據(jù)處理。但是,WinCE 系統(tǒng)下的控件庫不夠完善,缺少比如儀表顯示、進(jìn)程條、實時曲線、歷史曲線等一些常用控件,這些控件圖形的開發(fā)繪制過程費時費力,并且不具有配置化使用以及一次組建多次應(yīng)用的功能。因此有必要開發(fā)WinCE 系統(tǒng)下的磨加工主動量儀所需的常用控件,以彌補(bǔ)WinCE 系統(tǒng)的不足,且縮短系列磨加工主動量儀產(chǎn)品的研發(fā)周期。
作者在Microsoft Visual Studio 2008 編程環(huán)境下,應(yīng)用C#開發(fā)語言,在. NET Compact Framework 平臺下開發(fā)了磨加工主動量儀測量控制實時顯示所需的儀表、進(jìn)程條、實時曲線、歷史曲線等常用控件,并給出這些控件的應(yīng)用方法。
磨加工主動量儀工作過程中需要實時進(jìn)行人機(jī)交互,將工件的測量結(jié)果、所處的加工狀態(tài)、加工過程中所設(shè)定的基本參數(shù)呈現(xiàn)給操作者,所需的主要控件有:儀表顯示(見圖1)、進(jìn)程條、實時曲線、歷史曲線(見圖2)等。
圖1 儀表
圖2 歷史曲線
(1)儀表顯示
儀表顯示控件動態(tài)直觀地顯示主動量儀在工作過程中所采集的數(shù)據(jù)。在Z 系列磨加工主動量儀中,儀表直觀顯示所加工機(jī)械零件的加工余量。加工工件外徑時,指針顯示數(shù)值隨著加工進(jìn)程,從正值趨近于0;加工工件內(nèi)徑時,指針顯示數(shù)值隨著加工進(jìn)程,從負(fù)值趨近于0。
(2)進(jìn)程條
進(jìn)程條控件監(jiān)控機(jī)床加工零件時的工作進(jìn)程。在Z 系列磨加工主動量儀中,進(jìn)程條控件與儀表顯示控件作用基本一致,只是在表達(dá)方式上有所不同。
(3)實時曲線
實時曲線可顯示主動量儀采集數(shù)據(jù)的當(dāng)前趨勢,以監(jiān)控該數(shù)據(jù)在現(xiàn)場工況變化的情況下的控制穩(wěn)定性。
(4)歷史曲線
歷史曲線可觀察過去一段時間內(nèi)某一點的變化趨勢,并供工藝人員分析工藝流程的穩(wěn)定性和故障原因。
WinCE 中應(yīng)用程序的圖形輸出是依靠圖形設(shè)備接口GDI (Graphic Device Interface)來實現(xiàn)的。GDI+是GDI 版本的繼承者,在其基礎(chǔ)上新增了許多功能。C#語言基于GDI+技術(shù)繪制圖形時,使用Graphics 類封裝圖形繪制方法,如DrawLine()(繪制直線)、DrawDllipse()(繪制橢圓)、DrawArc()(繪制圓弧)、FillPolygon()(多邊形填充)等,為圖形界面程序的編輯提供全方位的支持,最大程度上減少了對底層API 的直接調(diào)用,提高了編程效率。
嵌入式軟件的開發(fā)平臺為. NET Compact Framework(NCF),它繼承了公共語言運行時的完整. NET Framework(NF)結(jié)構(gòu)。NCF 是NF 的一個子集,在NCF平臺下,缺少很多常用控件繪圖函數(shù),所以必須利用其他的方法來實現(xiàn)在NF 平臺下可以輕松實現(xiàn)的繪圖命令[5]。例如,在NF 平臺下,繪制圓弧可以直接使用DrawArc(Pen,Rectangle,startAngle,sweepAngle)命令。但是,NCF 平臺不支持DrawArc 命令,需要運用數(shù)學(xué)的方法來實現(xiàn),可以在每段弧上取很多點,連接起來即可,取的點越多,畫弧越像。
在Microsoft Visual Studio 2008 編程環(huán)境下,控件的開發(fā)技術(shù)是一致的,只是在控件的屬性和事件方面有所區(qū)別,因此,文中以儀表顯示控件的開發(fā)為例詳述主動量儀常用控件開發(fā)技術(shù)。
在儀表顯示控件中,最多的操作其實是繪制出刻度線,并將實際采集的數(shù)據(jù)映射到儀表指針上。該控件完全使用了. NET Compact Framework 中的基礎(chǔ)類庫,未使用其他第三方庫。控件基于NCF 的User-Control,用戶自定義設(shè)計控件,這樣生成的dll 文件,可以被引用到toolbox 設(shè)計框中,實現(xiàn)拖拽式調(diào)用。
(1)新建項目
打開Microsoft Visual Studio 2008,選擇新建項目后在打開的對話框中選擇項目類型以及模板,創(chuàng)建新建項目的名稱“BIAOTOU”、解決方案名稱“biaotouDLL”及選擇項目存儲位置,點擊“確定”后,在新彈出的對話框里選擇目標(biāo)平臺為“Windows Mobile 5.0 Pocket PC SDK”,NCF 版本為3.5 版,模板為“控件庫”,點擊“確定”。這樣就生成了一個空的控件項目。
(2)為控件添加屬性和事件
以圖3 所示控件為例。
圖3 儀表示例
①首先聲明變量。分析圖3 儀表的變量,對圓心位置、圓心大小、指針顏色、指針長度以及長短刻度的各個參數(shù)進(jìn)行變量聲明。
②屬性封裝
封裝是一種信息隱藏機(jī)制,在面向?qū)ο蟪绦蛟O(shè)計中得到了極其廣泛的應(yīng)用,其目的在于將程序的使用者與程序的設(shè)計者進(jìn)行分離,讓使用者不必了解具體功能的實現(xiàn)細(xì)節(jié),而只需根據(jù)設(shè)計者提供的方法來使用不同的功能,同時使得設(shè)計者在進(jìn)行設(shè)計更新時,不會影響到使用者的正常使用[6]。
C#中采用get (訪問方法)、set (修改方法)對變量進(jìn)行封裝。當(dāng)使用get、set 將變量封裝為屬性以后,可以控制它們的可見性(能否被讀取、能否被修改、能被誰操作等),修改的時候可以對將要修改的值進(jìn)行驗證是否合法,防止被其他類意外修改。
將儀表顯示控件的刻度值顏色變量封裝成屬性的代碼如下所示:
其他變量也用“get/set”方法封裝成屬性,代碼不再一一寫出。
愛情就是愛情吧!她想,女人對男人千般好,并非充氣娃娃的特權(quán)。再說這世上哪個女人不是男人的充氣娃娃呢?哪個女人在某一些特殊的時間里不是男人的充氣娃娃呢?身體上的充氣娃娃,或者,靈魂里的充氣娃娃。低到塵埃里,張愛玲說的吧?女人既然可以心甘情愿地低至一粒塵埃,為什么不能心甘情愿地變成一個玩偶呢?
如上述代碼所示,“get/set”方法可使得“Color刻度值顏色”屬性以及其他屬性均在toolbox 屬性框中出現(xiàn),如圖4 所示。
圖4 屬性框截圖
(3)圖形繪制
圖形繪制時使用GDI+技術(shù)。調(diào)用的名稱空間包括Systerm.Drawing 和Systerm.Drawing.Text 等。
圖3 中儀表刻度線及刻度值的繪制。首先聲明刻度線所在的圓弧半徑、起始與終止弧度、刻度值所在圓弧半徑值、指針半徑以及每一刻度的弧度值等,然后利用for 循環(huán)語句以及各個變量之間的函數(shù)關(guān)系,實現(xiàn)刻度線、刻度值的正確繪制以及指針的正確指示。主要代碼如下所示:
在這里值得一提的是,由于儀表和進(jìn)度條繪制過程較為復(fù)雜,圖形刷新較快,容易造成屏幕閃爍,雙緩沖繪圖技術(shù)的運用很好地解決了以上問題。NCF GDI+中特有的雙緩沖功能,只要重寫OnPaintBackground 方法即可。
(4)控件生成
代碼編寫完成后,即可生成DLL 文件,這樣就完成控件的生成。生成后的DLL 文件放于Bin 目錄下,在需要時可通過引用DLL 文件來使用,也可以在VS 工具箱里以添加組件的形式加載到工具箱中,和其他系統(tǒng)控件一樣作為工具使用,同時也可以將整個項目添加到一個新的項目中使用。
所開發(fā)的控件可以作為一個相對獨立的程序單位被其他應(yīng)用程序重復(fù)調(diào)用。在應(yīng)用時,開發(fā)人員通過拖拽式調(diào)用把控件放在Form 窗口中,然后配置控件的屬性進(jìn)行相應(yīng)的函數(shù)連接,控件就能完成其復(fù)雜的功能。下面以儀表顯示控件為例進(jìn)行說明。
(2)在解決方案資源管理器中,右擊解決方案,單擊“添加現(xiàn)有項目”,顯示“現(xiàn)有項目”對話框。單擊“biaotouDLL”項目,將該項目添加到解決方案里,這樣就可以看到在工具箱里出現(xiàn)自定義控件。
(3)從工具箱中選擇自定義控件,添加到Form窗口,可以更改圓心位置、控件大小、背景顏色等屬性等。儀表顯示控件如圖5 所示。
圖5 儀表控件
(4)在解決方案資源管理器中,右擊“Testmybiaotou”項目,然后單擊“生成”。并將該項目設(shè)為啟動項目。
(5)單擊“Debug”調(diào)試按鈕或“Crtl +F5”執(zhí)行程序。在SDK 模擬器中測試控件的可用性。見圖6。
圖6 SDK 模擬器中儀表控件
將儀表顯示控件應(yīng)用到磨加工主動量儀軟件系統(tǒng)中,更改控件背景顏色、刻度間隔、刻度顏色等控件屬性,并將主動量儀瞬時采集、處理的最終結(jié)果通過消息傳遞方式傳遞到主線程中,在測量結(jié)果上以儀表形式顯示出來。在磨加工主動量儀上的應(yīng)用結(jié)果如圖7 所示,進(jìn)程條控件在磨加工主動量儀上的應(yīng)用如圖8 所示。
圖7 儀表顯示
圖8 進(jìn)度條顯示
針對基于WinCE 系統(tǒng)的磨加工主動量儀產(chǎn)品開發(fā)的需要,應(yīng)用C#開發(fā)語言,在. NET Compact Framework 平臺下開發(fā)了磨加工主動量儀測量控制實時顯示所需的儀表、進(jìn)程條、實時曲線、歷史曲線等常用控件。所開發(fā)的控件不依賴任何第三方插件,在Visual Studio 2008 開發(fā)環(huán)境中,通過編譯生成. dll 文件,可以在多種語言環(huán)境下添加引用,顯示直觀,調(diào)整方便,提高了代碼的重用性和擴(kuò)展性,滿足了磨加工主動量儀的測量控制顯示需求,縮短了產(chǎn)品的研發(fā)周期。
[1]王鴻偉.可在線測量圓度的新型主動測量儀[J].工具技術(shù),2004,38(10):76-77.
[2]鄭鵬,張琳娜,劉武發(fā),等.新型磨加工主動測量控制儀的研究[J].儀器儀表學(xué)報,2013,10(34):2365-2372.
[3]徐金虎,張琳娜,鄭鵬,等.基于組態(tài)王的磨加工主動測量儀的數(shù)據(jù)處理[J].機(jī)床與液壓,2013,41(13):75-80.
[4]祁繼超,張琳娜,鄭鵬,等.嵌入式主動量儀數(shù)據(jù)處理技術(shù)的研究與實現(xiàn)[J].機(jī)床與液壓,2013,41(23):101-103
[5]曹宏濤,顧振.基于WinCE 機(jī)艙延伸報警系統(tǒng)的設(shè)計[J].船舶機(jī)電設(shè)備,2012(1):48-52.
[6]劉云根,李洋.Delphi 封裝機(jī)制實現(xiàn)方法的研究[J].計算機(jī)與現(xiàn)代化,2004(4):3-5.