Step 7 Frage zur Stringverarbeitung

Transistorfips

Level-2
Beiträge
89
Reaktionspunkte
4
Zuviel Werbung?
-> Hier kostenlos registrieren
Kann man eine Zeichenkette die nicht in einem Datenbaustein, Merkerbereich etc. liegt in einen String kopieren?

In der Programmiersprache C ist zum Beispiel folgendes möglich:
Code:
char str[80]; //reserviert 80 Bytes
Zur Verdeutlichung: sprintf (gelesen: s + print + f) = schreibt formatiert eine Zeichenkette in einen String
Schreibe ohne Speicherzuweisung: "Der Wert von Pi = " und füge formatiert die Konstante M_PI dazu
Code:
sprintf(str, "Der Wert von Pi = %f", M_PI);  // %f = Fließpunktzahl
puts(str); // gibt den String auf dem Ausgabegerät aus

So wie es aussieht kann SFC20, BLKMOV an der Stelle nicht weiterhelfen.
 
Deine Frage passt nicht zu deinem Code-Beispiel - was willst du also wissen ...?

Erstmal generell :
Du kannst in eine String-Variable definieren und in ihrer Nutzlänge festlegen. (myString : String[80] ; )
Dies kann in einem DB geschehen, in einem FB im Temp- oder Stat-Bereich oder in einem FC oder OB im Temp-Bereich. Im Merkerbereich würde das prinzipiell auch gehen - macht aber eigentlich so recht keinen Sinn ...
Was willst du nun mit dem String machen ?

Gruß
Larry
 
Strings mit bis zu vier Zeichen kannst du direkt in den Akku laden. Z.B L 'Test'. Ob es Sinn macht sei dahingestellt...

Du kannst zwar 4 Zeichen (Byte) laden, aber das ist kein String.

Ein String in der S7 hat 2 Byte am Anfang zur Definition der max. Zeichenanzahl und der aktuellen Zeichenanzahl.
In der Praxis bekommt man oft bei der Kopplung mit Fremdsystemen irgendwelche Byte-Arrays mit festen Längen oder mit Trennzeichen (CR,LF, ...).
Will man diese in der S7 als String weiterarbeiten, dann kopiert man diese eben in einen S7-String ab Byte 3 und passt in Byte 2 die aktuelle Länge an.
Das Kopieren kann mit Blockmove erfolgen.
Hilfreich ist bei sowas eine VIEW (AT).
Hier mal ein Beispiel von Siemens:
https://support.industry.siemens.com/cs/document/21947834/wie-kann-der-verwaltungs-und-byteanteil-eines-strings-mit-dem-s7-scl-schl%C3%BCsselwort-at-ausgelesen-werden-?dti=0&lc=de-WW

Gruß
Blockmove
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Kann man eine Zeichenkette die nicht in einem Datenbaustein, Merkerbereich etc. liegt in einen String kopieren?
[...]
So wie es aussieht kann SFC20, BLKMOV an der Stelle nicht weiterhelfen.
Ich vermute mal Du meinst ob man eine String-Konstante in einen String kopieren kann.

- SFC20 BLKMOV kann nicht mit String-Konstanten umgehen, Quell- und Ziel-Strings müssen im Speicher liegen
- die Bibliotheks-String-Funktionen (*) können wie BLKMOV nur mit Strings im Speicher umgehen
- in AWL/FUP/KOP gibt es keine String-Konstanten
- in SCL kann man String-Konstanten an String-Variablen zuweisen
- in SCL kann man die String-Funktionen (*) mit String-Konstanten verwenden, der SCL-Compiler erstellt dann temporäre String-Variablen im Speicher

(*) String-Funktionen: CONCAT, LEFT, RIGHT, MID, FIND, ...

Harald
 
Zurück
Oben