Bei der Übertragung von Daten via UDP von SPS zu PC übertrage ich ein Array das so aussieht:
...my_string:string[16];Zahl:word:=16#FF;...
Nun habe ich auf der Gegenseite(PC) nach 16 Bytes das Hexa-FF erwartet. Allerdings vergeblich. Es bleiben immer 2Byte "Luft". Offensichtlich habe ich ein Problem mit der Darstellung von Strings in den Registern, denn bei der UDP-Übertragung werden nur Register übertragen, deren Inhalt dem Übertragungsbaustein Wurscht ist.
Kann mir jemand mit der Beschreibung der internen Definition von Strings helfen ??
Vielen Dank
grauerwolf
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
das mit der Länge (sizeof) hätte mir auch einfallen müssen. Danke für den Hinweis.
Aber wo steht denn eigentlich die Länge. Ich kann bei der beschriebenen Telegrammübertragung an einem String[16] als 17es Byte nur ein Hexa-03 feststellen, obwohl 13 Zeichen im String zu erkennen sind.
Die 03 ist kein ETX manchmal ???
MfG
grauerwolf
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
habe nun selbst des Rätsels Lösung gefunden (mit Codesys-Support).
Also ein String ist "länge"+1 Bytes lang und wird beendet mit Hexa-00.
Wenn bei STRING[16] die Länge 17 ist, dann ist bei voller Auslastung des Strings immer noch im 17.Byte die 00 drin. Ist der String kürzer als definiert, dann steht unmittelbar nach dem letzten Zeichen die 0. Die Crux ist aber, das nach dieser 0 noch irgendwelcher alter Ramsch stehen kann. Das hat mich so durcheinander gebracht, wenn man den Inhalt sich Byteweise anschaut.
Vielleicht hat ein anderer das Problem mal auch ...
MfG
grauerwolf
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Hallo, ich bin der Neue und Anfänger,
Bei der Übertragung von Daten via UDP von SPS zu PC übertrage ich ein Array das so aussieht:
Nun habe ich auf der Gegenseite(PC) nach 16 Bytes das Hexa-FF erwartet. Allerdings vergeblich. Es bleiben immer 2Byte "Luft". Offensichtlich habe ich ein Problem mit der Darstellung von Strings in den Registern, denn bei der UDP-Übertragung werden nur Register übertragen, deren Inhalt dem Übertragungsbaustein Wurscht ist.
Kann mir jemand mit der Beschreibung der internen Definition von Strings helfen ??
Vielen Dank
grauerwolf
die Anzahl Bytes = Stringlänge + 1 Byte (da steht die Stringlänge drin), kannst Du mit SizeOf() leicht selbst herausfinden:
Hallo Oberchefe,
das mit der Länge (sizeof) hätte mir auch einfallen müssen. Danke für den Hinweis.
Aber wo steht denn eigentlich die Länge. Ich kann bei der beschriebenen Telegrammübertragung an einem String[16] als 17es Byte nur ein Hexa-03 feststellen, obwohl 13 Zeichen im String zu erkennen sind.
Die 03 ist kein ETX manchmal ???
MfG
grauerwolf
Hallo,
habe nun selbst des Rätsels Lösung gefunden (mit Codesys-Support).
Also ein String ist "länge"+1 Bytes lang und wird beendet mit Hexa-00.
Wenn bei STRING[16] die Länge 17 ist, dann ist bei voller Auslastung des Strings immer noch im 17.Byte die 00 drin. Ist der String kürzer als definiert, dann steht unmittelbar nach dem letzten Zeichen die 0. Die Crux ist aber, das nach dieser 0 noch irgendwelcher alter Ramsch stehen kann. Das hat mich so durcheinander gebracht, wenn man den Inhalt sich Byteweise anschaut.
Vielleicht hat ein anderer das Problem mal auch ...
MfG
grauerwolf