- {{item.name}}
Motion Task状态查询与调用
- 0
- 291
- 1051
1概述
在SIMOTION中,有一系列的命令可以用来控制Motion Tasks的启动、停止、继续运行,也可以查询某一个任务的运行状态。
Motion Task的任务状态模型如图1所示,展示了执行系统中的任务(例如MotionTask)所处的各个运行状态之间的转换关系,以及该关系可以通过哪条指令进行跳转。
图1.任务状态模型
TS_INVALID:任务不存在于执行系统中,在执行系统的参数设置中未使用。
TS_STOP_PENDIING:任务已经收到一个停止信号,但仍然处于RUNNING 和STOPPED状态之间。任务仍然可以执行动作直到被停止。
TS_STOPPED:任务因调用功能 _resetTask()或SIMOTION SCOUT执行了停止而停止。
TS_RUNNING:任务因下列功能而运行:
• 调用功能 _startTask() (MotionTasks)
• 相关事件已发生 (UserInterruptTask 等)
TS_WAITING:任务因下列功能之一而处于等待状态:
• _waitTime()
• WAITFORCONDITION...
TS_SUSPENDED:任务通过功能 _suspendTask()被暂停
TS_WAIT_NEXT_CYCLE:TimerInterruptTask 正在等待其触发信号
TS_WAIT_NEXT_INTERRUPT:SystemInterruptTask 正在等待触发报警或者UserInterruptTask 正在等待触发事件
TS_LOCKED:任务通过功能 _disableScheduler()被锁定。
2 Motion Task控制命令说明
可以使用MCC或ST编程语言编辑Motion Tasks的调用及处理程序。MCC编程语言中的任务处理命令如图2所示:
图2. MCC中的任务处理命令
而ST编程语言中的任务处理命令有_startTaskId ,_resetTaskId,_restartTaskId,_suspendTaskId,_resumeTaskId,_getStateOfTaskId。
MCC命令说明:
(1) Start task(对应于ST语言的_restartTaskId)
该命令用于将一个处于TASK_STATE_STOPPED状态的Motion Task运行,对于处在TASK_STATE_WAITING,TASK_STATE_SUSPENED状态的Motion Task,该指令无效果。
_restartTaskId命令从头启动一个MotionTask,也就是从最开始执行一个已停止的任务。如果任务已经激活,则停止该任务并从开始处重新处理,也就是说该命令只能在 BackgroundTask 中调用一次,否则被选择的任务在每次BackgroundTask循环中都会重新启动。该命令允许用于MotionTask。
(2)Interrupt task(对应于ST语言的_suspendTaskId)
该命令将一个任务中断在当前位置,任务状态变为TASK_STATE_SUSPENDED。该命令不停止先前已经从该任务启动的那些轴运动。停止所有当前激活的 UserInterruptTask,只有当启动条件再次满足时才启动它。该命令允许用于 MotionTask、BackgroundTask、UserInterruptTask、SystemInterruptTask 和 TimerInterruptTask。对于循环任务 (BackgroundTask、TimerInterruptTask)同时停止任务的时间监视。使用 _resumeTask Id()可继续任务执行及其时间监视。
(3)Continue task(对应于ST语言的_resumeTaskId)
该命令将从先前的断点位置继续处理中断的任务。中断的运动不会自动继续,必须通过编程继续才能执行中断的运动。该命令只能在 BackgroundTask 中调用一次,否则被选择的任务在每次BackgroundTask循环中都会从中断位置继续执行。该命令允许用于 MotionTask、BackgroundTask、UserInterruptTask、 SystemInterruptTask 和 TimerInterruptTask。
(4)Reset task(对应于ST语言的_resetTaskId)
该命令可以将一个MotionTask复位为TASK_STATE_STOPPED状态,若此时想要将MotionTask恢复运行状态,需要使用RestartTaskId命令。
(5)Task state(对应于ST语言的_getStateOfTaskId)
该命令可以用来查询相关任务的运行状态。
(6)Determine taskId(对应于ST语言的_getTaskId )
该命令根据任务名称生成一个项目范围内唯一的TaskId ,该任务标识必须分配给一个数据类型为StructTaskId 的变量。
3 Motion Task控制命令调用
LAD编程方式如图3所示:
图3.LAD编程
在任务控制命令中,通过id指定唯一被调用的任务,可通过以下方法可以获得Mo tionTask的TaskId:
(1) _task.<name>
<name>为被调用任务的的任务名称,例如_task.MotionTask_1。
(2) 通过_getStateOfTaskId指令,可以获得相关任务的的运行状态,该指令的的返回值为DWORD型数据,其含义如图4所示:
图4 任务执行状态查询
指令的运行状态可以是两个或多个代码值的相加之和,例如16#0014表示的状态就是,该任务正在运行,但是由于_waitTime或者waitforcondition指令处在等待的状态。
当然也可以使用ST或MCC编程方式来实现Motion Task的控制,在此不再赘述。
4示例
下面以SIMOTION D445-2为例,举一个简单的例子通过程序对MotionTask的状态模型进行控制。
首先,在MCCUnit_1中插入源程序MCC_1(),在其中编写循环计数程序,计数变量为counter,将MCC_1()插入到执行系统的MotionTask_1中。
图5 MCC_1()编程示例
然后,在LFunit_1中,插入源程序LADFBD_1(),在其中编写MotionTask_1的控制程序,将LADFBD_1()放入执行系统的BackgroundTask中循环执行。
图6 Motion Task控制程序示例
运行SIMOTION,使用Trace功能可以捕捉到Counter和Taskstate两个变量的状态,如图7所示:
图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中计数程序的计数值。
剩余80%未阅读,请登录后下载/查看文档
- 评论
-
分享
扫码分享
- 收藏 收藏
- 点赞 点赞
- 纠错 纠错
- SIMATIC S7-1500 High-performance motion control programming guideline
- ONE_840D sl_828D_应用_调节型电源模块并联配置与调试_2021
- ET200Pro F-FC与调试软件(Starter)的兼容性问题
- InverterEdge 西门子变频器一键配置与调试工具
- 为什么调用FC6 "AG_RECV"时会出现状态字"80B1"
- WinCC V6.2 报警控件、在线趋势/表格控件数据查询
- 如何查询西门子产品的技术参数
- 如何查询西门子宽温型产品的技术数据
- 如何查询标准低压异步电机的选件信息
- 在STEP 7 Basic V10.5中如何使用本地错误处理查询出现的错误?
{{item.nickName}}