FB_FileWrite Writeerror

Zuviel Werbung?
-> Hier kostenlos registrieren
Was du natürlich machen könntest, ist, dass du deine Variable Step als In-Out-Variable im FB deklarierst. Dann würdest du den FB mit Step = 1 aufrufen und er würde dir nach der Bearbeitung Step = 2 zurückgeben. Im nächsten Schritt musst du dann halt den FB mit Step = 2 aufrufen.
Ich könnte aber auch die Variable einfach als Globale Variable nehmen oder? Ist zwar nicht das sinnvollste, aber vllt auf anhieb das leichteste
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Alles klar, dann werde ich mir das auch mal noch anschauen :)
ich hab meinen code nun noch bissel verändert, eventuell kannst du ja mal sagen wie du ihn so findest, ich finds so glaub besser! Weil er am Anfang nun zwingend auf die steigende Flanke (Tastendruck) wartet.


Code:
PROGRAM MAIN
VAR
    fbFileOpen    :FB_FileOpen;
    fbFileClose    :FB_FileClose;
    fbFileWrite    :FB_FileWrite;

    bBusy        :BOOL;
    bError1        :BOOL:=FALSE;
    bError2        :BOOL:=FALSE;
    bError3        :BOOL:=FALSE;

    nErrId        :UDINT;

    Step        :DWORD:=0;
    BuffRead    :ARRAY[1..6] OF DINT;
    hFileDatei    :UINT    := 0;(* file handle*)
    A1:         DINT:=1;
    A2:         DINT:=2;
    A3:         DINT:=3;

    LogString: STRING;
    fbRTrig: R_TRIG;
    blogOn: BOOL:=TRUE;
    halter: BOOL;
END_VAR


fbRTrig(CLK:=blogOn);

IF fbRTrig.Q OR halter THEN


CASE Step OF

    0:    (*Werte laden*)

    Buffread[1]:=A1;
    Buffread[2]:=A2;
    Buffread[3]:=A3;

   LogString := DINT_TO_STRING(BuffRead[1]);
   LogString := CONCAT(LogString, '$n');
   LogString := CONCAT(LogString, DINT_TO_STRING(BuffRead[2]));
   LogString := CONCAT(LogString, '$n');
   LogString := CONCAT(LogString, DINT_TO_STRING(BuffRead[3]));
   LogString := CONCAT(LogString, '$n');
   LogString := CONCAT(LogString, '$n');

   fbRTrig();(*nicht notwendig, nur zur Kontrolle des Wertes*)
   halter:=TRUE;
   Step:=1;

    1:    (* open file *)

            fbFileOpen(  bExecute := FALSE  );
            fbFileOpen(    sNetId := '',
                sPathName := 'C:\Dokumente und Einstellungen\Administrator.BECKHOFFKR16\Desktop\test.txt',
                nMode := FOPEN_MODEAPPEND OR FOPEN_MODETEXT,
                ePath := PATH_GENERIC,
                tTimeout :=t#3s,
                bExecute := TRUE );
        Step :=  2;

    2:

       fbFileOpen(  );
        IF ( NOT fbFileOpen.bBusy ) THEN
            IF ( fbFileOpen.bError ) THEN
                    nErrId := fbFileOpen.nErrId;
                    bError1 := TRUE;
                   Step := 50;
            ELSE
                    hFileDatei := fbFileOpen.hFile;
                    Step := 3;
            END_IF
        END_IF

    3:    (*write data to file*)

    fbFileWrite( bExecute := FALSE );
    fbFileWrite(    sNetId:='',
            hFile:=hFileDatei,
            pWriteBuff:= ADR(LogString),
            cbWriteLen:= LEN(LogString),
            bExecute:=TRUE,
            tTimeout:=t#3s );
    Step := 4;

    4:

    fbFileWrite(  );
    IF ( NOT fbFileWrite.bBusy ) THEN
        IF ( fbFileWrite.bError ) THEN
            nErrId := fbFileWrite.nErrId;
            bError2 := TRUE;
         Step:=50;
        END_IF
    END_IF
     Step:=5;

    5:     (* close the file *)

    fbFileClose( bExecute := FALSE );
    fbFileClose(     sNetId:= '', 
            hFile:=hFileDatei,
            bExecute:=TRUE,
            tTimeout:=t#3s );
    Step := 6;

    6:

    fbFileClose(  );
    IF ( NOT fbFileClose.bBusy ) THEN
        IF ( fbFileClose.bError ) THEN
            nErrId := fbFileClose.nErrId;
            bError3 := TRUE;
         Step:=50;
     ELSE
        Step:=50;
        END_IF
    END_IF


    50:
(*Fehler beim öffnen oder schreiben aufgetreten, von vorne anfangen*)
    IF (bError1=TRUE OR bError2=TRUE) THEN
        bError1:=FALSE;
        bError2:=FALSE;
        Step := 0;
(*Fehler beim schließen der Datei aufgetreten, von vorne anfangen*)
    ELSIF (bError3=TRUE) THEN
        bError3:=TRUE;
        Step:=0;
 (*Programm ohne fehler durchgelaufen*)
    ELSE
    halter:=FALSE;
    Step:=0;

    END_IF

END_CASE

END_IF
 
Zurück
Oben