CoDeSys 3 und CSV Daten Logger

DachBahn

Level-1
Beiträge
18
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo und guten Tage.
ich hätte gerne, für ein Eaton CoDeSys 3 Programme eine Möglichkeit Daten in eine CSV / Txt zu speichern.
Mein Wunsch wäre es alle 5Min einige Daten zu speichern.
Im CodeSys 2 ging das alles mit

(*Öffnen zum Daten anhängen*)
hFile := SysFileOpen (FileName,'a');

Dann Zeitstempel und Daten

(*Zeilenzeilenumbruch - neue Zeile '$R$N' '$0D$0A'*)
WegSpeicherText := '$R$N';
anz_bytes:=SysFileWrite(File:= hFile ,Buffer:= ADR(WegSpeicherText),Size:=LEN(WegSpeicherText));

(*schließen der Datei mit Datei-Nummer*)
hFileclose1:=SysFileClose(File :=hFile);


Lief alles Super.

Aber jetzt Jahre später unter CoDeSys 3, liegt das Problem wohl zwischen meinen Ohren.

Kann da jemand helfen ? Danke im Voraus.
 
Es gibt ne Bibliothek mit Open, Read, Write, Close.

Im Prinzip isses genauso wie in deinem Code, Funktionen heißen halt anders.

Dein WegSpeicherText solltest du natürlich den Zeilenumbruch anhängen und nicht mit dem Zeilenumbruch überschreiben. (Concat)
 
Code:
// DEKLARATION
    // Rezepte in Datei schreiben
    stRTS_IEC_RESULT : SysFile.RTS_IEC_RESULT;
    stRTS_IEC_HANDLE : SysFile.RTS_IEC_HANDLE;


// CODE
// Datei öffnen
stRTS_IEC_HANDLE := SysFile.SysFileOpen(
                        am := sysfile.AM_READ,
                        szFile := 'D:\TwinCAT Projekt\RecipeData\Recipes.bin',
                        pResult := ADR(stRTS_IEC_RESULT)
                    );
    
// In Datei schreiben
SysFile.SysFileRead(
    hFile := stRTS_IEC_HANDLE,
    pbyBuffer := ADR(GVL_Recipes.stRecipe),
    ulSize := SIZEOF(GVL_Recipes.stRecipe),
    pResult := ADR(stRTS_IEC_RESULT),
);


// Datei Handle schließen
SysFile.SysFileClose(hFile := stRTS_IEC_HANDLE);



stRTS_IEC_HANDLE := SysFile.SysFileOpen(
                        am := sysfile.AM_WRITE,
                        szFile := strTemp,
                        pResult := ADR(stRTS_IEC_RESULT)
                    );


// In Datei schreiben
SysFile.SysFileWrite(
    hFile := stRTS_IEC_HANDLE,
    pbyBuffer := ADR(GVL_Recipes.stRecipe),
    ulSize := SIZEOF(GVL_Recipes.stRecipe),
    pResult := ADR(stRTS_IEC_RESULT),
);


// Datei Handle schließen
SysFile.SysFileClose(hFile := stRTS_IEC_HANDLE);]]></ST>
 
Super für den Code,
aber
CoDeSys 3
Sagt zu
// Datei öffnen
stRTS_IEC_HANDLE := SysFile.SysFileOpen(
am := sysfile.AM_READ,
szFile := 'D:\TwinCAT Projekt\RecipeData\Recipes.bin',
pResult := ADR(stRTS_IEC_RESULT)
);


Fehler:
Mehrfache Eingangszuweisungen für Parameter 'am'.
Typ 'ACCESS_MODE' kann nicht in Typ 'REFERENCE TO STRING' konvertiert werden
Typ 'STRING(80)' kann nicht in Typ 'ACCESS_MODE' konvertiert werden
Falscher formaler Parameter: 'szFile' an dieser Stelle erwartet

Haben Sie da noch einen TIpp
 
Zuviel Werbung?
-> Hier kostenlos registrieren
schau welche Lib eingebunden wurde. Es wird für diesen Code die SyslibFile23 benötigt. Wenn eine andere drin ist geht es nicht. Prüfe auch auch ob der Namespace passt. Hier im Code "sysfile", keine Ahnung ob der immer so ist.
Als nächstes schau dir wenn du die Lib gefunden hast die von mir verwendeten Funktionen im LibManager an. Dieses Codebeispiel ist aus Twincat 3. Kann sein es ist in Codesys geringfügig anders. Sollte mit diesem Code aber nun mit etwas Recherche lösbar sein.
 
Hallo,

So lese ich ein .txt file (zeile für Zeile):
fbFileOpen: FB_FileOpen;
fbFileClose: FB_FileClose;
fbFileGets: FB_FileGets;
str_configPath : STRING := 'C:\test\FileName.txt';

fbFileOpen( sNetId := '', sPathName := str_configPath,
nMode := FOPEN_MODEREAD,
ePath := PATH_GENERIC, tTimeout := T#3S, bExecute := TRUE );

//hier error auswerten IF fbFileOpen.bError THEN.....................................

fbFileGets(
sNetId:='',
hFile:=hFile,
bExecute:=TRUE ,
tTimeout:=T#6S ,
bBusy=> ,
bError=> ,
nErrId=> ,
sLine=> ,
bEOF=> );

//hier error auswerten IF fbFileGets.bError THEN.....................................


//Zeile speichern in string

sResult:=fbFileGets.sLine;
//wiederholen bis fbFileGets.bEOF
fbFileGets(
sNetId:='',
hFile:=hFile,
bExecute:=TRUE ,
tTimeout:=T#6S ,
bBusy=> ,
bError=> ,
nErrId=> ,
sLine=> ,
bEOF=> );

fbFileClose(
sNetId:='',
hFile:= hFile,
bExecute:=TRUE ,
tTimeout:=T#6S );

Execute immer mit Flanke.

Gruss,

Leo
 
Zurück
Oben