# Bytes in INT wandeln



## smartie (27 Juli 2007)

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


----------



## RMA (27 Juli 2007)

Um zu helfen, mussen wir zuerst wissen welche Format die Bytes haben - ASCII, BCD...?


----------



## jabba (27 Juli 2007)

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.......


----------



## smartie (27 Juli 2007)

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?


----------



## schwarzer_kater (27 Juli 2007)

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...


----------



## blasterbock (27 Juli 2007)

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.


----------



## Ralle (27 Juli 2007)

smartie schrieb:


> 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 .


----------



## schwarzer_kater (27 Juli 2007)

smartie schrieb:


> 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?


 
Ja kann das denn dann ASCII sein? Oder wandelt die Variablentabelle automatisch den Zahlenwert in das Zeichen?


----------



## Kai (27 Juli 2007)

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:


```
// 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


----------



## schwarzer_kater (27 Juli 2007)

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.


----------



## Kai (27 Juli 2007)

schwarzer_kater schrieb:


> 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!


 
Danke schön. :-D 

Gruß Kai


----------



## Kai (27 Juli 2007)

schwarzer_kater schrieb:


> 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


----------



## smartie (27 Juli 2007)

Danke für die Tipps, funktioniert einwandfrei.


----------

