重新計算已完成的步驟串¶
一次播放完的步驟串,會逐步保存幾何所產生的刀具–工件嚙合資料。嚙合是一次仿真中昂貴的那一半,而且它不依賴任何物理輸入:改切削參數、改材料、改鍍層、改環境溫度、改刃偏移角或改安裝角,變的是由嚙合推導出來的數值,不是嚙合本身。因此一條已經在畫面上的步驟串,可以就地依照當下的輸入重新推導一次——不必重置、不必重播,執行留下的步序、標記與選取也全部留在原處。
SessionShell.RecomputeStepPhysics (API) 就是這個動作。它回答的是「這次執行如果換成另一個碳化鎢等級,會長什麼樣子」——在執行之後問,而不是在執行之前。
一次重算的代價,取決於改了什麼¶
範圍是偵測出來的,不是宣告的:每一步在播放當時所記錄的輸入,會與現在的輸入逐項比對,由比對結果決定工作要做多深。
在播放途中改的輸入——例如刀具「夾持」節點上的安裝角、某個材料或切削參數——要到下一次換刀或下一次開始播放才會套到後面的步驟;在那之前,正在跑的播放仍沿用它開始時的值。所以同一條步驟串上,同一項輸入可能有不只一個值;比對的對象是自上次完整重算以來這些步驟播放時用過的每一個值,而不只是最後記下的那一個:只要有步驟當時用的值和現在不同,就會重算。
| 改了什麼 | 重跑什麼 | 代價 |
|---|---|---|
| 切削參數、刃形幾何、刃偏移角或安裝角 | 力核心,在有接觸的步驟上 | 消耗銑削力授權步數,並改寫已儲存的切削力 |
| 刀具刃部或柄部材料、鍍層、觀測高度、刀頭形式、刀片式刀具的刀片厚度與單片刀片重量、刀尖至刀把鼻端高度、刃中芯與夾持柱、手動輸入的刀柄質量 | 由已儲存的切削力重建每步的物理結果 | 不動力核心,不耗授權步數 |
| 工件材料 | 每步的物理結果,以及從第 0 步起的循序鏈 | 熱模型每一步都要讀工件材料,空刀移動也不例外 |
| 環境——環境溫度、冷卻條件、磨耗開關 | 只有循序的熱鏈 | 四者中最便宜的 |
有兩件事值得直說:
- 更換材料、刃中芯或夾持柱,或某項刀片輸入,不會移動力與力矩圖。 切削力是對著嚙合算出來的,會被保留;這類更動會動到的是溫度、磨耗、降伏應力比、刀尖撓曲與摩擦功率。差異要到視覺指標時序圖的熱學項目裡找,不是去看 Fx/Fy/Fz。
- 循序鏈是從被更動刀具的裝刀那一步重新開始,不是從它第一刀開始——切入之前的空刀移動,會把熱狀態帶進那一刀。
什麼情況必須改為重播¶
有些改動會讓已儲存的嚙合本身失效,這時重算會拒絕執行,而不是生出一個看似合理的錯答案。StepPhysics-Recompute--NeedsReplay 就是在講這件事,而且什麼都不會被動到;程式必須在 ResetRuntime (API) 之後重播。
- 刀具的成形輪廓(shaper profile)變了。 不同的包絡形切掉的是不同的體積。
- 撓曲變換(deflection transform)是開著的。 此時刀具路徑本身就是切削力的函數。
- 某個有接觸的步驟沒有儲存嚙合,因為它是在物理關閉的情況下播放的。
- 某支刀沒有播放當時的輸入紀錄(
--InputsUnknown)——工作階段是在播放之後才開始的,或該刀從未經由換刀指令裝上。沒有任何依據能證明已儲存的嚙合仍然描述著那支刀。
與此不同的是 --Refused:它指出的是一項前置條件不成立,同樣什麼都不會改——物理功能關閉、沒有步驟、需要力核心卻沒有切削參數,或銑削力授權剩下的步數比這次重算要用掉的還少(--LicenceSteps 會把兩個數字都報出來)。
怎麼執行¶
從任務腳本或主控台¶
帶刀號的形式是一個明示的請求:它把工作限制在那支刀的步驟上,並且即使偵測認為無事可做,也照樣在那些步驟上重跑力核心。當你確知需要重建時用它,其餘情況用不帶引數的形式。
從網頁應用程式¶
「程式」列上的重新計算步驟物理量按鈕,就在「重新整理」旁邊。它是這個唯讀分支上唯一會造成改變的動作,因為它改的只有本次執行自己的結果。按鈕只在偏好設定的顯示物理選項開啟時才出現,頁尾則顯示引擎回報的區塊進度——一次重算大約二十次更新。
透過 HTTP¶
POST /api/SessionShell/RecomputeStepPhysics(可選的 toolId 查詢參數)。請求會一直等到重算結束,並把該次執行的訊息隨回應一併帶回;只有在重算完成、或確認無須變更時才算成功。若自上次重置以來什麼都沒播放過,此路由回應 409——請先播放。
它怎麼與播放器共用¶
重算跑在播放器執行緒上,所以它絕不會與播放同時進行。
- 播放器閒置時。 以單次工作(one-shot)的形式執行。計算期間狀態徽章顯示
Running;暫停會讓它停在區塊邊界,停止則在該處取消它。 - 任務正在播放或暫停於播放器上時。 它會被排入播放的下一個步進點,一個區塊接一個區塊地跑,並把播放持在那裡,直到重算完成。暫停與續播對它的作用和對播放完全一樣;暫停中的播放會先為了重算而續播,算完再回到暫停。若播放在時限內到不了步進點,請求會被撤回(
--Busy;等待時間是 LocalProjectService.RecomputePacePointTimeout (API),預設 30 秒)。 - 由另一條執行緒在本工作階段播放 NC 程式時——主機直接發出的播放請求,此時播放器閒置而步驟串仍在增長——會以
--Busy拒絕。已有一次重算在進行中時,第二次也一樣。
取消會保留已經寫下的部分:回報的步驟區間帶著新值,其餘保留原值,--Canceled 會說明這件事,而下一次重算會從那裡接續鏈,不會把那個邊界當成已收斂。
怎麼讀結果¶
--Done 會回報哪一段步驟區間的結果被取代、多少步進了力核心、多少步是不動核心重建出來的,以及重算了多少個循序結果。--NoChange 表示沒有任何物理輸入與播放當時不同,什麼都沒動到。
有三個警告值得處理,而不是略過:
--ThermalSkipped—— 重算區間內的某支刀沒有可執行的熱模型(缺材料曲線、非銑削刀具、沒有工件材料,或沒有冷卻條件)。它的溫度與磨耗會保留原值,其餘照常重算,所以該刀在圖上是新舊混雜的。--LuggageMissing/--StepsMissing—— 區間內有步驟沒有已儲存的資料列,或根本沒有對應的加工步驟;鏈會以零接觸、或以前一步的運動通過它們。--StepFaulted—— 重算過程中拋出例外的步驟保留原值。訊息會指出第一個是哪一步、原因為何。