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
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
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.
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
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.
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
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
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
ja das steht auch so ganz klar im manual von codesys
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
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.
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.
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.
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]