李 芳, 王志臣, 鄧 媞
1(機(jī)科發(fā)展科技股份有限公司, 北京 100044)
2(機(jī)械科學(xué)研究總院, 北京 100044)
換擋轂是汽車動(dòng)力總成雙離合變速器的核心零件,也是亟待實(shí)現(xiàn)國產(chǎn)化高質(zhì)量批量生產(chǎn)的關(guān)鍵件, 如圖1所示.其具有空間曲線換擋溝槽, 換擋轂溝槽線輪廓度是決定換擋性能的關(guān)鍵參數(shù)指標(biāo).此外, 線輪廓度是幾何公差中應(yīng)用最廣泛而又難以測(cè)量和評(píng)定的項(xiàng)目.主要采用最小區(qū)域法對(duì)線輪廓度誤差值進(jìn)行評(píng)定, 即被測(cè)量線輪廓度要素的提取要素相對(duì)于理想線輪廓度要素的最大距離為最小.主要采用有循環(huán)迭代法與分割逼近法[1]、遺傳算法[2,3]、粒子群搜索[4,5]、Fréchet距離[6]等多種算法實(shí)現(xiàn).
圖1 換擋轂工件
在換擋轂自動(dòng)化檢測(cè)儀器系統(tǒng)項(xiàng)目的實(shí)際開發(fā)部署過程中, 使用虛擬儀器LabView平臺(tái)軟件實(shí)現(xiàn)儀器控制與數(shù)據(jù)采集系統(tǒng)的設(shè)計(jì).由于LabView在算法開發(fā)方面能力較弱, 直接開發(fā)線輪廓度評(píng)價(jià)算法難度大,不利于工程技術(shù)人員快速實(shí)現(xiàn)系統(tǒng)部署.因此, 如何快速開發(fā)算法并搭建軟件是工程實(shí)踐中所面臨的一個(gè)重要問題.為了應(yīng)對(duì)上述問題, 采用聯(lián)合編程開發(fā)的方式,集成LabView、Matlab、.NET多種軟件技術(shù), 優(yōu)勢(shì)互補(bǔ), 從而加速開發(fā)進(jìn)程.
LabView是美國NI公司推出的創(chuàng)新軟件產(chǎn)品, 提供了一種圖形化編程方法, 可直觀顯示應(yīng)用的各個(gè)方面, 包括硬件配置、測(cè)量數(shù)據(jù)和調(diào)試.這種可視化方法可讓用戶輕松集成測(cè)量硬件, 直觀地表示復(fù)雜的邏輯,以及設(shè)計(jì)自定義工程用戶界面.LabView以其數(shù)據(jù)采集和儀器控制兩大獨(dú)特的優(yōu)勢(shì), 在測(cè)控、故障診斷、生產(chǎn)過程控制、自動(dòng)化等領(lǐng)域得到了較為普遍的應(yīng)用[7],但是LabView在處理大型數(shù)據(jù), 復(fù)雜模型分析的時(shí)候就存在有自身的缺陷, 并且算法開發(fā)效率低[8].
Matlab是MathWorks推出的世界領(lǐng)先的科學(xué)計(jì)算語言和工具, 將適合迭代分析和設(shè)計(jì)過程的桌面環(huán)境與直接表達(dá)矩陣和數(shù)組運(yùn)算的編程語言相結(jié)合, 語法結(jié)構(gòu)簡單、數(shù)學(xué)計(jì)算高效.Matlab包含有豐富并且經(jīng)過專業(yè)開發(fā)、嚴(yán)格測(cè)試的函數(shù)基礎(chǔ)和工具箱.其在數(shù)據(jù)分析、深度學(xué)習(xí)、信號(hào)處理、控制系統(tǒng)等領(lǐng)域發(fā)揮著重要作用[9-11].但其GUI涉及功能薄弱, 代碼運(yùn)行效率低[12].
.NET Framework是Microsoft開發(fā)的完全面向?qū)ο蟮能浖蚣? 主要由框架類庫FCL (Framework Class Library)和公共語言運(yùn)行時(shí)CLR (Common Language Runtime)兩個(gè)重要組件構(gòu)成..NET Framework提供了一個(gè)新的面向?qū)ο缶幊探涌诩夹g(shù), 為眾多高級(jí)語言的集成提供了一種可能, 極大地提高了軟件開發(fā)的能力.
LabView與Matlab的聯(lián)合編程將充分發(fā)揮兩種軟件獨(dú)特的優(yōu)勢(shì), 提高開發(fā)效率[13,14].本文通過將Matlab所開發(fā)的Fréchet距離線輪廓度算法經(jīng).NET技術(shù)編譯成dll程序集, 并在LabView所開發(fā)的線輪廓平臺(tái)中進(jìn)行調(diào)用, 最終完成線輪廓度評(píng)價(jià)軟件的開發(fā).借助各軟件的優(yōu)勢(shì), 更加高效快速地實(shí)現(xiàn)了線輪廓度評(píng)價(jià)的工程應(yīng)用目標(biāo), 并在所承擔(dān)項(xiàng)目中得到了驗(yàn)證應(yīng)用.
線輪廓度評(píng)價(jià)軟件是涉及多種傳感器于一體的測(cè)量分析軟件.LabView具有強(qiáng)大硬件接口能力, 負(fù)責(zé)與外圍設(shè)備的對(duì)接, 實(shí)現(xiàn)對(duì)伺服系統(tǒng)的運(yùn)動(dòng)控制、數(shù)據(jù)采集系統(tǒng)的信息采集以及搭建人機(jī)交互界面的目的.Matlab主要用于線輪廓度評(píng)價(jià)算法開發(fā)和測(cè)試, 編譯成.NET程序集.在LabView所設(shè)計(jì)的主體軟件結(jié)構(gòu)中調(diào)用, 實(shí)現(xiàn)集成, 軟件結(jié)構(gòu)如圖2所示.經(jīng)過快速原型模型的測(cè)試與驗(yàn)證, 進(jìn)而完成線輪廓度評(píng)價(jià)任務(wù).
圖2 線輪廓度評(píng)價(jià)軟件結(jié)構(gòu)
采用Matlab、LabView、.NET聯(lián)合編程的方式,將優(yōu)勢(shì)取長補(bǔ)短地融合集成, 極大地提高了編程效率,并使得軟件兼具有儀器控制、數(shù)據(jù)采集、數(shù)據(jù)分析、人機(jī)交互等特點(diǎn).具體來說即利用LabView強(qiáng)大的儀器控制與界面開發(fā)能力加快軟件主體架構(gòu)設(shè)計(jì); 利用數(shù)學(xué)編程軟件Matlab強(qiáng)大的函數(shù)庫, 減少編程代碼量;兩種軟件通過.NET接口進(jìn)行參數(shù)與指令傳遞, 使高級(jí)語言的集成成為可能, 在保證算法可靠性的情況下, 縮短了軟件開發(fā)的周期, 降低了故障概率.
線輪廓度評(píng)價(jià)軟件以LabView為主開發(fā)軟件進(jìn)行人機(jī)界面設(shè)計(jì)以及系統(tǒng)的集成.狀態(tài)機(jī)模型是圖形化語言程序設(shè)計(jì)中主要的軟件結(jié)構(gòu), 通過對(duì)結(jié)構(gòu)進(jìn)行拓展和修改, 再嵌入系統(tǒng)測(cè)試的相關(guān)算法, 可以快速完成自動(dòng)化系統(tǒng)測(cè)試, 縮短開發(fā)時(shí)間, 提高工作效率.
對(duì)于線輪廓度評(píng)價(jià)軟件的開發(fā), 考慮到軟件的功能實(shí)現(xiàn)與維護(hù), 主要采用了2種狀態(tài)機(jī)結(jié)構(gòu).單線程采用JKI狀態(tài)機(jī)結(jié)構(gòu), 2個(gè)VI+while+case+事件結(jié)構(gòu)+移位寄存器+數(shù)據(jù)簇, 如圖3所示.多線程采用生產(chǎn)者/消費(fèi)者設(shè)計(jì)模式, while+條件結(jié)構(gòu)+隊(duì)列, 如圖4所示.
圖3 JKI狀態(tài)機(jī)結(jié)構(gòu)
圖4 生產(chǎn)者/消費(fèi)者設(shè)計(jì)模式
采用快速原型模型[15]作為聯(lián)合編程算法開發(fā)模型, 根據(jù)線輪廓度的評(píng)價(jià)要求與相關(guān)算法的可行性進(jìn)行需求分析, 構(gòu)建線輪廓度評(píng)價(jià)算法原型并進(jìn)行原型評(píng)估, 原型Matlab編程, LabView調(diào)用完成原型測(cè)試5個(gè)主要階段.
在線輪廓度的評(píng)定中需要解決兩個(gè)問題: 一是測(cè)量輪廓與理論輪廓的最佳對(duì)齊; 二是測(cè)量點(diǎn)與理論輪廓的最短距離.輪廓要素可以看作是一組點(diǎn)集, 對(duì)于點(diǎn)集的距離常用Hausdorff距離、Fréchet距離.但是由于Hausdorff距離沒有考慮點(diǎn)的順序, 局限性較大.因此選用Fréchet距離[6]作為線輪廓度評(píng)價(jià)方法.Fréchet距離在地圖匹配[16], 生物信息學(xué)[17], 相似性度量[18]具有廣泛應(yīng)用.在計(jì)算輪廓度時(shí), 采用離散Fréchet距離對(duì)輪廓度誤差進(jìn)行度量, 兩輪廓線Fréchet距離如圖5所示.
圖5 兩曲線 Fréchet距離
線輪廓度的評(píng)價(jià)算法以Fréchet距離為基礎(chǔ), 利用SIMENS NX從三維模型獲取關(guān)鍵點(diǎn)XY坐標(biāo)信息, 形成關(guān)鍵點(diǎn)型線; 由于采用探針接觸式輪廓采集, 需進(jìn)行探針半徑補(bǔ)償, 對(duì)關(guān)鍵點(diǎn)型線偏移, 形成關(guān)鍵點(diǎn)偏移型線; 由線輪廓度公差要求, 形成上下偏差線, 即理論邊界區(qū)域, 得到滿足公差要求的理論邊界區(qū)域, 如圖6所示: 計(jì)算整條輪廓線所有采樣點(diǎn)與理論偏移型線的Fréchet距離, 最終得出線輪廓度.
圖6 線輪廓度評(píng)價(jià)示意圖
使用Matlab完成評(píng)價(jià)方法的編程工作, 編寫主要函數(shù), 其評(píng)價(jià)流程及代碼如圖7所示.
圖7 線輪廓度評(píng)價(jià)流程與Matlab編程
線輪廓度評(píng)價(jià)主要函數(shù)的編寫完成后即可進(jìn)行編譯工作..NET程序集的編譯主要使用Matlab的Library Compiler工具箱完成.
在Matlab打開Library Compiler.在工具欄TYPE選項(xiàng)中選擇.NET Assembly, 在EXPORTED FUNCTIONS選項(xiàng)中加載所要編譯的5個(gè)重要函數(shù), 在Library Name
欄中輸人名稱并選填其他內(nèi)容, 也可修改類庫名稱等信息.在保存路徑for_redistribution_files_only文件下的Profile.dll文件為在LabView中的調(diào)用的.NET程序集.
盡管生成的.NET程序集可以在未安裝Matlab的計(jì)算機(jī)上應(yīng)用, 但是對(duì)于.NET程序集中的類仍然需要Matlab基礎(chǔ)函數(shù)的支持, 因此在計(jì)算機(jī)上需要安裝Matlab Runtime, Matlab Runtime是一個(gè)獨(dú)立的共享庫,可以避免安裝龐大的完整版Matlab應(yīng)用程序, 降低計(jì)算機(jī)資源的浪費(fèi).
此外, 在Matlab中使用的數(shù)據(jù)格式為Matlab特有的MWArray類型, 這種類型在LabView中無法直接使用, 需要通過MWArray.dll文件進(jìn)行數(shù)據(jù)格式的轉(zhuǎn)化.
MWArray類充當(dāng)了LabView與Matlab (Runtime)之間數(shù)據(jù)傳遞的橋梁.其類層次結(jié)構(gòu)提供了使用Matlab Runtime創(chuàng)建和訪問Matlab數(shù)據(jù)類型的接口.所有的類都派生自MWArray類, 每個(gè)派生類都映射到一個(gè)Matlab數(shù)據(jù)類型.數(shù)據(jù)轉(zhuǎn)換類層次結(jié)構(gòu)主要包括MWNumericarArray、MWLogicalArray、MWChar-Array、MWStructArray和MWCellArray.每個(gè)類都有屬性和方法, 可用于查詢類的各種屬性, 如維度大小、元素大小和字段名等.通過MWArray的類屬性接口,LabView可以將Matlab計(jì)算的數(shù)據(jù)從內(nèi)存中解析顯示, 直觀地判斷結(jié)論的正確性, 類層次結(jié)構(gòu)使用方法如圖8所示.
圖8 二維數(shù)組解析VI程序框圖
在LabView中使用.NET對(duì)象進(jìn)行原型測(cè)試, 需要使用.NET CLR 4.0.使用CLR 4.0 LabView可以加載.NET CLR 4.0或較早版本的.NET程序集, 并且可以生成包含.NET函數(shù)的獨(dú)立共享庫、應(yīng)用程序、打包項(xiàng)目庫與.NET程序集.調(diào)用接口如圖9所示.
圖9 LabView.NET調(diào)用接口
由Matlab開發(fā)的線輪廓度評(píng)價(jià)算法函數(shù)均有多個(gè)輸入和多個(gè)輸出, 以solve_key_point為例, solve_key_point函數(shù)有2個(gè)輸入, 8個(gè)輸出.
[curve_out_1, curve_out_2, curve_out_3, curve_out_4, curve_out_5, curve_out_6, curve_out_7,curve_out_8]=solve_key_point(path, file_name);
關(guān)鍵點(diǎn)參數(shù)存儲(chǔ)路徑與型號(hào)兩個(gè)輸入?yún)?shù)經(jīng)MWCharArray類構(gòu)造器節(jié)點(diǎn)進(jìn)行轉(zhuǎn)換, 傳遞至solve_key_point調(diào)用節(jié)點(diǎn), numArgsOut設(shè)置輸出參數(shù)數(shù)量,solve_key_point函數(shù)計(jì)算結(jié)果可以通過調(diào)用子VI的方式進(jìn)行二維數(shù)據(jù)解析, 其調(diào)用VI如圖10所示.在實(shí)際的計(jì)算應(yīng)用過程中, 過渡數(shù)據(jù)不建議進(jìn)行解析, 可以提高程序運(yùn)算執(zhí)行效率.
圖10 solve_key_point函數(shù)調(diào)用子VI程序框圖
將線輪廓度聯(lián)合編程子VI嵌入到主程序中完成線輪廓度的評(píng)價(jià), 聯(lián)合編程子VI如圖11所示.子VI采用平鋪式順序結(jié)構(gòu)設(shè)計(jì), 順序調(diào)用型線分類、曲線偏移、理論邊界區(qū)域計(jì)算、線輪廓度評(píng)價(jià)等函數(shù),根據(jù)實(shí)時(shí)采樣點(diǎn)坐標(biāo)信息, 計(jì)算理論輪廓與測(cè)量輪廓Fréchet距離, 最終得出線輪廓度值.
圖11 線輪廓度聯(lián)合編程子VI程序框圖(局部)
線輪廓度評(píng)價(jià)軟件主要由3部分組成, 分別是運(yùn)動(dòng)控制、數(shù)據(jù)采集、數(shù)據(jù)分析.以 LabView 2019為軟件開發(fā)工具, 調(diào)用線輪廓度評(píng)價(jià)算法.NET程序集, 在Windows 環(huán)境下使用.運(yùn)動(dòng)控制與數(shù)據(jù)采集實(shí)現(xiàn)整個(gè)測(cè)量系統(tǒng)的信息輸入和輸出, 以及多傳感器的實(shí)時(shí)數(shù)據(jù)采集, 控制界面前面板與數(shù)據(jù)采集程序框圖如圖12與圖13所示.數(shù)據(jù)分析部分利用線輪廓度評(píng)價(jià)算法完成對(duì)測(cè)量數(shù)據(jù)的處理分析, 得到換擋轂換擋溝槽線輪廓度值.并在前面板中顯示出邊界區(qū)域, 理論輪廓, 采集輪廓, 清晰直觀地判斷出換擋轂工件輪廓加工的合格性, 并得出評(píng)價(jià)結(jié)果, 如圖14所示.目前, 線輪廓度評(píng)價(jià)軟件已在項(xiàng)目示范應(yīng)用現(xiàn)場(chǎng)投入應(yīng)用, 軟件運(yùn)行良好.
圖12 控制界面(局部)
圖13 數(shù)據(jù)采集程序框圖(局部)
圖14 線輪廓度評(píng)價(jià)結(jié)果
本文采用聯(lián)合編程技術(shù)方式完成了換擋轂換擋溝槽輪廓的線輪廓度評(píng)價(jià)軟件的開發(fā)工作.其核心部分就是通過LabView搭建主體軟件, 并利用Matlab編寫線輪廓度評(píng)價(jià)算法由LabView進(jìn)行調(diào)用, 完成線輪廓度評(píng)價(jià).同時(shí), 通過軟件驗(yàn)證, 證明了該聯(lián)合編程方式的有效性和實(shí)際應(yīng)用的可行性.Matlab和LabView都是主流的工程應(yīng)用軟件, 兩者結(jié)合將會(huì)突破軟件自身的局限性, 加速系統(tǒng)的開發(fā)進(jìn)程, 更加高效快速的解決工程應(yīng)用難題.