Hallo,
ich habe ein ARARY[0..20] CHARACHTERS (Auch als Bytes verfügbar) und möchte das nun in eine Zeichenkette übertragen. Wie ist hier der besten Lösungsansatz?
Code_Data : String[40];
MyCharArray : Array[0..20] of Char;
Code_Data := ' '; //oder auch mit andern Inhalt vorbelegen
Code_Data[15] := MyCharArray[0];
Code_Data[16] := MyCharArray[1];
...
ginge evt. auch in einer Schleife, aber bei 20 Zeichen ist das noch zu Fuß vertretbar.
Code_Data belege ich eimal mit 40 Leerzeichen oder einem gewünschten Text vor, damit der String auch von der Länge her initialisiert ist. Wenn man das gleich bei der Deklaration macht könnte das evtl. auch reichen.
Es geht auch ohne Schleife mit einer entsprechenden (Typ-gleichen) AT-Sicht auf den String und dann einer passenden Zuweisung ... (womit wir schon wieder bei der AT-Sicht sind)
Das habe ich fast original so in einem Step7-SCL Baustein.
Ichhabe kein Array für die Char, sindern weise direkt ein paar Char zu.
Ist dein Array ein Array of Char, dann sollte das schon so gehen.
Hallo Gerri,
das geht schon, wenn du es richtig machst.
Der Strings hat am Anfang noch 2 Header-Bytes (tatsächliche Länge und deklarierte Länge) - die mußt du bei der AT-Sicht natürlich auch berücksichtigen und die mußt du dann auch richtig zuweisen.
Das heißt, der String muß initialisiert sein, dann kannst du den Char-Array zuweisen und dann solltest du noch in den Header die Anzahl der Zeichen des Char-Arrays eintragen.
Also etwa so :
Code:
Str : STRING(20);
StrAT AT Str : struct
maxLen : byte;
totalLen : byte
chars : ARRAY[0..20] of CHAR;
end_struct ;
myCharArray : ARRAY[0..20] of CHAR;
und als Code dann :
Str := '' ;
StrAT.chars := myCharArray ;
StrAT.totalLen := 20 ;
Tja ... so ist das mit der Erinnerung ...
So lange mich erinnere hat der String bei Step7 immer schon 2 Headerbytes (wie oben genannt).
Das hat übrigens nichts mit AWL, KOP, FUP oder SCL zu tun - das liegt einfach in der Variablendefinition selbst ...