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

Ergebnis 1 bis 3 von 3

Thema: txt-Datei Aufrufen,Schreiben,Speichern

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

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo Forumgemeinde,
    meine Aufgabe ist es ein Array, welches durch Codesys3.5 erstellt wurde, in eine .txt- bzw. .csv-Datei zu schreiben. Bis jetzt sind jegliche Versuche gescheitert, eine Datei zu öffnen, geschweige denn zu schreiben. Aktuell versuche ich erstmal einen String in eine Datei zu schreiben. Ich bin über jeden Hinweis bzw. Lösung sehr dankbar.

    Hier der bisherige Code:

    FUNCTION_BLOCK POU
    VAR_INPUT
    END_VAR
    VAR_OUTPUT
    hFile: DWORD;
    END_VAR
    VAR
    R_TRIG_SAVE: R_TRIG;
    speichern: BOOL := TRUE;
    Text: STRING := 'Hallo Welt';
    anz_bytes: DWORD;
    Ergebnis: UDINT;
    Acess : ACCESS_MODE;
    END_VAR

    R_TRIG_SAVE(CLK:=speichern);
    IF R_TRIG_SAVE.Q THEN
    hFile := SysFileOpen('c:\Neu.txt',Acess,Ergebnis);
    anz_bytes:=SysFileWrite(hFile ,ADR(Text),LEN(Text),Ergebnis);
    sysFileClose(hFile);
    END_IF
    Angehängte Grafiken Angehängte Grafiken
    Zitieren Zitieren txt-Datei Aufrufen,Schreiben,Speichern  

  2. #2
    Registriert seit
    03.12.2014
    Beiträge
    57
    Danke
    3
    Erhielt 1 Danke für 1 Beitrag

    Standard

    Hi.
    Das Schreiben bzw. Lesen einer CSV Datei ist recht einfach.
    Hier gibt es bei Beckhoff Infos:
    http://infosys.beckhoff.com/index.ph...sample.htm&id=
    Allerdings ist das glaube ich nur für TwinCAT 2. Damit habe ich es benutzt.

    Du kannst dir da die Beispieldatei runterladen und diese dann nutzen. Darin sind vier Funktionen:
    Je Import und Export im Binary oder im Textmode. Ich empfehle dir den Textmode.
    Dort kannst du aber nur Strings lesen und schreiben. Ist aber kein Problem.
    Es gibt fertige Funktionen, die dir die Datentypen hin und her wandeln.
    Ich habe so auch strings, ints und reals importiert, bzw. convertiert.

    Ob dein Code so auch geht, weiß ich nicht. Da bin ich noch zu kurz in TwinCat.
    Aber wenn du eh einen Array einlesen und speichern willst, dann musst du in der Beispieldatei nur die Arrays anpassen.
    Ich kann dir dazu auch gerne noch weiter helfen. Kein Problem!

    EDIT: Ich habe jetzt erst gemerkt, dass es vermutlich gar nicht um TwinCat geht, sondern allgemein um Codesys. Sry!
    Aber ich denke, dass du das Beispiel vielleicht trotzdem nutzen kannst! Zumindest kannst du da eine "Anleitung" gewinnen.

  3. #3
    Registriert seit
    03.12.2013
    Ort
    Bremen
    Beiträge
    165
    Danke
    13
    Erhielt 15 Danke für 15 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Meine Lösung in ST für TwinCat sollte aber ähnlich auch bei CODESYS brauchbar sein


    Code:
    VAR_INPUT
        b_EXECUT:BOOL;             (* Startbefehl zum Daten schreiben *)
        DateiName: STRING;            (* DateiName und Pfad auf dem Datenträger *)
        Datei: STRING [255];            (* In diesem String sind die zuschreibenden Daten *)
    END_VAR
    VAR_OUTPUT
        nErrID: UDINT;                (* ADS-ErrorID *)
        bError: BOOL;                    (* ErrorBool *)
        bBusy: BOOL;                    (* BusyBool *)
        SchreibenFertig: BOOL;        (* Daten schreiben fertig gestellt *)
    END_VAR
    VAR
        FB_FileOpen1:FB_FileOpen;    (* FB_FileOpen--> Datei erzeugen, wenn vorhanden Daten anhängen *)
        FB_FileWrite1: FB_FileWrite;    (* FB_FileWrite--> Daten im erzeugter Datei auf Datenträger schreiben *)
        FB_FileClose1: FB_FileClose;    (* FB_FileClose--> Erzeugte Datei auf dem Datenträger schließen *)
        hFile: UINT;                    (* hFile *)
        Step: INT :=0;                    (* CaseSchritte *)
        FlankeSchreiben: BOOL;        (* Stellt sicher das nur einmal geschrieben wird pro Aufruf *)
    END_VAR
    Code:
    (**********************************************************
        Datei auf einen Datenträger schreiben
    ***********************************************************)
    
    IF SchreibenFertig =TRUE THEN
        FlankeSchreiben := b_EXECUT;
        SchreibenFertig:=FALSE;
    END_IF
    
    IF b_EXECUT AND NOT FlankeSchreiben THEN                (* b_EXECUT startet den Ablauf, FlankeSchreiben sorgt dafür das die CASE Anweisung nur einmal durchlaufen wird*)
    
    
        CASE Step OF                                        (*Der CASE regelt das Öffnen,Schreiben und Schließen der Datei*)
    
            0:    (*Datei öffnen*)
                FB_FileOpen1.bExecute := FALSE;
                SchreibenFertig:=FALSE;
                    IF b_EXECUT THEN
                        FB_FileOpen1.bExecute := TRUE;        (*FB Aufrufe sind unten unabhängig vom CASE aufgeführt*)
                        Step:= 5;
                    END_IF
    
            5:
                FB_FileOpen1.bExecute := FALSE;
    
                    IF NOT FB_FileOpen1.bBusy THEN
                        IF FB_FileOpen1.bError THEN            (*Wenn Error, dann Step 50 und Infomationen werden an gemeinsame VAR übergeben*)
                            nErrID := FB_FileOpen1.nErrId;
                            bError := TRUE;
                            Step := 50;
                        ELSE
                            hFile := FB_FileOpen1.hFile;
                            Step := 10;
                            FB_FileWrite1.bExecute := TRUE;
                        END_IF
                    END_IF
    
            10:    (*Datei schreiben*)
                FB_FileWrite1.bExecute := FALSE;
                        IF NOT FB_FileWrite1.bBusy THEN
                            IF FB_FileWrite1.bError THEN        (*Wenn Error, dann Step 50 und Infomationen werden an gemeinsame VAR übergeben*)
                                nErrID := FB_FileWrite1.nErrId;
                                bError := TRUE;
                                Step := 50;
                            ELSE
                                Step:= 15;
                                FB_FileCLose1.bExecute := TRUE;
                            END_IF
                        END_IF
    
            15:    (*Datei schließen*)
                FB_FileCLose1.bExecute := FALSE ;
                    IF NOT Fb_FileClose1.bBusy THEN
                        IF FB_FileClose1.bError THEN            (*Wenn Error, dann Step 50 und Infomationen werden an gemeinsame VAR übergeben*)
                            nErrId := FB_FileClose1.nErrId;
                            bError := TRUE;
                            Step:= 50;
                        ELSE
                            FlankeSchreiben := TRUE;
                            SchreibenFertig :=TRUE;
                            Step := 0 ;
                            hFile:=0;
                        END_IF
                    END_IF
    
            50:
                        IF ( hFile <> 0 ) THEN
                            Step:= 4;
                        ELSE
                            ErrorSchreiben:= nErrID;
                            Step:=0;
                            bBusy:= FALSE;
                        END_IF
    
    
        
            END_CASE
    
    
                FB_FileOpen1(
                                sPathName:=  DateiName,
                                nMode:= FOPEN_MODEAPPEND  OR FOPEN_MODETEXT,
                                ePath:= PATH_GENERIC,
                                tTimeout:=t#3s);
    
                FB_FileWrite1(
                                hFile:=hFile ,
                                pWriteBuff:= ADR (Datei),
                                cbWriteLen:= LEN (Datei),
                                tTimeout:=t#3s );
    
                FB_FileClose1 (
                                hFile:= hFile ,
                                tTimeout:= t#3s,);
    
    
    END_IF
    Hey hatte die gleiche Aufgabe, habe es wie im code drüber gelöst.
    wichtige ist das der String den du schreiben möchtest entsprechen aufgebaut ist
    z.b.
    datum;Zeit;Wert1;Wert2;usw..;$R

    hier noch ein Link von einem vll passendem Thema
    File Handling, Datein Schreiben/Lesen/ Kopieren TWINCAT2
    Geändert von Hendrik (07.01.2015 um 09:50 Uhr)

Ähnliche Themen

  1. Antworten: 12
    Letzter Beitrag: 26.03.2014, 15:55
  2. Step 7 Txt. Datei in Step 7 importieren
    Von zwerg77 im Forum Simatic
    Antworten: 11
    Letzter Beitrag: 25.09.2013, 11:23
  3. VB 2010 - Problem txt-Datei anlegen und schreiben
    Von Sinix im Forum Hochsprachen - OPC
    Antworten: 5
    Letzter Beitrag: 27.11.2012, 21:11
  4. .txt Datei auslesen
    Von sps_sr im Forum Simatic
    Antworten: 10
    Letzter Beitrag: 28.08.2012, 12:51
  5. txt Datei mir passwort versehen
    Von Bensen83 im Forum HMI
    Antworten: 16
    Letzter Beitrag: 14.07.2011, 08:25

Stichworte

Lesezeichen

Berechtigungen

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