Zuviel Werbung? - > Hier kostenlos beim SPS-Forum registrieren

Ergebnis 1 bis 2 von 2

Thema: Wie kann ich in WinCC Daten im/exportieren mit XML?

  1. #1
    Registriert seit
    05.11.2004
    Ort
    Schweiz
    Beiträge
    1.138
    Danke
    225
    Erhielt 127 Danke für 85 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo.

    Da ich letzt ein Projekt hatte, wo ich mit XML Daten exportieren und importieren musste, wollte ich hier mal meine Erfahrungen dazu weitergeben.

    Der Im/Export mit der XML-Funktion, die auf jedem Windows-System vorhanden ist (WinCE, WinXP....) ermöglicht unter WinCC ab Version 6.0 (frühere Version nicht getestet) viele Möglichkeiten an, um z.b.
    -Rezeptsicherungen auf USB-Stick
    -Parametersicherung/Anpassung sichern oder laden
    -Neue Rezepte mehr Mail an Kunden senden
    -etc....

    Das ganze habe ich mit VBS gemacht, da diese Sprache auch in WinCC flexibel zur Verfügung steht.
    Ob das ganze auch unter C-Script funktioniert muss man dann selbst testen.

    1. Erstellen eines VB-Scripts in WinCC.
    Zuerst sollte im VB-Script Editor (Global Script VBS) eine neues Modul unter Projekt-Module erstellt werden.
    ->Auf der linken Seite unten auf Projekt-Module klicken
    ->Rechtsklick auf Projekt-Module im Fensterbereich oberhalb der Auswahl
    ->Neu -> Projekt-Modul

    Es wird ein neuen Modul erstellt, das nun so aussehn sollte:
    [PHP]Sub procedure1

    End Sub[/PHP]

    Nun der Sub einen ordentlichen Namen vergeben. Ich habe z.B. READ_XML_FILE, SAVE_XML_FILE oder NEW_XML_FILE als Bezeichnung gewählt.

    2. Variablen im Script definieren.
    Um eine Variable aus WinCC im Script nutzen zu können, müssen wir einen Zugriff auf diese erst einrichten.
    In dieser Variable kann z.B. der Pfad der Datei hinterlegt sein, wo sich die zu lesende oder schreibende XML-Datei befindet.

    [PHP]Dim objTagPfad
    Set objTagPfad = HMIRuntime.Tags("Pfadname_XML_Datei") [/PHP]

    3. Instanz auf die XML-Funktions-Bibliothek erzeugen.
    Damit wir nun auf die Funktionen der XML-Bibliothek zugreifen könne, müssen wir einen Bezug zu dieser herstellen.
    Das geht folgendermassen:

    [PHP]Dim XML
    Set XML = CreateObject("MSXML2.DOMDocument")[/PHP]

    Nun haben wir erstmal alles, um mit XML zu Arbeiten.
    Nun gibt es ja 3 Möglichkeiten, mit einer XML-Datei was zu machen.
    1. Wir erstellen eine komplett neue Datei
    2. Wir lesen was aus einer bestehenden Datei aus
    3. Wir lesen und ändern was in einer bestehenden Datei

    Zuerst wird das Thema erstellen einer XML-Datei angegangen:
    Da wir ja oben schonmal die Pfadname unser Datei im WinCC mit dem Namen der neuen Datei beschrieben haben, müssen wir diesen erstmal auslesen.

    [PHP]objTagPfad.Read[/PHP]

    Nun übergeben wir der XML-Funktion den Pfadnamen. Da die Datei noch nicht existiert, wird erstmal eine virtuelle Datei im Speicher angelegt, die diesen Namen dann trägt.

    [PHP]Dim OpenXML
    OpenXML = XML.Load(objTagPfad.Value) [/PHP]

    Nun überprüfen wir, ob XML das Laden erfolgreich beendet hat.

    [PHP]If OpenXML = True Then
    ......
    End If[/PHP]

    In der If-Abfrage können nun die Daten für die XML-Datei aufbereitet werden.
    Ist man damit fertig, speichert man die Datei im XML-Format ab.

    [PHP]If OpenXML = True Then
    ......
    XML.save(objTagPfad.Value)
    End If[/PHP]

    Am Schluss von dem Script muss dann noch die XML-Routine freigegeben werden:
    [PHP]Set XML = Nothing[/PHP]

    Das ganze würde dann fertig so aussehen:
    [PHP]Sub NEW_XML_FILE

    Dim objTagPfad
    Set objTagPfad = HMIRuntime.Tags("Pfadname_XML_Datei")

    Dim XML
    Set XML = CreateObject("MSXML2.DOMDocument")

    Dim OpenXML
    objTagPfad.Read
    OpenXML = XML.Load(objTagPfad.Value)

    If OpenXML = True Then
    ......
    XML.save(objTagPfad.Value)
    End If
    Set XML = Nothing
    End Sub[/PHP]
    Kommt Zeit.... Kommt Rat.... In der Tat.
    Gartenlampe mit Windenergie anstelle von Solar? Bei Interesse -> PN
    Zitieren Zitieren Wie kann ich in WinCC Daten im/exportieren mit XML?  

  2. #2
    Krumnix ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    05.11.2004
    Ort
    Schweiz
    Beiträge
    1.138
    Danke
    225
    Erhielt 127 Danke für 85 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Daten aus einer XML-Datei lesen:
    Da wir nun wissen, wie man auf die Funktion der XML-Bibliothek in VBS aufrufen können, kommen wir nun zu dem Lesen eines Nodes in einer XML-Datei.
    Hier mal eine Übersicht, wie so eine XML-Datei aussieht:
    [php]<?xml version="1.0"?>
    <root xmlnssi="http://www.w3.org/2001/XMLSchema-instance" xmlnssd="http://www.w3.org/2001/XMLSchema">
    <DatenEingang>
    <ID>22123</ID>
    <AVGDicke>12</AVGDicke>
    <BandGeschw>34</BandGeschw>
    <BadTemp>6.098</BadTemp>
    </DatenEingang>
    <DatenMitte>
    <BandGeschw>34</BandGeschw>
    <BadTemp>6.110</BadTemp>
    </DatenMitte>
    <DatenAusgang>
    <AVGDicke>11</AVGDicke>
    <BandGeschw>34</BandGeschw>
    <BadTemp>6.209</BadTemp>
    <DiffDicke>1</DiffDicke>
    <Gewicht>45</Gewicht>
    </DatenAusgang>
    </root>[/php]

    Nun wollen wir einen Wert aus dieser Datei mal auslesen.
    Das Grundgerüst sieht erstmal folgendermassen aus:

    [php]Sub READ_XML_FILE

    Dim objTagPfad
    Set objTagPfad = HMIRuntime.Tags("Pfadname_XML_Datei")

    Dim XML
    Set XML = CreateObject("MSXML2.DOMDocument")

    Dim OpenXML
    objTagPfad.Read
    OpenXML = XML.Load(objTagPfad.Value)

    If OpenXML = True Then
    ...... //Hier werden wir nun weiter darauf eingehen. Z.B. Zugriff auf ein Node in der XML-Datei um es auszulesen oder zu beschreiben
    End If
    Set XML = Nothing
    End Sub
    [/php]

    Um auf ein Node in einer XML-Datei Zugriff zu haben verwendet man folgenden Aufruf:
    [php]XML.documentElement.selectSingleNode("DatenEingang/ID").text
    [/php]

    Damit wir den Inhalt dieses Nodes im WinCC verwenden können schreiben wir folgendes:
    [php]Dim XML-ID
    Set XML-ID = HMIRuntime.Tags("XML_ID")

    XML-ID.Read
    XML-ID.Value = CDbl(XML.documentElement.selectSingleNode("DatenEingang/ID").text)
    [/php]

    Das Ganze sieht dann so aus:
    [php]Sub READ_XML_FILE

    Dim objTagPfad
    Set objTagPfad = HMIRuntime.Tags("Pfadname_XML_Datei")

    Dim XML
    Set XML = CreateObject("MSXML2.DOMDocument")

    Dim OpenXML
    objTagPfad.Read
    OpenXML = XML.Load(objTagPfad.Value)

    If OpenXML = True Then
    Dim XML-ID
    Set XML-ID = HMIRuntime.Tags("XML_ID")

    XML-ID.Read
    XML-ID.Value = CDbl(XML.documentElement.selectSingleNode("DatenEingang/ID").text)
    XML-ID.Save
    End If
    Set XML = Nothing
    End Sub
    [/php]


    Daten aus einer XML-Datei lesen und Ändern:
    Nun kommen wir dazu, wie wir ein Node in einer XML-Datei ändern können.
    Das Auslesen eines Nodes habe ich ja schon weiter oben beschrieben.
    Der Unterscheid zum schreiben ist nicht viel anders.

    Hier wieder das Grundgerüst:
    [php]Sub CHANGE_XML_FILE

    Dim objTagPfad
    Set objTagPfad = HMIRuntime.Tags("Pfadname_XML_Datei")

    Dim XML
    Set XML = CreateObject("MSXML2.DOMDocument")

    Dim OpenXML
    objTagPfad.Read
    OpenXML = XML.Load(objTagPfad.Value)

    If OpenXML = True Then
    ...... //Hier werden wir nun weiter darauf eingehen. Z.B. Zugriff auf ein Node in der XML-Datei um es auszulesen oder zu beschreiben
    End If
    Set XML = Nothing
    End Sub
    [/php]

    Damit man nun ein Node in der Datei ändern kann, greifen wir wie beim Lesen auf diesen Node zu.
    Jedoch weisen wir ihm nun einen Wert zu, anstelle das wir einen auslesen:
    [php]
    Dim objTagBandgeschw
    objTagBandgeschw.Read
    XML.documentElement.selectSingleNode("DatenMitte/BandGeschw").text = CStr(objTagBandgeschw.Value)
    [/php]

    Das Ganze sieht dann komplett so aus:
    [php]Sub CHANGE_XML_FILE

    Dim objTagPfad
    Set objTagPfad = HMIRuntime.Tags("Pfadname_XML_Datei")

    Dim XML
    Set XML = CreateObject("MSXML2.DOMDocument")

    Dim OpenXML
    objTagPfad.Read
    OpenXML = XML.Load(objTagPfad.Value)

    If OpenXML = True Then
    Dim objTagBandgeschw
    objTagBandgeschw.Read
    XML.documentElement.selectSingleNode("DatenMitte/BandGeschw").text = CStr(objTagBandgeschw.Value)
    XML.save(objTagPfad.Value)
    End If
    Set XML = Nothing
    End Sub
    [/php]

    So das wars erstmal. Hoffe, ich konnte euch damit ein wenig in die XML-Geschichte unter WinCC einführen.

    Gruß,
    Krumnix
    Kommt Zeit.... Kommt Rat.... In der Tat.
    Gartenlampe mit Windenergie anstelle von Solar? Bei Interesse -> PN

  3. Folgende 3 Benutzer sagen Danke zu Krumnix für den nützlichen Beitrag:

    admin77 (08.08.2013),Fanta-Er (26.03.2013),xhasx (01.09.2011)

Ähnliche Themen

  1. Antworten: 9
    Letzter Beitrag: 29.09.2011, 16:12
  2. S7 1200 Daten exportieren
    Von joe_jonson im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 11.08.2011, 22:11
  3. WinCC RT Daten in csv Datei exportieren
    Von themasterchris im Forum HMI
    Antworten: 2
    Letzter Beitrag: 10.08.2011, 18:00
  4. Daten von einem OPC Server in Excel Tabelle exportieren?
    Von nate im Forum Hochsprachen - OPC
    Antworten: 7
    Letzter Beitrag: 16.02.2011, 21:02
  5. Kurvenschreiber-Daten von PID-Control exportieren?
    Von TempeltonPeck im Forum Simatic
    Antworten: 15
    Letzter Beitrag: 04.03.2010, 15:41

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •