TIA Array of Char to String

Thesergant

Level-2
Beiträge
25
Reaktionspunkte
2
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen,
ich möchte aus einem Array of Char einen String machen. Bei den 1200er und 1500er habe ich gesehen, dass es dafür ein Chars_TO_String block gibt. Jedoch hat meine S7-319 diesen Block nicht. Wie könnte man das Problem sonst lösen? Eventuell mehrere Move Blöcke hintereinander schalten?

LG
 
Schau dir in der TIA-Hilfe das Format des Datentyps "String" an. Kopiere die Chars in den String (z.B. mit BLKMOV) ab dem dritten Byte und trage danach die maximale und die aktuelle Stringlänge in die ersten 2 Bytes des Strings ein.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Schau dir in der TIA-Hilfe das Format des Datentyps "String" an. Kopiere die Chars in den String (z.B. mit BLKMOV) ab dem dritten Byte und trage danach die maximale und die aktuelle Stringlänge in die ersten 2 Bytes des Strings ein.
Wo trage ich die maximale und die aktuelle Stringlänge ein?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
In #1 hast du geschrieben, daß es für deine SPS das CHAR_TO_STRING nicht gibt, und jetzt fragst du, ob du es verwenden kannst??

In SCL würde ich es mit einer AT-Überlagerung einer String-Variable mit einer Struktur (oder UDT) versuchen. Sinngemäß etwa so:
Code:
STRUCT S7String10
  MaxLen : BYTE;
  CurLen : BYTE;
  Text : STRING[10];
END_STRUCT;

MyStringStruct : S7String10;
MyString AT MyStringStruct : STRING[10];

#MyStringStruct.MaxLen := 10; //Maxlänge 10 in STRING eintragen
#MyStringStruct.CurLen := 5;  //aktuelle Länge 5 in STRING eintragen

#MyStringStruct.Text := #inputArrayChars; // (*)

#outSTRG := #MyString;

(*) Oder in einer Schleife die Zeichen des CHAR-Arrays einzeln in den String-Text kopieren:
Code:
FOR #i := 1 to 5 DO
  #MyStringStruct.Text[#i] := #inputArrayChars[#i];
END_FOR;

Vielleicht hat auch jemand eine richtige oder bessere Lösung für die S7-300 CPU?
 
In #1 hast du geschrieben, daß es für deine SPS das CHAR_TO_STRING nicht gibt, und jetzt fragst du, ob du es verwenden kannst??

In SCL würde ich es mit einer AT-Überlagerung einer String-Variable mit einer Struktur (oder UDT) versuchen. Sinngemäß etwa so:
Code:
STRUCT S7String10
  MaxLen : BYTE;
  CurLen : BYTE;
  Text : STRING[10];
END_STRUCT;

MyStringStruct : S7String10;
MyString AT MyStringStruct : STRING[10];

#MyStringStruct.MaxLen := 10; //Maxlänge 10 in STRING eintragen
#MyStringStruct.CurLen := 5;  //aktuelle Länge 5 in STRING eintragen

#MyStringStruct.Text := #inputArrayChars; // (*)

#outSTRG := #MyString;
Ist da nicht eine String Variable zu viel?
Also sollte in der Struct "S7String10" kein String[10], sondern Array[0..9] of Char stehen?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Schau dir in der TIA-Hilfe das Format des Datentyps "String" an. Kopiere die Chars in den String (z.B. mit BLKMOV) ab dem dritten Byte und trage danach die maximale und die aktuelle Stringlänge in die ersten 2 Bytes des Strings ein.
Muss man die BLKMOVs Bausteine hintereinander schalten in einem eigenen Datenbaustein?

Ich bin absoluter Neuling :/
 
Muss man die BLKMOVs Bausteine hintereinander schalten in einem eigenen Datenbaustein?
Die Unterscheidung in Programm und Daten scheint irgendwie in den Zeiten der OOP vielen nicht mehr verständlich zu sein.
Hilft es Dir zum Verständnis, wenn wir den BLKMOV-Baustein als Methode und den DatenBaustein als Ansammlung von Eigenschaften bezeichnen/einordnen?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Muss man die BLKMOVs Bausteine hintereinander schalten in einem eigenen Datenbaustein?
Das ist mir schon bewusst 😅
Also bei dieser Fragestellung, scheint die nicht bewusst zu sein was ein Datenbaustein im TIA ist, denn sonst würdest du nicht fragen ob du einen BLKMOV in einem Datenbaustein verwenden kannst, egal ob nun einfach oder mehrfach.
Die Unterscheidung in Programm und Daten scheint irgendwie in den Zeiten der OOP vielen nicht mehr verständlich zu sein.
Hilft es Dir zum Verständnis, wenn wir den BLKMOV-Baustein als Methode und den DatenBaustein als Ansammlung von Eigenschaften bezeichnen/einordnen?
Was @Heinileini dir damit sagen wollte, ist, dass es Bausteine gibt die nur als eine Art Ablage für Eigenschaften bzw. Informationen gibt, in diesen kannst du keine Methoden / Funktionen oder Programmcode ausführen.
 
Zurück
Oben