Hallo liebe Community
ich stehe vor einem Problem und hoffe ihr könnt mir weiterhelfen.
Ich möchte mit meiner CX5130 - SPS Daten einer Messklemme auslesen und in eine CSV-Datei schreiben (Soweit nicht kompliziert :)).
Die Klemme liefert alle 100µs (EL3356-0010) neue Werte, wobei ich im 5ms Takt die Werte in die CSV-Datei schreiben möchte.
Folglich mein Code für die Datenspeicherung:
Die Daten (uliTimestamp-> ULINT und diValue -> DINT) werden in ein Array gespeichert welches dem Baustein "FB_WriteDataIntoCSVFile" übergeben wird (database : ARRAY[0..GVL_Measurement.MAX_CSV_ROWS] OF ST_Csv_Record;)
soweit funktioniert die Datenumwandlung.... Jedoch steht in meiner CSV-Datei (zwar in der richtigen Zeile/Spalte) nur Unsinn in From von irgendwelchen Buchstaben oder Sonderzeichen...
Was mache ich flasch? oder was kann ich ändern damit es funktioniert?
Vielen Dank im voraus!
Viele Grüße
ich stehe vor einem Problem und hoffe ihr könnt mir weiterhelfen.
Ich möchte mit meiner CX5130 - SPS Daten einer Messklemme auslesen und in eine CSV-Datei schreiben (Soweit nicht kompliziert :)).
Die Klemme liefert alle 100µs (EL3356-0010) neue Werte, wobei ich im 5ms Takt die Werte in die CSV-Datei schreiben möchte.
Folglich mein Code für die Datenspeicherung:
Code:
CASE step OF
0: (* Wait for rising edge at bWrite variable *)
IF bWrite THEN
bWrite := FALSE;
bBusy := TRUE;
bError := FALSE;
nErrId := 0;
hFile := 0;
nRow := 0;
nColumn := 0;
step := 1;
END_IF
1: (* Open source file *)
fbFileOpen(bExecute := FALSE);
fbFileOpen(sNetId := sNetId,
sPathName := sFileName,
nMode := FOPEN_MODEWRITE OR FOPEN_MODEBINARY, // Open file in BINARY mode! - Write
ePath := PATH_GENERIC,
bExecute := TRUE);
step := 2;
2 (* Wait until open not busy *)
fbFileOpen(bExecute := FALSE,
bError => bError,
nErrID => nErrID,
hFile => hFile);
IF NOT fbFileOpen.bBusy THEN
IF NOT fbFileOpen.bError THEN
step := 3;
ELSE // Error: file not found? *)
step := 100;
END_IF
END_IF
3 (* Convert one PLC record to CSV format *)
cbRecord := 0;
fbWriter.eCmd := eEnumCmd_First; // Write first field value
IF nRow <= GVL_Measurement.MAX_CSV_ROWS THEN
FOR nColumn := 0 TO GVL_Measurement.MAX_CSV_COLUMNS BY 1 DO
cbField := 0;
CASE nColumn OF
0:
cbField := ARG_TO_CSVFIELD(F_ULINT(database[nRow].uliTimestamp), TRUE, ADR(aBuffer), SIZEOF(aBuffer));
1:
cbField := ARG_TO_CSVFIELD(F_DINT(database[nRow].diValue), TRUE, ADR(aBuffer), SIZEOF(aBuffer));
ELSE
;
END_CASE
IF cbField > 0 THEN
(* Add new field to the record buffer *)
fbWriter(pBuffer := ADR(record),
cbBuffer := SIZEOF(record),
putValue :='',
pValue := ADR(aBuffer),
cbValue := cbField,
bCRLF := (nColumn = GVL_Measurement.MAX_CSV_COLUMNS));(* bCRLF == TRUE => Write CRLF after the last field value *)
IF fbWriter.bOk THEN
fbWriter.eCmd := eEnumCmd_Next;(* Write next field value *)
cbRecord := cbRecord + fbWriter.cbWrite;(* Calculate the new record size *)
ELSE(* Error *)
step := 100;
RETURN;
END_IF
END_IF
END_FOR
nRow := nRow + 1; // Increment number of created records (rows)
step := 4; // Write record to the file
ELSE // All rows written => Close file
step := 10;
END_IF
4:
fbFileWrite(sNetId:= sNetId,
hFile:= hFile,
pWriteBuff:= ADR(record),
cbWriteLen:= cbRecord,
bExecute:= TRUE);
step := 5;
5:
fbFileWrite(bExecute := FALSE,
bError => bError,
nErrId => nErrId);
IF NOT fbFileWrite.bBusy THEN
IF NOT fbFileWrite.bError THEN
step := 3; // Write next record
ELSE // Error
step := 100;
END_IF
END_IF
10: (* Close source file *)
fbFileClose(bExecute := FALSE);
fbFileClose(sNetId := sNetId,
hFile := hFile,
bExecute := TRUE);
step := 11;
11 (* Wait until close not busy *)
fbFileClose(bExecute := FALSE,
bError => bError,
nErrID => nErrID);
IF (NOT fbFileClose.bBusy) THEN
hFile := 0;
step := 100;
END_IF
100: (* Error or ready step => cleanup *)
IF ( hFile <> 0 ) THEN
step := 10; // Close the source file
ELSE
bBusy := FALSE;
step := 0; // Ready
END_IF
END_CASE
Die Daten (uliTimestamp-> ULINT und diValue -> DINT) werden in ein Array gespeichert welches dem Baustein "FB_WriteDataIntoCSVFile" übergeben wird (database : ARRAY[0..GVL_Measurement.MAX_CSV_ROWS] OF ST_Csv_Record;)
soweit funktioniert die Datenumwandlung.... Jedoch steht in meiner CSV-Datei (zwar in der richtigen Zeile/Spalte) nur Unsinn in From von irgendwelchen Buchstaben oder Sonderzeichen...
Was mache ich flasch? oder was kann ich ändern damit es funktioniert?
Vielen Dank im voraus!
Viele Grüße