Getting Started
Im Folgenden wird die grundlegende Arbeitsweise mit dem TwinCAT XML Data Server anhand kleiner Beispiele erklärt.
Primitive Datentypen
Folgende Primitive Datentypen werden unterstützt:
Datentyp | Beispiel in der SPS | Beispiel in XML |
---|---|---|
UDINT, DINT, UINT, INT, USINT, SINT, DWORD, WORD, BYTE |
|
|
LREAL, REAL |
|
|
STRING |
|
|
TIME, DATE, TOD,DT |
|
|
BOOL |
|
|
Bsp.: In der SPS ist die globale Variable .Var1
vom Typen DINT
definiert. Die XML-Datei ist dann wie folgt definiert:
<dataentry>
<Var1>10</Var1>
</dataentry>
Die Inputvariablen des Funktionsbausteines FB_XmlSrvRead müssen dann wie folgt gesetzt werden:
fbRead.pSymAddr := ADR(value1);
fbRead.cbSymSize := SIZEOF(value1);
fbRead.sFilePath := 'C:\Test.xml';
fbRead.sXPath :='/dataentry/Var1';
Das Root-Element in der XML-Datei und der Name der Variablen sind in der XML-Datei frei wählbar. Es muss dann lediglich der neue Pfad in der Eingangsvariable sXPath geändert werden. In einer XML-Datei können auch mehrere Variablen definiert sein:
<dataentry>
<Var1>10</Var1>
<Var2>100</Var2>
<Var3>
<a>100</a>
<b>10</b>
</Var3>
</dataentry>
Um auf das Symbol .Var3.a
zuzugreifen müsste sXpath := '/dataentry/Var3.a'
gesetzt werden.
Strukturen
Strukturen in der XML-Datei haben den gleichen hierarchischen Aufbau wie in der SPS. Es gibt jedoch die Möglichkeit, einzelne Unterelemente in der XML-Datei zu überspringen. Die einzelnen Unterelmente der Struktur müssen die gleichen Namen besitzen wie in der SPS, ansonsten werden sie übersprungen. Wenn Unterelemente in der XML-Datei nicht in den korrekten Datentypen umgewandelt werden können, werden sie auch übersprungen.
Bsp: In der SPS ist die globale Variable .Var2
vom Typen ST_MYSTRUCT
definiert:
TYPE ST_MYSTRUCT:
STRUCT
a: UINT;
b: DINT;
c: LREAL;
d: STRING;
END_STRUCT
END_TYPE
Die XML-Datei könnte dann wie folgt aussehen:
<variables>
<Var1>10</Var1>
<Var2> <!-- sXPath := '\variables\Var2' --!>
<a>100</a>
<b>-10</b>
<c>1.2</c>
<d>Hallo</d>
</Var2>
</variables>
In diesem Fall sind alle Unterelemente vollständig und korrekt definiert, so dass die Variable vollständig initialisiert wird. Im folgenden Beispiel hingegen wird nur das Unterelement c serialisiert:
<variables>
<Var1>10</Var1>
<Variable2> <!-- sXPath := '\variables\Variable2' --!>
<Info>dies ist ein Test</Info>
<a>-100</a>
<c>1.2</c>
</Variable2>
</variables>
Unterelement a kann nicht konvertiert werden, weil es negativ ist und ein UINT gefordert wird. Das Unterelement b fehlt komplett. Das Tag <Info> wird übersprungen, da es in der SPS-Datei nicht definiert ist.
Arrays
Um den Index von Arrays anzugeben, muss bei den einzelnen Array-Elementen das Attribut "Index" verwendet werden. Es können auch einzelne Array-Elemente wegelassen werden. Diese werden dann einfach übersprungen.
Bsp.: In der SPS ist ein Variable .array1
vom Typen ARRAY[1..4] OF DINT
definiert. Die XML sieht dann wie folgt aus:
<dataentry>
<array1 index="1">10</array1>
<array1 index="2">10</array1>
<array1 index="3">10</array1>
<array1 index="4">10</array1>
</dataentry>
Voraussetzungen
Entwicklungsumgebung | Zielplattform | Einzubindende SPS Bibliotheken |
---|---|---|
TwinCAT v2.10.0 | PC oder CX (x86, ARM) | TcXmlDataSrv.Lib |