Char umwandeln in Integer

viperserver

Level-1
Beiträge
21
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Ihr,
ich hab folgendes Problem.
Zur Zeit lade ich von einem Handscanner Daten (Ascii) in einen DatenBaustein (DB).
Zu Scannen ist 1.500 oder 500 oder 2.300 als Barcode.
In meinem DB schreibt er mir dann aber in jede Zeile ein Zeichen
0
1
_
5
0
0

(Zeile im DB ist als "Char" deklariert)

Mein Problem ist bloß das ich das so nicht gebrauchen kann, sondern als komplete Zahl ("1500" oder "500" oder "2300"). Am besten wäre es wenn es ein INT oder eine REAL Zahl wäre.

Leider bin ich in der SPS nicht so der Checker und hab keine ahnung wie ich das am besten umwandeln kann, ob ich das am besten davor mache bevor ich das in den DB schreibe oder hinterher.

Ich hoffe ihr könnt mir helfen.

Gruß Dennis
 
Hallo,
ich würde das Ganze in einen String einlesen und dann mit der Funktion aus der Systembibliothek (IEC-Funktionen) "STRING_I" (FC38) in einen INT-Wert wandeln lassen.
Es gäbe da auch noch "STRING_DI" für DINT-wandeln (FC37).

Gruß
LL
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Also ich hab das schon mal Probiert, aber das geht nicht! Hab an dieser Lösung auch schon herum gemacht.
Aber was mir dazu noch aufgefallen ist, was mache ich mit dem Unterstrich "_"? den Kann die Funktion mir ja nicht Umwandeln.

Ist es normal das ich in deinem DB Strings nicht beobachten kann?

aber trotzdem vielen Dank
Nur kurz zur Info.
Ich habe eine cou 315 2dp und eine cp340 über der ich die Daten per Handscanner einlese. (zur Zeit in den DB). Den Wert wie oben beschrieben möchte ich als Int oder Real haben z.B 1500.
 
Hallo,
erstens:
- warum funktioniert die Geschichte mit dem String nicht bei dir ?
Vielleicht stellst du mal dein bisheriges Programm hier ein - dann läßt sich vielleicht auch was lösen ...

zweitens:
- der Unterstrich ist immer zwischen der Tausender und der Hunderter-Stelle ? Wäre bei einem String auch kein Problem, da es dort noch die Funktion FIND gäbe für "Zeichen(-kette) in einem String finden" bzw. die Funktion DELETE, die ein (oder mehrere) Zeichen an/ab einer Position löscht ...

Gruß
LL
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Zur Zeit lade ich von einem Handscanner Daten (Ascii) in einen DatenBaustein (DB).
Zu Scannen ist 1.500 oder 500 oder 2.300 als Barcode.
In meinem DB schreibt er mir dann aber in jede Zeile ein Zeichen
0
1
_
5
0
0

(Zeile im DB ist als "Char" deklariert)

Mein Problem ist bloß das ich das so nicht gebrauchen kann, sondern als komplete Zahl ("1500" oder "500" oder "2300"). Am besten wäre es wenn es ein INT oder eine REAL Zahl wäre.

Hier mal ein kurzes Programmbeispiel:

Code:
// ASCII-Tabelle
//
// CHAR '0' = HEX 30 = DEZ 48
// CHAR '1' = HEX 31 = DEZ 49 
// CHAR '2' = HEX 32 = DEZ 50 
// CHAR '3' = HEX 33 = DEZ 51 
// CHAR '4' = HEX 34 = DEZ 52 
// CHAR '5' = HEX 35 = DEZ 53 
// CHAR '6' = HEX 36 = DEZ 54 
// CHAR '7' = HEX 37 = DEZ 55 
// CHAR '8' = HEX 38 = DEZ 56 
// CHAR '9' = HEX 39 = DEZ 57 
 
      AUF   DB   200
 
      L     0
      T     MD   200                    // Ergebnis
 
      L     DBB    0                    // Wert x 10000
      ITD   
      L     L#48
      -D    
      L     L#10000
      *D    
      T     MD   200                    // Ergebnis
 
      L     DBB    1                    // Wert x 1000
      ITD   
      L     L#48
      -D    
      L     L#1000
      *D    
      L     MD   200
      +D    
      T     MD   200                    // Ergebnis
 
      L     DBB    3                    // Wert x 100
      ITD   
      L     L#48
      -D    
      L     L#100
      *D    
      L     MD   200
      +D    
      T     MD   200                    // Ergebnis
 
      L     DBB    4                    // Wert x 10
      ITD   
      L     L#48
      -D    
      L     L#10
      *D    
      L     MD   200
      +D    
      T     MD   200                    // Ergebnis
 
      L     DBB    5                    // Wert x 1
      ITD   
      L     L#48
      -D    
      L     MD   200
      +D    
      T     MD   200                    // Ergebnis

