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

Ergebnis 1 bis 4 von 4

Thema: FB_Fileopen modus a: Daten werden nicht angehängt, sonder überschreiben die alten

  1. #1
    Registriert seit
    08.08.2011
    Beiträge
    57
    Danke
    34
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo,
    ich beschäftige mich gerade damit Logfiles zu schreiben. Dazu habe ich folgendes kleines Testprogam geschrieben:
    Code:
    PROGRAM MAIN
    VAR
        fopen:FB_FileOpen;
        fclose:FB_FileClose;
        fWrite:FB_FileWrite;
    
        Logfile:UINT;
        StringAdr:DWORD;
        Str:STRING;
        auf,zu,schreiben:BOOL:=FALSE;
    END_VAR
    
    IF auf THEN
    fopen.sPathName:='c:/Daten/Logfiles/log6.txt';
    fopen.nMode:=10;
    fopen.bExecute:=TRUE;
    fopen;
    fopen.bBusy;
    fopen.bError;
    
    fopen.nErrId;
    
    Logfile:=fopen.hFile;
    ELSE
    fopen.bExecute:=FALSE;
    fopen;
    END_IF
    
    IF schreiben THEN
    fwrite.bExecute:=FALSE;
    fwrite;
    Str:='test$R$N';
    StringAdr:=ADR(Str);
    fwrite.hFile:=LogFile;
    fwrite.pWriteBuff:=StringAdr;
    fwrite.cbWriteLen:=8;
    fwrite.bExecute:=TRUE;
    fwrite;
    END_IF
    
    IF zu THEN
    fclose.hFile:=Logfile;
    fclose.bExecute:=TRUE;
    fclose;
    fclose.bBusy;
    fclose.bError;
    fclose.nErrId;
    fclose.sNetId;
    ELSE
    fclose.bExecute:=FALSE;
    fclose;
    END_IF
    ich logge mich in die SPS ein, setze Auf=true, auf =false -> die Datei ist geöffnet.

    Setze Schreiben auf true, warte kurz, dann auf false -> die Datei wird mit Zeilen vollgeschrieben in denen test steht.

    Setze zu auf true, warten zu auf false -> datei wurde geschlossen.

    Funktioniert, habe eine Textdatei in der ein Haufen Zeilen mit 'test' stehen.

    Ich logge mich aus, ändere test in test2 und wiederhole den Vorgang. eigentlich sollten jetzt weitere Zeilen angehängt werden in denen tzest2 steht. klappt aber nicht, die ursprüglichen Zeilen wreden überschrieben und es steht überall test2. Was mach ich falsch?
    nMode:=10, hex für A, sollte doch eigentlich anhängen.

    danke im vorraus
    Zitieren Zitieren FB_Fileopen modus a: Daten werden nicht angehängt, sonder überschreiben die alten  

  2. #2
    Registriert seit
    19.06.2008
    Ort
    Ostalbkreis
    Beiträge
    3.140
    Danke
    201
    Erhielt 553 Danke für 498 Beiträge

    Standard

    Zitat Zitat von alb Beitrag anzeigen
    Hallo,
    ich beschäftige mich gerade damit Logfiles zu schreiben. Dazu habe ich folgendes kleines Testprogam geschrieben:
    Code:
    PROGRAM MAIN
    VAR
        fopen:FB_FileOpen;
        fclose:FB_FileClose;
        fWrite:FB_FileWrite;
    
        Logfile:UINT;
        StringAdr:DWORD;
        Str:STRING;
        auf,zu,schreiben:BOOL:=FALSE;
    END_VAR
    
    IF auf THEN
    fopen.sPathName:='c:/Daten/Logfiles/log6.txt';
    fopen.nMode:=a; 
    fopen.bExecute:=TRUE;
    fopen;
    fopen.bBusy;
    fopen.bError;
    
    fopen.nErrId;
    
    Logfile:=fopen.hFile;
    ELSE
    fopen.bExecute:=FALSE;
    fopen;
    END_IF
    
    IF schreiben THEN
    fwrite.bExecute:=FALSE;
    fwrite;
    Str:='test$R$N';
    StringAdr:=ADR(Str);
    fwrite.hFile:=LogFile;
    fwrite.pWriteBuff:=StringAdr;
    fwrite.cbWriteLen:=8;
    fwrite.bExecute:=TRUE;
    fwrite;
    END_IF
    
    IF zu THEN
    fclose.hFile:=Logfile;
    fclose.bExecute:=TRUE;
    fclose;
    fclose.bBusy;
    fclose.bError;
    fclose.nErrId;
    fclose.sNetId;
    ELSE
    fclose.bExecute:=FALSE;
    fclose;
    END_IF
    Bin da nicht so fit, aber


    'r' Öffnet die Datei nur zum Lesen und positioniert den Dateizeiger auf den Anfang der Datei.

    'r+' Öffnet die Datei zum Lesen und Schreiben und setzt den Dateizeiger auf den Anfang der Datei.

    'w+' Öffnet die Datei zum Lesen und Schreiben und setzt den Dateizeiger auf den Anfang der Datei sowie die Länge der Datei auf 0 Byte. Wenn die Datei nicht existiert, wird versucht sie anzulegen.
    wie würdest du z.B "w+" dezimal eintragen?

    Ich denke, da gehört hex "a" rein

  3. #3
    alb ist offline Benutzer
    Themenstarter
    Registriert seit
    08.08.2011
    Beiträge
    57
    Danke
    34
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Danke für die Antwort. Habs inzwischen Hingekriegt.

    nMode:=FOPEN_MODEAPPEND

    Hatte den Knowledgebaseartikel nicht so ganz verstanden und gedacht FOPEN_MODEAPPENDwäreder Name des Modus und nicht der zu Übergebende Parameter. Schließlich ist nMode vom Typ Dword. FOPEN_MODEAPPEND ist also eine, irgendwo, definierte Konstante die den Richtigen DWORD-Wert enthält?

    Egal, nicht so viel denken, machen was dasteht

  4. #4
    Registriert seit
    11.07.2004
    Beiträge
    1.597
    Danke
    10
    Erhielt 213 Danke für 183 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    nMode:=10, hex für A, sollte doch eigentlich anhängen.
    Nein. Da ist der Buchstaben "a" gemeint, also einzugeben als
    Code:
    'a'
    Alternativ natürlich dezimal 97 oder hex 61.

Ähnliche Themen

  1. Antworten: 4
    Letzter Beitrag: 05.09.2011, 18:26
  2. Modus - Daten auslesen
    Von anni_1 im Forum Simatic
    Antworten: 1
    Letzter Beitrag: 30.06.2010, 07:23
  3. TwinCAT startet nicht im Run-modus
    Von Diesla im Forum CODESYS und IEC61131
    Antworten: 1
    Letzter Beitrag: 14.06.2009, 18:48
  4. Antworten: 2
    Letzter Beitrag: 21.01.2009, 09:56
  5. Antworten: 3
    Letzter Beitrag: 28.09.2005, 15:46

Lesezeichen

Berechtigungen

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