TwinCAT 2 Zeilenumbruch im CSV lesen

Hamsi

Level-1
Beiträge
60
Reaktionspunkte
1
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo an alle,

ich habe leider folgendes Problem und hoffe das mir jemand dabei helfen kann.

Problem:

Ich erstelle mir eine CSV Datei (im Textmode) die mehrere Positionen abspeichert und schreibt.
Die einzelnen Positionsgruppen (X+Y) werden jedesmal durch einen Zeilenumbruch getrennt.
Bsp.:
Nr:; X:; Y:;
1.; 123; 456;
2.; 321; 654;
3.; 098; 890;
usw....

Das schreiben funktioniert ohne Probleme nur leider klappt das lesen nicht.
Ich weis leider überhaupt nicht wie ich den Zeilenumbruch auslesen soll, bzw. eine neue Zeile lesen soll.

Momentan wird mir einfach die erste Zeile angezeigt.

Könnte mit hier irgendwer helfen ?
 
Hey mit welchem FB machst du das auslesen?

Kannst du uns vll ein wenig CODE zukommen lassen um besere hilfe leisten zu können.

Wie erstellst du die CSV Datei? Es gibt hier teilweise unterschiedliche Zeilenumbrüche die bei TwinCat nicht erkannt werden.

MFG

Hendrik
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Also von den FBs verwende ich:

FB_FileOpen
FB_FileClose
FB_FilePuts
FB_FileGets

alles im Textmode.

Code:
        10:                                            (*Zu schreibende Zeile initialisieren*) 
        MEMSET(ADR(sWriteLine), 0,SIZEOF(sWriteLine));
        nCSV_Step                                            := 11;
    
        11:                                                    (*Überschrift festlegen*)
        sWriteLine                                            := 'Teachmodus$LArtikelnummer: ';
        sWriteLine                                            := CONCAT(sWriteLine,sPartNumber);
        sWriteLine                                            := CONCAT(sWriteLine,'$L');
        nCSV_Step                                            := 12;


        12:                                                    (*Überschrift Schreiben starten*)
        bExecutePuts                                         := TRUE;
        nCSV_Step                                            := 13;


        13:                                                    (*Überschrift Schreiben ist aktiv*)
        IF bBusyPuts THEN
        nCSV_Step                                            := 14;
        END_IF


        14:                                                    (*Fehlerabfrage*)
        IF NOT bBusyPuts AND NOT stErrorCSV.bErrorPuts THEN
            bExecutePuts                                   := FALSE;
            nCSV_Step                                      := 20;
        ELSIF stErrorCSV.bErrorPuts THEN
            nCSV_Step                                      := 110;
        END_IF


        20:                                                    (*Zu schreibende Zeile initialisieren*)
        MEMSET(ADR(sWriteLine), 0,SIZEOF(sWriteLine));
        nCSV_Step                                            := 21;


        21:                                                    (*Tabellenbeschriftung festlegen*)
        sWriteLine                                            := 'Schraube:;';
        sWriteLine                                            := CONCAT(sWriteLine, 'Bezeichnung:;');
        sWriteLine                                            := CONCAT(sWriteLine, 'X-Koordinate :;');
        sWriteLine                                            := CONCAT(sWriteLine,'Y-Koordinate :;');
        sWriteLine                                            := CONCAT(sWriteLine,'$L');
        nCSV_Step                                            := 22;


        22:                                                    (*Tabellenbeschriftung Schreiben starten*)
        bExecutePuts                                         := TRUE;
        nCSV_Step                                            := 23;


        23:                                                    (*Tabellenbeschriftung Schreiben ist aktiv*)
        IF bBusyPuts THEN
        nCSV_Step                                            := 24;
        END_IF


        24:                                                    (*Fehlerabfrage*)
        IF NOT bBusyPuts AND NOT stErrorCSV.bErrorPuts THEN
            bExecutePuts                                     := FALSE;
            nCSV_Step                                        := 30;
        ELSIF stErrorCSV.bErrorPuts THEN
            nCSV_Step                                        := 110;
        END_IF


        30:                                                    (*Zu schreibende Zeile initialisieren*)
        nLineNr                                                := 1;
        nCSV_Step                                            := 31;


        31:
        MEMSET(ADR(sWriteLine), 0,SIZEOF(sWriteLine));
        sWriteLine                                            := DINT_TO_STRING(aTeachedScrews[nLineNr].nScrew);
        sWriteLine                                            := CONCAT(sWriteLine,';');
        sWriteLine                                            := CONCAT(sWriteLine, aTeachedScrews[nLineNr].sDescription);
        sWriteLine                                            := CONCAT(sWriteLine,';');
        fbConvertCommaPoint(sInputString:= LREAL_TO_FMTSTR(aTeachedScrews[nLineNr].lrX / 1000, 4, TRUE), bConvertToComma:= TRUE, bConvertToPoint:= FALSE, sNewString=> sScrewPosComma);
        sWriteLine                                            := CONCAT(sWriteLine, sScrewPosComma);
        sWriteLine                                            := CONCAT(sWriteLine,';');
        fbConvertCommaPoint(sInputString:= LREAL_TO_FMTSTR(aTeachedScrews[nLineNr].lrY / 1000, 4, TRUE), bConvertToComma:= TRUE, bConvertToPoint:= FALSE, sNewString=> sScrewPosComma);
        sWriteLine                                            := CONCAT(sWriteLine, sScrewPosComma);
        sWriteLine                                            := CONCAT(sWriteLine,';');
        sWriteLine                                            := CONCAT(sWriteLine, '$L');




        nCSV_Step                                            := 32;


        32:                                                    (*Zeile Schreiben starten*)
        bExecutePuts                                         := TRUE;
        nCSV_Step                                            := 33;


        33:                                                    (*Zeile Schreiben ist aktiv*)
        IF bBusyPuts THEN
        nCSV_Step                                            := 34;
        END_IF


        34:                                                    (*Fehlerabfrage*)
        IF NOT bBusyPuts AND NOT stErrorCSV.bErrorPuts THEN
            bExecutePuts                                    := FALSE;
            nCSV_Step                                        := 40;
        ELSIF stErrorCSV.bErrorPuts THEN
            nCSV_Step                                        := 110;
        END_IF


        40:
        nLineNr                                                := nLineNr + 1;
        IF aTeachedScrews[nLineNr].nScrew > 0 THEN
            nCSV_Step                                        := 31;
        ELSE
            nCSV_Step                                        := 110;
        END_IF

