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

Seite 2 von 5 ErsteErste 1234 ... LetzteLetzte
Ergebnis 11 bis 20 von 44

Thema: FB_FileWrite Writeerror

  1. #11
    COOLT ist offline Benutzer
    Themenstarter
    Registriert seit
    22.07.2009
    Beiträge
    98
    Danke
    18
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    hm 1. denk ich ma schon 2. wie kann ich des überprüfen? und 3. tritt da kein fehler auf, von daher denk ich mal es funzt.

  2. #12
    Registriert seit
    06.07.2007
    Beiträge
    2.811
    Danke
    174
    Erhielt 274 Danke für 253 Beiträge

    Standard

    Also wenn deine Variable "bFileOpenError" keinen Fehler anzeigt, dann hat das Öffnen funktioniert. In dem Fall bin ich auch ratlos wieso das Schreiben nicht funktionieren soll.

    Mal noch was anderes:
    Prüfst du in deinem fbNeytStep ab, ob beim Öffnen, Schreiben, Schließen der Datei ein Fehler aufgetreten ist? Würde das auf jeden Fall auch als Bedingung dafür benutzen, ob in den nächsten Step gesprungen wird oder nicht.
    A programmer is just a tool which converts caffeine into code.

  3. #13
    COOLT ist offline Benutzer
    Themenstarter
    Registriert seit
    22.07.2009
    Beiträge
    98
    Danke
    18
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Ne bisher isses nich drin aber bau ich vielleicht noch rein. Dann muss ich auch noch ne Fehlerübertragung wieder einbauen uiui das wird ja doch schwieriger als erwartet dabei hab ich nur noch bis Freitag zeit. Naja dann stell ich das mal hinten an und guck erstmal nach meiner Dokumentation vielen dank für die Hilfe
    Mfg
    COOLT

  4. #14
    Registriert seit
    06.07.2007
    Beiträge
    2.811
    Danke
    174
    Erhielt 274 Danke für 253 Beiträge

    Standard

    Ich habe jetzt mal dein Programm bei mir auf dem PC nachvollzogen. Und es kam der gleiche Fehler.

    Bei mir war es nun so, dass die Zuweisung
    Code:
    hfile=> hfile
    im Baustein fb_FileOpen unverständlicherweise nicht funktioniert hat.

    Hab dir hier nun ein Beispiel zum Erzeugen einer Datei, das bei mir funzt:
    Code:
    VAR
     fbOpen: FB_FileOpen;
     fbWrite: FB_FileWrite;
     fbClose: FB_FileClose;
     nStep: INT := 0;
     hFile: UINT;
     Timer1: TON;
     sLogDaten: STRING := '';
    END_VAR
    (**************************************)
    CASE nStep OF
     0:
        fbOpen( sNetId:= '',
           sPathName:= 'C:\Test\Test1.txt',
           nMode:= FOPEN_MODEAPPEND OR  FOPEN_MODEPLUS,
           ePath:= PATH_GENERIC,
           bExecute:= TRUE,
           tTimeout:= t#3s,
           bBusy=> ,
           bError=> ,
           nErrId=> ,
           hFile=> hFile);
        Timer1(IN:= TRUE, PT:= t#4s);
        nStep := 1;
     1:
        Timer1();
        IF Timer1.Q THEN
           Timer1(IN:= FALSE);
           fbOpen();
           IF NOT fbOpen.bBusy THEN
              hFile := fbOpen.hFile;
              IF NOT fbOpen.bError THEN
                 (* Kein Fehler beim Oeffnen *)
                 sLogDaten := 'Teststring1';
                 fbWrite( sNetId:= '',
                    hFile:= hFile,
                    pWriteBuff:= ADR(sLogDaten),
                    cbWriteLen:= SIZEOF(sLogDaten),
                    bExecute:= TRUE,
                    tTimeout:= t#3s,
                    bBusy=> ,
                    bError=> ,
                    nErrId=> ,
                    cbWrite=> );
                 Timer1(IN:= TRUE, PT:= t#4s);
                 nStep := 2;
              ELSE
                 ; (* Fehlerbehandlung *)
              END_IF
              fbOpen(bExecute:= FALSE);
           END_IF
        END_IF
     2:
        Timer1();
        IF Timer1.Q THEN
           Timer1(IN:= FALSE);
           fbWrite();
           IF NOT fbWrite.bBusy THEN
              IF NOT fbWrite.bError THEN
                 (* Kein Fehler beim Schreiben *)
                 fbClose( sNetId:= '',
                    hFile:= hFile,
                    bExecute:= TRUE,
                    tTimeout:= t#3s,
                    bBusy=> ,
                    bError=> ,
                    nErrId=> );
                 Timer1(IN:= TRUE, PT:= t#4s);
                 nStep := 3;
              ELSE
                 ; (* Fehlerbehandlung *)
              END_IF
              fbWrite(bExecute:= FALSE);
           END_IF
        END_IF
     3:
        Timer1();
        IF Timer1.Q THEN
           Timer1(IN:= FALSE);
           fbClose();
           IF NOT fbClose.bBusy THEN
              IF NOT fbClose.bError THEN
                 (* Kein Fehler beim Schliessen *)
                 nStep := 0;
              ELSE
                 ; (* Fehlerbehandlung *)
              END_IF
           fbClose(bExecute:= FALSE);
           END_IF
        END_IF
    END_CASE
    A programmer is just a tool which converts caffeine into code.

  5. Folgender Benutzer sagt Danke zu Cerberus für den nützlichen Beitrag:

    COOLT (26.08.2009)

  6. #15
    Registriert seit
    25.07.2007
    Beiträge
    79
    Danke
    2
    Erhielt 12 Danke für 12 Beiträge

    Standard

    Zitat Zitat von COOLT Beitrag anzeigen
    Kann mir iwer sagen wo da ein fehler sein soll?
    Kann es sein, dass Du die Datei bereits schließt, obwohl der Schreibvorgang noch nicht beendet ist?

    Für einen zuverlässigen Ablauf ist es m.E. mindestens folgendes erforderlich
    1. BusyFlags der FBs auszuwerten
    2. Errorflags auszuwerten und entsprechend reagieren.
    3. Soll - Ist Vergleich Anzahl der geschriebenen Daten.

    Natürlich kann es auch ohne funktionieren, muss aber nicht.


    Zitat Zitat von COOLT Beitrag anzeigen
    Bei dem Baustein FB_FileWrite gibt es ein cbWriteLen um die Länge anzuzeigen. gibt es da iwie ein maximum? weil bei mir steht da 6500924 bytes
    6,5 MB ist schon ne ganze Menge für eine Benutzerverwaltung mit max. 51 Einträgen. Erscheint mir etwas sehr viel, wie sieht denn die Struktur aus?

  7. #16
    COOLT ist offline Benutzer
    Themenstarter
    Registriert seit
    22.07.2009
    Beiträge
    98
    Danke
    18
    Erhielt 0 Danke für 0 Beiträge

    Standard

    k habs jetz glaub ich fertig zumindest tritt kein Fehler mehr auf. Wie guck ich denn nach was der jetz da reingeschrieben hat? Also wie kann ich die Datei auslesen?

  8. #17
    Registriert seit
    06.07.2007
    Beiträge
    2.811
    Danke
    174
    Erhielt 274 Danke für 253 Beiträge

    Standard

    Wo wird die Datei denn abgespeichert? Auf die Flash-Karte? Würde dann diese einfach mal mit nem Kartenleser an den PC anschließen und schauen was drauf ist.
    A programmer is just a tool which converts caffeine into code.

  9. #18
    Registriert seit
    18.04.2011
    Beiträge
    16
    Danke
    4
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Das Thema ist zwar schon etwas älter aber ich hoffe trotzdem noch eine Antwort zu bekommen da dies mein erster Beitrag in diesem Forum ist und ich das erste mal mit twincat arbeite bzw in berührung komme (sogar das erste mal mit dem Theme SPS in berührung komme) hoffe ich auf freundliche und geduldige Menschen

    Wie schon angedeutet, will ich ebenfalls eine Datei öffnen und diese beschreiben (in ST). Mir ist auch klar, dass ich die Bausteine Fileopen, filewrite und Fileclose brauche. Jedoch verstehe ich das Besipielprogramm von 'Ceberus' nicht wirklich.
    Wird im ersten step(step=0) der Baustein und der Timer nur mit seinen startwerten initialisiert oder werden da beide schonmal aufgerufen und abgearbeitet?
    Falls sie nur initialisiert werden, ist es so, dass das die Bausteine erst im zweiten step(step=1) aufgerufen werden durch Timer() und fbopen()?

    Und wozu braucht es eigentlich den Timer?
    Und zu guter letzt, was wird denn in der Zeile
    bBusy=>,
    zugewiesen?
    Könnte ich auch einfach die nötigen sachen aus der twincat-info aus dem baustein "fb_filecopy" herausnehmen? Bzw wie müsste ich diese dann ändern?
    Ich hoffe ihr könnt mir meine, für euch, sehr sehr seltsamen und einfachen Fragen beantworten da ich die nächsten Monate noch ein wenig mit twincat beschäftigt sein werde, werde ich euch, falls ich das darf, noch öfters belästigen
    Vielen Dank schonmal im voraus =)

  10. #19
    Registriert seit
    06.07.2007
    Beiträge
    2.811
    Danke
    174
    Erhielt 274 Danke für 253 Beiträge

    Standard

    Hi sps-neuling,

    Zitat Zitat von sps-neuling1234 Beitrag anzeigen
    Wird im ersten step(step=0) der Baustein und der Timer nur mit seinen startwerten initialisiert oder werden da beide schonmal aufgerufen und abgearbeitet?
    Ja, beide Bausteine werden aufgerufen und abgearbeitet.

    Zitat Zitat von sps-neuling1234 Beitrag anzeigen
    Und wozu braucht es eigentlich den Timer?
    Den Timer brauchst du nicht wirklich, den kannst du auch weglassen!

    Zitat Zitat von sps-neuling1234 Beitrag anzeigen
    Und zu guter letzt, was wird denn in der Zeile zugewiesen?
    Nichts, die Zeilen ohne etwas nach dem "=>" kannst du auch rausnehmen. Ich hab sie nur drin gelassen, damit ich immer alle Ein-/Ausgänge der FBs sehe.

    Hoffe dir geholfen zu haben und wünsch dir noch viel Spaß und Erfolg mit TwinCAT!

    Gruß Cerberus
    A programmer is just a tool which converts caffeine into code.

  11. #20
    Registriert seit
    18.04.2011
    Beiträge
    16
    Danke
    4
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Danke für die schnelle Antwort, ich hab es nun einfach mal versucht zu programmieren wie kann ich denn nun testen ob das funktioniert? Bzw. wie bringe ich das programm denn nun zum laufen?
    Ich hänge es nun einfach mal noch mit an.
    Code:
    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;
    
    END_VAR
    
    
    
    CASE Step OF
    
        0: (*write data into array*)
        Buffread[1]:=A1;
        Buffread[2]:=A2;
        Buffread[3]:=A3;
        ;
    
        1:(* open file *)
        fbFileOpen(  bExecute := FALSE  );
        fbFileOpen(    sNetId := ‘‘,    (*eventuell noch ersetzen*)
            sPathName := ‘‘,     (*eventuell noch ersetzen*)
            nMode := FOPEN_MODEWRITE OR FOPEN_MODEBINARY
            ePath := PATH_GENERIC,
            tTimeout :=t#3s,
            bExecute := TRUE );
        Step := Step + 1;
    
        2:
        fbFileOpen( bExecute := FALSE );
        IF ( NOT fbFileOpen.bBusy ) THEN
            IF ( fbFileOpen.bError ) THEN
                nErrId := fbFileOpen.nErrId;
                bError1 := TRUE;
                Step := 50;
            ELSE
                hFileDatei := fbFileOpen.hFile;
                Step := Step + 1;
            END_IF
        END_IF
    
        3:(*write data to file*)
        fbFileWrite( bExecute := FALSE );
        fbFileWrite(    sNetId:=‘‘,     (*eventuell noch ersetzen*)
                hFile:=hFileDatei,
                pWriteBuff:= ADR(BuffRead),
                cbWriteLen:= 12,(*kann man hier irgendeine größe einsetzen? 12Byte, weil 3 Werte mit je 32Bit||SIZEOF(Buffread)*)
                bExecute:=TRUE,
                tTimeout:=t#3s );
        Step := Step + 1;
    
        4:
        fbFileWrite( bExecute := FALSE );
        IF ( NOT fbFileWrite.bBusy ) THEN
            IF ( fbFileWrite.bError ) THEN
                nErrId := fbFileWrite.nErrId;
                bError2 := TRUE;
                Step := 50;    
            END_IF
            Step:=50;
        END_IF
    
        30:
        (* close the file *)
        fbFileClose( bExecute := FALSE );
        fbFileClose(     sNetId:= ‘‘,     (*eventuell noch ersetzen*)
                hFile:=hFileDatei,
                bExecute:=TRUE,
                tTimeout:=t#3s );
        Step := Step + 1;
    
        31:
        fbFileClose( bExecute := FALSE );
        IF ( NOT fbFileClose.bBusy ) THEN
            IF ( fbFileClose.bError ) THEN
                nErrId := fbFileClose.nErrId;
                bError3 := TRUE;
            END_IF
            Step := 50;
        END_IF
    
        50: 
    (*Fehler beim öffnen oder schreiben aufgetreten, von vorne anfangen*)
        IF (bError1=true || bError2=true) THEN
            bError1:=false;
            bError2:=false;
            Step := 0; 
        
    (*kein fehler beim öffnen oder schreiben aufgetreten, Datei schließen*)
        ELSIF (bError1=false & bError2=false) THEN
            Step := 30;
            (*bBusy := FALSE; (*???*)*)
    (*Fehler beim schließen der Datei aufgetreten, von vorne anfangen*)
        ELSIF (bError3=true) THEN
            bError3:=false;
            Step:=0;
        END_IF
    
    END_CASE

Ähnliche Themen

  1. Antworten: 5
    Letzter Beitrag: 12.10.2011, 09:48
  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. FB_FileWrite Probleme mit Array schreiben
    Von FredlFesl im Forum CODESYS und IEC61131
    Antworten: 7
    Letzter Beitrag: 20.06.2011, 08:20

Lesezeichen

Berechtigungen

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