Reset(Ursprung) per Befehl & auslesen von csv-zeilen

Dennis Lo
2011-02-01
2011-02-01
  • Dennis Lo - 2011-02-01

    Hallo!

    Ich bin zurzeit mit der Programmierung eines Dataloggers beschäftigt.
    Bevor ich das Projekt im Groben abschließen kann, stellen sich mir allerdings noch zwei Probleme in den Weg:

    1. Sämtliche Log Dateien werden auf einem USB stick gespeichert. Die einzelnen Werte werden in eine Csv-Datei geschrieben.
      Diese werden allerdings je nachdem wie man möchte wieder vom USB aufgerufen und angezeigt.
      Mein Problem:
      im Moment gehe ich so vor, dass ich jedes mal von der ersten Zeile an lese und immer den ersten Wert der Log-Datei lese (Messung Nr. X), bis ich bei der gewünschten Messung angekommen bin.
       FOR i:=0 TO 65535 BY 1 DO
             (* Messnummer *)
             csv_read.read_val_tab;
             IF NOT csv_read.error THEN
                GV_Write_Index := STRING_TO_WORD(csv_read.val_str);
             ELSE
                RETURN;
             END_IF
          csv_read.read_val_crlf;
       END_FOR
    

    Je nachdem wieviele Messwerte gespeichert sind, dauert es bei dieser Methode und vielen Werten ewig lange, bis ich schließlich meinen Wert ausgeben kann.

    Am liebsten würde ich einfach direkt in die gewünschte Zeile springen, allerdings ist die Variable "csv_read.zeilen_count" eine reine output Variable.

    1. Soll das Programm von sich aus einen Reset(Ursprung) machen, wenn der USB stick entfernt wird, während gerade etwas in die Log-Dateien geschrieben wird. Es geht laut CoDeSys-Hilfe mit "SysResetPlcProgram" aus der SysLibPlcCtrl.lib, allerdings kann ich diese lib nirgends finden.
      Kann mir jemand sagen, wo ich diese finde, oder ob es ansonsten noch eine andere gute Lösung dafür gibt?

    mfg Dennis Lo

     
  • Anonymous - 2011-02-01

    Originally created by: blackenslaver666

    Hi.
    1. Es gibt durchaus Funktionen für das Filehandling die z.B. Zeilen über einen Byte-Offset ansprechen. Letztlich kann man dir hier aber nicht helfen da man nicht weiss was du für Ressourcen hast: Sprich welche System-Funktionen dir zur Verfügung stehen. Letztlich finden sich diese in den Libs des Herstellers. Unsere Lib stellt alle möglichen FUNs zur Verfügung, z.B. auch nach Teilstrings in Dateien zu suchen und den Byteoffset der entsprechenden Zeile zurückgeben. Ab dort kann man dann auch lesen. Bei unserem Hersteller heisst die FUN "FileSeek". Letztlich ist es auch eine Frage wie man seine Datei füllt. Ein Identifier zum Start jeder Zeile (z.B. Messwertnummer) ist da immer hilfreich. Auch darüber machst du leider keine Angaben.

    1. Eigentlich liegen die Libs im CoDeSys-Library-Verzeichnis. Solltest dort man suchen und sie über den Bibliotheksverwalter einbinden. Sehe allerdings nicht die Notwendigkeit das Programm neu zu starten. Was du brauchst ist ein definiertes Ereignis, welches dir angibt ob der USB gesteckt ist oder nicht. Dann kannst du deine Lese-/Ausgaberoutine auch einfach über eine IF-Anweisung an-/entkoppeln. Letztlich lässt sich das also auch über die Programmorganisation lösen ohne die Steuerung neu zu booten.

    Gruß

     

Log in to post a comment.