Step 7 Nummern im String verändern

sps_mitte

Level-2
Beiträge
172
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen,
Ich würde gerne in einer Variable vom Typ STRING[24] nur die Nummern im Inhalt ändern wollen. Die Sonderzeichen sind außen vor. Wie kann man das am besten machen? Jemand eine gute Idee?

Typ STRING[24] mit dem Inhalt '"+4917112345678" '

Steuerung S7-300.
 
Der Variable einfach einen anderen/gewünschten String zuweisen?
Oder meinst Du, daß man aus einer gegebenen Telefonnummer eine andere Telefonnummer "berechnen" kann? Das müsstest Du mal genauer erklären.

Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Einfach im EA Feld die Nummer ändern. also aus 491712345678 wird die 4917187654321. Im Feld soll aber am Ende die '"+4917187654321" ' stehen. Inkl. den Gänsefüßchen.
 
Du könntest mit 2 Strings arbeiten: einen String für das EA-Feld nur mit den Ziffern, und für den der die Telefonnummer verwendet, einen zweiten String übergeben, der aus "+" und der Ziffernfolge aus dem EA-Feld und den Anführungszeichen besteht.

Oder prüfen, ob die Ziffernfolge mit '+' beginnt, und wenn nicht, dann das '+' vorne einfügen. Womit wird die Telefonnummer/Ziffernfolge eingegeben?
In der SPS könntest Du die Stringfunktionen CONCAT oder INSERT verwenden, in AWL kann man auch schnell was mit BLKMOV basteln.

Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Du könntest mit 2 Strings arbeiten: einen String für das EA-Feld nur mit den Ziffern, und für den der die Telefonnummer verwendet, einen zweiten String übergeben, der aus "+" und der Ziffernfolge aus dem EA-Feld und den Anführungszeichen besteht.
(...)
In der SPS könntest Du die Stringfunktionen CONCAT oder INSERT verwenden
In der SPS zwei Strings: String_Nummer (für das EA-Feld, nur Ziffern), String_komplett (für die Weitergabe mit Sonderzeichen)
In der SPS eventuell prüfen, ob in String_Nummer nur Ziffern '0' ... '9' enthalten sind und ggf. alle anderen Zeichen entfernen. Dann die Sonderzeichen hinzufügen, z.B. in SCL:
Code:
String_komplett := CONCAT(IN1 := '$22+', IN2 := String_Nummer, IN3 := '$22');
//oder so geht's auch
String_komplett := CONCAT(IN1 := '"+', IN2 := String_Nummer, IN3 := '"');

Harald
 
Was ich nicht so genau verstehe ist, das der DB Inhalt in der Variablentabelle diese Anfangsfolge besitzt:
Die erste ist so korrekt, die zweite zusammengesetzte beginnt mit HEX18 und dann HEX10 Ascii Zeichen.

Zeichenfolge.PNG
 
Zuviel Werbung?
-> Hier kostenlos registrieren
S7-Strings haben immer 2 Byte "Vorzeichen", im ersten Byte steht die maximale Länge des Strings, im zweiten die tatsächliche Länge. Also die ersten zwei Byte in der Variablentabelle getrennt als in DEZ beobachten. Die tatsächlichen Zeichen gehen erst bei DB31.DBB2 bzw. DB11.DBB18 los.
 
Die erste ist so korrekt, die zweite zusammengesetzte beginnt mit HEX18 und dann HEX10 Ascii Zeichen.
Das werden die beiden Header-Bytes eines S7-String sein
Zuerst die (projektierte) Maximallänge 24 Zeichen (16#18) und danach die aktuelle Länge 16 Zeichen (16#10).
Schau Dir in der Step7-Hilfe das Format des Datentyps STRING an.

Harald
 
Was ich nicht so genau verstehe ist, das der DB Inhalt in der Variablentabelle diese Anfangsfolge besitzt:
Die erste ist so korrekt, die zweite zusammengesetzte beginnt mit HEX18 und dann HEX10 Ascii Zeichen.
Was ich nicht so genau verstehe, ist:
die beide ersten Zeichen, die dort jeweils vor dem String angezeigt werden, sind das die LängenBytes der Strings?
Und wenn ja, warum überschneiden sich die beiden Strings? Denn HEX18 würde die StringLänge 24 Zeichen und HEX 10 würde die belegte Länge 16 bedeuten.

S7-Strings haben immer 2 Byte "Vorzeichen", im ersten Byte steht die maximale Länge des Strings, im zweiten die tatsächliche Länge.
Der Begriff "Vorzeichen" ist leider seeehr irreführend. Im Rest Deines Satzes sagst Du ja, was drinsteht.
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Was ich nicht so genau verstehe, ist:
die beide ersten Zeichen, die dort jeweils vor dem String angezeigt werden, sind das die LängenBytes der Strings?
Und wenn ja, warum überschneiden sich die beiden Strings? Denn HEX18 würde die StringLänge 24 Zeichen und HEX 10 würde die belegte Länge 16 bedeuten.
Ich seh zwei unterschiedliche DB, da überschneidet sich erstmal nix.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
EA Feld im WinCC 7.4
Bei WinCC könntest du das auch alles im passenden Ereignis z.B. bei Eingabe abgeschlossen über ein Script im WinCC selber realisieren. Wobei es für den Benutzer verwirrend sein könnte, wenn nach dem Drücken von Enter seine Eingabe modifiziert wird.
 
Bei WinCC könntest du das auch alles im passenden Ereignis z.B. bei Eingabe abgeschlossen über ein Script im WinCC selber realisieren.
In WinCC ist das auf jeden Fall effizienter realisierbar. Auch die Prüfung, ob nur Ziffern eingegeben wurden und eventuell das automatische Entfernen unzulässiger Zeichen.

Wobei es für den Benutzer verwirrend sein könnte, wenn nach dem Drücken von Enter seine Eingabe modifiziert wird.
In WinCC muß nicht die Eingabe modifiziert werden (höchstens um unzulässige Zeichen zu entfernen). Der mit den Sonderzeichen ergänzte String muß in WinCC nicht im EA-Feld dargestellt werden, sondern kann ein separates nicht angezeigtes Tag sein.

Harald
 
Es war die maximale Länge des Strings. Nachdem ich beide Strings gleich lang hatte, wurde die Büchse der Pandora geöffnet und das Geheimnis gelüftet. Vielen Dank an alle Beteiligten.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Bei WinCC könntest du das auch alles im passenden Ereignis z.B. bei Eingabe abgeschlossen über ein Script im WinCC selber realisieren. Wobei es für den Benutzer verwirrend sein könnte, wenn nach dem Drücken von Enter seine Eingabe modifiziert wird.
Wer was falsch macht, muss mit der Reaktion leben :) Wobei das hier natürlich nicht so dramatisch ist. Keine Safety.
 
Zurück
Oben