国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

多循環(huán)程序框架的單軸運(yùn)動(dòng)控制系統(tǒng)設(shè)計(jì)

2013-09-12 01:29:22姜曉俊
關(guān)鍵詞:前面板狀態(tài)機(jī)隊(duì)列

姜曉俊,李 智

(青島大學(xué)機(jī)電工程學(xué)院,山東青島 266071)

多循環(huán)程序框架的單軸運(yùn)動(dòng)控制系統(tǒng)設(shè)計(jì)

姜曉俊,李 智

(青島大學(xué)機(jī)電工程學(xué)院,山東青島 266071)

以單軸運(yùn)動(dòng)控制系統(tǒng)為例,介紹了多循環(huán)程序框架,并結(jié)合事件響應(yīng)機(jī)制,論述了基于此機(jī)制的控制系統(tǒng)的設(shè)計(jì)思路和實(shí)現(xiàn)過(guò)程?;诙嘌h(huán)架構(gòu)的運(yùn)動(dòng)控制系統(tǒng),可以對(duì)不同任務(wù)進(jìn)行分類(lèi)處理,使得程序有良好的可擴(kuò)展性,并易于維護(hù),事件響應(yīng)機(jī)制可以控制程序執(zhí)行流程的改變,且又不占用、浪費(fèi)CPU的資源,能夠很好地響應(yīng)前面板動(dòng)作。

LabVIEW;運(yùn)動(dòng)控制;生產(chǎn)者/消費(fèi)者結(jié)構(gòu);多循環(huán)程序框架

LabVIEW是一種圖形化的編程語(yǔ)言和開(kāi)發(fā)環(huán)境,它廣泛地被工業(yè)界、學(xué)術(shù)界和研究實(shí)驗(yàn)室所接受,被公認(rèn)為是標(biāo)準(zhǔn)的數(shù)據(jù)采集和儀器控制軟件,可為實(shí)現(xiàn)儀器編程和運(yùn)動(dòng)控制系統(tǒng)提供便捷途徑[1]。

LabVIEW提供了某些基本程序框架,例如:靜態(tài)單循環(huán)結(jié)構(gòu)——順序結(jié)構(gòu);動(dòng)態(tài)單循環(huán)結(jié)構(gòu)——狀態(tài)機(jī);多循環(huán)結(jié)構(gòu)——生產(chǎn)者/消費(fèi)者結(jié)構(gòu)。雖然生產(chǎn)者/消費(fèi)者多循環(huán)框架足以充當(dāng)多數(shù)虛擬儀器項(xiàng)目主框架,但是有時(shí)候,需要對(duì)項(xiàng)目的不同處理模塊進(jìn)一步分類(lèi),將同一類(lèi)型的工作歸為一類(lèi),以期獲得較高的運(yùn)行效率。本文的多循環(huán)任務(wù)框架由3個(gè)獨(dú)立隊(duì)列在4個(gè)循環(huán)中間傳遞不同類(lèi)型的數(shù)據(jù),包括一個(gè)獨(dú)立的循環(huán)處理GUI事件、一個(gè)獨(dú)立的循環(huán)進(jìn)行狀態(tài)轉(zhuǎn)換、一個(gè)獨(dú)立的循環(huán)進(jìn)行運(yùn)動(dòng)顯示和另一個(gè)單獨(dú)的循環(huán)進(jìn)行錯(cuò)誤處理等,以協(xié)調(diào)各循環(huán)完成不同的任務(wù)。

1 LabVIEW編程架構(gòu)

1.1 生產(chǎn)者/消費(fèi)者結(jié)構(gòu)

生產(chǎn)者/消費(fèi)者結(jié)構(gòu)包含兩個(gè)并行循環(huán),即生產(chǎn)者循環(huán)和消費(fèi)者循環(huán),通過(guò)隊(duì)列在循環(huán)之間傳遞數(shù)據(jù)。生產(chǎn)者循環(huán)中包含一個(gè)事件結(jié)構(gòu),可以捕獲在VI運(yùn)行時(shí)任何時(shí)刻發(fā)生的事件。事件發(fā)生時(shí),將事件放入事件隊(duì)列。當(dāng)事件結(jié)構(gòu)執(zhí)行時(shí),將從隊(duì)列中取出最早的事件(先進(jìn)先出[FIFO])。如果隊(duì)列中沒(méi)有事件,將一直等到下一個(gè)事件發(fā)生。因此,無(wú)論是處理事件過(guò)程中或處理事件后發(fā)生的事件,事件結(jié)構(gòu)都不會(huì)遺漏,在事件結(jié)構(gòu)處理這些事件之前將一直保存在事件隊(duì)列中[2-4]。

