安徽水利水電職業技術學院 余茂全
基于LABVIEW的普通運動控制卡的開發與應用
安徽水利水電職業技術學院 余茂全
設計了以LABVIEW和運動控制卡為基礎,以直線倒立擺為被控對象的控制系統,采用了調用動態鏈接庫的方式,利用了LABVIEW中提供的共享庫函數接口,設計了LABVIEW與運動控制卡之間的數據采集和運動控制程序,并最終開發了用于教學的倒立擺實驗平臺。該平臺采用模塊化設計,具有可視化的人機交互界面,同時還可以為控制理論的研究與教學提供良好的實驗環境,操作方便并且具有一定的開放性。
動態鏈接庫;運動控制卡;人機交互界面
倒立擺是一種典型的非線性不穩定系統,在控制理論算法驗證和課程教學中,將倒立擺作為經典被控對象開發的實驗裝置有廣泛的應用價值。LABVIEW是由美國國家儀器公司(NI)開發的一種圖形化編程語言,它廣泛地被工業界、學術界、和研究實驗室所接受,視為一個標準的數據采集和儀器控制軟件,具有可視化、編程方便等特點[1]。在運動控制方面,NI公司有專門的硬件以及相應的驅動程序,但是價格往往相當昂貴,一般實驗室往往接受不了。利用固高公司提供的運動控制卡的動態鏈接庫,采用調用的方式,進行二次開發,不僅大大降低成本、縮短開發周期,而且可以使界面美觀。
動態鏈接庫(DLL)是基于windows系統程序設計中的一個非常重要的組成部分,它是從c語言函數庫和Pascal庫單元的概念發展而來的,具有節省內存、資源共享、動態加載等特點。[2]在開發控制系統實驗平臺的過程中,選用的是固高公司生產的GT-400型四軸運動控制卡,該卡提供Windows下的驅動程序和在BorlandC++3.1、VC等多種環境下開發所需的函數庫。雖然在這些編程環境中很容易實現所需的運動控制,但是,若要開發出一個美觀的人機交互界面,將會有很大一部分時間花在程序主界面的編寫,利用LABVIEW的強大的外部接口能力和界面編輯能力,在LABVIEW框圖程序中調用動態鏈接庫文件來編寫所需的運動控制程序。

圖1 調用庫函數節點
傳統的LABVIEW調用動態鏈接庫函數會采用程序框圖中互連接口中的調用庫函數節點,如圖1所示。但是本實驗平臺開發牽涉到很多的函數,一個一個調用未免麻煩,況且牽涉到每個函數的數據類型以及參數問題,容易出現出錯,從而導致整個程序的運行錯誤。在此,提供了一種簡易的方法來調用動態鏈接庫,如圖2所示。

圖2 共享庫界面
在LABVIEW程序框圖中,選擇“工具”→ “導入”→“共享庫(.dll)”,輸入動態鏈接庫以及對應的頭文件,會自動生成如圖3所示的模塊,即代表每一個函數。一般在模塊的左邊是輸入的變量,右邊則是輸出的變量。

圖3 DLL函數模塊
2.1 運動控制卡的初始化設計
初始化是運動控制的第一步,包括了初始化板卡上的每個軸以及反饋參數、控制周期等,程序框圖如圖4所示。其中控制器初始化包括了幾個重要函數:

圖4 初始化程序框圖
(1)short GT_Open(unsigned long PortBase, unsigned long irq)打開運動控制器設備,用戶程序開始時必須調用此函數。PortBase為運動控制器基地址,irq為運動控制器中斷號。改函數返回0表示成功,非0表示失敗。
(2)short GT_ Close(Void)關閉運動控制器設備,用戶程序結束時必須調用此函數。函數返回0表示成功,非0表示失敗。

