摘 要:介紹在LabVIEW編程環(huán)境下,通過調(diào)用動態(tài)鏈接庫,進行非配套四軸運動控制卡ADT850的驅(qū)動和控制,實現(xiàn)了LabVIEW與普通運動控制卡的結(jié)合,快速開發(fā)多軸運動控制程序的方法。文章給出了設(shè)計的方法和步驟,現(xiàn)實應用證明,該方法不僅可以很好地發(fā)揮運動控制卡的性能,而且可以借助LabVIEW強大的界面編輯功能,縮短程序開發(fā)周期,美化人機界面。
1 引言
1.1 LabVIEW簡介
LabVIEW(Laboratory Virtual Instrument Engineering Workbench)是實驗室虛擬儀器開發(fā)平臺的簡稱。它是美國NI公司(National Instrument Company, 美國國家儀器公司)80年代推出的一種基于G語言(Graphics Language,圖形化編程語言)的虛擬儀器軟件開發(fā)平臺。LabVIEW是專門用于虛擬儀器開發(fā)的圖形化軟件編程平臺,目前最新版本為8.5。圖形化的表示方式是比文本代碼更為自然的設(shè)計表示法,在這個平臺上,用戶通過定義和連接代表各種功能模塊的圖標來方便迅速地建立起自己的應用程序。
LabVIEW在運動控制方面有專門的運動控制模塊,并且NI公司為其所有的運動控制卡配備相應的驅(qū)動程序,可以方便實現(xiàn)即插即用功能,但是價格昂貴。如果用戶所使用的板卡不是NI公司的產(chǎn)品,又沒有提供與LabVIEW兼容的驅(qū)動程序,就不能為LabVIEW所用。但是作為一個開放式開發(fā)平臺,LabVIEW提供了DLL接口,用戶在LabVIEW平臺上能調(diào)用其他軟件平臺編譯的模塊,并提供對對象鏈接和嵌入技術(shù)(簡稱OLE)的支持。這樣LabVIEW能夠通過調(diào)用Windows32動態(tài)連接庫(Dynamic Link Library,簡稱DLL)來編寫與LabVIEW兼容的驅(qū)動程序,實現(xiàn)該運動控制卡在LabVIEW環(huán)境下二次開發(fā)。同時,利用此軟件平臺可大大降低成本,縮短項目開發(fā)時間。
2 開發(fā)背景
根據(jù)某玻璃加工企業(yè)要求,我們設(shè)計了其加工機械包含四軸運動控制要求的電氣控制系統(tǒng)。在設(shè)計過程中,本著節(jié)約成本,實現(xiàn)功能的態(tài)度,我們采用了眾為興深圳市眾為興數(shù)控技術(shù)有限公司生產(chǎn)的ADT850四軸運動控制卡,ADT850運動控制卡的動態(tài)鏈接庫是標準的Windows32位動態(tài)鏈接庫,選用的開發(fā)工具應支持Windows標準的32位DLL調(diào)用。我們在VC編譯環(huán)境中編譯出運動控制所需要的動態(tài)鏈接庫文件,(即DLL格式),將編寫好的動態(tài)鏈接庫文件按照功能塊區(qū)分,封裝成靜態(tài)鏈接庫即(LIB格式)。如果使用DLL方式,則編譯后的程序不但要包括EXE程序,還要包括DLL文件。而如果采用靜態(tài)鏈接庫方式,分發(fā)程序時只需要一個EXE文件就可以了,分發(fā)時簡單,可以更方便打包發(fā)布。在LabVIEW將環(huán)境中編寫程序主界面時,調(diào)用封裝好的LIB文件來編寫所需的運動控制程序。其主要過程如圖1所示。
[align=center]

圖1[/align]
3 程序設(shè)計
3.1 編寫動態(tài)鏈接庫
自從微軟推出第一個版本的Windows操作系統(tǒng)以來,動態(tài)鏈接庫(DLL)一直是Windows操作系統(tǒng)的基礎(chǔ)。動態(tài)鏈接庫通常都不能直接運行,也不能接收消息。它們是一些獨立的文件,其中包含能被可執(zhí)行程序或其它DLL調(diào)用來完成某項工作的函數(shù)。只有在其它模塊調(diào)用動態(tài)鏈接庫中的函數(shù)時,它才發(fā)揮作用。Windows API中的所有函數(shù)都包含在DLL中。DLL的編制與具體的編程語言及編譯器無關(guān),只要遵循約定的DLL接口規(guī)范和調(diào)用方式,用各種語言編寫的DLL都可以相互調(diào)用。
為了便于以后工程的維護與開發(fā),我們將運動控制按照實現(xiàn)功能的不同,編寫出DLL,每個DLL中都包含ADT850運動控制庫中一個或多個函數(shù),稱之為功能函數(shù)。主要的功能函數(shù)有板卡初始化,單軸點動,兩軸直線插補運動,兩軸圓弧插補運動,實現(xiàn)急停與緩停的停止函數(shù),邏輯坐標清零函數(shù),軸狀態(tài)檢測函數(shù)等,每個功能函數(shù)都有自己的獨立接口,可以方便調(diào)用。
在VC++6.0軟件環(huán)境中選擇File—>New,單擊Project標簽,從左側(cè)列表中選擇Windows 32 Dynamic Link Library,輸入項目名后,添加上ADT850相應運動控制卡的運動控制函數(shù)庫文件,按功能編譯成需要的DLL文件。
3.2 動態(tài)鏈接庫的調(diào)用
我在開發(fā)中使用LabVIEW8.2中文版本,較8.0有很大的改進。首先在LabVIEW的后面板中選擇互連接口中的庫與可執(zhí)行程序,然后選擇調(diào)用庫函數(shù),將其拖到適當?shù)奈恢?。在新建的空庫函?shù)中選擇配置,正確配置DLL參數(shù)。本文以continue_move函數(shù)為例做一下詳細介紹,如圖2所示:
[align=center]

