技術頻道

      普通運動控制卡在LabVIEW平臺上的應用

      摘 要:介紹了一種在LabVIEW平臺上使用普通運動控制卡實現快速開發多軸運動控制程序的方法。該方法首先應用運動普通控制卡提供的函數庫編譯成通用動態鏈接庫文件,然后使用LabVIEW與外部代碼進行連接的動態連接庫機制調用這個文件,實現實時的運動控制。實踐證明,該方法不僅可以很好地發揮運動控制卡的性能,而且可以借助LabVIEW強大的界面編輯功能,縮短程序開發周期,美化人機界面。

      關鍵詞:LabVIEW;運動控制卡;動態鏈接庫

      一、引言

        LabVIEW(Laboratory Virtual Instrument Engineering Workbench)是美國國家儀器公司(National Instruments)推出一種基于圖形語言的開發環境,編程非常方便,人機交互界面直觀友好,用戶可以創建獨立的可執行文件,能夠脫離開發環境而單獨運行,是目前最流行的虛擬儀器編程平臺,廣泛應用于測試測量、過程控制、實驗室研究與自動化等方面。

        在運動控制方面,LabVIEW有專門的運動控制模塊,并且NI公司為其所有的運動控制卡配備相應的驅動程序,可以方便實現即插即用功能。如果用戶所使用的板卡不是NI公司的產品,又沒有提供與LabVIEW兼容的驅動程序,就不能為LabVIEW所用。但是LabVIEW能夠通過調用Windows32動態連接庫(Dynamic Link Library,簡稱DLL)來編寫與LabVIEW兼容的驅動程序,實現該運動控制卡在LabVIEW環境下二次開發,不僅可以大大降低成本、縮短開發周期,而且可以使界面美觀。

      二、應用背景

        筆者在參與某二自由度運動平臺運動仿真項目的研制過程中,選用深圳眾為興數控技術有限公司生產的ADT850型四軸運動控制卡,該型號的卡提供多種版本Windows下的驅動程序和在BorlandC++3.1、VB和VC等多種環境下開發所需的函數庫。雖然在這些編程環境中很容易實現所需的運動控制,但是,如果要開發出一個美觀的人機交互界面,將會有很大一部分時間花在程序主界面的編寫上。為此,我們利用LabVIEW強大的界面編輯功能以及它能夠調用Windows32動態連接庫的特點,首先在VC編譯環境中編譯出運動控制所需要的動態鏈接庫文件,然后在LabVIEW環境中編寫程序主界面,最后在LabVIEW框圖程序中調用動態鏈接庫文件來編寫所需的運動控制程序。其主要過程如圖1所示。


      圖1 DLL生成與LabVIEW調用

      三、程序設計

        LabVIEW具有強大的外部接口能力,可用的外部接口包括:DDE、CIN、DLL、MATLAB Script以及HiQ Script等,其中DLL是其常用的外部接口。

        3.1 動態鏈接庫(DLL)的編寫

        DLL是基于Windows程序設計的一個非常重要的組成部分。DLL的編制與具體的編程語言及編譯器無關,只要遵守DLL的開發規范和編程策略,并安排正確的調用接口,不管用何種編程語言編制的DLL都具有通用性,這就給我們編寫通用的DLL帶來了很大的方便。

        針對LabVIEW調用DLL的特點和運動控制的復雜性,我們所編寫的通用DLL中必須包含多個可供調用的函數,這些函數都調用運動控制函數庫中的一個或多個函數,DLL中每個可供調用的函數都對應著某一具體任務,稱其為功能函數。DLL中的功能函數主要有:板卡初始化函數、運行條件初始化函數、兩軸運行狀態函數、兩軸位置函數、脈沖發送函數、兩軸伸長計算函數、停止運行函數、歸零函數以及板卡結束運行函數等,每個功能函數一般都有自己獨立的接口。

        功能函數確定以后,在Visual C++6.0編譯器中建立一個Win32 Dynamic-Link Library文件,添加上運動控制卡隨帶的運動控制函數庫文件后,即可編譯成我們所需要的DLL文件。

        3.2 動態鏈接庫的調用

        LabVIEW中動態鏈接庫的調用是通過CLF(Call Library Function)節點實現的,CLF節點位于LabVIEW功能模板中的Advanced子模板中。

        在LabVIEW中調用DLL時,則應根據應用程序的需要,確定參數個數和參數類型及調用規則,然后在LabVIEW中正確地配置DLL。首先從Advanced子模板中選擇Call Library Function Node圖標并將其拖放到Diagram面板中適當位置,然后右鍵單擊它,在彈出的菜單選項中選擇Configer…彈出Call Library Function對話框。在此對話框中,第一個參數Library Name or Path中填入需要調用的動態連接庫文件的文件名和路徑;第二個參數Function Name是連接庫中要調用的函數名稱;第三個參數Calling Conventions是對DLL的調用規則,可選擇C或stdcall,該項的選擇應與用C++語言編寫的動態庫的編譯模式相一致。如果C++的調用方式為extern “C” declspec(dllexport),那么Calling Conventions的選項為“C”,如果調用方式為extern declspec(dllexport)stdcall,則Conventions的選項為默認值“stdcall”,否則發生不可預見的錯誤而退出程序。接下來的Parameter和Type分別是參數名稱和參數類型,表示函數返回類型。左擊Add a Parameter After按鈕,又多出了Data Type和Pass兩項,它們分別是數據類型轉換和參數傳遞方式,這是配置所調用函數形參所必須的選項。

        3.3 程序實現

        根據以上所編寫的功能函數配置好CLF節點的參數個數及其數據類型后,也就設置好了CLF節點的輸入輸出端口。每一個功能函數對應著相應功能的CLF節點,我們可是像使用其它函數節點一樣來應用這些CLF節點。針對某型二自由度運動平臺運動控制的特殊性,要求這兩個自由度完全獨立,互不相關,這就不能采用多軸插補函數進行脈沖輸出控制,只能是兩軸分別控制。

        整個LabVIEW框圖程序的結構采用順序結構(Sequence Structure),每一順序框都對應某項固定的任務。圖2中三個順序框是整個框圖程序的前三框,從左到右其任務分別是板卡初始化、板卡驅動成功與否和相關參數的初始化及其顯示,相關參數初始化順序框中采用While循環模式等待輸入,只有當參數設定完成并按下確定鍵后程序才能繼續往下運行。


      圖2 程序初始化階段框圖

        圖3所示是緊接在圖2后面的順序框,也是程序框圖的第四個順序框,這是整個框圖程序的主體部分。順序框中嵌入一個While循環,While循環中又嵌入一個順序結構,其前一框的作用是運動模式選擇及運動控制,這也是整個程序框圖的核心部分,后一框的作用是數據顯示部分。

        運動模式選擇包括自由度的選擇和自動與手動模式選擇。自由度選擇和運行模式選擇均采用選擇結構(Case Structure),自由度的選擇結構框內又嵌入了運行模式選擇結構框,即每個自由度的運動都有自動和手動兩種方式。選擇手動方式時,手動位移可以通過拖動前面板上的手動進度條來確定,而選擇自動方式時,其運行軌跡是一正弦曲線,這條曲線的形狀由所設定的幅度值、頻率值和相角值來確定。另外,無論在哪一種模式下運行,都可以通過調節前面板上速度系數進度條來調節兩軸各自的運行速度。每個自由度的運動控制部分都包括手動控制和自動控制兩部分,且都可以按照一般編譯器中的邏輯關系和數據關系通過調用不同的CLF節點來實現。數據顯示部分主要是實時顯示兩自由度的值和對應軸的伸長值。


      圖3 程序核心部分框圖

        圖4是整個框圖程序的最后三個順序框,其中,前一框的任務是得到停止指令后返回兩軸的當前位置,并立即發出返回零點位置的指令;中間一框中嵌入了一個While循環,目的是循環檢測并顯示兩軸的運行狀態以及當前位置,一旦檢測到所有軸已經回到零點位置并已全部停止運行,就自動跳出While循環,開始執行最后一框程序,即執行板卡結束運行函數。


      圖4 程序結束階段框圖

        圖5為程序的前面板,這是程序正常運行時的主控界面也是唯一的界面。在這個界面上,可以進行自由度的選擇、手動自動的選擇、手動位移設定、自動運行模式下的正弦軌跡曲線的設定、兩軸運行速度的設定以及運行控制。另外,界面上的兩個Grphy圖還能實時顯示兩自由度變化曲線和兩軸運行軌跡曲線,板卡驅動狀態和兩軸運行狀態的正常與否以三個指示燈的形式顯示出來。


      圖5 程序主界面

      四、結束語

        一般來講,很多運動控制卡的二次開發多采用VC++、VB或C++ Builder等編譯軟件編寫,有時編寫界面就占了程序編寫工作的很大一部分,不利于提高效率。本文利用LabVIEW界面開發簡單以及LabVIEW可以調用動態鏈接庫等功能,實現了在LabVIEW平臺下快速開發普通運動控制卡的運動控制程序。這種方法不僅可以采用價格相對較低的普通運動控制卡,而且能避免繁瑣的界面編程,縮短周期,提高效率,降低成本。本文所引用的程序已在某二自由度運動平臺控制系統上通過測試并已得到應用,運行平穩、準確。

        本文作者創新點:利用LabVIEW調用通用動態連接庫的功能,采用新的方法來對普通運動控制卡進行二次開發,這種新方法不僅可以縮短開發周期,而且可以降低成本。

      參考文獻:

        [1] 燕廷,馬增強等.基于LabVIEW數據采集與處理軟件編程技巧[J].微計算機信息, 2005,21-6:153-154

        [2] 楊樂平,李海濤等.LabVIEW高級程序設計[M].北京:清華大學出版社,2003-08

        [3] 李國厚.虛擬儀器技術及其開發與應用[J].自動化與儀表,2002,23-7:4-6

      文章版權歸西部工控xbgk所有,未經許可不得轉載。

      主站蜘蛛池模板: 一区二区三区高清| 日韩精品一区二区三区中文版| www.亚洲一区| V一区无码内射国产| 国产福利视频一区二区| 一区二区高清在线| 中文字幕一区在线观看| 国产精品无码一区二区三区不卡| 成人精品一区二区三区校园激情 | 亚洲AⅤ视频一区二区三区| 无码精品蜜桃一区二区三区WW| 丝袜无码一区二区三区| 中文字幕无线码一区二区| 无码日韩人妻AV一区二区三区 | 无码人妻精一区二区三区| 一区二区视频在线免费观看| 国产精品美女一区二区视频| 无码人妻精品一区二区三区9厂| 一区二区视频在线免费观看| 3d动漫精品啪啪一区二区中文| 国产成人一区二区三区高清| 久久99精品波多结衣一区| 国产成人久久一区二区不卡三区 | 国产成人精品一区二区三在线观看| 97久久精品午夜一区二区| 欧美成人aaa片一区国产精品| 久久久久国产一区二区三区| 中文字幕AV无码一区二区三区| 无码欧精品亚洲日韩一区夜夜嗨 | 国产天堂在线一区二区三区| 国产高清一区二区三区| 日韩有码一区二区| 无码国产精品一区二区免费式直播| 国产成人综合精品一区| 亚洲一区二区三区在线观看网站 | 日本无卡码一区二区三区| 国产一区三区三区| 国产产一区二区三区久久毛片国语 | 久久精品免费一区二区喷潮 | 欧美日韩一区二区成人午夜电影| 清纯唯美经典一区二区|