So ganz klar ist uns das Problem noch nicht, darum frag ich hier mal nach:
Ich habe eine Zahl. Nun übertrage ich die Zahl in einen STRING mit der Typwandlung INT_TO_STRING
Das funktioniert auf normalen STRING Variablen ohne Probleme.
ABER wenn ich das nun DIREKT auf eine Pointeradresse lege, passiert folgendes:
Es wird ein 80 byte langer String auf den Pointer geschrieben. Der schreibt mir natürlich über das Ende raus und nach mehreren Tagen/Wochen hängt sich die CPU mit einem undefinerten Fehler auf. (zumindest scheint das der Fehler zu sein.)
So nun meine Frage: Wie behandelt Codesys dieses Problem korrekt:
Beispiel: PT_Zeile^:=DINT_TO_STRING(ABS(Value_V));
<nachtrag> die PT_Zeile ist folgendermaßen definiert: PT_Zeile: POINTER TO STRING(nnn);
<nachtrag> dh. das Problem tritt erst auf wenn PT_Zeile LÄNGER als "nnn" wird (ist aber bei 80 Zeichen nicht ganz unwahrascheinlich)
<nachtrag> In der Folgezeile wird der Pointer dann mit PT_Zeile:=PT_Zeile+LEN(DINT_TO_STRING(ABS(Value_V))) verschoben.
<nachtrag> Und wenn's beim Beschreiben PT_Zeile^ zu lang geworden wäre, bleibt der Controller stehen.</nachtrag></nachtrag></nachtrag></nachtrag>
Ich habe diese Art von Befehl schon 1000 fach (ohne Übertreibung) verwendet und noch nie Probleme bekommen...
... und nun schätzen wir, daß unser Problem von dem oben beschriebenen Effekt herrührt.
Ich schreibe hier absichtlich KEIN Zielsystem hin. Mich würde interessieren was Codesys dazu sagt.
Danke Mg
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Anonymous
-
2016-02-02
Originally created by: mg
H A L L O ... I S T W E R D A
Bitte um Anwort. Das Thema ist DRINGEND und der Fehler ist MASSIV.
Inzwischen sind wir draufgekommen daß der Fehler nur auf dem WAGO IPC auftritt.
(Wago 750-880 ist Ok und Bachmann 207 ist Ok, weitere haben wir noch nicht getestet)
Trotzdem würde mich hier interessieren, wie diese Problematik im Codesys generell behandelt wird.
Mg
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Originally created by: mg
So ganz klar ist uns das Problem noch nicht, darum frag ich hier mal nach:
Ich habe eine Zahl. Nun übertrage ich die Zahl in einen STRING mit der Typwandlung INT_TO_STRING
Das funktioniert auf normalen STRING Variablen ohne Probleme.
ABER wenn ich das nun DIREKT auf eine Pointeradresse lege, passiert folgendes:
Es wird ein 80 byte langer String auf den Pointer geschrieben. Der schreibt mir natürlich über das Ende raus und nach mehreren Tagen/Wochen hängt sich die CPU mit einem undefinerten Fehler auf. (zumindest scheint das der Fehler zu sein.)
So nun meine Frage: Wie behandelt Codesys dieses Problem korrekt:
Beispiel: PT_Zeile^:=DINT_TO_STRING(ABS(Value_V));
<nachtrag> die PT_Zeile ist folgendermaßen definiert: PT_Zeile: POINTER TO STRING(nnn);
<nachtrag> dh. das Problem tritt erst auf wenn PT_Zeile LÄNGER als "nnn" wird (ist aber bei 80 Zeichen nicht ganz unwahrascheinlich)
<nachtrag> In der Folgezeile wird der Pointer dann mit PT_Zeile:=PT_Zeile+LEN(DINT_TO_STRING(ABS(Value_V))) verschoben.
<nachtrag> Und wenn's beim Beschreiben PT_Zeile^ zu lang geworden wäre, bleibt der Controller stehen.</nachtrag></nachtrag></nachtrag></nachtrag>
Ich habe diese Art von Befehl schon 1000 fach (ohne Übertreibung) verwendet und noch nie Probleme bekommen...
... und nun schätzen wir, daß unser Problem von dem oben beschriebenen Effekt herrührt.
Ich schreibe hier absichtlich KEIN Zielsystem hin. Mich würde interessieren was Codesys dazu sagt.
Danke Mg
Originally created by: mg
H A L L O ... I S T W E R D A
Bitte um Anwort. Das Thema ist DRINGEND und der Fehler ist MASSIV.
Inzwischen sind wir draufgekommen daß der Fehler nur auf dem WAGO IPC auftritt.
(Wago 750-880 ist Ok und Bachmann 207 ist Ok, weitere haben wir noch nicht getestet)
Trotzdem würde mich hier interessieren, wie diese Problematik im Codesys generell behandelt wird.
Mg