圖2[/align]
在庫名或路徑中,選擇DLL的存放路徑C:\WINDOWS\system32\adt850.dll,在函數(shù)名下選擇封裝好的功能函數(shù)continue_move,在右側(cè)菜單線程選項中選擇“在UI線程中運行”,在調(diào)用規(guī)范中選擇應與用C++語言編寫的動態(tài)庫的編譯模式相一致。如果C++的調(diào)用方式為extern"C"declspec(dllexport), 那么Calling Conventions的選項為“C”,如果調(diào)用方式為extern declspec (dllexport) stdcall,則Conventions的選項為默認值“stdcall(WINAPI)”,此處一定要設(shè)定正確,否則會出現(xiàn)不可預知的錯誤。在第二項參數(shù)選項中,設(shè)置好對應的參數(shù)值,此函數(shù)有4個參數(shù),speed1,speed2,acc,value,在參數(shù)選項中設(shè)置完成后,可以在函數(shù)原型下顯示出來。最后在回調(diào)中選擇需要的回調(diào)函數(shù)。
為了這樣經(jīng)過編譯后的ADT850功能函數(shù)就可以被LabVIEW調(diào)用了。為了分發(fā)時簡單,可以更方便打包發(fā)布,我們將DLL文件封裝成靜態(tài)鏈接庫方式,這樣分發(fā)程序時只需要一個EXE文件就可以了。封裝好的LIB文件如圖3所示。
[align=center]

圖3[/align]
3.3 程序?qū)崿F(xiàn)
將功能函數(shù)配置好,打包封裝成靜態(tài)鏈接庫后,我們可以像使用基本函數(shù)一樣調(diào)用這些函數(shù)了。針對自動控制的要求,需要對兩軸順序?qū)崿F(xiàn)單軸點動,兩軸直線插補的運動要求。同時要實現(xiàn)急停,各軸運動狀態(tài)檢測等功能。
整個LabVIEW程序的結(jié)構(gòu)以順序結(jié)構(gòu)和條件結(jié)構(gòu)為主,每一框架對應固定的邏輯功能。圖4為整個運動控制前兩個框圖。最左面是板卡的初始化函數(shù),通過封裝好的上電脈沖函數(shù)在程序最初運行時僅調(diào)用一次。第二個框為工藝參數(shù)的控制,由條件語句嵌套13個條目的選擇語句構(gòu)成,在加減速控制中嵌入運動狀態(tài)檢測,一個條件分支動作完成后,自動傳送狀態(tài)值至運動階段,進入下一分支程序,直到結(jié)束,完成工藝加工要求。設(shè)置一個等待時間100ms,增加緩沖時間。右側(cè)的XY兩軸插補函數(shù),Y2軸定量運動函數(shù)已經(jīng)在上一節(jié)中封裝完畢。
[align=center]

圖4[/align]
圖5為接下來的兩個框圖,主要實現(xiàn)運動暫停功能和繼續(xù)運動功能。在左側(cè)的順序圖中,一個條件結(jié)構(gòu)嵌套兩個條件結(jié)構(gòu)組成。觸發(fā)條件為單位脈沖觸發(fā),在真條件中實現(xiàn)運動暫停,同時存儲坐標的當前值,在假狀態(tài)中實現(xiàn)繼續(xù)運動。右側(cè)順序圖主要通過局部變量實現(xiàn)運動參數(shù)的實時傳遞。
[align=center]

圖5[/align]
圖6為存儲框圖的一部分,主要實現(xiàn)數(shù)據(jù)硬盤存儲功能。封裝的子VI為數(shù)據(jù)存讀功能。首先將改變數(shù)值傳至硬盤存儲區(qū),數(shù)據(jù)的讀出使用真值觸發(fā),實現(xiàn)常讀。因為參數(shù)比較多,采用數(shù)組格式傳遞數(shù)值,,使程序更簡潔,易于維護。
[align=center]

圖6[/align]
圖7為運動控制程序的前面板,按照實際控制要求可以選擇相應界面。主要實現(xiàn)的功能有工藝參數(shù)設(shè)定、機床參數(shù)設(shè)定、自動控制界面、兩軸運動軌跡的圖形化實時顯示、手動控制各軸運動。在運動控制界面中實現(xiàn)兩軸直線插補功能、暫停功能、急停功能、機械坐標和工作坐標的實時顯示以及通過狀態(tài)燈來顯示各個電磁閥的運動狀態(tài)。
[align=center]

圖7[/align]
4 結(jié)束語
一般情況下,現(xiàn)在工程師仍然多采用VB、VC或者C++等編譯語言對運動控制卡進行二次開發(fā),很多時候圖形界面的編寫就耗費很多的程序編寫工作時間,效率相對不是很高。本文采用的這種新方法的主要優(yōu)點是采用了LabVIEW圖形化編程語言,強大的界面編輯功能可以節(jié)省大量的開發(fā)時間,同時利用了LabVIEW支持動態(tài)鏈接庫調(diào)用等功能,實現(xiàn)了不是NI公司提供的運動控制卡也可以在LabVIEW平臺下進行二次開發(fā)。這種方法可以有效降低成本,減少程序編程時間。本文中程序經(jīng)過在工廠現(xiàn)場調(diào)試,現(xiàn)在已經(jīng)可以穩(wěn)定運行。