在運動控制中,軌跡執(zhí)行時間的預(yù)測對于多軸的協(xié)同、路徑預(yù)處理等方面有著重要的作用。CODESYS系列控制器提供了預(yù)測軌跡執(zhí)行時間功能塊。要實現(xiàn)完整的預(yù)測功能,需要使用到以下的功能塊。
這個功能塊專門用于為指定軸設(shè)定預(yù)測,其預(yù)測時長被限定在最多512個任務(wù)周期。通過這種預(yù)測設(shè)置,用戶能夠預(yù)先獲取軸在未來特定時間點的狀態(tài)信息,包括:
持續(xù)時間預(yù)測:利用SMC_GetTravelTime功能,可以計算出軸到達某一特定位置所需的時間。
動態(tài)信息獲?。和ㄟ^SMC_ReadSetValues,能夠在特定時間點獲取軸的動態(tài)信息。
預(yù)測時長查詢:使用SMC_GetForecast可以讀取當(dāng)前的預(yù)測時長。
范圍 | 名稱 | 數(shù)據(jù)類型 | 說明 |
---|---|---|---|
輸入/輸出 | Axis | AXIS_REF_SM3 | 指定要操作的軸 |
輸入 | Execute | BOOL | 上升沿:設(shè)置預(yù)測持續(xù)時間 |
ForecastDuration | LREAL | 軌跡預(yù)測的持續(xù)時間(以秒為單位) | |
輸出 | Done | BOOL | TRUE:預(yù)測已成功設(shè)置 |
Error | BOOL | TRUE: 在執(zhí)行過程中發(fā)生了錯誤 | |
ErrorID | SMC_ERROR | 錯誤ID |
SMC_GetForecast
該功能塊返回給定軸的預(yù)測時間,是由SMC_SetForecast 功能塊設(shè)置的。
范圍 | 名稱 | 數(shù)據(jù)類型 | 說明 |
輸入/輸出 | Axis | AXIS_REF_SM3 | 指定要操作的軸 |
輸入 | Enable | BOOL | TRUE: 預(yù)測是持續(xù)讀取的 |
輸出 | Valid | BOOL | TRUE: 預(yù)測已成功讀取 |
Busy | BOOL | TRUE: 正在執(zhí)行中 | |
Error | BOOL | TRUE: 正在運行中 | |
ErrorID | SMC_ERROR | 執(zhí)行過程中出現(xiàn)了錯誤 | |
ForecastDuration | LREAL | 預(yù)測持續(xù)時間以秒為單位 |
SMC_GetTravelTime
此功能塊能夠預(yù)測軸到達指定位置所需的時間。
要獲取有效的時間預(yù)測,需要先通過SMC_SetForecast設(shè)置預(yù)測持續(xù)時間,確保軸在預(yù)測時間內(nèi)能到達指定位置。如果軸沒有移動,即使它正好在指定位置,Valid也會顯示為FALSE。
范圍 | 名稱 | 數(shù)據(jù)類型 | 說明 |
---|---|---|---|
輸入/輸出 | Axis | AXIS_REF_SM3 | 指定要操作的軸 |
輸入 | Enable | BOOL | 使能功能塊 |
Position | LREAL | 指定軸的位置 | |
Direction | SMC_CAMTAPPETTYPE | 功能塊對軸的移動方向是有要求的,它只關(guān)注軸按照預(yù)設(shè)方向到達位置的情況 | |
輸出 | Valid | BOOL | 輸出的持續(xù)時間是否有效 |
Duration | LREAL |
以秒為單位的從當(dāng)前控制周期開始到達特定位置的預(yù)計時間,具有亞周期精度。 預(yù)計時間為0秒表示軸已在上一個周期到達位置,而等于任務(wù)間隔的預(yù)計時間則意味著軸將在當(dāng)前周期內(nèi)到達位置。 |
|
Error | BOOL | 是否發(fā)生了錯誤 | |
ErrorId | SMC_ERROR | 錯誤ID |
SMC_ReadSetValues
該功能塊用于讀取軸的設(shè)定位置、速度、加速度和加加速度。允許設(shè)置一個正的時間偏移量(TimeOffset),以讀取未來的設(shè)定值。當(dāng)時間偏移量(TimeOffset)= 0時,將讀取當(dāng)前周期開始時的設(shè)定值。
范圍 | 名稱 | 數(shù)據(jù)類型 | 說明 |
---|---|---|---|
輸入/輸出 | Axis | AXIS_REF_SM3 | 指定要操作的軸 |
輸入 | Enable | BOOL | 使能功能塊 |
TimeOffset | LREAL |
時間偏移量,必須位于0和使用SMC_SetForecast設(shè)置的預(yù)測時長(ForecastDuration)之間。 如果時間偏移量超出此范圍,將報告錯誤SMC_INVALID_PARAMETER。 |
|
輸出 | Valid | BOOL | TRUE: 輸出有效標(biāo)志 |
Busy | BOOL | TRUE: 正在執(zhí)行中 | |
Error | BOOL | TRUE: 發(fā)生錯誤 | |
ErrorID | SMC_ERROR | 錯誤ID | |
Position | LREAL | 位置信息 | |
Velocity | LREAL | 速度信息 | |
Acceleration | LREAL | 加速度信息 | |
Jerk | LREAL | 加加速度信息 |
程序示例
CASE state OF STATE_POWER_DRIVE: //軸使能 mcp.Enable := TRUE; mcp.bDriveStart := TRUE; mcp.bRegulatorOn := TRUE; IF mcp.Status THEN state := STATE_SET_FORECAST; ELSIF mcp.Error THEN error := mcp.ErrorID; state := state + STATE_ERROR; END_IF STATE_SET_FORECAST: //設(shè)置軌跡預(yù)測時長 setForecast.Execute := TRUE; setForecast.ForecastDuration := 0.3; //0.3S getForecast.Enable := TRUE; IF setForecast.Done THEN state := STATE_MOVE_TO_POSITION; ELSIF setForecast.Error THEN error := setForecast.ErrorID; state := state + STATE_ERROR; END_IF STATE_MOVE_TO_POSITION: //MC_MoveAbsolute ma.Execute := TRUE; ma.Position := 10; ma.Velocity := 20; ma.Acceleration := 200; ma.Deceleration := 200; ma.Jerk := 1000; timeToPosition.Enable := TRUE; timeToPosition.Position := 8; //預(yù)測到達8時,所用的時間 IF ma.Error THEN error := ma.ErrorID; state := state + STATE_ERROR; END_IF END_CASE setForecast(Axis:= Drive); getForecast(Axis:= Drive); mcp(Axis:= Drive); ma(Axis:= Drive); timeToPosition(Axis:= Drive); readSetValues( Axis:= Drive, Enable:= timeToPosition.Valid, TimeOffset:=timeToPosition.Duration);
可通過采集到的波形圖觀察對于軌跡預(yù)測的效果。
-
控制器
+關(guān)注
關(guān)注
112文章
16393瀏覽量
178473 -
運動控制
+關(guān)注
關(guān)注
4文章
584瀏覽量
32898 -
CoDeSys
+關(guān)注
關(guān)注
10文章
40瀏覽量
18673
原文標(biāo)題:運動控制中如何實現(xiàn)路徑軌跡預(yù)測?
文章出處:【微信號:gkongbbs,微信公眾號:工控論壇】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論