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

value1 : DINT := -1;

value2 : UDINT := 65535;

<dataentry>
  <MAIN.value1>-1</MAIN.value1>
  <MAIN.value2>65535</MAIN.value2>
</dataentry>

LREAL, REAL

value1 : LREAL = 1.2;

<dataentry>
    <MAIN.value1>1.2</MAIN.value1>
</dataentry>

STRING

str1 : STRING = 'hallo';

<dataentry>
    <MAIN.str1>hallo</MAIN.str1>
</dataentry>

TIME, DATE, TOD,DT

date1:DATE :=D#2005-05-04;(* Time-Typen werden in der XML-Datei als DWORD gespeichert*)

 

<dataentry>
    <MAIN.date1>1115164800</MAIN.date1>
</dataentry>

BOOL

bool1:BOOL := TRUE;

bool2:BOOL := FALSE;

<dataentry>
    <MAIN.bool1>true</MAIN.bool1>
    <MAIN.bool2>false</MAIN.bool2>
</dataentry>

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