1.2 多循環(huán)框架

大型多循環(huán)框架通常由兩個(gè)以上獨(dú)立隊(duì)列在多個(gè)循環(huán)中間傳遞不同類(lèi)型的數(shù)據(jù),以協(xié)調(diào)各循環(huán)完成不同的任務(wù)。相較于生產(chǎn)/消費(fèi)者多循環(huán)框架,本文采用的多循環(huán)框架主要增加了以下幾方面的內(nèi)容[5]:

a.循環(huán)數(shù)量從2個(gè)增加至4個(gè)。

除了用于收集用戶(hù)界面信息的GUI循環(huán)和主狀態(tài)機(jī)循環(huán)外,還增加了運(yùn)動(dòng)顯示循環(huán)和錯(cuò)誤處理循環(huán),這4個(gè)循環(huán)各自獨(dú)立運(yùn)行,完成不同的任務(wù)。GUI循環(huán)在程序運(yùn)行的整個(gè)過(guò)程中,獲取前面板控件動(dòng)作并執(zhí)行相應(yīng)的程序。主狀態(tài)機(jī)循環(huán)便于狀態(tài)的轉(zhuǎn)移,包括“M -Initial”、“M -Lamp”、“M -Open”、“M - Move”、“M - Close”和“M - Exit”分支。運(yùn)動(dòng)顯示循環(huán)主要實(shí)現(xiàn)軸運(yùn)動(dòng)的位移、速度、加速度的實(shí)時(shí)顯示,按“C -Initial”、“C -Move”和“C -Exit”進(jìn)行分類(lèi)。

b.使用3個(gè)獨(dú)立的隊(duì)列在循環(huán)之間傳遞數(shù)據(jù)。

隊(duì)列“MainQ”用于在用戶(hù)界面循環(huán)和主狀態(tài)機(jī)循環(huán)之間傳遞控制命令。它使用枚舉常量作為數(shù)據(jù)類(lèi)型,通常將用戶(hù)界面循環(huán)中的指令傳遞到主狀態(tài)機(jī)循環(huán)中,以便對(duì)指令進(jìn)行響應(yīng)處理。隊(duì)列“CtrlQ”和“MainQ”使用相同的數(shù)據(jù)類(lèi)型,用于在主狀態(tài)機(jī)循環(huán)和運(yùn)動(dòng)顯示循環(huán)之間傳遞控制命令。隊(duì)列“ErrQ”以錯(cuò)誤簇作為數(shù)據(jù)類(lèi)型,用于將用戶(hù)界面循環(huán)、主狀態(tài)機(jī)循環(huán)和運(yùn)動(dòng)顯示循環(huán)中的錯(cuò)誤數(shù)據(jù)傳遞至錯(cuò)誤處理循環(huán),以便集中處理。運(yùn)動(dòng)控制循環(huán)框圖如圖1所示。

圖1 運(yùn)動(dòng)控制循環(huán)框圖

c.增強(qiáng)了錯(cuò)誤捕獲和處理能力。

虛擬儀器程序設(shè)計(jì)時(shí)必須考慮對(duì)程序錯(cuò)誤的處理,這是因?yàn)閷?duì)錯(cuò)誤捕獲和處理可以有效地提高項(xiàng)目的健壯性。為此在多循環(huán)框架中,專(zhuān)門(mén)使用一個(gè)隊(duì)列和獨(dú)立的循環(huán)來(lái)對(duì)程序中發(fā)生的錯(cuò)誤進(jìn)行集中處理。為了盡可能全面地捕獲錯(cuò)誤,在用戶(hù)界面循環(huán)、主狀態(tài)機(jī)循環(huán)和運(yùn)動(dòng)顯示循環(huán)中均使用了錯(cuò)誤捕捉函數(shù),它的輸入?yún)?shù)包含一個(gè)“ErrQ”隊(duì)列的引用和一個(gè)錯(cuò)誤簇控件,輸出參數(shù)只有一個(gè)錯(cuò)誤簇指示器。將程序運(yùn)行時(shí)捕捉到的錯(cuò)誤通過(guò)“ErrQ”隊(duì)列發(fā)送到錯(cuò)誤處理循環(huán),進(jìn)行處理。

2 系統(tǒng)程序設(shè)計(jì)

