先決定你要的是位置還是轉過的距離
角度從358度變成2度,直接相減會得到負356度。若物體只是沿正方向跨過零點,這個答案不能表示實際的小幅移動。本篇帶你建立最短角度差,先整理角度範圍,再處理正負方向與剛好半圈的邊界。完成後,你要能解釋每個答案的成立條件,而不是看到角度跳變就一律加360。
先分清三種資料。單圈位置只告訴你目前指向哪個方向;最短差值表示兩個方向之間較短的有號差;累積角度則保留轉過幾圈。單圈編碼器的兩筆讀值不能自行變成多圈位置。本篇計算結果供資料分析使用,不直接構成伺服定位命令,也不含機械限位或碰撞判斷。
| 你想知道的事 | 應使用的資料 | 容易誤判之處 |
|---|---|---|
| 現在朝向哪裡 | 正規化後單圈角度 | 360度與0度是同方向 |
| 相鄰兩筆的小幅變化 | 最短有號差 | 必須限制取樣間的移動量 |
| 已經轉過幾圈 | 多圈位置或可靠累積計數 | 只靠兩筆單圈角度不能還原 |
以下約定正方向為角度增加方向,輸入單位都是度,角度已整理到大於或等於0且小於360。正負方向應在接線、編碼器設定及畫面標示中保持一致。若設備把順時針定義為正,教材中的正方向就對應順時針;不能因畫面上的動畫方向不同,臨時把公式符號反過來。
先整理輸入 再只修正一次差值
建立測試前,先檢查數值是否有效且有限。通訊失敗、未初始化、非數值或無限大,都應使這次結果無效。不要先把異常輸入限制成零再繼續計算,否則會得到看似合理的巨大移動。第一次取得有效角度時,只保存為上一筆,尚未有兩筆有效樣本,因此不產生有效差值。
已正規化的兩個角度相減,原始差必定大於負360且小於360。接著按順序判斷:若原始差大於180,減360;若原始差小於或等於負180,加360;其他情況保持原值。本篇輸出範圍為大於負180且小於或等於180。半圈沒有唯一的最短方向,所以我們明定以正180表示,讓測試有一致答案。
| 步驟 | 358度到2度 | 2度到358度 |
|---|---|---|
| 新角度減舊角度 | 2 − 358 = −356 | 358 − 2 = 356 |
| 檢查半圈邊界 | −356 ≤ −180 | 356 > 180 |
| 修正結果 | −356 + 360 = 4 | 356 − 360 = −4 |
上述是演算法步驟,不是可直接貼入任何PLC的完整程式。若輸入可能是725度,先以平台已核對的方式正規化成5度;若可能是負10度,應整理成350度。不同語言對負數餘數的規則可能不同,不要看到MOD就假定所有平台結果一致。角度含小數時,還要確認運算子是否接受實數;整數取餘不能直接取代實數角度處理。
用邊界測試抓出方向與半圈錯誤
把下表逐列當成獨立測試。每列先指定舊角度,再送入新角度,記錄原始差、修正差及有效旗標。不要把表格每列串成同一段運動,否則上一列的結尾會變成下一列的起點,測試條件就變了。原始差應保留在監看資料中,方便你知道錯的是輸入、方向約定還是修正條件。
| 舊角度 | 新角度 | 原始差 | 預期最短差 |
|---|---|---|---|
| 358 | 2 | −356 | 4 |
| 2 | 358 | 356 | −4 |
| 0 | 180 | 180 | 180 |
| 180 | 0 | −180 | 180 |
| 45 | 45 | 0 | 0 |
| 359.5 | 0.5 | −359 | 1 |
半圈案例特別重要。0到180與180到0都輸出正180,是本篇的平手規則,不代表兩次真實運動都向正方向。若你的用途需要沿用上一個方向來處理半圈,就必須加入方向狀態及第一次方向未知的處理;那已是另一份輸出規格,不能只改一個大於符號卻不改驗收表。
再加入一筆無效樣本,確認系統不把它當成零度。恢復有效資料時,是否允許跨越中斷時間計算,也要先決定。本篇建議重新建立上一筆樣本,等第二筆連續有效資料才恢復差值;這樣能避免斷線期間轉了很多圈,恢復後卻被誤認為只有很小的移動。
取樣太慢時 最短差也可能不是實際位移
假設你只看到350度與10度,最短差是正20度。但真實移動也可能是正380度,甚至沿反方向移動340度。公式只選擇較短的幾何差,無法判斷沒被量到的路徑。因此把最短差累加成多圈角度前,必須保證相鄰有效樣本之間的實際移動絕對值小於180度,並考慮取樣抖動、通訊延遲及掉包。
例如最大轉速為每秒一圈,100毫秒理想間隔的最大移動為36度。但若通訊卡住600毫秒,期間可能移動216度,已超過半圈假設。你不能只看設定的100毫秒,還要量測實際兩筆資料的時間間隔,超出允許間隔就使累積結果無效或重新同步。速度上限也必須來自設備可達的實際最大值。
累積器的資料寬度與重置條件要另外設計。持續累加最短差仍可能超出整數範圍,使用浮點數也會在很大的累積值下失去小角度解析度。停電後保留單圈角度,不代表停電期間的圈數也被保存;若設備可能在斷電期間移動,應使用合適的絕對位置來源或重新建立位置基準。
不要把這個判斷當成安全功能。最短路徑可能穿過禁止區,即使數學上只有幾度,也不表示機械允許通過。定位控制仍需依實際控制器、軸設定及安全設計處理行程和方向。本篇只讓你正確讀懂角度差,不替代運動控制器的規格。
完成後應看到什麼結果
完成表格測試後,跨零點的小幅變化應維持正負一致,原始差的接近一整圈跳變會被修正。第一次樣本與中斷後重新建立的第一筆樣本應顯示無效,而不是產生一次突跳。驗收紀錄至少包含輸入角度、單位、時間間隔、原始差、修正差、有效狀態及採用的半圈規則。
失敗時先查哪裡
若結果方向相反,先核對正方向定義與新舊資料順序。若每次跨零點都差360,檢查輸入是否落在約定範圍,以及兩個邊界條件是否被改過。若低速正常而高速錯誤,先查看實際取樣間隔與掉包,不要優先增加濾波;濾波可能讓錯誤看起來平滑,卻無法找回漏掉的整圈。
常見問題
一、為何相同方向有時顯示360?這是輸入表示法不一致,應先把完整圈數與單圈角度分開。二、能否把所有負值都加360?那會把負4度改成正356度,失去最短有號差的目的。三、能否用本公式判定旋轉方向?只有在取樣間移動小於半圈等條件成立時才可據此推斷,半圈及漏樣時不能確定。四、能否直接控制馬達走最短路徑?不行,還需機械限制及運動控制規格。
適用型號與限制
幾何公式可用於多種PLC與上位機;本文未指定裝置位址及廠牌專用指令。移植至Q06UDVCPU、CODESYS或其他平台時,應另確認型別、實數運算與有效值檢查方式。下面官方說明用於提醒MOD的支援型別與行為,不表示本篇已完成任何工程軟體測試。