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

Ergebnis 1 bis 4 von 4

Thema: Zeilenumbruch beim .csv Datei schreiben

  1. #1
    Registriert seit
    24.09.2014
    Beiträge
    10
    Danke
    3
    Erhielt 0 Danke für 0 Beiträge

    Frage


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Ich habe folgendes Problem:
    Ich erfasse Über meinen WAGO BACnet Controller 750-831 und der Dreiphasenklemme 750-494 sehr viele Messwerte. Diese Messwerte sollen in eine .csv geschrieben werden, auf die SD-Karte des Controllers.
    Bis jetzt schaffe ich es eine Datei, auf der SD-Karte, zu erstellen und alle eingehenden Messwerte hintereinender in die .csv zu schreiben.
    Das sieht dann so aus, dass alle Werte in der ersten Zeile in EXCEL stehen.
    Nun die Frage: Wie schaffe ich es, dass nach dem erfassen eines Wertesatzes ( Strom L1-L3, SpannungL1-L3, LeistungenL1-L3), einen Zeilenumbruch zu bekommen. Der nachfolgende Wertesatz sollte in der nächsten Zeile stehen.
    Das Programm sieht etwas kaotisch aus, da ich eine schrittkette einbauen musste, auf Grund von Laufzeitproblemen.


    IF Takt THEN

    WHILE FileIdent <>0 DO (*kontrolle ob dateiname schon vorhanden*)
    HelpFileName:= CONCAT ('s:\Messreihe' , sZahl); (*CONCAT zum verbinden von Strings*)
    FileName := CONCAT ( HelpFileName , '.csv');
    FileIdent := SysFileOpen ( FileName , 'r'); (*FileIdent zum öffnen von File nötig*)
    iZahl:=iZahl +1;
    sZahl := INT_TO_STRING (iZahl);
    HelpFileName:= CONCAT ('s:\Messreihe' , sZahl); (* 's:\ ' Pfad auf die SD-Karte*)
    FileName := CONCAT ( HelpFileName , '.csv');
    SysFileClose (FileIdent);
    END_WHILE; (*Kontrolle ende*)

    CASE iDS OF
    1: FileIdent:= SysFileOpen (FileName , 'a'); (*Neues File wird erstellt und mit allen Beschriftungen (erste Zeile EXCEL) gefüttert*)
    IF FileIdent > 0 THEN
    iDS:=2;
    END_IF;
    2: BytesDone := SysFileWrite (FileIdent , ADR (sDatum), LEN(sDatum)); (*Datum aus dem System auslesen und übernehmen. Hier EXCEL Feld A1 bekommt Datum*)
    IF BytesDone = LEN (sDatum) THEN
    iDS:=3;
    END_IF;
    3: SysFileClose (FileIdent);
    iDS:=4;
    4: FileIdent:= SysFileOpen (FileName , 'a');
    IF FileIdent >0 THEN
    iDS:=5;
    .
    .
    .
    END_IF;
    END_CASE; ich wollte jetzt nicht alles kopieren

    iDS:=52;
    (*POINTER POS ÄNDERN*) ich vermute dass es vllt eine lösung gibt bei der man einfach den pointer versetzt, hab aber noch keine Befehle dafür gefunden

    WHILE iZahl <> 0AND Takt DO (*ALLE Messwerte in File schreiben*)
    CASE iDS OF
    52: FileIdent:= SysFileOpen (FileName , 'a');
    IF FileIdent >0 THEN
    iDS:=53;
    END_IF;
    53: sWert := REAL_TO_STRING (Strom_L1_effektiv_R);
    BytesDone:= SysFileWrite (FileIdent , ADR (sWert), LEN(sWert)); (*BitesDone hab ich aus einem andern Programm geklaut um die lenge meiner geschriebenen File zu kontrollieren*)
    IF BytesDone = LEN (sWert) THEN
    iDS:=54;
    END_IF;
    54: SysFileClose (FileIdent);
    iDS:=55;
    .
    .
    .
    97: iPointerPos := iPointerPos +1;
    (*POINTER VERSETZEN*)
    iDS:=49;
    END_CASE;
    END_While;


    Ich hatte noch keine möglichkeit gehabt das Programm aufzuspielen und so weit es geht mal zu testen. Aber beim compilieren sind keine fehler aufgetaucht.
    Vielen Dank schon mal im voraus.
    Zitieren Zitieren Zeilenumbruch beim .csv Datei schreiben  

  2. #2
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.720
    Danke
    398
    Erhielt 2.400 Danke für 2.000 Beiträge

    Standard

    Hallo,
    schreib doch mal dann, wenn du eine Zeilen-Schaltung haben möchtest, den Code von CR und LF (chr(13) und chr(10)) in die Datei ...

    Gruß
    Larry

  3. Folgender Benutzer sagt Danke zu Larry Laffer für den nützlichen Beitrag:

    Beycker (24.09.2014)

  4. #3
    Registriert seit
    28.07.2014
    Beiträge
    17
    Danke
    8
    Erhielt 2 Danke für 2 Beiträge

    Standard

    Es können stattdessen auch die Escape Sequenzen '$R$N' an das Ende des Wertesatzes geschrieben werden.
    Hier stehen mögliche Escape Sequenzen: http://en.wikipedia.org/wiki/IEC_61131-3

    Welchen Zweck hat der Pointer?

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

    Beycker (24.09.2014)

  6. #4
    Beycker ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    24.09.2014
    Beiträge
    10
    Danke
    3
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Der Pointer war nur so eine idee von mir. Ich werde es mal mit den Escape Sequenzen probieren.

Ähnliche Themen

  1. String mit Timer in CSV Datei schreiben.
    Von umpalumpa im Forum CODESYS und IEC61131
    Antworten: 10
    Letzter Beitrag: 04.07.2014, 11:02
  2. 2d-Array in CSV-Datei schreiben
    Von van_Burn im Forum CODESYS und IEC61131
    Antworten: 1
    Letzter Beitrag: 18.01.2013, 11:49
  3. csv schreiben mit Zeilenumbruch
    Von Ampel03 im Forum CODESYS und IEC61131
    Antworten: 5
    Letzter Beitrag: 15.02.2012, 07:14
  4. csv-Datei schreiben mit XC201
    Von glunki im Forum CODESYS und IEC61131
    Antworten: 0
    Letzter Beitrag: 29.08.2011, 11:26
  5. SPS Variablen in csv Datei schreiben
    Von Ghingha im Forum Simatic
    Antworten: 12
    Letzter Beitrag: 06.10.2008, 11:55

Stichworte

Lesezeichen

Berechtigungen

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