Zuviel Werbung? - > Hier kostenlos beim SPS-Forum registrieren

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 11

Thema: Bytes aneinanderhängen

  1. #1
    Registriert seit
    28.05.2009
    Beiträge
    38
    Danke
    4
    Erhielt 1 Danke für 1 Beitrag

    Standard


    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
    Zitieren Zitieren Bytes aneinanderhängen  

  2. #2
    Registriert seit
    27.06.2009
    Ort
    am Nordharz
    Beiträge
    3.717
    Danke
    443
    Erhielt 919 Danke für 740 Beiträge

    Standard

    Weiß zwar nicht, wie das genau bei Codesys funktioniert, aber eine Möglichkeit wäre:
    Code:
    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]
    Alternativ könnte man 8 Bits Linksschieben und verODERn (hab' leider nur Siemens-AWL):
    Code:
    L 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

    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.
    Geändert von hucki (23.05.2013 um 22:10 Uhr) Grund: 8 Bit ergeben 256 Möglichkeiten und nicht nur 8

  3. #3
    Registriert seit
    28.05.2009
    Beiträge
    38
    Danke
    4
    Erhielt 1 Danke für 1 Beitrag

    Standard

    Ich habe mal in Excel nachgebaut was ich für ein Ergenis erwarte:
    T-Array_xls.png

    Ich komme mit der Lösung von hucki nicht hin?!

    good_mike

  4. #4
    Registriert seit
    27.06.2009
    Ort
    am Nordharz
    Beiträge
    3.717
    Danke
    443
    Erhielt 919 Danke für 740 Beiträge

    Standard

    Zitat Zitat von good_mike Beitrag anzeigen
    Ich komme mit der Lösung von hucki nicht hin?!
    Sorry, die Basis 8 war bei mir falsch.

    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:
    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]
    Jetzt dürfte es auch mit dem Excel-Ergebnis passen.
    Geändert von hucki (23.05.2013 um 22:36 Uhr) Grund: Hex-Werte hinzugefügt

  5. #5
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.222
    Danke
    533
    Erhielt 2.698 Danke für 1.950 Beiträge

    Standard

    Hm, 5 Hexwerte, warum 5 ? In einem DWord oder einer DINT sind 32 Bit, also 4 Byte.
    Schau dir das mal an, mit der richtigen Wahl des Ziels (DInt oder DWord) könnte das auch funktionieren.

    http://www.sps-forum.de/beckhoff-cod...eintragen.html
    Gruß
    Ralle

    ... there\'re 10 kinds of people ... those who understand binaries and those who don\'t …
    and the third kinds of people … those who love TIA-Portal

  6. #6
    Registriert seit
    13.01.2013
    Beiträge
    627
    Danke
    26
    Erhielt 64 Danke für 59 Beiträge

    Standard

    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.

  7. #7
    Registriert seit
    28.05.2009
    Beiträge
    38
    Danke
    4
    Erhielt 1 Danke für 1 Beitrag

    Standard

    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!

  8. #8
    Registriert seit
    27.06.2009
    Ort
    am Nordharz
    Beiträge
    3.717
    Danke
    443
    Erhielt 919 Danke für 740 Beiträge

    Standard

    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.

  9. Folgender Benutzer sagt Danke zu hucki für den nützlichen Beitrag:

    good_mike (24.05.2013)

  10. #9
    Registriert seit
    28.05.2009
    Beiträge
    38
    Danke
    4
    Erhielt 1 Danke für 1 Beitrag

    Standard

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

    Grüsse!

  11. #10
    Registriert seit
    25.11.2010
    Ort
    OWL
    Beiträge
    750
    Danke
    27
    Erhielt 165 Danke für 143 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    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

  12. Folgender Benutzer sagt Danke zu StructuredTrash für den nützlichen Beitrag:

    good_mike (24.05.2013)

Ähnliche Themen

  1. Bytes 2 Real ?
    Von K-SYSTEM-D im Forum CODESYS und IEC61131
    Antworten: 1
    Letzter Beitrag: 03.07.2012, 07:06
  2. Real in zwei Bytes
    Von Mobi im Forum Sonstige Steuerungen
    Antworten: 10
    Letzter Beitrag: 20.08.2011, 10:14
  3. 4 Bytes an DP Slave schreiben
    Von TonyMono im Forum Simatic
    Antworten: 8
    Letzter Beitrag: 10.11.2008, 17:15
  4. Bytes in INT wandeln
    Von smartie im Forum Simatic
    Antworten: 12
    Letzter Beitrag: 27.07.2007, 17:24
  5. scl bytes in temp_var
    Von volker im Forum Simatic
    Antworten: 7
    Letzter Beitrag: 25.02.2007, 11:38

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •