ONNX für die Verwendung mit TwinCAT Machine Learning Server vorbereiten
Interfacebeschreibungen für die SPS erzeugen
Um eine ONNX mit dem FB_MlSvrPrediction in der TwinCAT SPS nutzen zu können, werden Interfaceinformationen benötigt. Diese werden durch den TwinCAT Machine Learning Model Manager erzeugt.
Angaben zum unterstützten ONNX Opset und Einschränkungen finden Sie hier: ONNX Support.
JSON-File
Das JSON-File beinhaltet Meta-Informationen, welche der Funktionsbaustein FB_MlSvrPrediction
benötigt. Darüber hinaus können Nutzer dem JSON-File eigene Meta-Informationen über die Custom-Attributes mitgeben. Das JSON-File wird vom Funktionsbaustein geladen, siehe Configure-Methode. Sowohl das JSON-File als auch die ONNX-Datei müssen auf dem Laufzeit-PC zum Laden verfügbar sein, siehe Modellbeschreibungsdateien auf Server-Device verfügbar machen.
PlcOpenXml
Das PlcOpenXml beinhaltet die SPS-Typbeschreibung der Input- und Output Nodes. Die automatisch generierten Input-/Output-Strukturen (DUTs) spiegeln die Input-/Output-Definition der von Ihnen bereitgestellten ONNX-Datei wider. Stellen Sie daher sicher, dass Sie aussagekräftige Namen für die Input- und Output Nodes in ihrer ONNX verwenden.
Die Nutzung dieser erstellen Datentypen ist streng erforderlich.
Beispiel zur Namensgenerierung in der PlcOpenXml:
Dateiname: lemon_model.onnx
Name Input node: input.1
Name Output node: 367
Es werden zwei DUTs vom Typ STRUCT erzeugt mit den Namen ST_lemon_modelInput und ST_lemon_modelOutput. Jedes STRUCT hat einen header (nicht verändern!) und einen Datenbereich. Die Datenbereich-Elemente werden entsprechend der Input- und Output Nodes benannt, im obigen Fall in in_input1 und out_367. In der SPS nicht gestattete Zeichen werden automatisch entfernt. Besitzt ein KI-Modell mehrere Input- oder Output Nodes, werden diese jeweils als Element des STRUCT dargestellt.
Beispiel für den generierten Inputdatentypen
TYPE ST_lemon_modelInput :
STRUCT
{attribute 'hide'} _header_DO_NOT_CHANGE : ARRAY[0..63] OF SINT := [-1,-112,120,86,52,18,-1,-1,1,-1,0,0,-1,-1,-112,-112,104,-72,-97,-115,-17,4,98,-85,-50,-67,-12,-50,-6,33,-10,-11,88,80,121,12,119,-56,-24,8,110,-32,-69,113,-21,3,102,-60,64,48,9,0,0,0,0,0,0,0,0,0,0,0,0,0];
in_input1 : ARRAY[0..0,0..2,0..223,0..223] OF REAL;
END_STRUCT
END_TYPE
Der Header repräsentiert einen Hash über die Shape der Eingangstensoren (bzw. beim Outputdatentypen über die Outputtensoren) des KI-Modells. Damit wird sichergestellt, dass der Datentyp zusammen mit der richtigen ONNX verwendet wird. Damit ergibt sich auch, dass Modelle mit identischer Input- und Output-Shape und lexikographischer Reihenfolge dieselben Hashes tragen und damit die Datentypen interoperabel sind. Das ist insbesondere beim Modell-Update zu bedenken.
Das Byte-Array des Headers darf nicht verändert werden!
Die Namen der Elemente des STRUCT können bei Bedarf angepasst werden, jedoch nicht deren Reihenfolge im STRUCT.
Import einer PlcOpenXml in TwinCAT 3
Die generierte PlcOpenXml kann in der SPS mit Rechtklick auf einen Ordner (z. B. DUTs) über das Feld „Import PLCopenXML“ in das SPS-Projekt übernommen werden.
Hinweis | |
Verifizierte Signatur: Betrieb des Machine Learning Servers nur über generierte Eingangs- und Ausgangsmodelltypen Bitte beachten Sie, dass die Verwendung der in der mitgelieferten PlcOpen-Datei definierten Eingangs-/Ausgangsmodelltypen zwingend erforderlich ist. Die Typen verfügen über eine vom TcMlServer verifizierte Signatur, um sichere Inferenzoperationen zu gewährleisten. |