Ich habe das gesamte schreiben hinterlegt (öffnen und schließen habe ich mir gespart ^^)
Ich hoffe das es verständlich ist da ich noch nicht so lange mit Beckhoff arbeite.

(Leider hat es beim kopieren die Struktur etwas verloren.)
 
Zuletzt bearbeitet:
Hey probier es mal mit '$N'

guck mir mal weiter deinen CODE an

Habe es versucht, keine Änderung.
Beim schreiben liegt der Fehler nicht (glaube ich zumindest).
Es ist das lesen selber, doch leider habe ich da keine Ahnung wie ich den Zeilenumbruch auslesen soll.
bzw. wie ich mehrere Zeilen lesen kann.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Code:
    (*_____________________________________________________________*)
    20:    (* Zeile für Zeile auslesen *)
        CASE ReadCaseIntern OF
            0:
                FileGets.bExecute := FALSE;
                ReadCaseIntern := 5;
            5:
                FileGets.bExecute := TRUE;
                ReadCaseIntern := 10;
            10:
                FileGets.bExecute := FALSE;
                IF FileGets.bError = FALSE THEN
                    IF FileGets.bBusy = FALSE THEN
                        IF FileGets.bEOF = FALSE THEN                    (*  TRUE = ENDE der Datei *)
                            ReadLine := ReadLine +1;
                            FIND_Kommentar := FIND (FileGets.sLine,'/*');        (* Kommentare ausfiltern *)
                            IF (FIND_Kommentar = 0) OR (FIND_Kommentar <> 1) THEN
                                sLine:= '';                                    (* Gelesene Zeile übergeben *)
                                sLine:= FileGets.sLine;
                                ReadCaseIntern := 0;
                                ReadCase := 30;
                            ELSE                                        (* Kommentar gefunden also nächste Zeile *)
                                sLine:= '';
                                sLine:= FileGets.sLine;
                                ReadCaseIntern := 0;
                                ReadCase := 20;
                            END_IF;
                        ELSE        (* keine weiteren Zeilen mehr *)
                            sLine:= '';
                            ReadCaseIntern := 0;
                            ReadCase := 60;        (* Datei schließen *)
                        END_IF;
                    ELSE
                        ReadCaseIntern := 10;
                    END_IF;
                ELSE    (* Fehler aufgetaucht *)
                    VAR_ErrorID := ERR_FILE_GETS;
                    VARError := TRUE;
                    ReadCaseIntern := 0;
                    ReadCase := 60;
                END_IF;
        END_CASE;
        IF Zeilen <> 0 THEN
            Progress := LREAL_TO_UINT ((100.0/ Zeilen) * ReadLine);        (* Fortschritt berechnen *)
        END_IF;
        FileGets(
                    hfile:= hFile,
                    tTimeout:=TMOUT );

Vll hilft dir das
 
Zurück
Oben