Step 7 [SCL] Indiziert auf einzelne Zeichen in einem String zugreifen

Medium9

Level-2
Beiträge
21
Reaktionspunkte
1
Zuviel Werbung?
-> Hier kostenlos registrieren
Moin zusammen.

Unter STEP7 Classic folgender SCL Code:

Code:
VAR
    TMP_STR: STRING;
    TMP_CHR: CHAR;
END_VAR

BEGIN
    TMP_STR := INT_TO_STRING(MyNumber);
    TMP_CHR := TMP_STR[1];
END_FUNCTION_BLOCK

Meldung beim Compilieren: "Ungültige Variable.", auf die Zeile "TMP_CHR := TMP_STR[1];"

Ich würde versuchen strukturiert auf eine Variable zuzugreifen, die keine strukturierte Variable ist.
Jedoch, wo auch immer ich nachschaue, wird diese Pascal-übliche Syntax in SCL verwendet.

Daran knoble ich nun schon seit über einer peinlichen Stunde, und bin etwas verzweifelt. Weiß jemand von euch evtl. was ich hier verkehrt mache?

Vielen vielen Dank schon mal vorab!!
 
Meldung beim Compilieren: "Ungültige Variable.", auf die Zeile "TMP_CHR := TMP_STR[1];"
das geht in Step7 classic SCL nicht (die KI verwechseln das mit TIA S7-1200/1500 ;) )

Bei S7-300/400 kann man so auf die einzelnen Zeichen eines String zugreifen:
Code:
VAR
    TMP_CHR : CHAR;
    TMP_STR : STRING[8];
//den String mit einer Struktur überlagern
    sTMP_STR AT TMP_STR : STRUCT
      mL : BYTE;
      aL : BYTE;
      Text : ARRAY[1..8] OF CHAR;
    END_STRUCT;
//oder nur mit einem Array überlagern
    aTMP_STR AT TMP_STR : ARRAY[-1..8] OF CHAR;
END_VAR

BEGIN
    TMP_CHR := sTMP_STR.Text[1];
    TMP_CHR := aTMP_STR[1];
 
Bei S7-300/400 kann man so auf die einzelnen Zeichen eines String zugreifen
PS: das geht auch variabel indiziert:
Code:
    TMP_CHR := sTMP_STR.Text[i];
    TMP_CHR := aTMP_STR[i];

    sTMP_STR.Text[i] := TMP_CHR;
    aTMP_STR[i] := TMP_CHR;

    sTMP_STR.Text[i] := 'A';
    TMP_CHR := aTMP_STR[i]; //liefert 'A'
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Da ich zum Glück weiß, wie viele Zeichen ich maximal zu erwarten habe, ist das Überlagern mit dem Array - insbesondere der Kniff die Indizes ins Negative gehen zu lassen - mega charmant! Coole Idee!
Der Compiler mag das zumindest schon mal, morgen komme ich hoffentlich dazu das im Live-System zu testen.

Danke!
 
Zurück
Oben