TIA Letzten 6 Stellen eines Strings auslesen / rauskopieren

DennisBerger

Level-2
Beiträge
474
Reaktionspunkte
63
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,
ich lese mit einem QR Code Scanner eine 40 stellige int Variable ein,
diese würde ich nun mit dem S_Conv Baustein von DINT in String umwandeln.

Ich benötige die letzten 6 Zeichen des erzeugten Strings (Seriennummer eines Artikels).

Nun dachte ich, dass ich mit dem Baustein Right String und L = 6 diese Zeichen in einen neuen String kopieren kann.
RIGHT: Rechte Zeichen einer Zeichenkette lesen
Mit der Anweisung Right String extrahieren Sie die letzten L Zeichen einer Zeichenkette am Eingangsparameter IN. Die Anzahl der zu extrahierenden Zeichen legen Sie am Parameter L fest. Die extrahierten Zeichen werden am Ausgangsparameter OUT in Format (W)STRING ausgegeben.

Ist das was ich mache so korrekt oder gehe ich das ganze falsch an bzw wie wäre die Lösung von euch?

danke
 
Zuletzt bearbeitet:
Moin,
klar wäre das eine Lösung - eine gute sogar. Alternativ kannst du dir die einzelnen Zeichen auch mit bspw. einer rückwärts zählenden For-Schleife selbst umkopieren. Aber ich würde intuitiv auch zu deiner Lösung tendieren - weil die Right-Funktion direkt den String-Header korrigieren sollte.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
ich lese mit einem QR Code Scanner eine 40 stellige int Variable ein,
diese würde ich nun mit dem S_Conv Baustein von DINT in String umwandeln.
Das kann so nicht stimmen. Mir ist keine S7-SPS bekannt, die 40-stellige Int-Variablen kann. Daher gibt es auch keine Konvertierfunktion von 40-stellig DINT zu String.
Das was Du einliest ist vermutlich ein CHAR-Array oder BYTE-Array.

PS: falls bei Deinem Einlesen tatsächlich irgendwo ein DINT entsteht, dann kann man die letzten 6 Ziffern ganz einfach durch "MOD 1000000" erhalten.

Harald
 
Es gibt auch die String Befehle.

Wenn die Daten in eine 40-Stellige Char-Array befindet, kann man sie in ein STRING umwandeln mittels Chars_TO_Strg.
Und dann kann man z.B mittels RIGHT die 6 'letzten' Ziffern in eine weitere STRING kopieren.
Schlussendlich kann man mittels STRG_VAL die 6 Ziffern in einen Zahlenwert umwandeln.
 
Das kann so nicht stimmen. Mir ist keine S7-SPS bekannt, die 40-stellige Int-Variablen kann. Daher gibt es auch keine Konvertierfunktion von 40-stellig DINT zu String.
Das was Du einliest ist vermutlich ein CHAR-Array oder BYTE-Array.

PS: falls bei Deinem Einlesen tatsächlich irgendwo ein DINT entsteht, dann kann man die letzten 6 Ziffern ganz einfach durch "MOD 1000000" erhalten.

Harald
du hast natürlich recht, vorher war das was der QR Code rausgibt gerade mal 6 Zeichen.. und die Variable war als INT angelegt.
Nun wurde der QR Code auf 40 Zeichen erweitert, das heisst ich müsste auch den Variablentyp ändern.

Das mit MOD1000000 erschliesst sich mir noch nicht so ganz. Hilfst mir da ein wenig nach?
danke
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Mod 100000 auf einen Datentyp mit mehr als 6 Stellen angewendet, gibt dir quasi nur deine gesuchten 6 Stellen wieder. Also bspw. 123456789 Mod 100000 = 456789 (also die letzen 6 Stellen).
 
Hier etwas genauer erklärt, falls du die Funktion auch anderweitig mal benutzen willst.

Mit Hilfe der MOD-Funktion kann man den Rest bei einer Berechnung ermitteln. Am besten erklären kann man das anhand eines Beispiels: du hast zB die Zahl 50 und du willst den MOD7 ermitteln, dann heißt dass das die Funktion schaut wie oft 7 in 50 "reinpasst" und wie viel Rest übrig bleibt. Bei dem Beispiel wäre das Ergebnis 1 da 7 genau 7-Mal in 50 "reinpasst" und 1 übrig bleibt. Wenn du ein bisschen weiterdenkst kannst du dann auch verstehen warum MOD1000000 dir die letzten 6 Ziffern als Zahl ausgeben. Beispiel dafür: du hast die Zahl 123456789, MOD1000000 würde dann sehen das 1000000 da genau 123-Mal "reinpasst" und 456789 bleibt als Rest übrig welcher dann auch das Ergebnis wäre
 
Etwas ist falsch hier. Es gibt keinen 40-Stelligen Zahlenwert.
DINT geht von -2147483648 zu +2147483647. Das ist ungf. 10 Stellen plus Vorzeichen.
LINT geht von -9223372036854775808 zu +9223372036854775807. Das ist ungf. 19 Stellen plus Vorzeichen.
Grösser gibt es nicht auf ein S7-1500.
Ich kann mir nur vorstellen, dass die Daten als einen STRING oder ein ARRAY of CHARs vorliegt. Das ist auch was man von ein Code Scanner erwartern wurde.

edit: MOD in S7-1500 wird auf DINTs verwendet.
 
Zuletzt bearbeitet:
Zurück
Oben