圖5 實驗平臺的前面板及程序框圖
(3)short GT_SetSmplTm(double Timer) 允許用戶根據系統要求設置控制周期,一般系統默認的周期為200ms,最好不要太小。由圖4可以看出初始化程序的執行是按從左向右的順序執行,從打開運動控制卡→復位→設置控制周期→消除每一軸的狀態→設置限位開關和編碼器方向。初始化是控制系統的基礎,只有成功的將控制卡初始化,才能繼續后面的工作。
2.2 系統界面設計
圖5是實驗平臺的主界面,可以看出在實驗平臺界面中包含多個實驗,在每個實驗中本文都將離線仿真與實時控制結合在一起,并對其做了簡要說明。點擊相應的布爾控件,就會彈出相應的實驗項目。在這里用到的方法是采用LABVIEW中獨有的事件結構,一般在涉及到用戶與程序交互時,都需要用到事件結構,如圖5b所示。事件結構包括事件源和while循環。事件源一般是用戶需要的一些操作,比如停止程序、改變窗體的大小等。While循環則是用來不斷檢測產生的事件,如果沒有while循環則無論發生多少事件,只能對第一次發生的事件處理。在事件結構中要對各個前面板上的控件按鈕添加“值改變”,這樣當程序運行時,點擊控件,其相應的值發生變化,觸動事件結構,彈出相應的子VI,也即是實驗項目。由于各個子VI的默認屬性是隱藏運行,所以要將彈出的子VI“窗體外觀”屬性設置為“對話框”形式[3]~[4]。
2.3 系統控制器設計
在如圖5a的前面板上,可以看到幾個控制算法的實驗,限于篇幅,選擇了PID實驗作為人機交互界面的介紹。編寫控制實驗的程序主要包括初始化,數據采集,控制器的設計、發出控制命令,其中初始化是每次運程序時執行一次,往后就不在執行初始化,以免讀出的數值總是以0計數。其它的步驟則要在循環里不斷的執行。圖6-a是PID控制器設計,PID是控制理論中最普遍采用的一種控制方法,是一種線性控制器,它的控制器輸入是給定值與實際輸出值的偏差,即:

PID控制規律的數學表達式為:

當程序執行時,可以手動調節圖6-a中的Kp、Ki、Kd三個值,同時在它的右側和下邊是仿真曲線圖和響應參數值。其中響應參數包括了超調量、穩定時間、上升時間等,通過這些性能指標,不斷的調整Kp、Ki、Kd,直到滿意為止在圖6-a的左下角是動畫演示,當程序運行時點擊這個控件,就會彈出圖7的界面,這是一個3D仿真演示,把Kp、Ki、Kd帶到仿真循環里,模擬倒立擺的運行情況以及抗干擾能力。在波形圖中顯示的是模擬的角度和位移數據,點擊“隨機干擾”控件,可以看出控制器的抗干擾能力。因為PID控制是單輸入單輸出的控制,所以在倒立擺控制中,只控制倒立擺的角度,位置則不受控制。所謂3D演示就是能從不同角度觀察倒立擺, LABVIEW 3D控件是LABVIEW 8x 版本以上所特有,目的就是搭建一個虛擬的物理模型,通過獲取外部的數據,來反映實體的運動情況,這種3D模型對于多自由度的物體體現的尤為明顯。圖7的動畫演示只是一種最理想的情況,忽略了外部的各種摩擦,不能完全反映運動的真實情況。

圖6 PlD實驗平臺
圖6(b)是倒立擺的實時控制,當點擊“運行”按鈕,會聽到上伺服的聲音,同時界面的退出控件以及其他幾個選項卡的顏色變灰,并且更重要的是它們都會失效,這是小心點擊“退出”控件,這時小車偶爾會出現失控的現象。點擊“停止”控件,方才能安全退出程序。在本實驗中,做到了離線仿真與實時控制的完美結合,實時控制中的Kp、Ki、Kd從局部變量中獲取,當實時控制效果不佳時,點擊“停止”控件,返回圖6(a)重新設置,此外整個實驗界面還具有監控的目的。

圖7 3D演示
工作主要是通過LABVIEW調用動態鏈接庫,來對普通運動控制卡的進行二次開發,與傳統的VC++、C++ Builder等編譯軟件相比,從而避免了繁瑣的界面編程,同時也縮短了開發周期。因為采用了模塊化設計,所以具有一定的擴展性和開放性,能更換其它的控制策略。本實驗平臺已通過了測試,運行穩定,現已應用到了本、專科學生控制理論教學當中,取得了不錯的效果。
[1]楊忠仁.基于LABVIEW數據采集系統[J].重慶大學學報(自然科學版),2007,24(2):32-35.
[2]于邵娜,李冶,等.動態鏈接庫技術在虛擬儀器開發中的應用[J].計算機工程與應用 2004(20):114-115,192.
[3]李艷萍.基于LABVIEW的運動控制系統的設計[J].中國科技信息,2009(22):95-96.
[4]萬志成,陶俊,等.基于LABVIEW的四自由度機械臂運動控制系統設計[J].機械與電子,2008(3):51-53.
余茂全(1986-),男,安徽合肥人,碩士研究生,安徽水電學院教師,研究方向:虛擬儀器的開發與應用,智能配電網。