Bytes in INT wandeln

smartie

Level-1
Beiträge
298
Reaktionspunkte
22
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen,

ich habe hier gerade ein kleiner, ultradringendes Problem, vielleicht kann mir ja jemand von euch weiterhelfen?

Ich lese mit einem Schnittstellenumsetzer einen Höhensensor aus und erhalte den gemessenen Abstand in 6 einzelnen Bytes.

Zur weiteren Berechnung benötige ich den gemessenen Wert jedoch in einem Integer.

Meine Frage ist nun wie geht das?

Wäre echt gut wenn mir jemand von euch weiterhelfen kannm müsste nämlich dringenst heute fertig werden.

Danke
 
Um zu helfen, mussen wir zuerst wissen welche Format die Bytes haben - ASCII, BCD...?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Wäre gut zu wissen, was die sechs Byte beinhalten.
ASCII, Real oder was steht da drin ?

Bei sechs Byte tippe ich schon fast auf Ascii.

UpS
Da war wieder einer schneller.......
 
Die sechs Bytes beinhalten jeweils eine einstellige Zahl, wenn ich mir diese in der Variablentabelle ansehe muss ich auf Zeichen umstellen.

Das müsste dann also ASCII sein, oder?
 
Spontan würde ich sagen.
Byte 0 mal 1
Byte 1 mal 10
Byte 2 mal 100
usw

...und dann zusammen addieren

Mal sehen was die anderen sagen wie es richtig geht...
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Wie der schwarze Kater schon sagt, wirst Du wahrscheinlich einen String mit 6 ASCII-Zeichen haben, den Du umsetzen musst.
Das heißt, die Multiplikation der Zahl mit dem Stellenwert ist richtig, nur musst Du vorher noch das ASCII-Zeichen in eine Zahl konvertieren.
L Zeichen
L W#16#F
UW
T Integer
Dazu muss man wissen, daß die Zahlen im ASCII-Code von Hex 30-39 gehen. Mit der Maskierung von Hex F auf das Zeichen schneidet man das obere Nibble der Zahl ab und erhält somit den Wert der Zahl.
Aus ASCII 35 wird dann Integer 5.
 
Die sechs Bytes beinhalten jeweils eine einstellige Zahl, wenn ich mir diese in der Variablentabelle ansehe muss ich auf Zeichen umstellen.

Das müsste dann also ASCII sein, oder?

Dann wird Ascii sein als in Hex werte von 30h = 0 bis 39h = 9.
Das Einfachste wäre der Vorschlag von schwarzer Kater, allerdings vorher jeweils 30h Abziehen um so in eine normale Zahl zu wandeln. Zweite Möglichkeit, die Bytes in eine String-Var kopieren in die ersten 2 Byte des Strings jeweils 06 reinschreiben und mit dem FC37 (String_DI) aus der IEC-Library wandeln.

Nachtrag: Oder siehe Blasterbock, der war schneller :ROFLMAO:.
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Laut ASCII-Tabelle gilt:

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

http://de.wikipedia.org/wiki/ASCII

Es sollte also folgendes funktionieren:

Code:
// BYTE 1 (Wert x 1)
 
      L     MB     1
      L     48
      -D    
      L     1
      *D    
      T     MD    10
 
// BYTE 2 (Wert x 10)
 
      L     MB     2
      L     48
      -D    
      L     10
      *D    
      L     MD    10
      +D    
      T     MD    10
 
// BYTE 3 (Wert x 100)
 
      L     MB     3
      L     48
      -D    
      L     100
      *D    
      L     MD    10
      +D    
      T     MD    10
 
// BYTE 4 (wert x 1.000)
 
      L     MB     4
      L     48
      -D    
      L     1000
      *D    
      L     MD    10
      +D    
      T     MD    10
 
// BYTE 5 (Wert x 10.000)
 
      L     MB     5
      L     48
      -D    
      L     10000
      *D    
      L     MD    10
      +D    
      T     MD    10
 
// BYTE 6 (Wert x 100.000)
 
      L     MB     6
      L     48
      -D    
      L     L#100000
      *D    
      L     MD    10
      +D    
      T     MD    10

Gruß Kai
 
Also Kai, ich muss schon sagen.
Deine Beiträge sind jedesmal super! Klasse beschrieben und dann auch gleich so detailiert. Die kann ich auch jedes mal voll nachvollziehen.
Ein großes Lob an Dich!


Musste ich jetzt einfach mal loswerden.:D
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ja kann das denn dann ASCII sein? Oder wandelt die Variablentabelle automatisch den Zahlenwert in das Zeichen?

Wenn man in der Variablentabelle das Anzeigenformat auf Zeichen stellt, dann wandelt die Variablentabelle den Zahlenwert automatisch in das zugehörige Zeichen um.

Es handelt sich hier also um ASCII-Zeichen.

Gruß Kai
 
Zurück
Oben