實(shí)驗(yàn)需要實(shí)現(xiàn)對(duì)單軸的運(yùn)動(dòng)控制,并實(shí)時(shí)顯示軸的位移、速度和加速度曲線(xiàn)。實(shí)驗(yàn)設(shè)備為固高公司的XYZ三維運(yùn)動(dòng)實(shí)驗(yàn)平臺(tái),采用GT系列運(yùn)動(dòng)控制器,可實(shí)現(xiàn)多軸的運(yùn)動(dòng)控制。整個(gè)程序設(shè)計(jì)建立在上述多循環(huán)架構(gòu)上。對(duì)不同的任務(wù)進(jìn)行了分類(lèi)處理,使程序具有良好的擴(kuò)展性,并易于維護(hù)。

2.1 控制軸的開(kāi)啟

程序開(kāi)始運(yùn)行時(shí)進(jìn)行初始化設(shè)置(如對(duì)前面板控件狀態(tài)等的設(shè)置),程序轉(zhuǎn)入Main循環(huán)和Ctrl循環(huán)的“Initial”分支來(lái)執(zhí)行相應(yīng)操作,同時(shí)錯(cuò)誤處理循環(huán)進(jìn)行錯(cuò)誤捕獲。

按下前面板的“開(kāi)啟軸”按鈕后,事件結(jié)構(gòu)響應(yīng),Main循環(huán)進(jìn)入“M-Lamp”分支,執(zhí)行點(diǎn)亮板卡狀態(tài),隨后進(jìn)入“M-Open”分支,執(zhí)行“板卡初始化(Card Initial.vi)”,點(diǎn)亮軸狀態(tài),并控制3軸的開(kāi)啟(Axis On.vi)。此時(shí)前面板軸狀態(tài)、板卡狀態(tài)按鈕處于點(diǎn)亮(True)狀態(tài),表示軸已開(kāi)啟。Main循環(huán)的“M-Open”分支如圖2所示。

圖2 Main循環(huán)的“M-Open”分支

2.2 控制軸的運(yùn)行

按下前面板的“運(yùn)行”按鈕后,事件結(jié)構(gòu)響應(yīng),Main循環(huán)進(jìn)入“M-Move”分支,當(dāng)前軸完成指定的運(yùn)動(dòng)(S Motion.vi/T Motion.vi/V Motion.vi)。隨后Ctrl循環(huán)執(zhí)行“C-Move”分支,實(shí)時(shí)顯示當(dāng)前軸的位移、速度和加速度的時(shí)間波形圖。Main循環(huán)的“M-Move”分支如圖3(a)所示,Ctrl循環(huán)的“C-Move”分支如圖3(b)所示。

圖3 控制軸運(yùn)行的“Move”分支

2.3 控制軸的關(guān)閉

按下前面板的“關(guān)閉軸”按鈕后,事件結(jié)構(gòu)響應(yīng),Main循環(huán)進(jìn)入“M-Close”分支,利用關(guān)閉軸驅(qū)動(dòng)使能函數(shù),將3軸關(guān)閉。

2.4 退出實(shí)驗(yàn)

按下前面板的“退出實(shí)驗(yàn)”按鈕后,事件結(jié)構(gòu)響應(yīng),將錯(cuò)誤簇中的錯(cuò)誤代碼的值設(shè)置為用戶(hù)自定義錯(cuò)誤代碼“9999”(用戶(hù)自定義錯(cuò)誤代碼范圍為“5000~9999”和“-8999~ -8000”,正值一般用于告警,負(fù)值用于錯(cuò)誤),并置入“ErrQ”隊(duì)列,以示告警。Main循環(huán)進(jìn)入“M-Exit”分支,執(zhí)行關(guān)閉軸狀態(tài)和板卡狀態(tài),并退出Main循環(huán)。然后Ctrl循環(huán)進(jìn)入“C-Exit”分支,執(zhí)行關(guān)閉3軸、關(guān)閉運(yùn)動(dòng)控制器,釋放該隊(duì)列的資源并退出Ctrl循環(huán)。當(dāng)錯(cuò)誤簇循環(huán)發(fā)現(xiàn)收到的錯(cuò)誤簇錯(cuò)誤代碼為“9999”時(shí),就釋放該隊(duì)列的資源,退出錯(cuò)誤處理循環(huán)。退出錯(cuò)誤處理循環(huán)如圖4所示。

圖4 退出錯(cuò)誤處理循環(huán)

3 實(shí)驗(yàn)結(jié)果

以當(dāng)前軸(1軸)的S-曲線(xiàn)運(yùn)動(dòng)模式為例,分別設(shè)置速度、加速度、加加速度、目標(biāo)位置及電機(jī)PID參數(shù),啟動(dòng)運(yùn)行,點(diǎn)擊前面板開(kāi)啟軸和運(yùn)行按鈕,結(jié)果如圖5所示。

