Welcome to our new forum
All users of the legacy CODESYS Forums, please create a new account at account.codesys.com. But make sure to use the same E-Mail address as in the old Forum. Then your posts will be matched. Close

CSV Daten einlesen.

DIN
2009-03-17
2011-02-07
  • DIN - 2009-03-17

    Hallo

    Ich schreibe täglich zur gleichen Uhrzeit Messwerte in eine Datei.

    Die gespeicherten Messwerte möchte ich mir Tageweise aufrufen.

    Über SysFileRead kann ich immer nur "alle" gespeicherten Werte auslesen. Gibt es eine Möglichkeit das auslesen auf eine bestimmte Zeile der CSV-Datei zu beschränken?

    Ich verwende die XV 200 von Micro Innovation.

    Danke.

     
  • Karle - 2010-12-21

    Hallo,
    wir verwenden auch MI , habe auch ab und zu mit logging zu tun.
    Ich kenne nur die Variante das File inne Struktur oder Array komplett einzulesen und dann den gesuchten Eintrag hinterher raussuchen. File Write geht ja anhängend !
    Freue mich über jede Anregung zu dem Thema .
    Gruß !

     
  • Dennis Lo - 2011-02-01

    Hallo,

    es gibt die Möglichkeit, jedes mal von der ersten Zeile an zu lesen und solange zu lesen, bis du in deiner Zeile angekommen bist.
    Das geht über die PLM_Csv.lib und der Funktion csv_read.

    Mal ein Bespiel:

    csv_read.set_tabchar(TabChar:=59); (* TabChar 59 ist das Semikolon *)
             FOR i:=0 TO GV_Write_Index+1 DO  (*GV_Write_Index ist die Nummer der letzten Messung*) 
                csv_read.read_val_tab;
                   IF STRING_TO_WORD (csv_read.val_str) =  GV_Write_Index-(120) THEN
                         csv_read.read_val_tab;                                                                           (*DL: er sucht den Wert und setz ihn als Variable*)
                         csv_read.read_val_tab;
                         csv_read.read_val_tab;
                         GV_Kurve[1]:= STRING_TO_REAL (csv_read.val_str)/CONST_Measure_To_Trend*-0.03907204*(1000/GV_Range_Multiplier);
                      FOR x:=1 TO 120 DO
                         csv_read.read_val_crlf;                                                               (*DL: Alle Folgewerte werden eingesetzt*)
                         csv_read.read_val_tab;
                         csv_read.read_val_tab;
                         csv_read.read_val_tab;
                         csv_read.read_val_tab;
                         GV_Kurve[x]:= STRING_TO_REAL (csv_read.val_str)/CONST_Measure_To_Trend*-0.03907204*(1000/GV_Range_Multiplier);
                      END_FOR
                   END_IF
                csv_read.read_val_crlf;
    

    In diesem Beispiel werden die letzten 120 Werte ausgelesen und im Array GV_Kurve[x] gespeichert. Also kann man genau die Zeilen raussuchen die man haben will, besonders leicht fällt es natürlich, wenn der erste Wert eine Zeilennummer oder eine Uhrzeit ist an der man die gewünschte Zeile einsehen möchte.

    Nachteil: Bei sehr vielen Messungen dauert es etwas, bis die CPU das komplette file von oben nach unten gelesen hat, bis es an der gewünschten Position angekommen ist. Dürfte hier aber kein Problem sein, weil die Paar sekündchen kann man einmal täglich denke ich mal gerne warten, nur bei dauerhafter Anwendung gehts es irgendwann auf die Nerven.

    mfg

     

    Related

    Talk.ru: 1

  • franzhoepfinger - 2011-02-02

    PLM_Csv.lib ?

    wo gibt es die ? bzw. mit welcher Steurung wird die mitgeliefert ?!?

     
  • Dennis Lo - 2011-02-07

    Hi,
    die PLM_Csv.lib habe ich bei der Firma Sabo und der Steuerung PLM 700 bekommen.

    mfg

     

Log in to post a comment.