zu Marlobs Vorschlag:
Achtung, zusätzlich darauf achten, daß Step7-Strings 2 Byte "Kopfdaten" haben, die die maximale und die tatsächliche Länge des Strings enthalten. Am besten in einem DB diese Strings definieren und dann damit arbeiten, sonst streiken die IEC-Funktionen.
Alternative:
Es gäbe auch die Möglichkeit der direkten Umwandlung aus Ascii-Zeichen in Zahlen. Die Scii-ZEichencodierung enspricht in HEX dem Zahlenwert + 30hex
0 = 30hex
1 = 31hex
.
.
.
9 = 39hex
Du könntest also das ganze "zu Fuß" machen.
Bsp.:
'126385298473'
Im DB steht je eine Zahl als Ascii in einem Byte.
DB10.DBB0 Kopf Byte 0 Step7-String, falls als solcher schon abgespeichert.
DB10.DBB1 Kopf Byte 1 Step7-String, falls als solcher schon abgespeichert.
Der eigentliche String geht dann hier los, die Position kannst du dir ja aus deinem DB heraussuchen:
DB10.DBB2 --> 31hex
DB10.DBB3 --> 32hex
DB10.DBB4 --> 36hex
DB10.DBB5 --> 33hex
DB10.DBB6 --> 38hex
DB10.DBB7 --> 35hex
DB10.DBB8 --> 32hex
DB10.DBB9 --> 39hex
DB10.DBB10 --> 38hex
usw.
Wenn du die erste Zahl hernimmst:
31hex --> Tausender
32hex --> Hunderter
36hex --> Zehner
33hex --> Einer
Kannst du rechnen:
Ergebnis = (31hex-30hex) *1000 + (32hex-30hex) *100 + (36hex - 30hex) *10 + (33hex-30hex)
In AWL:
Code:
L 0
T #Ergebins1 //Int
L DB10.DBB2 //Tausender
L W#16#30 //30hex
-I
L 1000
*I
T #Ergebnis1
L DB10.DBB3 //Hunderter
L W#16#30 //30hex
-I
L 100
*I
L #Ergebnis1
+I
T #Ergebnis1
L DB10.DBB4 //Zehner
L W#16#30 //30hex
-I
L 10
*I
L #Ergebnis1
+I
T #Ergebnis1
L DB10.DBB5 //Einer
L W#16#30 //30hex
-I
L #Ergebnis1
+I
T #Ergebnis1 --> Endergebnis ist die erste Zahl
Diese Berechnung in einen FC gepackt, der die 4 Byte der Zahl als Input und das Ergebnis als Output hat.
Dann hast du aus 3 FC-Aufrufen die Zahlen und kannst das Ergebnis berechnen.