安徽水利水電職業(yè)技術(shù)學(xué)院 余茂全
基于LABVIEW的普通運(yùn)動(dòng)控制卡的開發(fā)與應(yīng)用
安徽水利水電職業(yè)技術(shù)學(xué)院 余茂全
設(shè)計(jì)了以LABVIEW和運(yùn)動(dòng)控制卡為基礎(chǔ),以直線倒立擺為被控對(duì)象的控制系統(tǒng),采用了調(diào)用動(dòng)態(tài)鏈接庫的方式,利用了LABVIEW中提供的共享庫函數(shù)接口,設(shè)計(jì)了LABVIEW與運(yùn)動(dòng)控制卡之間的數(shù)據(jù)采集和運(yùn)動(dòng)控制程序,并最終開發(fā)了用于教學(xué)的倒立擺實(shí)驗(yàn)平臺(tái)。該平臺(tái)采用模塊化設(shè)計(jì),具有可視化的人機(jī)交互界面,同時(shí)還可以為控制理論的研究與教學(xué)提供良好的實(shí)驗(yàn)環(huán)境,操作方便并且具有一定的開放性。
動(dòng)態(tài)鏈接庫;運(yùn)動(dòng)控制卡;人機(jī)交互界面
倒立擺是一種典型的非線性不穩(wěn)定系統(tǒng),在控制理論算法驗(yàn)證和課程教學(xué)中,將倒立擺作為經(jīng)典被控對(duì)象開發(fā)的實(shí)驗(yàn)裝置有廣泛的應(yīng)用價(jià)值。LABVIEW是由美國國家儀器公司(NI)開發(fā)的一種圖形化編程語言,它廣泛地被工業(yè)界、學(xué)術(shù)界、和研究實(shí)驗(yàn)室所接受,視為一個(gè)標(biāo)準(zhǔn)的數(shù)據(jù)采集和儀器控制軟件,具有可視化、編程方便等特點(diǎn)[1]。在運(yùn)動(dòng)控制方面,NI公司有專門的硬件以及相應(yīng)的驅(qū)動(dòng)程序,但是價(jià)格往往相當(dāng)昂貴,一般實(shí)驗(yàn)室往往接受不了。利用固高公司提供的運(yùn)動(dòng)控制卡的動(dòng)態(tài)鏈接庫,采用調(diào)用的方式,進(jìn)行二次開發(fā),不僅大大降低成本、縮短開發(fā)周期,而且可以使界面美觀。
動(dòng)態(tài)鏈接庫(DLL)是基于windows系統(tǒng)程序設(shè)計(jì)中的一個(gè)非常重要的組成部分,它是從c語言函數(shù)庫和Pascal庫單元的概念發(fā)展而來的,具有節(jié)省內(nèi)存、資源共享、動(dòng)態(tài)加載等特點(diǎn)。[2]在開發(fā)控制系統(tǒng)實(shí)驗(yàn)平臺(tái)的過程中,選用的是固高公司生產(chǎn)的GT-400型四軸運(yùn)動(dòng)控制卡,該卡提供Windows下的驅(qū)動(dòng)程序和在BorlandC++3.1、VC等多種環(huán)境下開發(fā)所需的函數(shù)庫。雖然在這些編程環(huán)境中很容易實(shí)現(xiàn)所需的運(yùn)動(dòng)控制,但是,若要開發(fā)出一個(gè)美觀的人機(jī)交互界面,將會(huì)有很大一部分時(shí)間花在程序主界面的編寫,利用LABVIEW的強(qiáng)大的外部接口能力和界面編輯能力,在LABVIEW框圖程序中調(diào)用動(dòng)態(tài)鏈接庫文件來編寫所需的運(yùn)動(dòng)控制程序。
圖1 調(diào)用庫函數(shù)節(jié)點(diǎn)
傳統(tǒng)的LABVIEW調(diào)用動(dòng)態(tài)鏈接庫函數(shù)會(huì)采用程序框圖中互連接口中的調(diào)用庫函數(shù)節(jié)點(diǎn),如圖1所示。但是本實(shí)驗(yàn)平臺(tái)開發(fā)牽涉到很多的函數(shù),一個(gè)一個(gè)調(diào)用未免麻煩,況且牽涉到每個(gè)函數(shù)的數(shù)據(jù)類型以及參數(shù)問題,容易出現(xiàn)出錯(cuò),從而導(dǎo)致整個(gè)程序的運(yùn)行錯(cuò)誤。在此,提供了一種簡(jiǎn)易的方法來調(diào)用動(dòng)態(tài)鏈接庫,如圖2所示。
圖2 共享庫界面
在LABVIEW程序框圖中,選擇“工具”→ “導(dǎo)入”→“共享庫(.dll)”,輸入動(dòng)態(tài)鏈接庫以及對(duì)應(yīng)的頭文件,會(huì)自動(dòng)生成如圖3所示的模塊,即代表每一個(gè)函數(shù)。一般在模塊的左邊是輸入的變量,右邊則是輸出的變量。
圖3 DLL函數(shù)模塊
2.1 運(yùn)動(dòng)控制卡的初始化設(shè)計(jì)
初始化是運(yùn)動(dòng)控制的第一步,包括了初始化板卡上的每個(gè)軸以及反饋參數(shù)、控制周期等,程序框圖如圖4所示。其中控制器初始化包括了幾個(gè)重要函數(shù):
圖4 初始化程序框圖
(1)short GT_Open(unsigned long PortBase, unsigned long irq)打開運(yùn)動(dòng)控制器設(shè)備,用戶程序開始時(shí)必須調(diào)用此函數(shù)。PortBase為運(yùn)動(dòng)控制器基地址,irq為運(yùn)動(dòng)控制器中斷號(hào)。改函數(shù)返回0表示成功,非0表示失敗。
(2)short GT_ Close(Void)關(guān)閉運(yùn)動(dòng)控制器設(shè)備,用戶程序結(jié)束時(shí)必須調(diào)用此函數(shù)。函數(shù)返回0表示成功,非0表示失敗。
圖5 實(shí)驗(yàn)平臺(tái)的前面板及程序框圖
(3)short GT_SetSmplTm(double Timer) 允許用戶根據(jù)系統(tǒng)要求設(shè)置控制周期,一般系統(tǒng)默認(rèn)的周期為200ms,最好不要太小。由圖4可以看出初始化程序的執(zhí)行是按從左向右的順序執(zhí)行,從打開運(yùn)動(dòng)控制卡→復(fù)位→設(shè)置控制周期→消除每一軸的狀態(tài)→設(shè)置限位開關(guān)和編碼器方向。初始化是控制系統(tǒng)的基礎(chǔ),只有成功的將控制卡初始化,才能繼續(xù)后面的工作。
2.2 系統(tǒng)界面設(shè)計(jì)
圖5是實(shí)驗(yàn)平臺(tái)的主界面,可以看出在實(shí)驗(yàn)平臺(tái)界面中包含多個(gè)實(shí)驗(yàn),在每個(gè)實(shí)驗(yàn)中本文都將離線仿真與實(shí)時(shí)控制結(jié)合在一起,并對(duì)其做了簡(jiǎn)要說明。點(diǎn)擊相應(yīng)的布爾控件,就會(huì)彈出相應(yīng)的實(shí)驗(yàn)項(xiàng)目。在這里用到的方法是采用LABVIEW中獨(dú)有的事件結(jié)構(gòu),一般在涉及到用戶與程序交互時(shí),都需要用到事件結(jié)構(gòu),如圖5b所示。事件結(jié)構(gòu)包括事件源和while循環(huán)。事件源一般是用戶需要的一些操作,比如停止程序、改變窗體的大小等。While循環(huán)則是用來不斷檢測(cè)產(chǎn)生的事件,如果沒有while循環(huán)則無論發(fā)生多少事件,只能對(duì)第一次發(fā)生的事件處理。在事件結(jié)構(gòu)中要對(duì)各個(gè)前面板上的控件按鈕添加“值改變”,這樣當(dāng)程序運(yùn)行時(shí),點(diǎn)擊控件,其相應(yīng)的值發(fā)生變化,觸動(dòng)事件結(jié)構(gòu),彈出相應(yīng)的子VI,也即是實(shí)驗(yàn)項(xiàng)目。由于各個(gè)子VI的默認(rèn)屬性是隱藏運(yùn)行,所以要將彈出的子VI“窗體外觀”屬性設(shè)置為“對(duì)話框”形式[3]~[4]。
2.3 系統(tǒng)控制器設(shè)計(jì)
在如圖5a的前面板上,可以看到幾個(gè)控制算法的實(shí)驗(yàn),限于篇幅,選擇了PID實(shí)驗(yàn)作為人機(jī)交互界面的介紹。編寫控制實(shí)驗(yàn)的程序主要包括初始化,數(shù)據(jù)采集,控制器的設(shè)計(jì)、發(fā)出控制命令,其中初始化是每次運(yùn)程序時(shí)執(zhí)行一次,往后就不在執(zhí)行初始化,以免讀出的數(shù)值總是以0計(jì)數(shù)。其它的步驟則要在循環(huán)里不斷的執(zhí)行。圖6-a是PID控制器設(shè)計(jì),PID是控制理論中最普遍采用的一種控制方法,是一種線性控制器,它的控制器輸入是給定值與實(shí)際輸出值的偏差,即:
PID控制規(guī)律的數(shù)學(xué)表達(dá)式為:
當(dāng)程序執(zhí)行時(shí),可以手動(dòng)調(diào)節(jié)圖6-a中的Kp、Ki、Kd三個(gè)值,同時(shí)在它的右側(cè)和下邊是仿真曲線圖和響應(yīng)參數(shù)值。其中響應(yīng)參數(shù)包括了超調(diào)量、穩(wěn)定時(shí)間、上升時(shí)間等,通過這些性能指標(biāo),不斷的調(diào)整Kp、Ki、Kd,直到滿意為止在圖6-a的左下角是動(dòng)畫演示,當(dāng)程序運(yùn)行時(shí)點(diǎn)擊這個(gè)控件,就會(huì)彈出圖7的界面,這是一個(gè)3D仿真演示,把Kp、Ki、Kd帶到仿真循環(huán)里,模擬倒立擺的運(yùn)行情況以及抗干擾能力。在波形圖中顯示的是模擬的角度和位移數(shù)據(jù),點(diǎn)擊“隨機(jī)干擾”控件,可以看出控制器的抗干擾能力。因?yàn)镻ID控制是單輸入單輸出的控制,所以在倒立擺控制中,只控制倒立擺的角度,位置則不受控制。所謂3D演示就是能從不同角度觀察倒立擺, LABVIEW 3D控件是LABVIEW 8x 版本以上所特有,目的就是搭建一個(gè)虛擬的物理模型,通過獲取外部的數(shù)據(jù),來反映實(shí)體的運(yùn)動(dòng)情況,這種3D模型對(duì)于多自由度的物體體現(xiàn)的尤為明顯。圖7的動(dòng)畫演示只是一種最理想的情況,忽略了外部的各種摩擦,不能完全反映運(yùn)動(dòng)的真實(shí)情況。
圖6 PlD實(shí)驗(yàn)平臺(tái)
圖6(b)是倒立擺的實(shí)時(shí)控制,當(dāng)點(diǎn)擊“運(yùn)行”按鈕,會(huì)聽到上伺服的聲音,同時(shí)界面的退出控件以及其他幾個(gè)選項(xiàng)卡的顏色變灰,并且更重要的是它們都會(huì)失效,這是小心點(diǎn)擊“退出”控件,這時(shí)小車偶爾會(huì)出現(xiàn)失控的現(xiàn)象。點(diǎn)擊“停止”控件,方才能安全退出程序。在本實(shí)驗(yàn)中,做到了離線仿真與實(shí)時(shí)控制的完美結(jié)合,實(shí)時(shí)控制中的Kp、Ki、Kd從局部變量中獲取,當(dāng)實(shí)時(shí)控制效果不佳時(shí),點(diǎn)擊“停止”控件,返回圖6(a)重新設(shè)置,此外整個(gè)實(shí)驗(yàn)界面還具有監(jiān)控的目的。
圖7 3D演示
工作主要是通過LABVIEW調(diào)用動(dòng)態(tài)鏈接庫,來對(duì)普通運(yùn)動(dòng)控制卡的進(jìn)行二次開發(fā),與傳統(tǒng)的VC++、C++ Builder等編譯軟件相比,從而避免了繁瑣的界面編程,同時(shí)也縮短了開發(fā)周期。因?yàn)椴捎昧四K化設(shè)計(jì),所以具有一定的擴(kuò)展性和開放性,能更換其它的控制策略。本實(shí)驗(yàn)平臺(tái)已通過了測(cè)試,運(yùn)行穩(wěn)定,現(xiàn)已應(yīng)用到了本、專科學(xué)生控制理論教學(xué)當(dāng)中,取得了不錯(cuò)的效果。
[1]楊忠仁.基于LABVIEW數(shù)據(jù)采集系統(tǒng)[J].重慶大學(xué)學(xué)報(bào)(自然科學(xué)版),2007,24(2):32-35.
[2]于邵娜,李冶,等.動(dòng)態(tài)鏈接庫技術(shù)在虛擬儀器開發(fā)中的應(yīng)用[J].計(jì)算機(jī)工程與應(yīng)用 2004(20):114-115,192.
[3]李艷萍.基于LABVIEW的運(yùn)動(dòng)控制系統(tǒng)的設(shè)計(jì)[J].中國科技信息,2009(22):95-96.
[4]萬志成,陶俊,等.基于LABVIEW的四自由度機(jī)械臂運(yùn)動(dòng)控制系統(tǒng)設(shè)計(jì)[J].機(jī)械與電子,2008(3):51-53.
余茂全(1986-),男,安徽合肥人,碩士研究生,安徽水電學(xué)院教師,研究方向:虛擬儀器的開發(fā)與應(yīng)用,智能配電網(wǎng)。