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

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 16

Thema: winncc flex scripte datum suchen

  1. #1
    Registriert seit
    05.10.2005
    Beiträge
    188
    Danke
    31
    Erhielt 16 Danke für 14 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo,
    ich soll das letzte Datum aus einer XML-Datei finden.
    info XML: http://www.sps-forum.de/showthread.p...tieren-mit-XML

    Das Datum steht in diesem Format in der Datei: <usDatum>2012-11-13T18:03:00</usDatum> Aber davon gibt es mehrere.
    Nach diesem Datum müssen 5 Werte ausgelesen werden. Das ist nicht wirklich das Problem. Aber mir fehlt im Moment eine Sinnvolle Schleife um das LETZTE DATUM zu finden.
    Hat jemand eine Idee oder kann mich in die richtige richtung schubsen? Theoretisch sollte das letzte Datum am Ende stehen (Anfang letzten Datenblock). Eine Schriftliche bestätigung dafür habe ich nicht bekommen.


    System:
    PC477 mit Flex 2008 SP3 und RTX

    Danke im vorraus.....
    Zitieren Zitieren winncc flex scripte datum suchen  

  2. #2
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.726
    Danke
    398
    Erhielt 2.402 Danke für 2.001 Beiträge

    Standard

    Hallo,
    wenn das Such-Datum nicht das "Letzte" ist dann mußt du ggf. in 2 Schleifen arbeiten. Als Erstes scannt du dein File nach der Index-Position des letzten (höchsten) Datums-Stempels und merkst dir den. Danach lädst du dir den raus.
    Ich würde nicht versuchen, alle Einträge im Arbeitsspeicher der Visu vorzuhalten und daraus dann den Richtigen auszugeben - ich glaube, das gibt die Visu nicht her ... und so viel Zeit sollte das ggf. 2malige Lesen auch nicht verbrauchen ...

    Gruß
    Larry

  3. #3
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.192
    Danke
    925
    Erhielt 3.292 Danke für 2.661 Beiträge

    Standard

    Geht auch mit nur 1x lesen:
    Nach dem Finden eines Datums die 5 Werte zunächst nur temporär zwischenspeichern und weiterlesen. Wird ein weiteres Datum gefunden, dann wieder 5 Werte in die selben Variablen lesen. Am Dateiende die 5 Werte ausgeben - es sind die, welche zuletzt gefunden wurden.

    Harald
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  4. #4
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.726
    Danke
    398
    Erhielt 2.402 Danke für 2.001 Beiträge

    Standard

    stimmt ... so ginge es auch ...

  5. #5
    Fanta-Er ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    05.10.2005
    Beiträge
    188
    Danke
    31
    Erhielt 16 Danke für 14 Beiträge

    Standard

    danke euch.........
    die idee mit den zwischenspeichern ist nicht schlecht.

    mein ansatz:
    X_datum = 0
    X_zeit = 0
    X_zeile = 0

    - datei öffnen
    x:kontrolle ob dateiende ereicht
    - position (zeile) speichern
    - zeile einlesen und speichern
    - mit split in array zerlegen trennzeichen > "<usDatum>2012-11-13T18:03:00</usDatum>"
    - kontrole ob <usDatum = array[1]
    wenn nein dann sprung x
    ja: Datum in DINT(long) speichern "20121113"
    Zeit in DINT(long) speichern "180300"
    -kontrolle ob größe zahl schon in X_datum,X_zeit gespeichert ist
    nein: datum,zeit und zeile in X_datum,X_zeit und X_zeile speichern und sprung x
    ja: sprung X

    gehe zu position zeile und die nächsten 15 zeilen speichern und bearbeiten.

    daraus ergeben sich nur zwei fragen:
    1) mit len kann ich mit die position der zeile einlesen ABER wie kann ich wieder dahin springen? muss ich wirklich jede zeile einlesen bis ich im loop auf meiner position gelandet bin?
    2) ist da mit ein 50kb datei noch machbar oder anklicken und kaffee holen?

    fals ich einen fehler in dem gedankengang habe bitte berichtigen antworten.

    dicks danke an euch beide.....

  6. #6
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.726
    Danke
    398
    Erhielt 2.402 Danke für 2.001 Beiträge

    Standard

    Zitat Zitat von Fanta-Er Beitrag anzeigen
    daraus ergeben sich nur zwei fragen:
    1) mit len kann ich mit die position der zeile einlesen ABER wie kann ich wieder dahin springen? muss ich wirklich jede zeile einlesen bis ich im loop auf meiner position gelandet bin?
    2) ist da mit ein 50kb datei noch machbar oder anklicken und kaffee holen?

    fals ich einen fehler in dem gedankengang habe bitte berichtigen antworten.
    Hallo,
    deine Ablauf-Realisierung liest sich auf den ersten Blick ganz logisch ...
    Ob ich hier mit Split arbeiten würden weiß ich nicht - meine erste Wahl wäre InStr bzw. InStrRev ...
    Mit deiner Frage 1 kann ich so gar nichts anfangen - erklär das noch mal bitte ...
    Wegen der 50 kByte würde ich mir erstmal gar keine Gedanken machen. Dennoch wäre hier wichtig zu wissen, wie schnell das denn sein soll und in welchem Zeitraster das wiederholt werden soll ...

    Gruß
    Larry

  7. #7
    Fanta-Er ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    05.10.2005
    Beiträge
    188
    Danke
    31
    Erhielt 16 Danke für 14 Beiträge

    Standard

    morgen/mahlzeit.....

    Habe mich wirklich eine wenig schlecht ausgedrück.


    Set Datei = FSO.OpenTextFile(Dateiname, ForReading, False)
    Zeile = 1
    While Not Datei.AtEndOfStream ' Datei bis zum Ende durchlaufen
    TextZeile = Datei.ReadLine ' Lesen einer Zeile

    TextFeld = Split(TextZeile,";") ' Zeile an Semikolon trennen und die Werte in einem ' Array speichern

    SmartTags("Text_" & Zeile & "1") = TextFeld(0) ' Werte aus dem Array in Variablen speichern
    SmartTags("Text_" & Zeile & "2") = TextFeld(1) ' Werte aus dem Array in Variablen speichern
    SmartTags("Text_" & Zeile & "3") = TextFeld(2) ' Werte aus dem Array in Variablen speichern

    Zeile = Zeile + 1
    Wend

    Das Beispiel ist nur zur Verdeutlichung da.
    Auf diese Art weis ich in welcher Zeile ich bin und was drin steht (meine datumsüberprüfung von oben statt nur split).
    Wenn ich jetzt das letzte Datum gefunden habe, weis ich auch an welcher Position es im Textfile(xml) steht und ich müste nur dorthin springen.
    Ich habe nur keinen Befehl oder Syntax gefunden, beidem ich sage: Lese Zeile 16 und kopiere Inhalt in VariableSpeicher.

    Gib es so einen Befehl oder muss ich Spalte für Spalte einlesen bis ich an Position Zeile-1 bin?

    Geschwindigkeit ist erstmal nicht so wichtig. Sollte aber 5sec nicht überschreiten. Ich hoffe Flex läuft schnell genug auf dem PC477.

    MfG
    Fanta

    p.s. danke für den Tipp mit InStr bzw. InStrRev. Werde mir die Befehle mal genauer anschauen.
    Geändert von Fanta-Er (29.03.2013 um 13:26 Uhr)

  8. #8
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.726
    Danke
    398
    Erhielt 2.402 Danke für 2.001 Beiträge

    Standard

    ... dann hast du den Beitrag von Harald nicht richtig verstanden.
    Du mußt nicht zurückspringen oder noch einmal lesen. Du liest dir ja in jedem Fall jede Zeile ein. Nun speicherst du sie zwischen wenn der Datums-Eintrag dieser Zeile > ist als der der letzt-gespeicherten (also des Zwischen-Speichers). Am Ende hast du dann den gewünschten Datensatz im Zwischenspeicher stehen ...

    Gruß
    Larry

  9. #9
    Fanta-Er ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    05.10.2005
    Beiträge
    188
    Danke
    31
    Erhielt 16 Danke für 14 Beiträge

    Standard

    Danke für die Antwort.
    Doch habe ich. Das Problem ist nur, das meine Datenpaket in dem File verschieden groß sind.
    D.H. ich kann nicht einfach sagen: Datum + nächsten 15 Zeilen. Jehe nach Datenpaket ist meine Information an Stelle 10, 13 und 19 oder 5, 9 und 15 usw. Die Suchroutine von wem das Datenpacket ist wollte ich nicht noch in die Schleife einbauen. Wenn dann eine Störung oder Fehler von mir drin ist/sind, suche ich mir einen Wolf. Die Hoffnung war/ist die Funktionen Trennen zu können.

    Hintergrund:
    Ich sende einen Prüflings-DMC und Auftragsnummer mit meiner Maschinen ID an Leitsystem.
    Danach bekomme ich alle Ergebnisse von dem Prüfling zurück. Da drin können verschiedene Maschinen oder ich selber die Ergebnise abgelegt haben. Das besondere ist eben, dass wir alle verschieden Mengen von Ergebnissen(Spaltenanzahl) haben.
    Mein eigenes Ergebnis kann die Prüfung freigeben(jeh nach Zählerstand) aber auch zwei andere Maschinen.

    Frag mich nicht warum es so ist. Die Wege des Kunden sind unergründlich.

    Fanta

  10. #10
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.726
    Danke
    398
    Erhielt 2.402 Danke für 2.001 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Kannst du das einfach mal mit ein bis drei Beispielen verdeutlichen ?
    Schön wäre, wenn man den kompletten XML-Block sehen könnte ...

Ähnliche Themen

  1. Antworten: 4
    Letzter Beitrag: 04.07.2012, 21:48
  2. Antworten: 6
    Letzter Beitrag: 25.09.2011, 19:42
  3. Antworten: 1
    Letzter Beitrag: 13.11.2009, 12:25
  4. Antworten: 2
    Letzter Beitrag: 23.10.2008, 08:14
  5. Handbuch für WinnCc Scripte
    Von maxi im Forum HMI
    Antworten: 4
    Letzter Beitrag: 20.08.2007, 12:23

Lesezeichen

Berechtigungen

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