控制軟件

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

ainet.cn   2013年10月14日

  1概述

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

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

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

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

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

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

  TS_RUNNING:任務(wù)因下列功能而運(yùn)行:

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

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

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

  ? _waitTime()

  ? WAITFORCONDITION...

  TS_SUSPENDED:任務(wù)通過(guò)功能 _suspendTask()被暫停

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

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

  TS_LOCKED:任務(wù)通過(guò)功能 _disableScheduler()被鎖定。

  2 Motion Task控制命令說(shuō)明

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

  圖2. MCC中的任務(wù)處理命令

  而ST編程語(yǔ)言中的任務(wù)處理命令有_startTaskId,_resetTaskId,_restartTaskId,_suspendTaskId,_resumeTaskId,_getStateOfTaskId。

  MCC命令說(shuō)明:

  (1) Start task(對(duì)應(yīng)于ST語(yǔ)言的_restartTaskId)

  該命令用于將一個(gè)處于TASK_STATE_STOPPED狀態(tài)的Motion Task運(yùn)行,對(duì)于處在TASK_STATE_WAITING,TASK_STATE_SUSPENED狀態(tài)的Motion Task,該指令無(wú)效果。

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

  (2)Interrupt task(對(duì)應(yīng)于ST語(yǔ)言的_suspendTaskId)

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

  (3)Continue task(對(duì)應(yīng)于ST語(yǔ)言的_resumeTaskId)

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

  (4)Reset task(對(duì)應(yīng)于ST語(yǔ)言的_resetTaskId)

  該命令可以將一個(gè)MotionTask復(fù)位為T(mén)ASK_STATE_STOPPED狀態(tài),若此時(shí)想要將MotionTask恢復(fù)運(yùn)行狀態(tài),需要使用RestartTaskId命令。

  (5)Task state(對(duì)應(yīng)于ST語(yǔ)言的_getStateOfTaskId)

  該命令可以用來(lái)查詢相關(guān)任務(wù)的運(yùn)行狀態(tài)。

  (6)Determine taskId(對(duì)應(yīng)于ST語(yǔ)言的_getTaskId )

  該命令根據(jù)任務(wù)名稱(chēng)生成一個(gè)項(xiàng)目范圍內(nèi)唯一的TaskId ,該任務(wù)標(biāo)識(shí)必須分配給一個(gè)數(shù)據(jù)類(lèi)型為StructTaskId 的變量。

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

  LAD編程方式如圖3所示:

  圖編程

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

  (1) _task.

  為被調(diào)用任務(wù)的的任務(wù)名稱(chēng),例如Task_1。

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

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

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

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

  4示例

  下面以SIMOTION D445-2為例,舉一個(gè)簡(jiǎn)單的例子通過(guò)程序?qū)otionTask的狀態(tài)模型進(jìn)行控制。

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

  圖5 MCC_1()編程示例

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

  圖6 Motion Task控制程序示例

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

  圖7. 變量Trace圖

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

(轉(zhuǎn)載)

標(biāo)簽:西門(mén)子 SIMOTION 執(zhí)行系統(tǒng) MCC命令 MotionTask 我要反饋 
泰科電子ECK、ECP系列高壓直流接觸器白皮書(shū)下載
世強(qiáng)
優(yōu)傲機(jī)器人下載中心
億萬(wàn)克
專(zhuān)題報(bào)道