4 結(jié)束語(yǔ)

本文采用多循環(huán)架構(gòu)的運(yùn)動(dòng)控制系統(tǒng),具有良好的人機(jī)界面,運(yùn)動(dòng)參數(shù)顯示便于實(shí)現(xiàn)對(duì)設(shè)備在各種運(yùn)動(dòng)方式下的運(yùn)行狀況進(jìn)行實(shí)時(shí)監(jiān)控,且采用的隊(duì)列的數(shù)據(jù)傳輸方式,滿(mǎn)足了數(shù)據(jù)緩存的需要。使用并行執(zhí)行的多循環(huán)可以對(duì)不同任務(wù)進(jìn)行分類(lèi)處理,方便實(shí)現(xiàn)功能的擴(kuò)充,提高了程序運(yùn)行的效率。對(duì)于復(fù)雜系統(tǒng),采用多循環(huán)架構(gòu)更加有應(yīng)用價(jià)值。

圖5 1軸的S-曲線(xiàn)運(yùn)動(dòng)模式運(yùn)行實(shí)驗(yàn)結(jié)果顯示

[1]侯國(guó)屏,王珅,葉齊.LabVIEW7.1編程與虛擬儀器設(shè)計(jì)[M].北京:清華大學(xué)出版社,2005.

[2]Rick Bitter,Taqi Mohiuddin,Matt Nawrocki.LabVIEW Advanced Programming Techniques[M].Second Edition.Floride:CRC Press LLC,2007.

[3]Jeffrey Travis,Jim Kring.LabVIEW for Everyone[M].London:Prentice Hall,2008.

[4](美國(guó))(JEFFREYTRAVIS),(美國(guó))(JIMKRING).LabVIEW大學(xué)實(shí)用教程[M].3版.喬瑞萍,譯.北京:電子工業(yè)出版社,2008.

[5]楊高科.LabVIEW虛擬儀器項(xiàng)目開(kāi)發(fā)與管理[M].北京:機(jī)械工業(yè)出版社,2012.

Design of Single Axis Motion Control System Based on Multi-loop Program Framework

JIANG Xiaojun,LI Zhi
(Qingdao University,Shandong Qingdao,266071,China)

Taking the single axis motion control system as an example,the article introduces the multiple-loop application framework and combining with event response mechanism,and the realizing process of the control system based on the mechanism.The motion control system based on the Multiple-loop framework can classify different tasks,and make the program have strong expansibility,and easy maintenance,emergency response mechanism can change the execution process of control program,and do not waste the resource of CPU.

LabVIEW;Motion Control;Producer/Consumer Structure;Multi-loop Program Framework

TP273+.5

A

2095-509X(2013)02-0058-03

10.3969/j.issn.2095 -509X.2013.02.015

2012-09-14

姜曉俊(1987—),女,山東煙臺(tái)人,青島大學(xué)碩士研究生,主要研究方向?yàn)闇y(cè)試與智能儀器。

猜你喜歡
前面板狀態(tài)機(jī)隊(duì)列
顏值高和散熱強(qiáng)可以并存3款高品質(zhì)機(jī)箱推薦
隊(duì)列里的小秘密
基于多隊(duì)列切換的SDN擁塞控制*
軟件(2020年3期)2020-04-20 00:58:44
基于有限狀態(tài)機(jī)的交會(huì)對(duì)接飛行任務(wù)規(guī)劃方法
電競(jìng)潮牌范 航嘉GX520S機(jī)箱評(píng)測(cè)
在隊(duì)列里
豐田加速駛?cè)胱詣?dòng)駕駛隊(duì)列
剛撓印制板在機(jī)載設(shè)備電子機(jī)箱中的結(jié)合與應(yīng)用
FPGA設(shè)計(jì)中狀態(tài)機(jī)安全性研究
基于反熔絲FPGA的有限狀態(tài)機(jī)加固設(shè)計(jì)
阳城县| 宜阳县| 化隆| 伊金霍洛旗| 西平县| 云霄县| 阜平县| 阜新| 南靖县| 彝良县| 浦江县| 合江县| 正镶白旗| 富顺县| 江城| 泰州市| 清远市| 曲靖市| 色达县| 黄冈市| 桐乡市| 玉田县| 西安市| 阳东县| 定西市| 读书| 仁化县| 屯留县| 仙桃市| 天镇县| 定西市| 湖州市| 荔波县| 东乌珠穆沁旗| 黑水县| 香港 | 汶上县| 淮阳县| 兴文县| 安福县| 调兵山市|