CODESYS - das IEC 61131-3 Programmiersystem
https://forum-de.codesys.com/

syslibfile.lib - txt schreiben / lesen - WAGO 841/880
https://forum-de.codesys.com/viewtopic.php?f=2&t=4483
Seite 1 von 1

Autor:  e-pappy [ Mi Apr 24, 2013 3:43 pm ]
Betreff des Beitrags:  syslibfile.lib - txt schreiben / lesen - WAGO 841/880

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! :wink:

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:

Code:
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:

Code:
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 SysGetPos und SysSetPos habe ich es auch schon versucht, allerdings ohne Erfolg?!

Weiß jemand Rat???

Das wäre echt super...

Autor:  e-pappy [ Do Apr 25, 2013 5:53 am ]
Betreff des Beitrags:  Re: syslibfile.lib - txt schreiben / lesen - WAGO 841/880

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?! :?

Autor:  e-pappy [ Do Apr 25, 2013 10:58 am ]
Betreff des Beitrags:  Re: syslibfile.lib - txt schreiben / lesen - WAGO 841/880

Der nächste Schritt ist auch getan :D

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 :wink:

Seite 1 von 1 Alle Zeiten sind UTC
Powered by phpBB® Forum Software © phpBB Limited
https://www.phpbb.com/