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

Ergebnis 1 bis 7 von 7

Thema: Array of Struct in CSV Datei schreiben

  1. #1
    Registriert seit
    09.11.2007
    Beiträge
    344
    Danke
    60
    Erhielt 4 Danke für 4 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo zusammen,

    ich beschäftige mich gerade mit der Erstellung einer CSV Datei auf einem WAGO PFC200 und Codesys 2.3. (syslibfile.lib)
    Die CSV Datei hat 30 Zeilen zu je 6 Werte pro Zeile.
    Habe meine Werte in einem Struct zusammengefasst und möchte die nun in eine csv schreiben.

    Habe schon verschiedene Strings mit CONCAT zusammengefügt und in eine CSV geschrieben, allerdings bin ich hier auf 255 Zeichen begrenzt.
    Nun habe ich hier einige Zeichen mehr. Jemand ne Idee wie ich das lösen könnte?

    Wie gehe ich da am besten vor.

    VG
    NSN
    Zitieren Zitieren Array of Struct in CSV Datei schreiben  

  2. #2
    Registriert seit
    11.09.2012
    Ort
    obostenoderwestendaheimistesambesten
    Beiträge
    86
    Danke
    1
    Erhielt 13 Danke für 8 Beiträge

    Standard

    Hallo,

    ich mache das so :
    1) ich lege mir ein bytearray an ( resultdata_csv : ARRAY[1..4000000] OF BYTE; )
    2) dann definiere ich mir die trennzeichender csv Werte ( szSeperator : STRING(1):= ';' ;)
    sowie Carriage return und linefeed ( CRLF : STRING(2) := '$R$N';
    LF : STRING(1) := '$N'; )
    3) Dann 2 Pointer definiert, einer aufs bytearray und einer auf den einzfügenden string, und dann immer lustig ins Bytearray geschrieben.

    das ergebnis sieht dann so aus :


    csv.PNG
    P.S: Am Schluss die Datei nur mit der Länge schreiben, wie der Pointer aufs bytearray durch die Einträge angewachsen ist,
    sonst würde die Datei unnötig gross.
    ( Ich habe das bei mir so gross gewählt, da ich max.100 Werte in den Spalten haben kann, und das mal 3600 Zeilen mal 6 ASCII Zeichen,
    das ergibt theoretisch so 3.600.000 byte , falls alle CSV Datensätze ausgenutzt werden).

    Gruß, Wollvieh.



    Geändert von wollvieh (02.01.2019 um 21:54 Uhr)

  3. Folgende 2 Benutzer sagen Danke zu wollvieh für den nützlichen Beitrag:

    NeuerSIMATICNutzer (11.01.2019),TiI (11.01.2019)

  4. #3
    NeuerSIMATICNutzer ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    09.11.2007
    Beiträge
    344
    Danke
    60
    Erhielt 4 Danke für 4 Beiträge

    Standard

    Hallo wollvieh,

    danke für deinen Beitrag.
    Jetzt wird es schwierig für mich. Habe schon in anderen Threads gesehen das sowas mit Pointern gelöst wurde,
    allerdings habe ich damit noch nichts zu tun. Werde mich wohl Intensiv damit befassen müssen.


    VG
    NSN

  5. #4
    Registriert seit
    25.06.2017
    Ort
    Oerlinghausen
    Beiträge
    1.111
    Danke
    93
    Erhielt 186 Danke für 157 Beiträge

    Standard

    Die Indizes von Arrays werden auch schon mal als Pointer bezeichnet. Muss also nicht ein Pointer im Sinne von S7 sein, zumal wir uns hier bei CodeSys & IEC61131 tummeln?

  6. Folgender Benutzer sagt Danke zu Heinileini für den nützlichen Beitrag:

    NeuerSIMATICNutzer (11.01.2019)

  7. #5
    Registriert seit
    25.03.2011
    Beiträge
    59
    Danke
    0
    Erhielt 4 Danke für 4 Beiträge

    Standard

    Pointer funktionieren laut IEC aber auch mit einem Index.

    z.b. ptr^[i]

    Das geht jetzt sogar bei Siemens!

  8. Folgender Benutzer sagt Danke zu flyingsee für den nützlichen Beitrag:

    NeuerSIMATICNutzer (11.01.2019)

  9. #6
    NeuerSIMATICNutzer ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    09.11.2007
    Beiträge
    344
    Danke
    60
    Erhielt 4 Danke für 4 Beiträge

    Standard

    Hallo,

    danke für Eure Hilfe. Mit den Pointern funktioniert es super.

    Zitat Zitat von wollvieh Beitrag anzeigen
    P.S: Am Schluss die Datei nur mit der Länge schreiben, wie der Pointer aufs bytearray durch die Einträge angewachsen ist,
    sonst würde die Datei unnötig gross.
    Wie begrenzt du die Datei? Mit SIZEOF?

    Vg
    NSN

  10. #7
    Registriert seit
    11.09.2012
    Ort
    obostenoderwestendaheimistesambesten
    Beiträge
    86
    Danke
    1
    Erhielt 13 Danke für 8 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Mit Adressarithmetik. Einen Pointer referenziere ich mit der Basisadresse des Bytearrays. Ein zweiter Pointer wird mit jedem neuen Zeichen incrementiert. Am Ende die Differenz der beiden Pointer gebildet, das gibt dann die Grösse der Datei. (pEnd-pBase).
    Wollvieh.

    Beispiel :
    resultdata_csv : ARRAY[1..4000000] OF BYTE;
    pEnd : POINTER TO STRING;


    fwrite(
    sNetId:= sNetId,
    hFile:= handleFile,
    pWriteBuff:= ADR(resultdata_csv),
    cbWriteLen:= pEnd - ADR(resultdata_csv),
    bExecute:= ,
    tTimeout:= ,
    bBusy=> ,
    bError=> ,
    nErrId=> ,
    cbWrite=> );
    Geändert von wollvieh (12.01.2019 um 09:53 Uhr)

Ähnliche Themen

  1. TIA Struct in Array schreiben
    Von Credofire im Forum Simatic
    Antworten: 6
    Letzter Beitrag: 17.11.2016, 10:13
  2. Prozessvariable in .csv Datei schreiben
    Von realload im Forum Sonstige Steuerungen
    Antworten: 7
    Letzter Beitrag: 09.09.2015, 14:16
  3. 2d-Array in CSV-Datei schreiben
    Von van_Burn im Forum CODESYS und IEC61131
    Antworten: 1
    Letzter Beitrag: 18.01.2013, 12:49
  4. Antworten: 11
    Letzter Beitrag: 01.09.2011, 21:24
  5. STRUCT in eine Datei schreiben (ST)
    Von demon2000 im Forum CODESYS und IEC61131
    Antworten: 4
    Letzter Beitrag: 23.03.2011, 19:27

Lesezeichen

Berechtigungen

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