跳轉到

重新計算已完成的步驟串

一次播放完的步驟串,會逐步保存幾何所產生的刀具–工件嚙合資料。嚙合是一次仿真中昂貴的那一半,而且它不依賴任何物理輸入:改切削參數、改材料、改鍍層、改環境溫度、改刃偏移角或改安裝角,變的是由嚙合推導出來的數值,不是嚙合本身。因此一條已經在畫面上的步驟串,可以就地依照當下的輸入重新推導一次——不必重置、不必重播,執行留下的步序、標記與選取也全部留在原處。

SessionShell.RecomputeStepPhysics (API) 就是這個動作。它回答的是「這次執行如果換成另一個碳化鎢等級,會長什麼樣子」——在執行之後問,而不是在執行之前。

一次重算的代價,取決於改了什麼

範圍是偵測出來的,不是宣告的:每一步在播放當時所記錄的輸入,會與現在的輸入逐項比對,由比對結果決定工作要做多深。

在播放途中改的輸入——例如刀具「夾持」節點上的安裝角、某個材料或切削參數——要到下一次換刀或下一次開始播放才會套到後面的步驟;在那之前,正在跑的播放仍沿用它開始時的值。所以同一條步驟串上,同一項輸入可能有不只一個值;比對的對象是自上次完整重算以來這些步驟播放時用過的每一個值,而不只是最後記下的那一個:只要有步驟當時用的值和現在不同,就會重算。

改了什麼 重跑什麼 代價
切削參數、刃形幾何、刃偏移角或安裝角 力核心,在有接觸的步驟上 消耗銑削力授權步數,並改寫已儲存的切削力
刀具刃部或柄部材料、鍍層、觀測高度、刀頭形式、刀片式刀具的刀片厚度與單片刀片重量、刀尖至刀把鼻端高度、刃中芯與夾持柱、手動輸入的刀柄質量 由已儲存的切削力重建每步的物理結果 不動力核心,不耗授權步數
工件材料 每步的物理結果,以及從第 0 步起的循序鏈 熱模型每一步都要讀工件材料,空刀移動也不例外
環境——環境溫度、冷卻條件、磨耗開關 只有循序的熱鏈 四者中最便宜的

有兩件事值得直說:

  • 更換材料、刃中芯或夾持柱,或某項刀片輸入,不會移動力與力矩圖。 切削力是對著嚙合算出來的,會被保留;這類更動會動到的是溫度、磨耗、降伏應力比、刀尖撓曲與摩擦功率。差異要到視覺指標時序圖的熱學項目裡找,不是去看 Fx/Fy/Fz。
  • 循序鏈是從被更動刀具的裝刀那一步重新開始,不是從它第一刀開始——切入之前的空刀移動,會把熱狀態帶進那一刀。

什麼情況必須改為重播

有些改動會讓已儲存的嚙合本身失效,這時重算會拒絕執行,而不是生出一個看似合理的錯答案。StepPhysics-Recompute--NeedsReplay 就是在講這件事,而且什麼都不會被動到;程式必須在 ResetRuntime (API) 之後重播。

  • 刀具的成形輪廓(shaper profile)變了。 不同的包絡形切掉的是不同的體積。
  • 撓曲變換(deflection transform)是開著的。 此時刀具路徑本身就是切削力的函數。
  • 某個有接觸的步驟沒有儲存嚙合,因為它是在物理關閉的情況下播放的。
  • 某支刀沒有播放當時的輸入紀錄(--InputsUnknown)——工作階段是在播放之後才開始的,或該刀從未經由換刀指令裝上。沒有任何依據能證明已儲存的嚙合仍然描述著那支刀。

與此不同的是 --Refused:它指出的是一項前置條件不成立,同樣什麼都不會改——物理功能關閉、沒有步驟、需要力核心卻沒有切削參數,或銑削力授權剩下的步數比這次重算要用掉的還少(--LicenceSteps 會把兩個數字都報出來)。

怎麼執行

