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

Results 1 to 6 of 6

Thread: Bytes eines DWORDS rotieren

  1. #1
    Join Date
    21.11.2018
    Posts
    8
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Default


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hi,

    Optimierungsfrage - Aus meinem Endgerät kommt die Reihenfolge BC 0B 00 00, ich benötige die Umkehrung nach 00 00 0b bc.

    Habe dazu folgenden Code, der funktioniert. Da ich nach wie vor erste Schritte gehe - gibt es bessere Möglichkeiten für diese Rotation/Umkehrung der byteOrder?
    Ich nutze in meinem Haus CodeSys 2.3 auf einer Wago. Dieses Beispiel habe ich in CodeSys 3.5 mit Raspberry gemacht.

    val ist UDINT
    sDataBuff Array [0..200] OF DWORD (aus der Socket werden mehrere Werte gelesen, fürs Beispiel ist nur Index 0 interessant)

    Code:
    wLowWord := DWORD_TO_WORD(sDataBuff[0]);
    wHighWord := DWORD_TO_WORD(SHR(sDataBuff[0], 16));
    wLowWord := ROL(wLowWord,8);
    wHighWord := ROL(wHighWord,8);
    val := (65536 * wLowWord + wHighWord);

    Herzlichen Dank!
    Reply With Quote Reply With Quote Answered: Bytes eines DWORDS rotieren  

  2. "OSCAT Function SWAP_BYTE2
    Code:
    This function reverses the byte order in the dword.
    [...]
    Swap_Byte2 := (ROR(in,8) AND 16#FF00FF00) OR (ROL(in,8) AND 16#00FF00FF);
    Harald"


  3. #2
    Join Date
    27.06.2009
    Location
    am Nordharz
    Posts
    4,289
    Danke
    529
    Erhielt 1,109 Danke für 903 Beiträge

    Default

    Bei Siemens gibt' die Anweisung SWAP zum Tauschen der Bytereihenfolge.
    Ich vermute mal, dass was in der Art auch bei Codesys vorhanden ist.

  4. #3
    Join Date
    20.08.2003
    Posts
    281
    Danke
    38
    Erhielt 32 Danke für 31 Beiträge

    Default

    in der oscat.lib existiert die Funktion SWAP_BYTE2, damit ist dein Problem gelöst
    Last edited by Rayk; 10.11.2019 at 16:55. Reason: ...Fehler

  5. #4
    Join Date
    22.06.2009
    Location
    Sassnitz
    Posts
    14,156
    Danke
    1,145
    Erhielt 4,162 Danke für 3,365 Beiträge

    Default

    OSCAT Function SWAP_BYTE2
    Code:
    This function reverses the byte order in the dword.
    [...]
    Swap_Byte2 := (ROR(in,8) AND 16#FF00FF00) OR (ROL(in,8) AND 16#00FF00FF);
    Harald
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  6. #5
    philipp75 is offline Neuer Benutzer
    Themenstarter
    Join Date
    21.11.2018
    Posts
    8
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Default

    herzlichen Dank!

  7. #6
    Join Date
    22.06.2009
    Location
    Sassnitz
    Posts
    14,156
    Danke
    1,145
    Erhielt 4,162 Danke für 3,365 Beiträge

    Default


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hinweis: um sicher zu gehen daß sich der Wert von "in" zwischen den beiden Zugriffen nicht ändert, muß das DWORD "in" by-Value (als Kopie) an den Code übergeben werden, oder falls Zugriff by-Reference (auf die Adresse des DWORD), dann muß es in der selben Task beschrieben werden.

    Soll der Code sicher richtig funktionieren, ohne diese Randbedingungen beachten zu müssen, dann besser:
    Code:
    tdw := in;  //in-Parameter auf lokale Variable umspeichern
    Swap_Byte2 := (ROR(tdw,8) AND 16#FF00FF00) OR (ROL(tdw,8) AND 16#00FF00FF);
    Harald
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

Similar Threads

  1. Step 7 Einzelne Bytes eines Arrays auslesen bzw. berechnen
    By knollsimi in forum Simatic
    Replies: 11
    Last Post: 15.11.2014, 19:06
  2. Step 7 Schieben/Rotieren
    By Thom69 in forum Simatic
    Replies: 3
    Last Post: 10.10.2014, 11:26
  3. 5x 5 Bits rotieren
    By tobl2002 in forum Simatic
    Replies: 9
    Last Post: 24.10.2008, 12:17
  4. Replies: 12
    Last Post: 19.11.2007, 11:06
  5. einzelne Bit eines Bytes ändern
    By Farinin in forum HMI
    Replies: 10
    Last Post: 29.09.2006, 11:24

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •