TIA Einzelne Zahlen aus DINT berechnen

rar-101

Level-2
Beiträge
395
Reaktionspunkte
164
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen!

Ich komme aus der "S5" Welt mit etwas Kenntnissen in S7 und TIA. Jetzt bin ich aber etwas an meine Grenzen gestoßen...

Wie kann ich in SCL einzelne Zahlen aus einem z.B. DINT zur Berechnung bekommen?

Hintergrund ist, ich möchte mittels einer 1200er CPU und einem z.B. KTP400 Basic Werte verwenden um daraus eine Prüfziffer (EAN13 und/oder EAN8) berechnen.
Vielleicht hat jemand auch schon so ein Projekt gemacht und kann mir da Info´s zukommen lassen.

Aufbau einer Prüfziffer ist wie folgt:

z.B. EAN13: 4 250184 10651 7

4 * 1 = 4
2 * 3 = 6
5 * 1 = 5
0 * 3 = 0
1 * 1 = 1
8 * 3 = 24
4 * 1 = 4
1 * 3 = 3
0 * 1 = 0
6 * 3 = 18
5 * 1 = 5
1 * 3 = 3
Summe= 73 > Nächster Zehner 80 > 80 mod 73 = 7


Ich hoffe auf viele Anregungen und bedanke mich schon mal!

Gruß rar-101
 
Hallo,
wenn du dich mal mit deiner "Zahl" näher auseinandersetzt wirst du feststellen, dass diese sogar für einen DINT noch zu groß ist.
Aber wenn es sich hier um einen Barcode handelt dann würdest du diesen doch ohnehin als String (also als Zeichenkette) zur Verfügung gestellt bekommen.
Naja ... und bei einem String kannst du dir die einzelnen Stellen ganz einfach mit der Funktion MID herausschneiden ...

Gruß
Larry
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Wie kann ich in SCL einzelne Zahlen aus einem z.B. DINT zur Berechnung bekommen?
Mit "einzelne Zahlen" meinst Du vermutlich die einzelnen Ziffern einer Zahl?
Die Ziffern erhält/isoliert man, indem man die Ziffer zur Einer-Stelle verschiebt (Ganzzahl-Division durch Zehnerpotenz der Ziffernstelle) und dann die Einer-Stelle isoliert mit MOD 10:
Code:
iEiner     := MyDINT MOD 10;         // 1234 liefert --> 4
iZehner    := (MyDINT / 10) MOD 10;  // 1234 liefert --> 3
iHunderter := (MyDINT / 100) MOD 10; // 1234 liefert --> 2
...
(Das kann man auch schön mit Schleife und Ausgabe-Array machen.)

Aus einem String erhältst Du die Ziffern wie Larry Laffer erklärt hat: mit MID herausschneiden und von ASCII-Zeichen zu Dezimalwert wandeln mit STRG_VAL (oder "zu Fuß" durch Subtraktion von 48 (den Zahlenwert der Ziffer '0' abziehen)).

Harald
 
Zurück
Oben