從任務腳本或主控台

RecomputeStepPhysics();     // 讓變更偵測自己決定範圍
RecomputeStepPhysics(2);    // 只算刀具 2 的步驟,且不論改了什麼都重跑力核心

帶刀號的形式是一個明示的請求:它把工作限制在那支刀的步驟上,並且即使偵測認為無事可做,也照樣在那些步驟上重跑力核心。當你確知需要重建時用它,其餘情況用不帶引數的形式。

從網頁應用程式

「程式」列上的重新計算步驟物理量按鈕,就在「重新整理」旁邊。它是這個唯讀分支上唯一會造成改變的動作,因為它改的只有本次執行自己的結果。按鈕只在偏好設定的顯示物理選項開啟時才出現,頁尾則顯示引擎回報的區塊進度——一次重算大約二十次更新。

透過 HTTP

POST /api/SessionShell/RecomputeStepPhysics(可選的 toolId 查詢參數)。請求會一直等到重算結束,並把該次執行的訊息隨回應一併帶回;只有在重算完成、或確認無須變更時才算成功。若自上次重置以來什麼都沒播放過,此路由回應 409——請先播放。

它怎麼與播放器共用

重算跑在播放器執行緒上,所以它絕不會與播放同時進行。

  • 播放器閒置時。 以單次工作(one-shot)的形式執行。計算期間狀態徽章顯示 Running;暫停會讓它停在區塊邊界,停止則在該處取消它。
  • 任務正在播放或暫停於播放器上時。 它會被排入播放的下一個步進點,一個區塊接一個區塊地跑,並把播放持在那裡,直到重算完成。暫停與續播對它的作用和對播放完全一樣;暫停中的播放會先為了重算而續播,算完再回到暫停。若播放在時限內到不了步進點,請求會被撤回(--Busy;等待時間是 LocalProjectService.RecomputePacePointTimeout (API),預設 30 秒)。
  • 由另一條執行緒在本工作階段播放 NC 程式時——主機直接發出的播放請求,此時播放器閒置而步驟串仍在增長——會以 --Busy 拒絕。已有一次重算在進行中時,第二次也一樣。

取消會保留已經寫下的部分:回報的步驟區間帶著新值,其餘保留原值,--Canceled 會說明這件事,而下一次重算會從那裡接續鏈,不會把那個邊界當成已收斂。

怎麼讀結果

--Done 會回報哪一段步驟區間的結果被取代、多少步進了力核心、多少步是不動核心重建出來的,以及重算了多少個循序結果。--NoChange 表示沒有任何物理輸入與播放當時不同,什麼都沒動到。

有三個警告值得處理,而不是略過:

  • --ThermalSkipped —— 重算區間內的某支刀沒有可執行的熱模型(缺材料曲線、非銑削刀具、沒有工件材料,或沒有冷卻條件)。它的溫度與磨耗會保留原值,其餘照常重算,所以該刀在圖上是新舊混雜的。
  • --LuggageMissing / --StepsMissing —— 區間內有步驟沒有已儲存的資料列,或根本沒有對應的加工步驟;鏈會以零接觸、或以前一步的運動通過它們。
  • --StepFaulted —— 重算過程中拋出例外的步驟保留原值。訊息會指出第一個是哪一步、原因為何。

延伸閱讀

  • 智慧刀把 —— 唯一會自己觸發重算的呼叫者:播放中套用的安裝角估計,會把至今建好的步驟重新推導一次,使整條完成的步驟串從頭到尾只有一個角度(見該頁的「從錄製資料估計安裝角」一節)
  • 刀具幾何 —— 一改就會讓重算走上力核心的刃形幾何
  • 冷卻模型 —— 屬於環境輸入,也是最便宜的那一類改動
  • 製程可加工性 —— 材料一換,重算會移動的那些比值
  • 程式分支 —— 重新計算按鈕與它所在的分支(英文,未鏡像)
  • 銑削力參數訓練 —— 值得拿來重算的切削參數從哪裡來