SIMOITON中Motion Task状态查询与调用

n

1概述n

在SIMOTION中,有一系列的命令可以用来控制Motion Tasks的启动、停止、继续运行,也可以查询某一个任务的运行状态。n

Motion Task的任务状态模型如图1所示,展示了执行系统中的任务(例如MotionTask)所处的各个运行状态之间的转换关系,以及该关系可以通过哪条指令进行跳转。n

SIMOITON中Motion Task状态查询与调用

图1.任务状态模型n

TS_INVALID任务不存在于执行系统中,在执行系统的参数设置中未使用。n

TS_STOP_PENDIING任务已经收到一个停止信号,但仍然处于RUNNING 和STOPPED状态之间。任务仍然可以执行动作直到被停止。n

TS_STOPPED任务因调用功能 _resetTask()或SIMOTION SCOUT执行了停止而停止。n

TS_RUNNING任务因下列功能而运行:n

• 调用功能 _startTask() (MotionTasks)n

• 相关事件已发生 (UserInterruptTask 等)n

TS_WAITING任务因下列功能之一而处于等待状态:n

• _waitTime()n

• WAITFORCONDITION...n

TS_SUSPENDED任务通过功能 _suspendTask()被暂停n

TS_WAIT_NEXT_CYCLETimerInterruptTask 正在等待其触发信号n

TS_WAIT_NEXT_INTERRUPTSystemInterruptTask 正在等待触发报警或者UserInterruptTask 正在等待触发事件n

TS_LOCKED任务通过功能 _disableScheduler()被锁定。n

2 Motion Task控制命令说明

可以使用MCC或ST编程语言编辑Motion Tasks的调用及处理程序。MCC编程语言中的任务处理命令如图2所示:n

SIMOITON中Motion Task状态查询与调用

图2. MCC中的任务处理命令n

而ST编程语言中的任务处理命令有_startTaskId ,_resetTaskId,_restartTaskId,_suspendTaskId,_resumeTaskId,_getStateOfTaskId。n

MCC命令说明:n

(1) Start task(对应于ST语言的_restartTaskId)n

该命令用于将一个处于TASK_STATE_STOPPED状态的Motion Task运行,对于处在TASK_STATE_WAITING,TASK_STATE_SUSPENED状态的Motion Task,该指令无效果。n

_restartTaskId命令从头启动一个MotionTask,也就是从最开始执行一个已停止的任务。如果任务已经激活,则停止该任务并从开始处重新处理,也就是说该命令只能在 BackgroundTask 中调用一次,否则被选择的任务在每次BackgroundTask循环中都会重新启动。该命令允许用于MotionTask。n

(2)Interrupt task(对应于ST语言的_suspendTaskId)n

该命令将一个任务中断在当前位置,任务状态变为TASK_STATE_SUSPENDED。该命令不停止先前已经从该任务启动的那些轴运动。停止所有当前激活的 UserInterruptTask,只有当启动条件再次满足时才启动它。该命令允许用于 MotionTask、BackgroundTask、UserInterruptTask、SystemInterruptTask 和 TimerInterruptTask。对于循环任务 (BackgroundTask、TimerInterruptTask)同时停止任务的时间监视。使用 _resumeTask Id()可继续任务执行及其时间监视。n

(3)Continue task(对应于ST语言的_resumeTaskId)n

该命令将从先前的断点位置继续处理中断的任务。中断的运动不会自动继续,必须通过编程继续才能执行中断的运动。该命令只能在 BackgroundTask 中调用一次,否则被选择的任务在每次BackgroundTask循环中都会从中断位置继续执行。该命令允许用于 MotionTask、BackgroundTask、UserInterruptTask、 SystemInterruptTask 和 TimerInterruptTask。n

(4)Reset task(对应于ST语言的_resetTaskId)n

该命令可以将一个MotionTask复位为TASK_STATE_STOPPED状态,若此时想要将MotionTask恢复运行状态,需要使用RestartTaskId命令。n

(5)Task state(对应于ST语言的_getStateOfTaskId)n

该命令可以用来查询相关任务的运行状态。n

(6)Determine taskId(对应于ST语言的_getTaskId )n

该命令根据任务名称生成一个项目范围内唯一的TaskId ,该任务标识必须分配给一个数据类型为StructTaskId 的变量。n

3 Motion Task控制命令调用

LAD编程方式如图3所示:n

SIMOITON中Motion Task状态查询与调用

图3.LAD编程n

在任务控制命令中,通过id指定唯一被调用的任务,可通过以下方法可以获得Mo tionTask的TaskId:n

(1) _task.<name>n

<name>为被调用任务的的任务名称,例如_task.MotionTask_1。n

(2) 通过_getStateOfTaskId指令,可以获得相关任务的的运行状态,该指令的的返回值为DWORD型数据,其含义如图4所示:n

SIMOITON中Motion Task状态查询与调用

图4 任务执行状态查询n

指令的运行状态可以是两个或多个代码值的相加之和,例如16#0014表示的状态就是,该任务正在运行,但是由于_waitTime或者waitforcondition指令处在等待的状态。n

当然也可以使用ST或MCC编程方式来实现Motion Task的控制,在此不再赘述。n

4示例

下面以SIMOTION D445-2为例,举一个简单的例子通过程序对MotionTask的状态模型进行控制。

首先,在MCCUnit_1中插入源程序MCC_1(),在其中编写循环计数程序,计数变量为counter,将MCC_1()插入到执行系统的MotionTask_1中。

SIMOITON中Motion Task状态查询与调用

图5 MCC_1()编程示例

然后,在LFunit_1中,插入源程序LADFBD_1(),在其中编写MotionTask_1的控制程序,将LADFBD_1()放入执行系统的BackgroundTask中循环执行。

SIMOITON中Motion Task状态查询与调用

图6 Motion Task控制程序示例

运行SIMOTION,使用Trace功能可以捕捉到Counter和Taskstate两个变量的状态,如图7所示:

SIMOITON中Motion Task状态查询与调用

图7. 变量Trace图

图中,黄色线为Taskstate的数值,其数值变化为16#0002->16#0004->16#0024->16#4,表示MotionTask_1的运行状态依次TASK_STATE_STOPPED->TASK_STATE_RUNNING-> TASK_ST ATE_RUNNING+TASK_STATE_SUSPENDED->TASK_STATE_RUNNING。橘红色为MotionTask_1中计数程序的计数值。

原创文章,作者:ximenziask,如若转载,请注明出处:https://www.zhaoplc.com/plc328591.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2020年11月5日 下午12:03
下一篇 2021年4月12日 上午12:00

相关推荐

发表回复

登录后才能评论