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

FileWrite

Michael W
2017-03-27
2017-04-11
  • Michael W - 2017-03-27

    Hallo zusammen,
    ich bin noch nicht sehr lange bzgl. der Programmierung mit Codesys v3 unterwegs.
    Ich habe ein Problem mit der (generellen) Funktionsweise von FB's.
    Ich möchte dies anhand des FB FileWrite erläutern:

    Beispiel:
    Ich möchte zyklisch in ein File mittels FileWrite das Ergebnis von einem Counter schreiben.
    Wie ich in der Beschreibung von FileWrite gesehen habe, besitzt der FB Rückgabevariablen xBusy, xDone, xError. Das heißt für mich, dass es sich um einen asyncronen FB handelt und das erfolgreiche Schreiben in das File durch das Setzen von xDone signalisiert (nach n-Zyklen) wird.
    Ist das soweit korrekt ?

    Jetzt kommt aber der zyklische Aufruf ins Spiel.... bei jedem Aufruf des Counters wird dieser um 1 erhöht, wobei der FileWrite FB mehrere Zyklen braucht um das Ergebnis (hier der Wert des Counters) zu schreiben. Dadurch gehen mir doch manche Counterwerte verloren ?? Wie kann ich das Lösen ?

    Gruß
    Michael

     
  • alwoso - 2017-04-11

    Hallo Michael!

    Falls du es noch nicht selber herausgefunden hast:
    Direkt geht das gar nicht. Dateizugriffe dauern immer länger als ein SPS-Zyklus.

    Die Lösung wäre, einen ausreichend großen Puffer im Speicher zu reservieren, der im Zyklus gefüllt wird, und wenn der bis zu einem bestimmten Maß gefüllt ist, den Inhalt komplett in die Datei zu schreiben. Deshalb gibt es am FB File.Write auch die Eingänge pBuffer und szSize, an denen übergibt man praktisch den Puffer und den Füllgrad.

    Dann sollte man noch darauf achten, daß man den Puffer auch in die Datei schreiben kann, wenn man das vom Programm her will, z.B. beim Übergang von Automatik nach Handbetrieb oder auf Bedienereingabe....

    Viel Erfolg!

    Alfred

     

Log in to post a comment.