Getting Started

Im Folgenden wird die grundlegende Arbeitsweise mit dem TC3 XML Server anhand kleiner Beispiele erklärt.

In der SPS ist die globale Variable .Var1 vom Typen DINT definiert. Diese soll in einer XML-Datei wie folgt abgespeichert werden:

<dataentry>
   <Var1>10</Var1>
</dataentry>

Dazu müssen die Inputvariablen des Funktionsbausteines FB_XmlSrvWrite wie folgt gesetzt werden:

fbRead.pSymAddr    := ADR(value1);
fbRead.cbSymSize   := SIZEOF(value1);
fbRead.sFilePath   :='C:\Test.xml'; (*Pfad zur XML-Datei*)
fbRead.sXPath      := '/dataentry/Var1';

Das Root-Element Name der Variablen in der XML-Datei ist frei wählbar. Es muss lediglich der Pfad in der Eingangsvariable sXPath angepasst. 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 z.B. auf das Symbol .Var3.a zuzugreifen, muss 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 Unterelemente 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 auch sie übersprungen.

Beispiel:

In der SPS ist die globale Variable .Var2 vom Typ 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, sodass 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 weggelassen werden. Diese werden dann einfach übersprungen.

Beispiel:

In der SPS ist eine 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 v3.1 Build 4011

PC oder CX (x86, x64, ARM)

Tc2_XmlDataSrv