Quickstart
ONNX-Datei erstellen oder herunterladen
Sollten Sie keine eigene ONNX für einen ersten Test zur Hand haben, können Sie sich beispielsweise bei GitHub im ONNX Model Zoo für Tests bedienen. Im Folgenden wird beispielhaft das ResNet50 aus dem ONNX Model Zoo verwendet.
Mit Netron kann einfach inspiziert werden, ob die Voraussetzungen für die Ausführung mit dem TwinCAT Machine Learning Server erfüllt sind.
Die Input Nodes sind nicht dynamisch und der verwendete ONNX Opset wird ebenfalls unterstützt.
ONNX-Datei mit TwinCAT Machine Learning Model Manager aufbereiten
Öffnen Sie TwinCAT XAE und navigieren Sie zu TwinCAT > Machine Learning > Machine Learning Model Manager.
Laden Sie mit „Select file“ das heruntergeladene ONNX und wählen Sie dann „Convert files“. Im Target Path werden Ihnen nun die ONNX sowie die erstellten zugehörigen JSON und PlcOpenXml angezeigt.
Wählen Sie „Open target path“ um den File Explorer auf diesem Pfad zu öffnen.
Dateien auf dem Zielsystem verfügbar machen
In diesem Quickstart wird davon ausgegangen, dass der TwinCAT Machine Learning Server auf demselben Gerät betrieben wird wie die SPS. Entsprechend werden die Modelldateien (res2net50_48w_2s_Opset18.onnx und res2net50_48w_2s_Opset18.json) auf dem Zielgerät unter dem Pfad C:\models abgelegt.
Mehr Informationen zu diesem Schritt finden Sie hier: Modellbeschreibungsdateien auf Server-Device verfügbar machen.
Quellcode schreiben
Es wird begonnen mit einem leeren SPS-Projekt. Zunächst importieren Sie die erstelle res2net50_48w_2s_Opset18_plcopen.xml durch Rechtsklick auf den Ordner DUTs und wählen dort „Import PLCopenXML“.
Fügen Sie außerdem unter References die SPS-Bibliothek Tc3_MlServer hinzu.
Der Code besteht im Minimalbeispiel aus zwei Schritten. Zunächst wird eine Session auf dem TwinCAT Machine Learning Server erstellt und dann die Inferenz des geladenen Modells ausgeführt.
Deklaration
stModelInput : ST_res2net50_48w_2s_Opset18Input;
stModelOutput : ST_res2net50_48w_2s_Opset18Output;
fbMlSvr : FB_MlSvrPrediction;
bConfigured : BOOL := FALSE;
bError : BOOL := FALSE;
sSuccess : T_MaxString;
nInferenceCount : UDINT := 0;
Code
IF NOT bConfigured AND NOT bError THEN
fbMlSvr.stPredictionParameter.sMlModelFilePath := 'C:\models\res2net50_48w_2s_Opset18.json';
fbMlSvr.stPredictionParameter.sMlSvrNetId := '127.0.0.1.1.1';
fbMlSVr.stPredictionParameter.eExecutionProvider := E_ExecutionProvider.CPU;
IF fbMlSvr.Configure(nTimeout := 10000, nPriority:=0) THEN
IF fbMlSvr.nErrorCode <> 0 THEN
bError := TRUE;
ELSE
bConfigured := TRUE;
END_IF
END_IF
END_IF
IF bConfigured AND NOT bError THEN
IF fbMlSvr.Predict(
pDataIn := ADR(stModelInput),
nDataInSize := SIZEOF(stModelInput),
pDataOut := ADR(stModelOutput),
nDataOutSize := SIZEOF(stModelOutput),
nTimeout := 1000,
nPriority := 0)
THEN
IF fbMlSvr.nErrorCode <> 0 THEN
bError := TRUE;
ELSE
sSuccess := 'You made your first inference';
nInferenceCount := nInferenceCount + 1;
// use stModelOutput here
END_IF
END_IF
END_IF
Konfiguration aktivieren
Aktivieren Sie Ihre Konfiguration und starten Sie die SPS. Das Ergebnis wird unten dargestellt. Der Counter-Wert nInferenceCount
steigt und die Variable sSuccess
zeigt eine Erfolgsmeldung an.