Probleme mit CONCAT

2007-03-09
2007-03-10
  • E.Schulz@KHS - 2007-03-09

    Hallo zusammen!

    Ich habe seit längerer Zeit eine Funktion laufen, die Datum, Uhrzeit, Fehlercodes usw. von Servoantriebe in einer csv-Datei mitloggt.

    Dazu werden die verschiedenen Variablentypen (TIME, DINT,...) in einem Programm (prg) zu einzelnen Strings konvertiert und anschließend in einer dazugehörigen Aktion zu einem Gesamtstring verbunden. Dieser wird dann mit einem Mal in die Datei geschrieben.

    Leider kommt es immer wieder vor, dass vor allem Datum und Uhrzeit verschoben sind, also z.B. Teile der Uhrzeit im Datum stehen, die Uhrzeit jedoch komplett fehlt.

    Wieso kann diese Methode meist funktionieren, zu ca. 2% jedoch fehlerhaft arbeiten?

    Danke vorab

     
  • J Schohaus - 2007-03-09

    Hallo

    String-Funktionen sind nicht "thread-safe" !

    Das heist wird die function CONCAT in mehreren Task's verwendet gibt es probleme !

    Trift genauso auf folgende befehle zu

    LEN

    LEFT

    RIGHT

    MID

    CONCAT

    INSERT

    DELETE

    REPLACE

    FIND

    mfG Jochen

     
  • hugo - 2007-03-09

    ja das steht auch so ganz klar im manual von codesys

     
  • E.Schulz@KHS - 2007-03-09

    Hallo nochmal!

    Danke für die schnelle Antwort!

    @hugo

    Wenn man weiss, was "thread-safe" so genau bedeutet ...

    Ausserdem ist es ziemlich schwach, ein Programmiersystem anzubieten, in dem elementare Funktionen nicht unter allen Umständen benutzbar sind.

    Gerade wenn in zeitkritischen Anwendungen Dateien bearbeitet werden müssen, sind mehrere Task zwingend notwendig.

    Grüße

     
  • mwatermann - 2007-03-09

    dann nehm anstatt tasks die ablaufsprache mit abhängigkeiten und transitionen und entsprechenden zykluszeiten.

    oder bastel dir globale flags, die signalisieren, wenn eine concat funktion in betrieb ist und wann nicht.

    oder packe alle concat funktionen in einen extra task.

    ...

    btw:

    man sollte mit jeden programmiersystem genau wissen was man tut; vor allem, wenn es um zeitkritische dinge geht.

     
  • hugo - 2007-03-09

    wir denken bei oscat gerade darüber nach die string funktionen selbst zu programmieren um diese sicherer zu machen, haben aber bedenken das codesys dies hoffentlich auch bald tut und wir damit die arbeit umsonst machen würden.

    ich denke schon das es aufgabe des compiler herstellers ist string funktionen so anzubieten das der anwender nicht beliebige kunstgriffe machen muss.

     
  • Oberchefe - 2007-03-09

    spätestens wenn der String länger wird mußt Du sowieso basteln, egal um welche Stringfunktion es geht. Mittlerweile habe ich daher schon so manche Funktion selber erstellt.

     
  • Erik Böhm - 2007-03-10

    Hi

    Dieses problem hatte ich auch schon.

    Hab da mal ein paar Worte mit H.Fauter von 3S ausgetauscht und mittlerweile sollten die String Funktionen eigentlich Thread-save sein.

    Ich hab mir trotzdem ne eigene CONCAT Funktion gebastelt.

    Mehr als 8192 Byte geht (zumindest bei der RTE) aber leider nicht, das gibt ganz wilde Fehler...

    MfG

    Erik

    AsysConcat.zip [4.17 KiB]

     

Log in to post a comment.