Welcome to our new forum
All users of the legacy CODESYS Forums, please create a new account at account.codesys.com. But make sure to use the same E-Mail address as in the old Forum. Then your posts will be matched. Close

syslibfile.lib - txt schreiben / lesen - WAGO 841/880

e-pappy
2013-04-24
2013-04-25
  • e-pappy - 2013-04-24

    Hallo zusammen...

    Ich scheitere gerade am Auslesen einer txt-Datei mit einem WAGO 750-841 (auch auf 880 anwendbar - SD-Karte).

    Folgendes Szenario: Mir gefällt die Alarmverwaltung der CoDeSys in Verbindung mit dem WAGO I/O-System nicht!
    Ergo bin ich gerade dabei, selber ein entsprechendes Alarmhandling zu schreiben, allerdings nur sinnvoll bei Verwendung des 880 mit SD-Karte, da ich Alarmmeldungen in eine txt-Datei schreibe und wieder auslese.

    Das ganz hat den Sinn, dass die Alarmmeldungen in der Tabelle stehen bleiben und nicht wie über die Alarmkonfiguration wieder verschwinden. Außer es gibt dafür natürlich schon eine sinnvolle Lösung?! Ich hab es bisher nicht hinbekommen, vor allem wenn ein Alarm mehrmals nacheinander eintrifft... - Lasse mich hier liebend gerne eines besseren belehren!

    Zum eigentlichen Problem:
    Ich schreibe beim Auftreten eines Fehler eine Struktur mittels "SysFileOpen, SysFileWrite und SysFileClose" in eine Text-Datei, die ich auf dem Controller ablege (750-841). Die Struktur sieht folgendermaßen aus:

    TYPE typAlarme;
    STRUCT
         Zustand          : STRING(80);
         Zeit                : STRING(80);
         Meldung         : STRING(80);
    END_STRUCT
    ENT_TYPE
    

    Beim Auftreten des Zustands schreibe ich ein KOMMT in die Struktur, inklusive Zeitstempel und Meldungstext, beim Reset der Störung ein GEHT, inklusive Zeitstempel und Meldungstext. Das Schreiben erfolgt im Modus 'a', sodass die aktuellste Meldung in der txt-Datei angehangen wird.
    Das klappt auch soweit, zumindest sieht die Datei sehr gut aus, wenn ich sie mir per FTP anschaue.

    Nun mein Problem: Beim Auslesen der txt-Datei via SysFileRead (SysFileOpen, SysFileRead, SysFileClose) erhalte ich aber immer nur den ersten Eintrag der Textdatei?!
    Was ich gerne hätte: Die letzten 64 oder 128 Einträge der txt-Datei!

    Ich habe es so versucht:

    READ_Buffer : ARRAY [0..63] OF typAlarme; 
    

    , um mir die 64 Einträge aus der txt-Datei zu speichern und anzeigen zu lassen, nur leider bleibt das Array komplett leer.
    Wenn ich den READ_Buffer als einfache Struktur-Variable typAlarme deklariere erhalte ich nur den ersten Eintrag der txt-Datei?!

    Mit und habe ich es auch schon versucht, allerdings ohne Erfolg?!

    Weiß jemand Rat???

    Das wäre echt super...

     
  • e-pappy - 2013-04-25

    Hi!

    Also das Auslesen habe ich nun doch hinbekommen, indem ich zunächst die Dateigröße mit SysFileGetSize prüfe und beim auslesen eben alle Daten auslese. Somit füllt sich auch mein Array mit allen Werten aus der txt-Datei.

    Allerdings frage ich mich jetzt, ob es auch möglich ist, die txt-Datei rückwärts einzulesen? Hat den Hintergrund, dass die neuesten Meldungen ja immer unten angehangen werden. Wenn die Dateigröße jetzt aber meine Array-größe überschreitet, dann wird nur bis zu einer bestimmten Position gelesen und der Rest einfach abgeschnitten! Also habe ich nicht immer die aktuellste Meldung in meinem READ-Array?!

     
  • e-pappy - 2013-04-25

    Der nächste Schritt ist auch getan

    Ich lese jetzt einfach immer nur die letzten Einträge, indem ich die Position in der Datei angebe, von wo an gelesen werden soll!
    Dann zeige ich mit einem Pointer auf das Lesebuffer und fülle das Anzeige-Array einfach rückwärts auf.
    Alles super... Hat mich jetzt allerdings auch etwas nerven gekostet.

    Trotzdem danke fürs lesen

     

Log in to post a comment.