Server aus SPS-Client heraus konfigurieren
Der Aufruf der Methode configure instanziiert eine Session für die jeweilige Instanz des Funktionsblocks FB_MlSvrPrediction
im TcMlServer. Bei der Instanziierung wird auf die Konfiguration, die in dem FB-Member stPredictionParameter definiert ist, zurückgegriffen. In der Regel wird jeder Instanz des FB_MlSvrPrediction
eine eigene Session im Server zugeordnet. Über den Parameter bExclusiveSession
können aber auch Sessions gemeinsamen genutzt werden.
Beim Konfigurations-Aufruf wird insbesondere definiert:
- Wo ist der TwinCAT Machine Learning Server?
- Wird über die AMS Net Id des Server-Geräts spezifiziert. Default-Wert ist „lokal“.
- Welches KI-Modell soll geladen werden?
- Wird über den Pfad zur entsprechenden JSON-Datei spezifiziert.
- Auf welcher Hardware soll das KI-Modell ausgeführt werden?
- Wird über den Execution Provider (E_ExecutionProvider) und optional die DeviceId der GPU definiert.
Jede eröffnete Session allokiert Ressourcen auf dem Server-Gerät. Die Anzahl von parallelen Sessions ist softwareseitig nicht limitiert, sondern wird ausschließlich über die verfügbaren Hardwareressourcen beschränkt. Ist nicht genügend Speicher (RAM oder vRAM) verfügbar, um eine weitere Session zu eröffnen, schlägt der Configure-Befehl fehl.
Mit der Methode deconfigure kann eine Session geschlossen und damit die Ressourcen freigegeben werden.
Sendet ein Client über eine definierte Zeit keine Anfrage an den Server, die sogenannte Session-Timeout-Zeit, geht der Server davon aus, dass der Client nicht mehr aktiv ist. Die Session wird automatisch geschlossen, wenn der konfigurierte Session-Timeout erreicht ist.
Beispiel
Deklaration
fbMlSvr : FB_MlSvrPrediction();
Code
// configure session paramaters
fbMlSvr.stPredictionParameter.sMlModelFilePath := 'C:\mdl\lemon_model.json';
fbMlSvr.stPredictionParameter.sMlSvrNetId := '127.0.0.1.1.1';
fbMlSVr.stPredictionParameter.eExecutionProvider := E_ExecutionProvider.CPU;
// Submit configuration request to the TcMlServer
// Provide a generous nTimeout, as the configuration can take a substantial amount of time
IF fbMlSvr.Configure(nTimeout := 1000, nPriority:=0) THEN
// check for error
// change state
END_IF;