Array to String, Header

Limette

Level-2
Beiträge
282
Reaktionspunkte
3
Zuviel Werbung?
-> Hier kostenlos registrieren
Code:
VAR_OUTPUT 
Strint_Out:STRING[208]
END_VAR

VAR_TEMP
Temp_String : STRING[208] ;
String_Sicht AT Temp_String : STRUCT
     Header : array [0..1] of Byte ;
     Data : ARRAY[0..207] OF BYTE ;
END_STRUCT ; 
END_VAR

String_Sicht.Header[0]:=208;
String_Sicht.Header[1]:=208;


FOR k:=0 TO 12 DO  // 13 * 16 = 208
        FOR L:=0 TO 15 DO
                String_Sicht.Data[L + 16 * k] := DbNummer.DB[ k *  20 + L];
        END_FOR;
END_FOR;

Strint_Out:=Temp_String;

Meine Frage:
Mein Array ist 208 byte lang. muss mein string jetzt 210 oder 208 lang sein ? die header brauch ich ja noch. Mein Array ist immer 208 lang, stimmt dann die Headerzuweisung ?
Zum Schluss wird mein Temp_string auf den outputstring geleget. Geht das so ? Steht das Array dann in voller Länge(208 byte) in dem String ?
 
Hallo,
so wie ich das sehe hast du es korrekt gemacht ...
Die Header-Bytes kommen zuzüglich zum String - werden aber immer mit erzeugt - ein String, der 208 Zeichen speichern kann. ist also immer 210 Bytes groß - so wie du es ausgeführt hast ...
Auch die Art und Weise des Arbeitens mit der AT-Sicht an dieser Stelle ist so in Ordnung ... ;)

Gruß
Larry
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich denke, das haut so hin. Keine schlechte Idee, ich hatte das vor einigen Monaten ohne AT-Sicht so gelöst:

Code:
H_String := '';
H_CharString := '';
FOR I := 1 TO 18 DO
   H_CharString := CHAR_TO_STRING(Code_Data[I + 12]);
   H_String := CONCAT(IN1 := H_String
                     ,IN2 := H_CharString
                     );
END_FOR; 
Evaluation_4_Daten := H_String;

PS: Kann mir mal einer verrraten, warum dieser besch... Editor die Codeformatierung jedesmal vollkommen zerhaut? Das nervt
 
Zuletzt bearbeitet:
Hallo,
so wie ich das sehe hast du es korrekt gemacht ...
Die Header-Bytes kommen zuzüglich zum String - werden aber immer mit erzeugt - ein String, der 208 Zeichen speichern kann. ist also immer 210 Bytes groß - so wie du es ausgeführt hast ...
Auch die Art und Weise des Arbeitens mit der AT-Sicht an dieser Stelle ist so in Ordnung ... ;)

Gruß
Larry

:confused:

bei mir ist das array doch 208 lang und nicht 210. ?!

vllt liegt es auch wo anders, dass ich an der hmi simulation nur quark rausbekomme.

lese alles erst mal aus 13 arrays aus und schiebe es hier in einen großen String[208], danach blkmove ich den string[208] auf einen schlaug auf 13x string [16] ( strings folgen alle aufeinander).

bekomme ich da ein header problem ? oder an was könnte es liegen ?
sollte ich besser 13 x string[16] outputen und einzeln blkmoven ?
 
Ahhhh ... jetzt verstehe ich den Hintergrund ...
Sind deine 13 Array's vielleicht auch Strings ? Wenn ja, dann haben die auch einen Header ...
Wenn deine Quellen einzelne Strings sind, so würde ich die nicht Byteweise sondern mit Concat zusammensetzen.
Vielleicht schreibst du mal etwas detaillierter zu deinem Vorhaben ...

Ein String[208] ist übrigens so aufgebaut :
2 Byte Header + 208 Byte Stringdaten = 210 Byte für das Gesamt-Element
Ein String[13] ist dann so aufgebaut :
2 Byte Header + 13 Byte Stringdaten = 15 Byte für das Gesamt-Element

Gruß
Larry
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ahhhh ... jetzt verstehe ich den Hintergrund ...
Sind deine 13 Array's vielleicht auch Strings ? Wenn ja, dann haben die auch einen Header ...
Wenn deine Quellen einzelne Strings sind, so würde ich die nicht Byteweise sondern mit Concat zusammensetzen.
Vielleicht schreibst du mal etwas detaillierter zu deinem Vorhaben ...

Ein String[208] ist übrigens so aufgebaut :
2 Byte Header + 208 Byte Stringdaten = 210 Byte für das Gesamt-Element
Ein String[13] ist dann so aufgebaut :
2 Byte Header + 13 Byte Stringdaten = 15 Byte für das Gesamt-Element

Gruß
Larry

bei mir sind arrays != strings ^^...mein array sind array of bytes
also 13 x array[0..15] of byte in einen großen string[208] und den dann auf 13 strings blkmoven.

das mit dem header hab ich jetzt geblickt :rolleyes:... die header bytes werden ja von den daten bytes überschrieben, richtig ?
brauch ich für die 13 strings auch jeweils noch header mit der größe 16 ?
 
Nein ... brauchst du nicht.
du mußt halt nur die Pos.-Zeiger richtig berechnen.
Schöner wäre es aber, wenn du auf deine "Array[0..15] of Byte" symbolisch zugreifen könntest - dann könntest du nämlich auch so eine AT-Sicht auf deinen Zielstring bilden und die da rein schreiben ohne die Bytes des jeweiligen DB's indexieren zu müssen - also etwa so :
Code:
VAR_OUTPUT 
Strint_Out:STRING[208]
END_VAR

VAR_TEMP
Temp_String : STRING[208] ;
String_Sicht AT Temp_String : STRUCT
     Header : array [0..1] of Byte ;
     Data : ARRAY[1..13] OF array[0..15] of BYTE ;
END_STRUCT ; 
END_VAR

temp_String := '' ;


 String_Sicht.Data[1] := "Quell_DB".Data_Array_1 ;  // "Quell_DB" ist hier der symbolische Namen deines DB und "Data_Array_1" der Namen eines deiner Array[0..15] of Byte
Strint_Out:=Temp_String;
Gruß
Larry
 
Zurück
Oben