• {{item.name}}
运动控制系统SIMOTION {{item.name}}
{{item2.name}}
更多
常问问题

Motion Task状态查询与调用

star star star star star
5.0 分
  • 软件编程
  • 查询
  • 调用
  • 仿真
文档编号:F1022| 文档类型:常问问题| 发布时间:2024年01月22日
  • 0
  • 291
  • 1051
1概述 在......

1概述

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

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

image.png

图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所示:

image.png

图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所示:

image.png

图3.LAD编程

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

(1) _task.<name>

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

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

image.png

图4 任务执行状态查询

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

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

4示例

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

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

image.png

图5 MCC_1()编程示例

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

图6 Motion Task控制程序示例

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

image.png

图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%未阅读,请登录后下载/查看文档

  • 评论
更多
  • 分享

    扫码分享

提示
您即将前往“全球技术资源库”。
“全球技术资源库”的用户名与本地支持中心(下载中心、技术论坛、找答案、1847工业学习平台)的用户名不通用。如果需要在全球技术资源库下载文档,您需要重新登录或注册。
确定

考证咨询点我

信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。