多循环程序框架的单轴运动控制系统设计
2013-09-12姜晓俊
姜晓俊,李 智
(青岛大学机电工程学院,山东青岛 266071)
多循环程序框架的单轴运动控制系统设计
姜晓俊,李 智
(青岛大学机电工程学院,山东青岛 266071)
以单轴运动控制系统为例,介绍了多循环程序框架,并结合事件响应机制,论述了基于此机制的控制系统的设计思路和实现过程。基于多循环架构的运动控制系统,可以对不同任务进行分类处理,使得程序有良好的可扩展性,并易于维护,事件响应机制可以控制程序执行流程的改变,且又不占用、浪费CPU的资源,能够很好地响应前面板动作。
LabVIEW;运动控制;生产者/消费者结构;多循环程序框架
LabVIEW是一种图形化的编程语言和开发环境,它广泛地被工业界、学术界和研究实验室所接受,被公认为是标准的数据采集和仪器控制软件,可为实现仪器编程和运动控制系统提供便捷途径[1]。
LabVIEW提供了某些基本程序框架,例如:静态单循环结构——顺序结构;动态单循环结构——状态机;多循环结构——生产者/消费者结构。虽然生产者/消费者多循环框架足以充当多数虚拟仪器项目主框架,但是有时候,需要对项目的不同处理模块进一步分类,将同一类型的工作归为一类,以期获得较高的运行效率。本文的多循环任务框架由3个独立队列在4个循环中间传递不同类型的数据,包括一个独立的循环处理GUI事件、一个独立的循环进行状态转换、一个独立的循环进行运动显示和另一个单独的循环进行错误处理等,以协调各循环完成不同的任务。
1 LabVIEW编程架构
1.1 生产者/消费者结构
生产者/消费者结构包含两个并行循环,即生产者循环和消费者循环,通过队列在循环之间传递数据。生产者循环中包含一个事件结构,可以捕获在VI运行时任何时刻发生的事件。事件发生时,将事件放入事件队列。当事件结构执行时,将从队列中取出最早的事件(先进先出[FIFO])。如果队列中没有事件,将一直等到下一个事件发生。因此,无论是处理事件过程中或处理事件后发生的事件,事件结构都不会遗漏,在事件结构处理这些事件之前将一直保存在事件队列中[2-4]。
1.2 多循环框架
大型多循环框架通常由两个以上独立队列在多个循环中间传递不同类型的数据,以协调各循环完成不同的任务。相较于生产/消费者多循环框架,本文采用的多循环框架主要增加了以下几方面的内容[5]:
a.循环数量从2个增加至4个。
除了用于收集用户界面信息的GUI循环和主状态机循环外,还增加了运动显示循环和错误处理循环,这4个循环各自独立运行,完成不同的任务。GUI循环在程序运行的整个过程中,获取前面板控件动作并执行相应的程序。主状态机循环便于状态的转移,包括“M -Initial”、“M -Lamp”、“M -Open”、“M - Move”、“M - Close”和“M - Exit”分支。运动显示循环主要实现轴运动的位移、速度、加速度的实时显示,按“C -Initial”、“C -Move”和“C -Exit”进行分类。
b.使用3个独立的队列在循环之间传递数据。
队列“MainQ”用于在用户界面循环和主状态机循环之间传递控制命令。它使用枚举常量作为数据类型,通常将用户界面循环中的指令传递到主状态机循环中,以便对指令进行响应处理。队列“CtrlQ”和“MainQ”使用相同的数据类型,用于在主状态机循环和运动显示循环之间传递控制命令。队列“ErrQ”以错误簇作为数据类型,用于将用户界面循环、主状态机循环和运动显示循环中的错误数据传递至错误处理循环,以便集中处理。运动控制循环框图如图1所示。
图1 运动控制循环框图
c.增强了错误捕获和处理能力。
虚拟仪器程序设计时必须考虑对程序错误的处理,这是因为对错误捕获和处理可以有效地提高项目的健壮性。为此在多循环框架中,专门使用一个队列和独立的循环来对程序中发生的错误进行集中处理。为了尽可能全面地捕获错误,在用户界面循环、主状态机循环和运动显示循环中均使用了错误捕捉函数,它的输入参数包含一个“ErrQ”队列的引用和一个错误簇控件,输出参数只有一个错误簇指示器。将程序运行时捕捉到的错误通过“ErrQ”队列发送到错误处理循环,进行处理。
2 系统程序设计
实验需要实现对单轴的运动控制,并实时显示轴的位移、速度和加速度曲线。实验设备为固高公司的XYZ三维运动实验平台,采用GT系列运动控制器,可实现多轴的运动控制。整个程序设计建立在上述多循环架构上。对不同的任务进行了分类处理,使程序具有良好的扩展性,并易于维护。
2.1 控制轴的开启
程序开始运行时进行初始化设置(如对前面板控件状态等的设置),程序转入Main循环和Ctrl循环的“Initial”分支来执行相应操作,同时错误处理循环进行错误捕获。
按下前面板的“开启轴”按钮后,事件结构响应,Main循环进入“M-Lamp”分支,执行点亮板卡状态,随后进入“M-Open”分支,执行“板卡初始化(Card Initial.vi)”,点亮轴状态,并控制3轴的开启(Axis On.vi)。此时前面板轴状态、板卡状态按钮处于点亮(True)状态,表示轴已开启。Main循环的“M-Open”分支如图2所示。
图2 Main循环的“M-Open”分支
2.2 控制轴的运行
按下前面板的“运行”按钮后,事件结构响应,Main循环进入“M-Move”分支,当前轴完成指定的运动(S Motion.vi/T Motion.vi/V Motion.vi)。随后Ctrl循环执行“C-Move”分支,实时显示当前轴的位移、速度和加速度的时间波形图。Main循环的“M-Move”分支如图3(a)所示,Ctrl循环的“C-Move”分支如图3(b)所示。
图3 控制轴运行的“Move”分支
2.3 控制轴的关闭
按下前面板的“关闭轴”按钮后,事件结构响应,Main循环进入“M-Close”分支,利用关闭轴驱动使能函数,将3轴关闭。
2.4 退出实验
按下前面板的“退出实验”按钮后,事件结构响应,将错误簇中的错误代码的值设置为用户自定义错误代码“9999”(用户自定义错误代码范围为“5000~9999”和“-8999~ -8000”,正值一般用于告警,负值用于错误),并置入“ErrQ”队列,以示告警。Main循环进入“M-Exit”分支,执行关闭轴状态和板卡状态,并退出Main循环。然后Ctrl循环进入“C-Exit”分支,执行关闭3轴、关闭运动控制器,释放该队列的资源并退出Ctrl循环。当错误簇循环发现收到的错误簇错误代码为“9999”时,就释放该队列的资源,退出错误处理循环。退出错误处理循环如图4所示。
图4 退出错误处理循环
3 实验结果
以当前轴(1轴)的S-曲线运动模式为例,分别设置速度、加速度、加加速度、目标位置及电机PID参数,启动运行,点击前面板开启轴和运行按钮,结果如图5所示。
4 结束语
本文采用多循环架构的运动控制系统,具有良好的人机界面,运动参数显示便于实现对设备在各种运动方式下的运行状况进行实时监控,且采用的队列的数据传输方式,满足了数据缓存的需要。使用并行执行的多循环可以对不同任务进行分类处理,方便实现功能的扩充,提高了程序运行的效率。对于复杂系统,采用多循环架构更加有应用价值。
图5 1轴的S-曲线运动模式运行实验结果显示
[1]侯国屏,王珅,叶齐.LabVIEW7.1编程与虚拟仪器设计[M].北京:清华大学出版社,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](美国)(JEFFREYTRAVIS),(美国)(JIMKRING).LabVIEW大学实用教程[M].3版.乔瑞萍,译.北京:电子工业出版社,2008.
[5]杨高科.LabVIEW虚拟仪器项目开发与管理[M].北京:机械工业出版社,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—),女,山东烟台人,青岛大学硕士研究生,主要研究方向为测试与智能仪器。