腳本命令¶
什麼是腳本命令?¶
腳本命令 即 HiNC 腳本引擎執行的 C# 敘述。腳本直接引用 SessionShell (API) 的成員與方法 — SessionShell 即全域作用域,無需明確物件參考。
// 以下都是直接以 SessionShell 成員作為全域使用
EnablePhysics = true;
MachiningResolution_mm = 0.125;
PlayNcFile("NC/file1.nc");
Message("Done");
腳本語法基礎¶
腳本使用 原生 C# 語法:
| 功能 | 語法 |
|---|---|
| 敘述結尾 | ; |
| 行尾註解 | // comment |
| 字串插值 | $"Value is {variable}" |
| 正無限大 | double.PositiveInfinity |
| 負無限大 | double.NegativeInfinity |
| 位元 OR(旗標) | Fx|Fy|Fz |
所有標準 C# 語言特性(變數、迴圈、條件、LINQ 等)皆可使用。
執行模型¶
工作階段生命週期¶
- 腳本依 Task 頁順序執行
- 由
PacePlayer(API) 控制播放 —PlayNcFile(API) 之類的腳本命令會阻塞至 NC 程式完成 - 播放器控制命令(
Pace(API)、Pause(API)、Reset(API))與PacePlayer(API) 互動 ResetRuntime(API) 清除運行時狀態——已記錄的步、網格化的工件與訊息。掛在工作階段事件上的處理器不受它影響,要等工作階段結束、也就是播放器「重置」時才會移除
事件驅動執行¶
SessionStepBuilt (API) 等事件於仿真期間觸發,可作步級邏輯:
SessionStepBuilt += (preStep, curStep) => {
if (curStep != null)
Message($"Step: ToolId={curStep.ToolId}");
};
PlayNcFile("NC/file1.nc");
這樣加上的處理器屬於工作階段:ResetRuntime (API) 不會移除它,它要等工作階段結束、也就是播放器「重置」時才會移除。
NC 碼中的腳本命令¶
腳本命令可嵌入 NC 程式自己的註解,讓設定在程式中真正該生效的位置改變。這需要兩層語法配合:控制器的註解語法先把註解從單節取出,而註解符號取決於控制器本身:
| 控制器 | 用什麼開啟註解 |
|---|---|
| Fanuc、Mazak、Syntec | 只有括號 ( ) |
| Siemens | ; 到行尾 |
| Heidenhain | //、; 或 ( ) |
腳本語法接著用兩個標記把腳本從註解文字取出:@@ 是在該單節運動之前執行的腳本,@@^ 是在之後執行的(下文稱行前/行後標記,指的就是該單節之前/之後)。兩個標記是該語法的設定、不是固定字元:它們來自專案所指名的控制器定義,而自帶解析器設定的專案則沿用自己那一份。在以 ; 開啟註解的 Siemens 上:
在 Fanuc 家族的控制器上,同一段腳本寫在括號內:
單節所帶的腳本會不會照字面執行,由三條規則決定:
- 每個標記各只寫一次,而且腳本寫在最後。 標記會把自己到該則註解結尾的所有文字吃進腳本,所以寫在腳本後面、但仍在同一則註解內的東西會被當成腳本的一部分——同一則註解裡的第二個
@@會被第一段腳本整段吞掉。 - 同一則註解要放兩段時,
@@要寫在@@^之前。 行後腳本會先被取出,所以先寫@@^的註解,它的@@會被行後腳本整段吞掉。 - 一行只寫一則括號註解。 括號註解從該行第一個
(讀到最後一個),所以第二則註解會被當成第一則的一部分。
內嵌腳本與腳本命令編譯時用同一組參考與命名空間引用 (using),而且和腳本命令一樣,本身不需要任何授權功能。腳本編譯不過會在它所屬的步回報 Script-Compile--Error,執行期丟例外則是 Script-Run--Exception,兩者都不會中斷播放。
Note
3.2.7 到 3.2.31 的套件只在有 NcComposition 授權功能時才執行內嵌腳本。沒有這個授權功能時,只會對第一個內嵌腳本回報一次 Script--NotLicensed,其後不論同一次播放或之後的播放全部靜默跳過。程式裡的內嵌腳本若在換到這幾版之後不再生效,換到更新的套件就會恢復執行,程式本身不必修改。
Warning
;@ 是前一代執行器 (runner) 的標記,;# 是它的行後標記。在今天播放 NC 的執行器上,這兩個只是普通註解文字:命令不會執行,也沒有任何訊息說。在 Fanuc 家族上裸寫時,; 根本不開啟註解,那段文字連註解都不是——建置會發出 UnparsedText--Remaining 警告。
檔案路徑樣板¶
輸出檔的命令支援 [NcName] 標記,會替換為各 NC 檔名稱:
PlayNcFile("NC/file1.nc");
PlayNcFile("NC/file2.nc");
WriteShotFiles("Output/[NcName].shot.csv", 1);
// 產生:Output/file1.nc.shot.csv、Output/file2.nc.shot.csv
所有檔案路徑除非指定為絕對路徑,否則皆以 專案目錄 為基準。
重要警告¶
下列操作可能損壞仿真狀態或產生錯誤結果:
- 仿真期間請勿儲存專案。 系統內部配置(如訓練專屬的解析度覆寫)可能覆寫你的設定。
- 訓練銑削係數期間請勿重置播放器。 請改以關閉專案取代按下重置按鈕,以避免意外錯誤。
- 訓練期間請勿修改解析度、刀具或控制器設定。 在訓練中途改變這些設定會使結果無效。
- 請勿將
SessionStepBuilt(API) 事件中的UpdateNcOptOption與 NC 內嵌優化命令併用。 並行計算可能造成未定義行為。 - 請勿把
NaN寫進逐步的NcOptOption。 求解該步時會拒絕NaN的每刃進給邊界:該步保留仿真進給率,並以一則指名選項值的錯誤回報,其餘各步照常優化。見當某一步解不出來時。
全域變數¶
Global (API) 提供跨腳本共享資料的鍵值字典:
完整 API 參考¶
完整命令、屬性與事件清單請參閱:
SessionShell(API) — 完整 API 文件- SessionShell — 命令家族,以及各由哪個工作流程使用
延伸閱讀¶
- SessionShell — 這套語法所能觸及的命令家族
- 步 (Step) — 加工步資料模型
- 基礎仿真 — 在仿真流程中使用腳本
- 刀位 (CL) 播放 — 從腳本重播 CL 刀具路徑
- ShellProgress — 執行中的腳本所寫入的訊息串流
- NC 優化原理 — 逐步優化選項的作用,以及求解失敗的步如何被回報