-> Hier kostenlos registrieren
Hi Leute!
Will über den FB_FileWrite ein Array in eine csv-Datei schreiben. Es funktioniert zwar, aber es wird immer nur das erste Element des Arrays richtig geschrieben. Der String im zweiten Element stimmt schon nicht mehr. Ich weiß echt nicht was ich noch falsch mache. In der Hilfe steht ja sogar:
pWriteBuff : Enthält die Adresse des Puffers, der die zu schreibenden Daten enthält. Der Puffer kann eine Einzelvariable, ein Array oder eine Struktur sein, dessen Adresse man mit dem ADR - Operator ermitteln kann.
Ich hoffe ihr könnt mir weiterhelfen!
Vielen Dank!
Will über den FB_FileWrite ein Array in eine csv-Datei schreiben. Es funktioniert zwar, aber es wird immer nur das erste Element des Arrays richtig geschrieben. Der String im zweiten Element stimmt schon nicht mehr. Ich weiß echt nicht was ich noch falsch mache. In der Hilfe steht ja sogar:
pWriteBuff : Enthält die Adresse des Puffers, der die zu schreibenden Daten enthält. Der Puffer kann eine Einzelvariable, ein Array oder eine Struktur sein, dessen Adresse man mit dem ADR - Operator ermitteln kann.
Ich hoffe ihr könnt mir weiterhelfen!
Vielen Dank!
Code:
PROGRAM TextFile3
VAR
GetTime : NT_GetTime;
tTime : TIMESTRUCT;
DestNetId : T_AmsNetId := '';
DestFileName : T_MaxString;
bExecute : BOOL;
tAdsTimeOut : TIME := t#20s;
bBusy :BOOL;
bError :BOOL;
nErrId :UDINT;
hDestFile :UINT;
fbFileOpen :FB_FileOpen;
fbFileClose :FB_FileClose;
fbFilePuts :FB_FilePuts;
fbFileRead :FB_FileRead;
fbFileWrite :FB_FileWrite;
Step : INT;
StrokeIdx : INT;
UbatIdx : INT;
ValveNumber : DINT;
StepMain: INT;
ActData : ARRAY [1..10] OF STRING(255);
RetVal : DINT;
Start : BOOL := TRUE ;
Finished : BOOL;
ArrayIdx1: INT;
ArrayIdx2: INT;
ActDataIdx : INT;
FileNameValve : ARRAY [1..MAX_TIEPOINT] OF STRING;
END_VAR
CASE StepMain OF
0:
RetVal := RUNNING;
fbFileOpen( bExecute := FALSE );
fbFileOpen( sNetId := DestNetId,
sPathName := DestFileName,
nMode := FOPEN_MODEAPPEND OR FOPEN_MODETEXT,
ePath := PATH_GENERIC,
tTimeout := tAdsTimeout,
bExecute := TRUE );
StepMain := StepMain + 1;
1:
fbFileOpen( bExecute := FALSE );
IF ( NOT fbFileOpen.bBusy ) THEN
IF ( fbFileOpen.bError ) THEN
nErrId := fbFileOpen.nErrId;
bError := TRUE;
StepMain := 30;
ELSE
hDestFile := fbFileOpen.hFile;
StepMain := StepMain + 1;
END_IF
END_IF
2:
MEMSET (ADR(ActData), 16#0, SIZEOF(ActData));
ActData[ActDataIdx] := 'Header1';
ActData[ActDataIdx] := CONCAT(ActData[ActDataIdx],'$N');
ActData[ActDataIdx] := CONCAT(ActData[ActDataIdx],WORD_TO_STRING(tTime.wDay));
ActData[ActDataIdx] := CONCAT(ActData[ActDataIdx],'.');
ActData[ActDataIdx] := CONCAT(ActData[ActDataIdx],WORD_TO_STRING(tTime.wMonth));
ActData[ActDataIdx] := CONCAT(ActData[ActDataIdx],'.');
ActData[ActDataIdx] := CONCAT(ActData[ActDataIdx],WORD_TO_STRING(tTime.wYear));
ActData[ActDataIdx] := CONCAT(ActData[ActDataIdx],'$N');
ActDataIdx := 2;
ActData[ActDataIdx] := 'Header2';
ActData[ActDataIdx] := CONCAT(ActData[ActDataIdx],'$N');
ActData[ActDataIdx] := CONCAT(ActData[ActDataIdx],WORD_TO_STRING(tTime.wDay));
ActData[ActDataIdx] := CONCAT(ActData[ActDataIdx],'.');
ActData[ActDataIdx] := CONCAT(ActData[ActDataIdx],WORD_TO_STRING(tTime.wMonth));
ActData[ActDataIdx] := CONCAT(ActData[ActDataIdx],'.');
ActData[ActDataIdx] := CONCAT(ActData[ActDataIdx],WORD_TO_STRING(tTime.wYear));
ActData[ActDataIdx] := CONCAT(ActData[ActDataIdx],'$N');
StepMain := StepMain + 1;
3:
fbFileWrite( bExecute := FALSE );
fbFileWrite( sNetId:=DestNetId,
hFile:=hDestFile,
pWriteBuff:= ADR(ActData),
cbWriteLen:= SIZEOF(ActData),
bExecute:=TRUE,
tTimeout:=tAdsTimeOut );
StepMain := StepMain + 1;
4:
fbFileWrite( bExecute := FALSE );
IF ( NOT fbFileWrite.bBusy ) THEN
IF ( fbFileWrite.bError ) THEN
nErrId := fbFileWrite.nErrId;
bError := TRUE;
StepMain := 20;
ELSE
StepMain := 20;
MEMSET (ADR(ActData), 16#0, SIZEOF(ActData));
END_IF
END_IF
20:
fbFileClose( bExecute := FALSE );
fbFileClose( sNetId:=DestNetId,
hFile:=hDestFile,
bExecute:=TRUE,
tTimeout:=tAdsTimeOut );
StepMain := StepMain + 1;
21:
fbFileClose( bExecute := FALSE );
IF ( NOT fbFileClose.bBusy ) THEN
IF ( fbFileClose.bError ) THEN
nErrId := fbFileClose.nErrId;
bError := TRUE;
END_IF
StepMain := 30;
hDestFile := 0;
END_IF
30:
IF (hDestFile <> 0 ) THEN
StepMain := 20;
ELSE
StepMain := 0;
RetVal := OK;
Step := 0;
END_IF
END_CASE