Hallo !
Ich arbeite mit einem Fred P300 und Codesys.
Ich möchte auf dem Zielsystem eine Datei erzeugen um darin Daten zu speichern.
Habe dazu die SysLibFile in das Projekt eingebunden.
Dann versuche ich mit folgendem Code eine Datei zu erzeugen:
(hFile als DWORD deklariert)
SzFilePath:='test.csv';
hfile:=SysFileOpen(szFilePath,'w');
hfile wird aber immer mit 0 zurückgegeben.
Beim anschliessenden Schliessen mittels SysfileClose(hFile) schaltet sich
das Zielsystem aus und wieder an.
Die o.g. Syntax habe ich aus dem Beispiel hier im Forum, es funzt aber nicht.
Was mache ich falsch ?
Hi
Dein Problem ist vermutlich, dass du fortwähren Dateien öffnest.
Bei jedem Zyklus öffnest du die Datei b.z.w. ein Filehandle.
Bein 10 Zyklus hast du kein Filehandle mehr und gibt den Returnwert 0.
Auch ein zerstören des Dateisystems ist möglich !
(D.h. Filesystem auf deiner Steuerung neu formatieren und übertragen)
(so funktioniert das zumindestens bei Wago)
Zitat: hfile:=SysFileOpen(szFilePath,'w');
Diese Zeile wird Zyklisch aufgerufen ? !
nach ca. 50 ms hast du keine "handles" mehr
Lade dir mal das Example von meiner Hompage.
Target ändern, dann sollte es Funktionieren.
Und wie immer gene zur stelle
Hallo gravieren,
erst mal Danke für Deine Antwort.
Die von Dir vermuteten Fehler sind es aber nicht, d.h. der Aufruf wird
genau einmal gemacht und anschliessend mit SysFileClose wird (würde)
eine geöffnete Datei auch wieder geschlossen.
Habe aus zienlich verlässlicher Quelle erfahren das mein Zielsystem
erzeugen von Dateien auf z.B. einer RAM-Disk nicht unterstützt.
mfG MArtin
An dieser Stelle mal ein Dank an die Fa. Elrest für die freundliche Hilfe !
Man kann eine Datei auf dem ELREST Zielsystem erzeugen und auch Daten darin abspeichern.
Man muß halt nur wissen wie.
Habe schlicht und einfach einen Fehler in der Pfadangabe gemacht.
Jetzt geht es.
Hi maddi67
Zitat: Habe schlicht und einfach einen Fehler in der Pfadangabe gemacht. Jetzt geht es.
Verräts du mir die richtige Pfadangabe/Unterschiede.
War mein examples nicht für Elrest gültig / richtig ?
Hallo Gravieren,
ja sicher verrat ich Dir das...ist ja kein Geheimnis.
(Ich habe ein Fred P300, also weiß ich nicht ob es bei anderen
ELREST Steuerungen genauso ist)
Um auf dem Zielsystem Daten zu speichern muss der Aufruf aus
CODESYS wie folgt erfolgen:
hfile:=SysFileOpen(szfilepath,w);
szFilepath muß dabei mit "/vfs/" beginnen, daran kann ein Dateiname
angehängt werden. Also z.B.
szfilepath:='/vfs/test.txt#;
Auf dem Zielsystem befindet sich nämlich im flüchtigen Speicher ein Verzeichnis /vfs.
In dieses können Daten geschrieben werden. (Allerdings nicht gerade
sehr viele).
Damit diese nach Ausschalten des Zielsystems erhalten bleiben,
muß danach die Funktion FWSave aufgerufen werden, sonst ist die Datei wieder futsch.
Damit werden die Daten dauerhaft gespeichert.
Also: FWSave(4);
MfG Martin
Log in to post a comment.
Hallo !
Ich arbeite mit einem Fred P300 und Codesys.
Ich möchte auf dem Zielsystem eine Datei erzeugen um darin Daten zu speichern.
Habe dazu die SysLibFile in das Projekt eingebunden.
Dann versuche ich mit folgendem Code eine Datei zu erzeugen:
(hFile als DWORD deklariert)
SzFilePath:='test.csv';
hfile:=SysFileOpen(szFilePath,'w');
hfile wird aber immer mit 0 zurückgegeben.
Beim anschliessenden Schliessen mittels SysfileClose(hFile) schaltet sich
das Zielsystem aus und wieder an.
Die o.g. Syntax habe ich aus dem Beispiel hier im Forum, es funzt aber nicht.
Was mache ich falsch ?
Hi
Dein Problem ist vermutlich, dass du fortwähren Dateien öffnest.
Bei jedem Zyklus öffnest du die Datei b.z.w. ein Filehandle.
Bein 10 Zyklus hast du kein Filehandle mehr und gibt den Returnwert 0.
Auch ein zerstören des Dateisystems ist möglich !
(D.h. Filesystem auf deiner Steuerung neu formatieren und übertragen)
(so funktioniert das zumindestens bei Wago)
Diese Zeile wird Zyklisch aufgerufen ? !
nach ca. 50 ms hast du keine "handles" mehr
Lade dir mal das Example von meiner Hompage.
Target ändern, dann sollte es Funktionieren.
Und wie immer gene zur stelle
Hallo gravieren,
erst mal Danke für Deine Antwort.
Die von Dir vermuteten Fehler sind es aber nicht, d.h. der Aufruf wird
genau einmal gemacht und anschliessend mit SysFileClose wird (würde)
eine geöffnete Datei auch wieder geschlossen.
Habe aus zienlich verlässlicher Quelle erfahren das mein Zielsystem
erzeugen von Dateien auf z.B. einer RAM-Disk nicht unterstützt.
mfG MArtin
An dieser Stelle mal ein Dank an die Fa. Elrest für die freundliche Hilfe !
Man kann eine Datei auf dem ELREST Zielsystem erzeugen und auch Daten darin abspeichern.
Man muß halt nur wissen wie.
Habe schlicht und einfach einen Fehler in der Pfadangabe gemacht.
Jetzt geht es.
An dieser Stelle mal ein Dank an die Fa. Elrest für die freundliche Hilfe !
Man kann eine Datei auf dem ELREST Zielsystem erzeugen und auch Daten darin abspeichern.
Man muß halt nur wissen wie.
Habe schlicht und einfach einen Fehler in der Pfadangabe gemacht.
Jetzt geht es.
Hi maddi67
Verräts du mir die richtige Pfadangabe/Unterschiede.
War mein examples nicht für Elrest gültig / richtig ?
Hallo Gravieren,
ja sicher verrat ich Dir das...ist ja kein Geheimnis.
(Ich habe ein Fred P300, also weiß ich nicht ob es bei anderen
ELREST Steuerungen genauso ist)
Um auf dem Zielsystem Daten zu speichern muss der Aufruf aus
CODESYS wie folgt erfolgen:
hfile:=SysFileOpen(szfilepath,w);
szFilepath muß dabei mit "/vfs/" beginnen, daran kann ein Dateiname
angehängt werden. Also z.B.
szfilepath:='/vfs/test.txt#;
Auf dem Zielsystem befindet sich nämlich im flüchtigen Speicher ein Verzeichnis /vfs.
In dieses können Daten geschrieben werden. (Allerdings nicht gerade
sehr viele).
Damit diese nach Ausschalten des Zielsystems erhalten bleiben,
muß danach die Funktion FWSave aufgerufen werden, sonst ist die Datei wieder futsch.
Damit werden die Daten dauerhaft gespeichert.
Also: FWSave(4);
MfG Martin