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

Ergebnis 1 bis 8 von 8

Thema: BYTE in WORD (High Byte, Low Byte)

  1. #1
    Registriert seit
    25.01.2012
    Beiträge
    125
    Danke
    28
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo Forum,

    ich stehe gerade richtig auf dem Schlauch...

    Ich habe eine WORD-Variable, z.B. 16#1901

    Jetzt möchte ich diese Variable so abändern, dass nur das High Byte im WORD geändert wird und das Low Byte unberührt bleibt.

    Sprich: Ich möchte, z.B. ein Byte 16#04, so dort einfügen, dass das WORD am Ende so aussieht --> 16#0401.
    Allerdings will mir das Ganze nicht gelingen. Mit Bitweise Schieben/Rotieren habe ich es schon probiert. Es scheitert dann aber an der Verknüpfung, da das Low Byte 16#01 immer mit beeinflusst wird

    Viele Grüße
    TimeOUT
    Software:
    STEP 7 5.5 + SP4 + HF6
    TIA Portal V13 SP1 Update 4
    TwinCAT V3.1
    Hardware:
    S7-400 CPU 414-3 PN/DP
    CPU 1516-3 PN/DP
    CX5020-0110
    Zitieren Zitieren BYTE in WORD (High Byte, Low Byte)  

  2. #2
    Registriert seit
    13.12.2011
    Beiträge
    1.420
    Danke
    147
    Erhielt 161 Danke für 152 Beiträge

    Standard

    In zwei Schritten ginge es.
    Erst das Byte mit AND 16#00FF auf 0 setzen und dann mit OR 16#0400 setzen.

    Von irgendwas mit Internetzugang gesendet.

  3. Folgender Benutzer sagt Danke zu oliver.tonn für den nützlichen Beitrag:

    TimeOUT (17.03.2016)

  4. #3
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.189
    Danke
    923
    Erhielt 3.292 Danke für 2.661 Beiträge

    Standard

    Zuerst das H-Byte mit AND 16#FF auf 0 bringen (herauslöschen) und danach den Neuwert in das H-Byte hinein-ODERn oder -addieren.
    Den Neuwert zur Position des H-Byte bringen gibt es mehrere Möglichkeiten: SHL 8, * 256, vermutlich gibt es auch ein SWAP.
    etwa so
    Code:
    wOut := (wIn AND 16#FF) OR (SHL(bNeuwert, 8) ;
    // oder
    wOut := (wIn AND 16#FF) OR (bNeuwert * 256) ;
    Harald
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  5. Folgender Benutzer sagt Danke zu PN/DP für den nützlichen Beitrag:

    TimeOUT (17.03.2016)

  6. #4
    TimeOUT ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    25.01.2012
    Beiträge
    125
    Danke
    28
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Danke Ihr Zwei,

    genau so hat es funktioniert, vielen Dank!
    Software:
    STEP 7 5.5 + SP4 + HF6
    TIA Portal V13 SP1 Update 4
    TwinCAT V3.1
    Hardware:
    S7-400 CPU 414-3 PN/DP
    CPU 1516-3 PN/DP
    CX5020-0110

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

    Standard

    Dir sollte in Codesys doch auch der Direktzugriff aufs Byte zur Verfügung stehen (wie Slice beim TIA):
    Code:
    myWord.B1:= B#16#04;
    oder so ähnlich.
    Bin nicht so Codesys fest.

  8. #6
    Registriert seit
    09.11.2007
    Ort
    Rhein Main (Darmstadt)
    Beiträge
    663
    Danke
    61
    Erhielt 112 Danke für 80 Beiträge

    Standard

    In der Codesys Hilfe ist ein schönes Beispiel, wie man das unter Verwendung des Datentyps UNION löst.
    Als Freelancer immer auf der Suche nach interessanten Projekten.

  9. #7
    Registriert seit
    28.03.2014
    Ort
    Schweiz
    Beiträge
    112
    Danke
    34
    Erhielt 15 Danke für 12 Beiträge

    Standard

    Falls du eine Beckhof Steuerung hast, müsste es auch mit MEMCPY funktionieren

    Als destAdr nimmst du dein Word, und je nach dem welches Byte du möchtest, addierst du zuerst noch +1 dazu, kopierst deinen gewünschten Wert und gibst als Länge 1 Byte an.

    Also z.B. memcpy(adr("DeinWord")+1, 04, 1)

    Aber natürlich ist der Slice Zugriff schöner.

  10. #8
    Registriert seit
    13.12.2011
    Beiträge
    1.420
    Danke
    147
    Erhielt 161 Danke für 152 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo manseluk,
    die Funktion gibt es bei vielen CoDeSys basierten Steuerungen, heißt eventuell nur etwas anders. Allerdings sollte der TE maximal 1 zur Adresse des Words hinzuaddieren, sonst schießt er über das Ziel hinaus und schreibt sonstwo hin.

    Von irgendwas mit Internetzugang gesendet.

Ähnliche Themen

  1. Wie kann man Hi-Byte Low-Byte spiegeln?
    Von Klärmolch im Forum Simatic
    Antworten: 23
    Letzter Beitrag: 11.12.2010, 20:58
  2. High-Low Byte tauschen
    Von kilic im Forum Programmierstrategien
    Antworten: 24
    Letzter Beitrag: 30.10.2008, 15:08
  3. Antworten: 4
    Letzter Beitrag: 08.07.2008, 08:52
  4. Antworten: 5
    Letzter Beitrag: 02.10.2005, 21:10
  5. HI-Byte und LOW-Byte
    Von Danielegger im Forum Simatic
    Antworten: 5
    Letzter Beitrag: 27.08.2004, 00:41

Lesezeichen

Berechtigungen

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