FB_FileOpen / FB_FileWrite / FB_FileClose

Klohie

Level-1
Beiträge
49
Reaktionspunkte
1
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

ich möchte mit hilfe von Funktionsbausteinen eine TXT Datei erstellen, diese mit Variablen füllen und die Datei danach wieder schließen.
Also das erstellen der Datei habe ich mit dem Funktionsbaustein FB_FileOpen hinbekommen. Diese lass ich mit FOPEN_MODEAPPEND OR FOPEN_MODEPLUS erstellen.
Jetzt möchte ich mehrere verschiedene Variablen in diese TXT Datei schreiben, mit Beschreibung.
Auf was muss ich jetzt achten, um diese Variablen so vorzubereiten?
Und die zweite Frage, was muss ich dann in pWriteBuff und cbWriteLen schreiben?
 
Hallo,

ich kenne genau diese Funktionen nicht, da sie in der Regel herstellerspezifisch sind.
Normalerweise schreibst Du aber einen normalen String.
Dann übergibst Du die Adresse (ADR) vom String an pWriteBuff und die Länge vom String an cbWriteLen, damit die Funktion weiß, wie viel sie von der Startadresse Lesen soll.

Gruß
Jens
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
TXT - Also Textdatei, nehme ich an.
Am einfachsten geht das, wenn Du die Datei zusätzlich mit FOPEN_MODETEXT öffnest und dann nacheinander Stringvariablen mit dem FB_FilePuts in die Datei schreibst statt mit FB_FileWrite. Wenn es numerische Variablen sind, musst Du sie dafür mit xxx_TO_STRING in Strings umwandeln.
Allerdings kann der FB bei jedem Aufruf nur einen String schreiben. Wenn es sehr viele sind, dauert es ziemlich lang. Dann kann man überlegen, die Strings in einen Bytepuffer zu packen, um sie dann mit FB_FileWrite in einem Rutsch zu schreiben. Die Vorbereitungsarbeit ist aber deutlich aufwändiger.
 
Danke für beide Antworten, damit komme ich auf jeden Fall weiter. Ich probiere mir mal aus, was einfacher ist und vll auch besser.
 
Wenn Du es mit dem FB_FileWrite machen willst, geht das im Prinzip so wie von JSEngineering beschrieben. Du musst aber zuvor den Nullterminator im String durch die Steuerzeichen CR/LF ersetzen, sonst bilden die Strings in der Datei nachher nur eine lange Bytewurst. Genau das muss man auch machen, wenn man einen Bytepuffer für mehrere Strings verwendet.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Okay, doch nochmal eine Frage.
Also ich habe die Werte jetzt in einen String gepackt. Die Länge des Strings lass ich mir mit Hilfe der Funktion LEN auslesen für cbWriteLen, da der String bis zum Auslesezeitpunkt in der Länge verändert (Laufzeit auslesen). Und nun an die Adresse vom String zu kommen, habe ich die Funktion ADR benutzt und gebe die an pWriteBuff weiter. Jetzt kommt trotzdesen der Fehler
0x703
1795
0x9811 0703
ADSERR_DEVICE_INVALIDOFFSET
Ungültiger Index-Offset.

Also ich erstelle meine Datei mit FB_FileOpen, wenn diese mir TRUE ausgibt, soll FB_FileWrite den String dort einschreiben.
 
Also ich erstelle meine Datei mit FB_FileOpen, wenn diese mir TRUE ausgibt, soll FB_FileWrite den String dort einschreiben.
TRUE in welcher Output-Variable?
Die grundlegende Handhabung der File-FBs ist Dir klar?
Also einmal mit bExecute:=True aufrufen, in den folgenden SPS-Zyklen wieder aufrufen, bis bBusy=false, dann nur weitermachen wenn auch bError=false. In jedem Fall den FB noch einmal mit bExecute:=false aufrufen.
 
Zurück
Oben