Gruß Kai
 
Ich schreibe das Programm im FUP.
von mir aus könnte ich dir das Programm schicken Larry Lafer.
Das mit dem String ist so, er macht da einfach gar nichts... Ich bin mir eigentlich ziehmlich sicher, das es daran liegt, das da der Unterstrich "_" drin ist...
Weil er mir das ja auch so vom Handscanner in den DB ließt.
0
1
_
5
0
0
und er ja immer das Ziffern will!
 
Zuletzt bearbeitet:
Ich schreibe das Programm im FUP.
von mir aus könnte ich dir das Programm schicken Larry Lafer.

.. wenn dann hier einstellen (siehe Beispiel von Kai).
Ich denke aber, dass die FUP-Geschichte schon meinem Vorschlag entgegensteht. Ich glaube nicht, dass ich das in FUP schreiben könnte.

@Kai:
Ich glaube, dein Vorschlag funktioniert bei Zahlen unter 1000 nicht, da dann der Tausender-Punkt an der Position wegfällt und die vorderen Stellen vermutlich auch ...

Gruß
LL
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich glaube, dein Vorschlag funktioniert bei Zahlen unter 1000 nicht, da dann der Tausender-Punkt an der Position wegfällt und die vorderen Stellen vermutlich auch ...

@Viperserver,

wie sehen Deine Zahlen < 1000 im DB aus? :confused:

DBB0 = '0'
DBB1 = '0'
DBB2 = '.'
DBB3 = '9'
DBB4 = '8'
DBB5 = '7'

oder so:

DBB0 = '9'
DBB1 = '8'
DBB2 = '7'
DBB3 = ''
DBB4 = ''
DBB5 = ''

Gruß Kai
 
Leider hab ich ein Problem mit AWL. Ich kenn mich damit mal 0 Aus



Also ich speichere das in den DB41 es kommt vom FC41 über den P_RCV (1 Netzwerk)
 

Anhänge

  • Technikerarbeit_02_01_2008.zip
    518,7 KB · Aufrufe: 116
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
@Viperserver,

wie sehen Deine Zahlen < 1000 im DB aus? :confused:

DBB0 = '0'
DBB1 = '0'
DBB2 = '.'
DBB3 = '9'
DBB4 = '8'
DBB5 = '7'

oder so:

DBB0 = '9'
DBB1 = '8'
DBB2 = '7'
DBB3 = ''
DBB4 = ''
DBB5 = ''

Gruß Kai


so wie bei dir das Oberste. Außer anstatt dem Punkt kommt bei mir ein "_"
 
...
in welchem FB holst du dir den mit dem FB2 die Stückzahl aus dem Scanner ?
Du scannst in deinem Beispiel ja noch ein paar andere Sachen außerdem ein. Da bin ich auf die Schnelle nicht so durchgestiegen ...

Gruß
LL
 
Zuviel Werbung?
-> Hier kostenlos registrieren
...?
Du machst einfach einen neuen FC, schaltest die Ansicht auf AWL um und dann gibst du den Code-Vorschlag von Kai so ein, wie der ihn gepostet hat. Mehr brauchst du da nicht dran können.
Für die Zukunft würde ich dir aber auf jeden Fall empfehlen, dich in AWL einzuarbeiten. In der Praxis kommst du so noch am Weitesten ...;)

Gruß
LL

Nachsatz:
so kompliziert ist der Vorschlag von kai auch nicht, dass man nicht verstehen könnte, was er im Einzelnen programmiert hat ...
 
Zuletzt bearbeitet:
@viperserver
Nimm doch den FC207 von OHGN, muß der zwingend in FUP sein? Du kannst den Code in eine leere Quelle einfügen, dann übersetzen. Anschließend hast du einen FC207, an den kannst du die 4 relevanten Char (ohne den Unterstrich) einzeln als INPUT antragen, als Ergebnis kommt dein INT raus. Was willst du mehr?
 
...?
Du machst einfach einen neuen FC, schaltest die Ansicht auf AWL um und dann gibst du den Code-Vorschlag von Kai so ein, wie der ihn gepostet hat. Mehr brauchst du da nicht dran können.
Für die Zukunft würde ich dir aber auf jeden Fall empfehlen, dich in AWL einzuarbeiten. In der Praxis kommst du so noch am Weitesten ...;)

Gruß
LL


ja und wo speichert er mir das dann hin? und bzw. wo hollt er mir die daten dann raus.. ich sollte ihm ja sagen das er vom db 41 das hollen soll oder nicht? und wo er es hinspeichern soll.

ja danke das mit awl hab ich schon von vielen gehört. in der firma wo ich die technikerarbeit schreibe, wird aber alles in FUP programmiert.
 
Zurück
Oben