POWERSCADA

C# 腳本引擎

拖放與設定能解決大部分需求,剩下的交給 C# 腳本:在後端以 Roslyn 編譯執行,讀寫任意點位、判斷通訊狀態、呼叫外部 HTTP API、匯出 Excel、把檔案傳到遠端主機,用來做跨設備聯動與自動化邏輯,減少對 PLC 額外程式的依賴。

腳本編輯器採用與 VS Code 相同的 Monaco 引擎:C# 語法高亮、即時診斷的紅波浪線、自動完成,以及可從點位樹一鍵插入讀寫程式碼的插入助手。

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 參考(含說明卡片與插入範例),右欄是通道到點位的樹狀結構,含線上指示與讀、有效、寫三個一鍵插入;底部輸出面板顯示列印結果與執行狀態。

畫面

插入助手:API 參考與點位樹
插入助手:API 參考與點位樹

操作流程

  1. 1編輯器工具列「腳本管理」新增腳本(預設手動觸發,避免誤自動執行)。
  2. 2在編輯器撰寫 C#,用插入助手從點位樹插入讀寫程式碼,或從 API 參考插入範例。
  3. 3依即時診斷修正錯誤,按「單次執行」在底部輸出面板看結果。
  4. 4決定模式:常駐邏輯改為自動循環並在迴圈內使用帶取消權杖的延遲;按鈕、排程、報表用手動觸發。
  5. 5綁定觸發來源:功能按鈕、流程按鈕、排程、頁面設定、背景任務或功能鍵。
  6. 6按「部署」讓 Runtime 載入新版,在輸出面板與操作紀錄追蹤執行。

FAQ

常見問題

腳本怎麼在點位變化時觸發?

腳本沒有變化事件訂閱;做法是自動循環腳本輪詢並用上升緣函式偵測 OFF 到 ON 只做一次,或不寫程式改用背景任務設條件並選「觸發腳本」。

編輯器有哪些輔助?

VS Code 同款的 Monaco 編輯器提供 C# 高亮、自動完成(含全部 Scada API、Global. 的動態點位名、全局腳本成員)與即時紅波浪診斷;插入助手左欄 API 參考可插入範例,右欄點位樹一鍵插入讀、寫、有效的程式碼。

腳本讀到的值為什麼要轉型?

點位讀回來一律是字串,通訊未就緒時是空值,直接用 Convert 會拋例外中斷腳本。請用安全轉型函式或型別化讀取,先看是否成功再使用資料,失敗原因在訊息欄位。