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.

Quickstart 1:

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.

Quickstart 2:

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“.

Quickstart 3:

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.

Quickstart 4: