Bytes aneinanderhängen

good_mike

Level-1
Beiträge
55
Reaktionspunkte
1
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Leute,

ich stehe irgenwie auf dem Schlauch.

Ich habe ein Array mit 5 Positionen.
T-Array.png
Jetz muss ich die 5 HEX Werte aneinanderreihen: 16#00000F0783 und diesen Hex-Wert dann in einen DEZ-Wert umrechnen.

Wie kann ich die Bytes zusammensetzten?

Vielen Dank

good_mike
 
Weiß zwar nicht, wie das genau bei Codesys funktioniert, aber eine Möglichkeit wäre:
Code:
[FONT=courier new]T1[0]*256^4      + T1[1]*256^3    + T1[2]*256^2 + T1[3]*256^1 + T1[4]*256^0
T1[0]*4294967296 + T1[1]*16777216 + T1[2]*65536 + T1[3]*256   + T1[4][/FONT]

Alternativ könnte man 8 Bits Linksschieben und verODERn (hab' leider nur Siemens-AWL):
Code:
L[FONT=Courier New] T1[0]
SLD 8
L T1[1]
OD
SLD 8
L T1[2]
OD
SLD 8
L T1[3]
OD
SLD 8
L T1[4]
OD
T #Ziel[/FONT]


Hex/Dez ist ja dann nur 'ne Darstellungsart oder brauchst Du BCD?
PS: Ein Doppelwort reicht beim letzten Schieben und VerODERn nicht mehr, also ist dann OD zumindest bei Siemens zu klein. Keine Ahnung, welche Möglichkeiten es da bei Codesys dann gibt.
 
Zuletzt bearbeitet:
Ich komme mit der Lösung von hucki nicht hin?!
Sorry, die Basis 8 war bei mir falsch. :oops:

Es sind zwar 8 Bit, aber damit 256 Möglichkeiten. Hatte ich auch zuerst. Keine Ahnung warum ich dann dachte: "Ne, sind ja bloß 8". Wahrscheinlich sahen die Zahlen so riesig aus.
Es muss also überall 256^x heißen:
Code:
[FONT=courier new]T1[0]*256^4        + T1[1]*256^3      + T1[2]*256^2    + T1[3]*256^1  + T1[4]*256^0
T1[0]*4294967296   + T1[1]*16777216   + T1[2]*65536    + T1[3]*256    + T1[4]
T1[0]*16#100000000 + T1[1]*16#1000000 + T1[2]*16#10000 + T1[3]*16#100 + T1[4][/FONT]

Jetzt dürfte es auch mit dem Excel-Ergebnis passen.
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Sehe das so wie Ralle. Da ich gestern ein ähnliches Problem hatte und das umrechnen musste.
Bei mir waren es vier Byte und ich habe sie in einer falschen Reihenfolge übergeben bekommen bzw anderes herum wie ich es erwartet hatte.
 
Der Grund warum 5 Hexwerte ist folgender:
Ich extrahiere aus einem Byte-Array (SML-Protokoll eines Stromzählers) welches über die RS232 gefüllt wird, die 5 Bytes welche den Messwert darstellen.

Ich werde heute abend mal die Lösung von hucki testen....

Solang schon mal vielen Dank!:D
 
Ein Stromzähler, der über eine Billiarde von kW zählen könnte (max. 256 * 4.294.967.296)?
Da ist doch bestimmt irgendwo 'ne Komma-Stelle zwischen, an der Du auch trennen solltest. Dann kommst Du auch mit 2 Doppelwörtern hin.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Kernkraftwerk ?!;);)
Ne, ist schon bei mir zuhause. Der Wert sind 1/10 Wh. Das wird "weiter vorne" in dem Orginal Array spezifiziert. Ich denke die Größe der Werte bzw. des Feldes ist in dem SML-Protokoll standartisiert. Das wird ja für die ganze "SmartMeter" Kommunikation genutzt. Vieleicht auch im Kernkraftwerk....:ROFLMAO:

Grüsse!
 
Dann wird ein UDINT nicht reichen. Nimm lieber eine LREAL-Variable.
Code:
VAR
   T1:ARRAY[0..4] OF BYTE;
   varReal:LREAL;
   varLoop:BYTE;
END_VAR

varReal:=0;
FOR varLoop:=0 to 4 DO
   varReal:=varReal*256.0+T1[varLoop];
END_FOR
 
Zurück
Oben