(********************************************************* Sucht den Anfang des #Empfangen Strings, decodiert *
* Decodiert diesen in Bits, int und Real *
* *
* Die erste Zahl vom Abschnitt bool, int und Real ist *
* die anzahl der Variablen die der Abschnitt hat *
* *
* Erstellt am: 24.12.2018 R. Schweingruber *
* Letzte Aenderung: *
********************************************************)
IF (NOT #Empfangen) THEN
RETURN;
END_IF;
// Falls der erste Eintrag kein S ist -> Stoerung
IF (#Puffer[0] <> 'S') THEN
RETURN;
END_IF;
// Falls der letzte Eintrag kein E ist -> Stoerung
IF (#Puffer[8191] <> 'E') THEN
RETURN;
END_IF;
#index := 2;
// Laenge Bereich auslesen
FOR #i := #index TO 8190 DO
IF (#Puffer[#index + 1] <> ';') THEN
#zahl := CONCAT(IN1 := #zahl, IN2 := CHAR_TO_STRING(IN := #Puffer[#index]));
#index += 1;
ELSE
#zahl := CONCAT(IN1 := #zahl, IN2 := CHAR_TO_STRING(IN := #Puffer[#index]));
#index += 1;
EXIT;
END_IF;
END_FOR;
STRG_VAL(IN := #zahl,
FORMAT := W#16#0000,
P := 1,
OUT => #anzahlBereich);
#index += 1;
#zahl := '';
// Bool auswerten
FOR #i := 0 TO (#anzahlBereich - 1) DO
#Daten."Bool"[#i] := false;
IF (#Puffer[#index] = '1') THEN
#Daten."Bool"[#i] := true;
END_IF;
#index += 2;
END_FOR;
#zahl := '';
// Laenge bereich auslesen
FOR #i := #index TO 8190 DO
IF (#Puffer[#index + 1] <> ';') THEN
#zahl := CONCAT(IN1 := #zahl, IN2 := CHAR_TO_STRING(IN := #Puffer[#index]));
#index += 1;
ELSE
#zahl := CONCAT(IN1 := #zahl, IN2 := CHAR_TO_STRING(IN := #Puffer[#index]));
#index += 1;
EXIT;
END_IF;
END_FOR;
STRG_VAL(IN := #zahl,
FORMAT := W#16#0000,
P := 1,
OUT => #anzahlBereich);
#zahl := '';
#index += 1;
// Integer auswerten
FOR #i := 0 TO (#anzahlBereich - 1) DO
// suchen bis +1
#zahl := '';
FOR #j := #index TO 8190 DO
IF (#Puffer[#index + 1] <> ';') THEN
#zahl := CONCAT(IN1 := #zahl, IN2 := CHAR_TO_STRING(IN := #Puffer[#index]));
#index += 1;
ELSE
#zahl := CONCAT(IN1 := #zahl, IN2 := CHAR_TO_STRING(IN := #Puffer[#index]));
#index += 1;
EXIT;
END_IF;
END_FOR;
// zahl gefunden
STRG_VAL(IN := #zahl,
FORMAT := W#16#0000,
P := 1,
OUT => #Daten."Int"[#i]);
END_FOR;
#zahl := '';
// Laenge bereich auslesen
FOR #i := #index TO 8190 DO
IF (#Puffer[#index + 1] <> ';') THEN
#zahl := CONCAT(IN1 := #zahl, IN2 := CHAR_TO_STRING(IN := #Puffer[#index]));
#index += 1;
ELSE
#zahl := CONCAT(IN1 := #zahl, IN2 := CHAR_TO_STRING(IN := #Puffer[#index]));
#index += 1;
EXIT;
END_IF;
END_FOR;
STRG_VAL(IN := #zahl,
FORMAT := W#16#0000,
P := 1,
OUT => #anzahlBereich);
#zahl := '';
#index += 1;
// Real auswerten
FOR #i := 0 TO (#anzahlBereich - 1) DO
// suchen bis +1
#zahl := '';
FOR #j := #index TO 8190 DO
IF (#Puffer[#j + 1] <> ';') THEN
#zahl := CONCAT(IN1 := #zahl, IN2 := CHAR_TO_STRING(IN := #Puffer[#j]));
#index += 1;
ELSE
#zahl := CONCAT(IN1 := #zahl, IN2 := CHAR_TO_STRING(IN := #Puffer[#j]));
#index += 1;
EXIT;
END_IF;
END_FOR;
// zahl gefunden
STRG_VAL(IN := #zahl,
FORMAT := W#16#0000,
P := 1,
OUT => #Daten."Real"[#i]);
END_FOR;
#zahl := '';
// Laenge bereich auslesen
FOR #i := #index TO 8190 DO
IF (#Puffer[#index + 1] <> ';') THEN
#zahl := CONCAT(IN1 := #zahl, IN2 := CHAR_TO_STRING(IN := #Puffer[#index]));
#index += 1;
ELSE
#zahl := CONCAT(IN1 := #zahl, IN2 := CHAR_TO_STRING(IN := #Puffer[#index]));
#index += 1;
EXIT;
END_IF;
END_FOR;
STRG_VAL(IN := #zahl,
FORMAT := W#16#0000,
P := 1,
OUT => #anzahlBereich);
#zahl := '';
// Strings auswerten
FOR #i := 0 TO (#anzahlBereich - 1) DO
// suchen bis +1
#zahl := '';
FOR #j := #index TO 8190 DO
IF (#Puffer[#j + 1] <> ';') THEN
#zahl := CONCAT(IN1 := #zahl, IN2 := CHAR_TO_STRING(IN := #Puffer[#j]));
#index += 1;
ELSE
#zahl := CONCAT(IN1 := #zahl, IN2 := CHAR_TO_STRING(IN := #Puffer[#j]));
#index += 1;
EXIT;
END_IF;
END_FOR;
// Zahl gefunden
#Daten."String"[#i] := #zahl;
END_FOR;