POWERSCADA
C# 腳本引擎
拖放與設定能解決大部分需求,剩下的交給 C# 腳本:在後端以 Roslyn 編譯執行,讀寫任意點位、判斷通訊狀態、呼叫外部 HTTP API、匯出 Excel、把檔案傳到遠端主機,用來做跨設備聯動與自動化邏輯,減少對 PLC 額外程式的依賴。
腳本編輯器採用與 VS Code 相同的 Monaco 引擎:C# 語法高亮、即時診斷的紅波浪線、自動完成,以及可從點位樹一鍵插入讀寫程式碼的插入助手。

三種執行模式與觸發方式
手動觸發(預設):編譯後待機,被觸發時執行一次;自動循環:Runtime 啟動即常駐,迴圈結束後自動重跑;全局腳本:每專案一支,只放所有腳本共用的變數與函式。
- 觸發來源:功能按鈕的按下、長按、放開;流程按鈕步驟;排程;頁面進入與離開;背景任務的條件成立;功能鍵 F1~F12;編輯器的「單次執行」。
- 點位變化偵測:循環腳本配合上升緣、下降緣函式(LDP、LDF),或改用背景任務的條件觸發腳本。
- 每支腳本獨立執行緒與取消權杖;更新時先取消舊版,最多等 3 秒再啟動新版。
可用的 API
所有 API 以 Scada 開頭,失敗時回傳失敗結果與中文訊息,不拋例外中斷腳本。
- 點位:以識別碼或「通道、設備、表、點位」路徑讀寫;型別化讀取回傳是否成功、資料與訊息;陣列單元素與單一位元的讀寫;安全轉型函式。
- 全局變數:Global.名稱 直接讀寫不輪詢 PLC 的記憶體變數,可持久化。
- 通訊與事件:通道線上狀態、全部通道狀態、寫入操作事件、推播訊息到所有畫面、開關彈窗、蜂鳴器、輸出到腳本面板。
- 畫面:即時覆寫元件位置、大小、旋轉與字型,控制影片播放。
- HTTP 與 JSON:原生支援 HttpClient 與 System.Text.Json,附 GET、POST 範例片段。
- 檔案:本機複製與刪除;遠端複製與刪除(SFTP、SCP 由遠端檔案連線設定決定,上傳、下載、中轉自動判斷)。
- Excel 與報表:匯出趨勢(原始或彙總)、警報、操作紀錄,點位快照,讀取 Excel,依 Excel 寫入點位,建立 Excel。
編輯器輔助
自動完成涵蓋全部 Scada API、Global. 後動態列出的點位名、全局腳本成員、LINQ、HttpClient、DateTime 與 JSON;輸入時即時診斷錯誤;插入助手左欄是 API 參考(含說明卡片與插入範例),右欄是通道到點位的樹狀結構,含線上指示與讀、有效、寫三個一鍵插入;底部輸出面板顯示列印結果與執行狀態。
畫面

操作流程
- 1編輯器工具列「腳本管理」新增腳本(預設手動觸發,避免誤自動執行)。
- 2在編輯器撰寫 C#,用插入助手從點位樹插入讀寫程式碼,或從 API 參考插入範例。
- 3依即時診斷修正錯誤,按「單次執行」在底部輸出面板看結果。
- 4決定模式:常駐邏輯改為自動循環並在迴圈內使用帶取消權杖的延遲;按鈕、排程、報表用手動觸發。
- 5綁定觸發來源:功能按鈕、流程按鈕、排程、頁面設定、背景任務或功能鍵。
- 6按「部署」讓 Runtime 載入新版,在輸出面板與操作紀錄追蹤執行。
FAQ
常見問題
腳本怎麼在點位變化時觸發?
腳本沒有變化事件訂閱;做法是自動循環腳本輪詢並用上升緣函式偵測 OFF 到 ON 只做一次,或不寫程式改用背景任務設條件並選「觸發腳本」。
編輯器有哪些輔助?
VS Code 同款的 Monaco 編輯器提供 C# 高亮、自動完成(含全部 Scada API、Global. 的動態點位名、全局腳本成員)與即時紅波浪診斷;插入助手左欄 API 參考可插入範例,右欄點位樹一鍵插入讀、寫、有效的程式碼。
腳本讀到的值為什麼要轉型?
點位讀回來一律是字串,通訊未就緒時是空值,直接用 Convert 會拋例外中斷腳本。請用安全轉型函式或型別化讀取,先看是否成功再使用資料,失敗原因在訊息欄位。