Ergebnis von DI_String in Temp-Var

Zuviel Werbung?
-> Hier kostenlos registrieren
Das Kopieren von/in Strings mit dem SFC20 ist eine lustige Angelegenheit, speziell wenn nur einer der beiden Parameter ein String ist.
Zuerst werden Quell- und Ziellänge ermittelt und von diesen beiden dann das kleinere verwendet:
Bei allen als Anypointer angebaren Datentypen - außer bei Strings! - gilt als Länge die Anzahl der verwendeten Elemente multipliziert mit deren jeweiliger Elementgröße (bei einem Anypointer vom Typ Real (je 4 Byte) mit 5 Elementen also z.B. 20 Bytes). Bei Strings hängt die Längenermittlung davon ab, ob Quelle oder Ziel:
String als Quelle: Quelllänge = aktuelle Stringlänge (bei einem String mit Maxlänge 20 Chars, der aktuell nur 5 Zeichen enthält also 5 Bytes)
String als Ziel: Ziellänge = maximal mögliche Länge des angegeben Strings.

Soll nun also z.B. von P#DBxDBX0.0 BYTE 13 in einen STRING[11] kopiert werden, so werden nur 11 Bytes kopiert und die aktuelle Länge des Strings auf 11 gesetzt.

@Volker: In deinem zweiten Kopierversuch scheint laut Anzeige der Variablentabelle die Maximallänge des Ziel-Strings 0 zu sein - somit kopiert der SFC20 natürlich nichts, denn in einen String der Länge 0 passt ja nichts hinein. (Wenn' das auch nicht ist, kann ich nur noch auf evtl. PLC-Sim Probleme beim SFC20 mit Strings tippen)
 
Zuletzt bearbeitet:
Zurück
Oben