在運動控制中,軌跡執行時間的預測對于多軸的協同、路徑預處理等方面有著重要的作用。CODESYS系列控制器提供了預測軌跡執行時間功能塊。要實現完整的預測功能,需要使用到以下的功能塊。
SMC_SetForecast
這個功能塊專門用于為指定軸設定預測,其預測時長被限定在最多512個任務周期。通過這種預測設置,用戶能夠預先獲取軸在未來特定時間點的狀態信息,包括:
持續時間預測:利用SMC_GetTravelTime功能,可以計算出軸到達某一特定位置所需的時間。
動態信息獲取:通過SMC_ReadSetValues,能夠在特定時間點獲取軸的動態信息。
預測時長查詢:使用SMC_GetForecast可以讀取當前的預測時長。
| 范圍 | 名稱 | 數據類型 | 說明 |
|---|---|---|---|
| 輸入/輸出 | Axis | AXIS_REF_SM3 | 指定要操作的軸 |
| 輸入 | Execute | BOOL | 上升沿:設置預測持續時間 |
| ForecastDuration | LREAL | 軌跡預測的持續時間(以秒為單位) | |
| 輸出 | Done | BOOL | TRUE:預測已成功設置 |
| Error | BOOL | TRUE: 在執行過程中發生了錯誤 | |
| ErrorID | SMC_ERROR | 錯誤ID |
SMC_GetForecast
該功能塊返回給定軸的預測時間,是由SMC_SetForecast 功能塊設置的。
| 范圍 | 名稱 | 數據類型 | 說明 |
| 輸入/輸出 | Axis | AXIS_REF_SM3 | 指定要操作的軸 |
| 輸入 | Enable | BOOL | TRUE: 預測是持續讀取的 |
| 輸出 | Valid | BOOL | TRUE: 預測已成功讀取 |
| Busy | BOOL | TRUE: 正在執行中 | |
| Error | BOOL | TRUE: 正在運行中 | |
| ErrorID | SMC_ERROR | 執行過程中出現了錯誤 | |
| ForecastDuration | LREAL | 預測持續時間以秒為單位 |
SMC_GetTravelTime
此功能塊能夠預測軸到達指定位置所需的時間。
要獲取有效的時間預測,需要先通過SMC_SetForecast設置預測持續時間,確保軸在預測時間內能到達指定位置。如果軸沒有移動,即使它正好在指定位置,Valid也會顯示為FALSE。
| 范圍 | 名稱 | 數據類型 | 說明 |
|---|---|---|---|
| 輸入/輸出 | Axis | AXIS_REF_SM3 | 指定要操作的軸 |
| 輸入 | Enable | BOOL | 使能功能塊 |
| Position | LREAL | 指定軸的位置 | |
| Direction | SMC_CAMTAPPETTYPE | 功能塊對軸的移動方向是有要求的,它只關注軸按照預設方向到達位置的情況 | |
| 輸出 | Valid | BOOL | 輸出的持續時間是否有效 |
| Duration | LREAL |
以秒為單位的從當前控制周期開始到達特定位置的預計時間,具有亞周期精度。 預計時間為0秒表示軸已在上一個周期到達位置,而等于任務間隔的預計時間則意味著軸將在當前周期內到達位置。 |
|
| Error | BOOL | 是否發生了錯誤 | |
| ErrorId | SMC_ERROR | 錯誤ID |
SMC_ReadSetValues
該功能塊用于讀取軸的設定位置、速度、加速度和加加速度。允許設置一個正的時間偏移量(TimeOffset),以讀取未來的設定值。當時間偏移量(TimeOffset)= 0時,將讀取當前周期開始時的設定值。
| 范圍 | 名稱 | 數據類型 | 說明 |
|---|---|---|---|
| 輸入/輸出 | Axis | AXIS_REF_SM3 | 指定要操作的軸 |
| 輸入 | Enable | BOOL | 使能功能塊 |
| TimeOffset | LREAL |
時間偏移量,必須位于0和使用SMC_SetForecast設置的預測時長(ForecastDuration)之間。 如果時間偏移量超出此范圍,將報告錯誤SMC_INVALID_PARAMETER。 |
|
| 輸出 | Valid | BOOL | TRUE: 輸出有效標志 |
| Busy | BOOL | TRUE: 正在執行中 | |
| Error | BOOL | TRUE: 發生錯誤 | |
| 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: //設置軌跡預測時長
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; //預測到達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);
可通過采集到的波形圖觀察對于軌跡預測的效果。

-
控制器
+關注
關注
114文章
17787瀏覽量
193104 -
運動控制
+關注
關注
5文章
821瀏覽量
34535 -
CoDeSys
+關注
關注
11文章
47瀏覽量
19521
原文標題:運動控制中如何實現路徑軌跡預測?
文章出處:【微信號:gkongbbs,微信公眾號:工控論壇】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
labview如何實現數據的采集與實時預測
自動駕駛為什么要重視軌跡預測?
Nullmax端到端軌跡規劃論文入選AAAI 2026
基于全局預測歷史的gshare分支預測器的實現細節
電磁軌跡預測分析系統軟件全面解析
采用可更新且具區分度錨點的多模態運動預測研究
運動控制中如何實現路徑軌跡預測
評論