Dateizugriff mit FB_file(open/write/close)

freekadelle

Level-1
Beiträge
3
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Moin aus Hamburg!

Ich versuche derzeit ein paar Messwerte in eine einfache Textdatei zu bannen. Das funktioniert auch alles ganz hervorragend.

Es gab hier im Forum mal etwas Beispielcode zu dem Thema und der lief auch direkt. Mein Problem ist nun, dass Twincat die Datei offensichtlich nicht richtig schließt.

Ich kann sie zwar öffnen, aber speichern kann ich sie nicht.
Konkreter Fall: Nachdem die Datei die 1mb grenze überschritten hatte, wollte ich ein paar Zeilen löschen, aber das ging ja leider nicht.
Daraufhin habe ich im Code einen neuen Dateinamen verwendet, die SPS schreibt nun in diese Datei und ich kann mit der alten wieder alles machen.

Hier ein Code-Ausschnitt dazu:

Code:
CASE zLog OF
	0:
		IF bOpenFile THEN
			zLog := 10;
			bOpenFile := FALSE;
		END_IF
	10:	(* Open file *)
		oeffnen(	sNetId:= '',
						sPathName:= sLogFilename,
						nMode:= FOPEN_MODEAPPEND OR FOPEN_MODEPLUS OR FOPEN_MODETEXT,
						ePath:= PATH_GENERIC,
						bExecute:= TRUE,
						tTimeout:= t#2s,
						bBusy=> ,
						bError=> ,
						nErrId=> ,
						hFile=> hFile);
		IF NOT oeffnen.bBusy THEN
			oeffnen(bExecute:= FALSE);
			zLog := 20;
		END_IF
	20:	(* Write data *)
		IF bWriteData THEN
			schreiben(	sNetId:= '',
							hFile:= hFile,
							pWriteBuff:= ADR(data_for_disk),
							cbWriteLen:= LEN(data_for_disk),
							bExecute:= TRUE,
							tTimeout:= t#3s,
							bBusy=> ,
							bError=> ,
							nErrId=> ,
							cbWrite=> );
			IF NOT schreiben.bBusy THEN
				bWriteData := FALSE;
				schreiben(bExecute := FALSE);
			END_IF
		ELSE
			zLog := 30;
		END_IF
	30:	(* Close file *)
		schliessen(	sNetId:= '',
						hFile:= hFile,
						bExecute:= TRUE,
						tTimeout:= t#3s,
						bBusy=> schlBUSY,
						bError=>schlERROR ,
						nErrId=>schlERRID );
		IF NOT schliessen.bBusy THEN
			schliessen(bExecute := FALSE);
			zLog := 0;
		END_IF

END_CASE

Zu erwähnen sollte noch sein, das zLog letztenendes bei 0 steht und kein error angezeigt wird.

Achja, Eckdaten:

CX1020 mit XP Emb. mit Tc PLC v2.10.0 build 1323

Geschrieben werden die Programme auf einem XP-PC mit Tc NC PTP v2.10.0 build 1335

Würde mich freuen, wenn ein paar Anregungen kommen.

Danke und schönes Wochenende!!!
 
Moin,

ich hab grad nochmal mein Posting gelesen und mir fiel auf, dass einige Sachen wohl nicht sehr verständlich dargestellt sind.

Also nachdem die Datei seitens der SPS geschlossen sein sollte, habe ich sie mit Notepad geöffnet, was auch klappte und dann wollte ich sie halt geändert speichern, das ging nicht. Da sagte er dann etwas so in die Richtung: " ungültiger Dateiname"

Nachdem ich der SPS eine andere Datei zum reinschreiben gegeben hatte, konnte ich mit Notepad die alte Datei in allen Variationen speichern.

Gruß aus Hamburg

Ole
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hi

Grundsätzliche Frage:

Die SPS schreibt in die Datei.
Notpad schreibt in die Datei.


Erfolgt das quasi gleichzeitig --> welche daten sollen dann geschrieben werden.


Ich denke, dass sicherzustellen sein sollte, dass nur "einer" die Datei beschreibt.
 
Moin!

Also nachdem die Variable WriteData auf False geht, sollte die Datei geschlossen werden. Ich sehe ja in der Datei die Ausgaben seitens der SPS.

Ich hatte WriteData mit einem Taster verknüpft (ebenso Openfile) und somit hat er bei einem ausreichend schnellen druck, nur eine Zeile geschrieben... aber das wäre ja eine andere Baustelle.

So, nachdem der Taster und somit die Variable WriteData auf FALSE geht, sollte doch zLog:=30 werden und er die Datei schließen. So lange kein neuer Schreibbefehel kommt, verharrt er mit zLog:=0;
Ich werde mir das alles heut nochmal im Trace angucken, evtl. habe ich einen Denkfehler. Ich komme aus dem Bereich der Hardwarenahen C-Programmierung .(AVR_µC)

Gruß aus Hamburg
 
Hi

Bei jedem Zylus wird der Datenstring geschrieben.

Normalerweise wird die steigende Flanke des Schreibbefehles abgefragt.

D.h. die Write-Schleife wird nur 1 x aufgerufen / Daten werden geschrieben.
 
Zurück
Oben