Zuviel Werbung? - > Hier kostenlos beim SPS-Forum registrieren

Ergebnis 1 bis 5 von 5

Thema: Twincat FB_FileWrite: sporadische Fehler

  1. #1
    Registriert seit
    11.12.2013
    Beiträge
    2
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo,

    ich habe seit geraumer Zeit ein Problem mit dem FileIO unter Twincat 2. Ich komme trotz intensiver Suche nicht weiter und brauche dringend eure Hilfe.

    Ich möchte unter Twincat2 Strings in eine Datei schreiben. Das sollte ja eigentlich kein Problem darstellen: ich verwende FileOpen, FileWrite und FileClose.
    Nun zeigen sich aber zwei Fehler:

    Fehler 1: Es ist- wieso auch immer- nur jedes zweite Schreiben erfolgreich, die anderen Schreibzugriffe laufen ins Leere. Das kann ich zwar umgehen indem ich jedes zweite mal einen Dummystring in die Datei schreibe, der dort nicht ankommt, schön ist jedoch was anderes.
    Was mir aber wirklich Kummer bereitet ist der zweite Fehler:

    Fehler 2:
    Nach einiger Zeit funktioniert die FileWrite-Funktion nicht mehr, dh. die Funktion wird mit einem Fehler beendet. Der Errorcode ist 0x703 (invalid index offset). Das Problem hierbei ist, dass mein Funktionsblock etwa 700 mal ohne Probleme ausgeführt ist, und dann ohne sichtbaren Grund einfach nicht mehr funktioniert. Auch wenn ich die PLC resette und neu starte funktioniert das Schreiben einer Datei nicht, erst wenn ich den SystemManager neu starte funktioniert der Funktionsblock wieder- aber wieder eben nur ein paar taused mal.

    Ich bin mit meinem Latein am Ende. Habt ihr irgendwelche Ideen? Ich würde auch alternative FileIO-Funktionen benutzen, oder das ganze FileHandling auslagern, hauptsache ich bekomme diesen Fehler los -.-

    Im Folgenden mein Funktionsblock:

    Code:
    CASE nState OF
    
        0: (* idle & init *)
            IF(bExecute = TRUE) THEN
                bExecute := FALSE;
                bBusy := TRUE;
                bError := FALSE;
                nErrId := 0;
                nErrState := 0;
                hFile := 0;
                bAgain := TRUE;
    
                 (* create and open output file *)
                fbFileOpen(    sNetId := sNetId,
                                sPathName := sPathName,
                                nMode := FOPEN_MODEAPPEND OR FOPEN_MODETEXT,
                                bExecute := TRUE );
    
                bBusy := TRUE;
                nState := nState + 1;
                
            END_IF
    
    
        1: (* create and open output file *)
            fbFileOpen( bExecute := FALSE );
            IF NOT fbFileOpen.bBusy THEN
                IF fbFileOpen.bError THEN
                    nErrId := fbFileOpen.nErrId;
                    bError := TRUE;
                    nState := 100;
                ELSE
                    hFile := fbFileOpen.hFile;
    
                    aBuffer := MAXSTRING_TO_BYTEARR(sInputString);
    
                    (* write to file *)
                    fbFileWrite(sNetId := sNetId,
                                hFile := hFile,
                                pWriteBuff := ADR(aBuffer),
                                cbWriteLen := LEN(sInputString),
                                bExecute := TRUE);
    
                    nState := nState + 1;
    
                END_IF
            END_IF
    
    
        2:    (* write to file *)
            fbFileWrite( bExecute := FALSE);
            IF ( NOT fbFileWrite.bBusy ) THEN
                IF ( fbFileWrite.bError ) THEN
                    nErrId := fbFileWrite.nErrId;
                    bError := TRUE;
                    nState := 100;
                ELSE
                    fbFileClose(     sNetId:=sNetId,
                                    hFile:=hFile,
                                    bExecute:=TRUE);
    
                nState := nState + 1;
                END_IF
            END_IF
    
    
        3:(* close output file *)
            fbFileClose( bExecute := FALSE );
            IF ( NOT fbFileClose.bBusy ) THEN
                IF ( fbFileClose.bError ) THEN
                    nErrId := fbFileClose.nErrId;
                    bError := TRUE;
                    nState := 0;
                    bBusy := FALSE;
                ELSIF(bAgain)THEN
                    hFile := 0;
                    bAgain := FALSE;
                    sInputString := '___';
    
                     (* create and open output file *)
                    fbFileOpen(    sNetId := sNetId,
                                sPathName := sPathName,
                                nMode := FOPEN_MODEAPPEND OR FOPEN_MODETEXT,
                                bExecute := TRUE );
    
                    nState := 1;
                ELSE
                    hFile := 0;
                    nState := 0;
                    bBusy := FALSE;
                END_IF
            END_IF
    
        100: (* error *)
            IF(hFile <> 0)THEN
                fbFileClose(     sNetId:=sNetId,
                                hFile:=hFile,
                                bExecute:=TRUE);
                nState := 3;
                bAgain := FALSE;
            ELSE
                nState := 0;
                bBusy := FALSE;
            END_IF
    
    END_CASE
    Bei Step 2 tritt der Fehler auf.

    Ich wäre für jede Hilfe sehr dankbar,

    Grüße, Tobias
    Geändert von twyn (11.12.2013 um 18:13 Uhr)
    Zitieren Zitieren Twincat FB_FileWrite: sporadische Fehler  

  2. #2
    Registriert seit
    25.11.2010
    Ort
    OWL
    Beiträge
    750
    Danke
    27
    Erhielt 165 Danke für 143 Beiträge

    Standard

    Du öffnest die Datei im Textmodus, verwendest dann aber den FB zum Schreiben im Binärmodus. Das ist möglicherweise der Knackpunkt. Ich würde auf die Stringkonvertierung in den aBuffer verzichten und statt dem FB_FileWrite den FB_FilePuts verwenden.
    Code:
    VAR
       fbFileWrite:FB_FilePuts;
    END_VAR
    
    (* und der Aufruf *)
    fbFileWrite(
       sNetId := sNetId, 
       hFile := hFile,                             
       sLine:=sInputString,
       bExecute := TRUE);

  3. #3
    twyn ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    11.12.2013
    Beiträge
    2
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Hallo,

    FilePuts habe ich in einem früherem Stadium des Projektes benutzt, da ich aber oft Strings verwende die länger als 255 Zeichen sind, und ich mit diesen Strings Funktionen wie CONCAT() nicht mehr verwenden kann, habe ich mich für eine Verwendung FB_FileWrite entschieden. Außerdem hatte ich das gleiche Problem mit FilePuts.

  4. #4
    Registriert seit
    25.11.2010
    Ort
    OWL
    Beiträge
    750
    Danke
    27
    Erhielt 165 Danke für 143 Beiträge

    Standard

    Gut, dann solltest Du die Datei aber auch mit FOPEN_MODEBINARY öffnen.

  5. #5
    Registriert seit
    03.12.2013
    Ort
    nähe Karlsruhe
    Beiträge
    12
    Danke
    1
    Erhielt 3 Danke für 3 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Code:
    pWriteBuff := ADR(aBuffer),
    cbWriteLen := LEN(sInputString)
    Das hier beim schreiben könnte auch Probleme bereiten, Du Zeigst auf aBuffer gibst aber die länge von sInputString an, kann sein das dadurch beim speichern das Ende des Strings nicht erkannt wird.
    Meiner Auffassung nach müsste es:

    Code:
    pWriteBuff := ADR(sInputString),
    cbWriteLen := SIZEOF(sInputString)
    heissen, das konvertieren in ein Bytearray solltest Du nicht brauchen da der FB ja sowieso auf den Speicher schaut.

    Gruß Tygan

    edit:
    Hatte die Variablen Vertausch
    Geändert von tygan (13.12.2013 um 13:43 Uhr)

Ähnliche Themen

  1. Fehler beim TwinCAT
    Von lolo im Forum CODESYS und IEC61131
    Antworten: 0
    Letzter Beitrag: 21.05.2012, 14:02
  2. Fehler bei Benutzung FB_FileWrite ID:1802 :Out of Memory
    Von ysh032 im Forum CODESYS und IEC61131
    Antworten: 5
    Letzter Beitrag: 22.09.2011, 12:02
  3. S_VIMP S7-300 und 400 sporadische Fehler
    Von mikeautomatix im Forum Simatic
    Antworten: 39
    Letzter Beitrag: 11.08.2011, 16:40
  4. TwinCAT Login Fehler
    Von Anaconda55 im Forum CODESYS und IEC61131
    Antworten: 4
    Letzter Beitrag: 29.10.2008, 20:07
  5. TwinCAT Run Fehler
    Von Anaconda55 im Forum CODESYS und IEC61131
    Antworten: 12
    Letzter Beitrag: 29.10.2008, 16:13

Stichworte

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •