控制軟件

SIMOITON中Motion Task狀態(tài)查詢與調(diào)用

ainet.cn   2013年10月14日

  1概述

  在西門子的SIMOTION中,有一系列的命令可以用來控制Motion Tasks的啟動、停止、繼續(xù)運行,也可以查詢某一個任務的運行狀態(tài)。

  Motion Task的任務狀態(tài)模型如圖1所示,展示了執(zhí)行系統(tǒng)中的任務(例如MotionTask)所處的各個運行狀態(tài)之間的轉換關系,以及該關系可以通過哪條指令進行跳轉。

  圖1.任務狀態(tài)模型

  TS_INVALID:任務不存在于執(zhí)行系統(tǒng)中,在執(zhí)行系統(tǒng)的參數(shù)設置中未使用。

  TS_STOP_PENDIING:任務已經(jīng)收到一個停止信號,但仍然處于RUNNING 和STOPPED狀態(tài)之間。任務仍然可以執(zhí)行動作直到被停止。

  TS_STOPPED:任務因調(diào)用功能 _resetTask()或SIMOTION SCOUT執(zhí)行了停止而停止。

  TS_RUNNING:任務因下列功能而運行:

  ? 調(diào)用功能 _startTask() (MotionTasks)

  ? 相關事件已發(fā)生 (UserInterruptTask 等)

  TS_WAITING:任務因下列功能之一而處于等待狀態(tài):

  ? _waitTime()

  ? WAITFORCONDITION...

  TS_SUSPENDED:任務通過功能 _suspendTask()被暫停

  TS_WAIT_NEXT_CYCLE:TimerInterruptTask 正在等待其觸發(fā)信號

  TS_WAIT_NEXT_INTERRUPT:SystemInterruptTask 正在等待觸發(fā)報警或者UserInterruptTask 正在等待觸發(fā)事件

  TS_LOCKED:任務通過功能 _disableScheduler()被鎖定。

  2 Motion Task控制命令說明

  可以使用MCC或ST編程語言編輯Motion Tasks的調(diào)用及處理程序。MCC編程語言中的任務處理命令如圖2所示:

  圖2. MCC中的任務處理命令

  而ST編程語言中的任務處理命令有_startTaskId,_resetTaskId,_restartTaskId,_suspendTaskId,_resumeTaskId,_getStateOfTaskId。

  MCC命令說明:

  (1) Start task(對應于ST語言的_restartTaskId)

  該命令用于將一個處于TASK_STATE_STOPPED狀態(tài)的Motion Task運行,對于處在TASK_STATE_WAITING,TASK_STATE_SUSPENED狀態(tài)的Motion Task,該指令無效果。

  _restartTaskId命令從頭啟動一個MotionTask,也就是從最開始執(zhí)行一個已停止的任務。如果任務已經(jīng)激活,則停止該任務并從開始處重新處理,也就是說該命令只能在 BackgroundTask中調(diào)用一次,否則被選擇的任務在每次BackgroundTask循環(huán)中都會重新啟動。該命令允許用于MotionTask。

  (2)Interrupt task(對應于ST語言的_suspendTaskId)

  該命令將一個任務中斷在當前位置,任務狀態(tài)變?yōu)門ASK_STATE_SUSPENDED。該命令不停止先前已經(jīng)從該任務啟動的那些軸運動。停止所有當前激活的 UserInterruptTask,只有當啟動條件再次滿足時才啟動它。該命令允許用于MotionTask、BackgroundTask、UserInterruptTask、SystemInterruptTask 和TimerInterruptTask。對于循環(huán)任務 (BackgroundTask、TimerInterruptTask)同時停止任務的時間監(jiān)視。使用 _resumeTask Id()可繼續(xù)任務執(zhí)行及其時間監(jiān)視。

  (3)Continue task(對應于ST語言的_resumeTaskId)

  該命令將從先前的斷點位置繼續(xù)處理中斷的任務。中斷的運動不會自動繼續(xù),必須通過編程繼續(xù)才能執(zhí)行中斷的運動。該命令只能在 BackgroundTask 中調(diào)用一次,否則被選擇的任務在每次BackgroundTask循環(huán)中都會從中斷位置繼續(xù)執(zhí)行。該命令允許用于MotionTask、BackgroundTask、UserInterruptTask、 SystemInterruptTask 和TimerInterruptTask。

  (4)Reset task(對應于ST語言的_resetTaskId)

  該命令可以將一個MotionTask復位為TASK_STATE_STOPPED狀態(tài),若此時想要將MotionTask恢復運行狀態(tài),需要使用RestartTaskId命令。

  (5)Task state(對應于ST語言的_getStateOfTaskId)

  該命令可以用來查詢相關任務的運行狀態(tài)。

  (6)Determine taskId(對應于ST語言的_getTaskId )

  該命令根據(jù)任務名稱生成一個項目范圍內(nèi)唯一的TaskId ,該任務標識必須分配給一個數(shù)據(jù)類型為StructTaskId 的變量。

  3 Motion Task控制命令調(diào)用

  LAD編程方式如圖3所示:

  圖編程

  在任務控制命令中,通過id指定唯一被調(diào)用的任務,可通過以下方法可以獲得Mo tionTask的TaskId:

  (1) _task.

  為被調(diào)用任務的的任務名稱,例如Task_1。

  (2) 通過_getStateOfTaskId指令,可以獲得相關任務的的運行狀態(tài),該指令的的返回值為DWORD型數(shù)據(jù),其含義如圖4所示:

  圖4 任務執(zhí)行狀態(tài)查詢

  指令的運行狀態(tài)可以是兩個或多個代碼值的相加之和,例如16#0014表示的狀態(tài)就是,該任務正在運行,但是由于_waitTime或者waitforcondition指令處在等待的狀態(tài)。

  當然也可以使用ST或MCC編程方式來實現(xiàn)Motion Task的控制,在此不再贅述。

  4示例

  下面以SIMOTION D445-2為例,舉一個簡單的例子通過程序對MotionTask的狀態(tài)模型進行控制。

  首先,在MCCUnit_1中插入源程序MCC_1(),在其中編寫循環(huán)計數(shù)程序,計數(shù)變量為counter,將MCC_1()插入到執(zhí)行系統(tǒng)的MotionTask_1中。

  圖5 MCC_1()編程示例

  然后,在LFunit_1中,插入源程序LADFBD_1(),在其中編寫MotionTask_1的控制程序,將LADFBD_1()放入執(zhí)行系統(tǒng)的BackgroundTask中循環(huán)執(zhí)行。

  圖6 Motion Task控制程序示例

  運行SIMOTION,使用Trace功能可以捕捉到Counter和Taskstate兩個變量的狀態(tài),如圖7所示:

  圖7. 變量Trace圖

  圖中,黃色線為Taskstate的數(shù)值,其數(shù)值變化為16#0002->16#0004->16#0024->16#4,表示MotionTask_1的運行狀態(tài)依次TASK_STATE_STOPPED->TASK_STATE_RUNNING-> TASK_ST ATE_RUNNING+TASK_STATE_SUSPENDED->TASK_STATE_RUNNING。橘紅色為MotionTask_1中計數(shù)程序的計數(shù)值。

(轉載)

標簽:西門子 SIMOTION 執(zhí)行系統(tǒng) MCC命令 MotionTask 我要反饋 
泰科電子ECK、ECP系列高壓直流接觸器白皮書下載
世強
優(yōu)傲機器人下載中心
億萬克
專題報道