WinniePooh
Level-1
- Beiträge
- 102
- Reaktionspunkte
- 1
-> Hier kostenlos registrieren
Hallo liebe SPS Gemeinde...
ich habe mal unten ein kleinen Code aufgeschrieben. ( siehe unten).
Dieser soll mir ein (in) ARRAY OF BYTES[1..17] in ein (out) ARRAY OF BYTES [1..8] umwandlen.
Das IN ARRAY besteht aus HEX werten der ASCII Tabelle Bsp.: 30, 35, 42, 39 etc.....
Dieses wandle ich erstmal in ein ASCII Zeichen um also Bsp.: 0, 5, B, 9 etc......
und danach sollen zwei ASCII Zeichen zu einem gesetzt werden Bsp: 05, B9 etc.....
Diese ASCII Zusammensetzung soll dann als ein HEX Wert wieder in ein Byte umgewandelt werden.
Nun habe ich ja den Code geschrieben, aber der will nicht so richtig wie ich es oben beschrieben habe...
kann mir jemand helfen, wo ich den Fehler im Code habe und vielleicht einen besseren Lösungsvorschlag oder Verbesserung geben...
Danke für Eure Verständnis
Gruß
Winnie
ich habe mal unten ein kleinen Code aufgeschrieben. ( siehe unten).
Dieser soll mir ein (in) ARRAY OF BYTES[1..17] in ein (out) ARRAY OF BYTES [1..8] umwandlen.
Das IN ARRAY besteht aus HEX werten der ASCII Tabelle Bsp.: 30, 35, 42, 39 etc.....
Dieses wandle ich erstmal in ein ASCII Zeichen um also Bsp.: 0, 5, B, 9 etc......
und danach sollen zwei ASCII Zeichen zu einem gesetzt werden Bsp: 05, B9 etc.....
Diese ASCII Zusammensetzung soll dann als ein HEX Wert wieder in ein Byte umgewandelt werden.
Nun habe ich ja den Code geschrieben, aber der will nicht so richtig wie ich es oben beschrieben habe...
kann mir jemand helfen, wo ich den Fehler im Code habe und vielleicht einen besseren Lösungsvorschlag oder Verbesserung geben...
Danke für Eure Verständnis
Gruß
Winnie
Code:
(* Ausgabe soll am Anfang nicht gesetzt werden*)
ENO:=FALSE;
(* Wenn der Baustein aktiviert wird Starten*)
IF ENI
THEN
i:=1;
(*Schleife um die Eingangsbytes rauszunehmen und
daraus einen Array von ASCII Zeichen machen...
Das InputArray beinhaltet HEX WERTE in BYTES*)
FOR i:=1 TO 16 BY 1
DO
BYTE_TO_STRH_1(
IN:=arrReceiveInput[i]
);
arrASCIIString[i]:=BYTE_TO_STRH_1.BYTE_TO_STRH;
END_FOR;
(*Initialisieren der Variablen*)
TempString:='';
ii:=1;
i:=1;
(*In einer Schleife die ASCII String Array[17] auf String Array [8]
INSTRING1:=2, INSTRING2:=5 OUTSTRING:=25*)
FOR i:=1 TO 16 BY 1
DO
(*Setzt die einzelnen ASCII zeichen zusammen*)
TempString:=CONCAT(TempString,arrASCIIString[i]);
(*misst die länge des TempStrings*)
strLength:=LEN(TempString);
(*wenn die länge größer oder gleich 2 und ii kleiner 8 dann soll ein
neues ARRAY [8] geschrieben werden, das eine String mit 2 Chars wird
zu einem String im Array of String gesetzt*)
IF ((strLength >= 2) AND (ii <= 8))
THEN
arrTempString[ii]:=TempString;
(*die hochzähl variable ii wird um 1 erhöht und das TempString
wird wieder auf '' (leer) gesetzt*)
ii:=ii+1;
TempString:='';
END_IF;
END_FOR;
(*Das Array mit den zusammengesetzten String wird nun als HEX- Wert behandelt
und in einen BYTE aus der ASCII Tabelle verwandelt*)
i:=1;
FOR i:=1 TO 8 BY 1
DO
HEX_TO_BYTE_1(
HEX:=arrTempString[i]
);
arrReceiveHEX[i]:=HEX_TO_BYTE_1.HEX_TO_BYTE;
END_FOR;
(*Einzelne Ausgangsbytes von den HEX Bytes werden rausgeführt*)
BYTE1:=arrReceiveHEX[1];
BYTE2:=arrReceiveHEX[2];
BYTE3:=arrReceiveHEX[3];
BYTE4:=arrReceiveHEX[4];
BYTE5:=arrReceiveHEX[5];
BYTE6:=arrReceiveHEX[6];
BYTE7:=arrReceiveHEX[7];
BYTE8:=arrReceiveHEX[8];
(*Kompletter Ablauf erledigt, weiterschaltbedinung wird auf TRUE gesetzt.*)
ENO:=TRUE;
END_IF;