LeoSoftGEM200 SDK
DEVELOPER RESOURCES

從第一個 API 開始。

以實際 GemSdk 介面整合設備程式,C# 與 VB.NET 使用同一套 SDK。

快速入門

  1. 來信取得試用包,安裝對應的 .NET 8 或 .NET 10 開發與執行環境。保留發行包中的相依檔案與完整性清單。
  2. 使用包內 CSharpMinimal 或 VbNetMinimal 範例,依包內專案參考 SDK。將 equipment.json 複製到執行目錄並設定複製至輸出。
  3. 依設備修改變數、事件與警報定義。下方使用範例內的 ChamberTemp、CEID 4010 與 ALID 5001;自訂設定時需換成相符值。
  4. 設定 HSMS 主動/被動模式、Device ID、IP 與埠號,再呼叫 Start()。被動模式的 IP 為本機監聽位址;主動模式的 IP 為 Host 位址。
  5. HSMS Select 與 GEM 通訊狀態不同。先觀察 HsmsSelectedChanged 與 CommunicationStateChanged;控制狀態另由 ControlStateChanged 通知。
  6. 事件上報前,Host 須以 S2F33 定義報告、S2F35 連結 CEID、S2F37 啟用。警報先確認 S5F3 訂閱,再觀察 S5F1/F2。

以下為實際 SDK 程式碼,執行後會啟動 HSMS;網站不執行這些範例。控制台範例持續等待,正式程式應依應用程式生命週期結束等待並呼叫 DisposeAsync()。

兩種語言,同一套流程。

C#

using System;
using System.Threading.Tasks;
using SecsGemDemo.Common;
using SecsGemDemo.Equipment.Sdk;

class Program
{
    static async Task Main()
    {
        await using var sdk = new GemSdk("equipment.json",
            new HsmsSettings {
                IpAddress = "127.0.0.1", Port = 5000,
                DeviceId = 0, IsActive = false
            });
        sdk.HsmsSelectedChanged += selected =>
            Console.WriteLine($"Selected: {selected}");
        sdk.RegisterRemoteCommand("CUSTOM",
            parameters => new RemoteCommandResult());
        sdk.Start();
        Console.WriteLine(GemSdk.TrialStatus());

        // Use these calls after the Host enables reports/alarms.
        // sdk.SetVariable("ChamberTemp", 25.0f);
        // sdk.TriggerEvent(4010);
        // sdk.SetAlarm(5001);
        // sdk.ClearAlarm(5001);
        await Task.Delay(-1); // Ctrl+C ends this console example.
    }
}

VB.NET

Imports System
Imports System.Threading.Tasks
Imports SecsGemDemo.Common
Imports SecsGemDemo.Equipment.Sdk

Module Program
    Sub Main()
        RunAsync().GetAwaiter().GetResult()
    End Sub

    Private Async Function RunAsync() As Task
        Dim sdk = New GemSdk("equipment.json",
            New HsmsSettings With {
                .IpAddress = "127.0.0.1", .Port = 5000,
                .DeviceId = 0, .IsActive = False
            })
        Try
            AddHandler sdk.HsmsSelectedChanged,
                Sub(selected) Console.WriteLine($"Selected: {selected}")
            sdk.RegisterRemoteCommand("CUSTOM",
                Function(parameters) New RemoteCommandResult())
            sdk.Start()
            Console.WriteLine(GemSdk.TrialStatus())

            ' Use after the Host enables reports/alarms.
            ' sdk.SetVariable("ChamberTemp", 25.0F)
            ' sdk.TriggerEvent(4010UI)
            ' sdk.SetAlarm(5001UI)
            ' sdk.ClearAlarm(5001UI)
            Await Task.Delay(-1)
        Finally
            sdk.DisposeAsync().AsTask().GetAwaiter().GetResult()
        End Try
    End Function
End Module

API 概覽

命名空間:SecsGemDemo.Equipment.Sdk;HSMS 設定:SecsGemDemo.Common.HsmsSettings。以下列出公開入口,不提供任意 SECS 訊息傳送 API。

API行為與注意事項
GemSdk(string configurationPath, HsmsSettings? hsms = null)載入設備設定,可覆寫 HSMS 設定。未提供正式授權時開始試用。
Start() / DisposeAsync()啟動 HSMS;非同步停止並釋放設備與日誌資源。
HsmsSelected / CommunicationState / ControlState分別讀取 HSMS Select、GEM 通訊與控制狀態。
HsmsSelectedChanged / CommunicationStateChanged / ControlStateChanged通知狀態改變;後兩者提供原狀態與新狀態。UI 更新請切回 UI 執行緒。
EnableCommunication() / DisableCommunication()啟用或停用 GEM 通訊,回傳是否接受操作。
RequestOnlineAsync() / SetLocal() / SetRemote() / SetOffline()操作員控制入口;RequestOnlineAsync 回傳 Task<bool>。
SetVariable(string name, object value) / GetVariable(string name)依名稱更新 SV、DV、EC,或讀取目前值。
BindVariable(string source, Func<object> provider)依設定中的 source 綁定即時取值函式。
TriggerEvent(uint ceid)觸發已由 Host 定義、連結並啟用的事件報告。
SetAlarm(uint alid) / ClearAlarm(uint alid) / IsAlarmSet(uint alid)使警報成立、解除或查詢;回傳 bool。
RegisterRemoteCommand(string name, Func<IReadOnlyDictionary<string, object?>, RemoteCommandResult> handler)註冊遠端指令,僅 Online Remote 執行。回呼須快速返回。
RemoteCommandResult(byte acknowledge = 0, IReadOnlyDictionary<string, byte>? parameterErrors = null)HCACK 0–6;CPACK 1–3。有參數錯誤時 HCACK 必須為 3。
ProgramNames / GetProgram(string id) / SetProgram(string id, byte[] body) / ProgramChanged查詢配方名稱、讀寫本體,監聽 Host 下載或刪除通知。
ActiveTraceIds / StopTrace(uint id)取得 Host 啟用的 TRID 快照,或停止指定 Trace。
Mdln / SoftRev / AddLogFile(string path)讀取機型/版本;新增 SECS 與運作日誌檔。
GemSdk.TrialStatus() / ActivateTrial() / ExtendTrial(string path)靜態方法:查詢/首次啟用試用、匯入延長檔。重複 ActivateTrial 不延長;延長重設 30 天、不疊加。
GemSdk.MachineFingerprint() / LoadLicense(string path)靜態方法:取得指紋/載入機台授權;正式授權應於建構 SDK 前載入。
HsmsSettingsDeviceId、IpAddress、Port、IsActive;T3/T5/T6/T7/T8 與 LinkTestInterval 單位為毫秒,LinkTestEnabled 控制 Linktest。