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

Ergebnis 1 bis 9 von 9

Thema: DINT HI and LOW Bytes tauschen

  1. #1
    Registriert seit
    16.11.2009
    Beiträge
    50
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo,

    ich habe das Problem das ich über einen DP/DP Koppler ein DINT auslesen soll, allerdings stehen bei mir ganz andere Werte in der DINT Variablen als auf der Siemens Steuerung. Was gehört habe ist das man HI und LOW Byte tauschen soll. Wie funktionert das beim DINT?
    Zitieren Zitieren DINT HI and LOW Bytes tauschen  

  2. #2
    Registriert seit
    29.07.2006
    Beiträge
    78
    Danke
    17
    Erhielt 5 Danke für 4 Beiträge

    Standard

    Versuche mal das ist aber ohne Garantie auf Funktion
    Code:
    FUNCTION B_IEEE32_TO_Dint : DINT
    VAR_INPUT
    	BYTE_0:BYTE;
    	BYTE_1:BYTE;
    	BYTE_2:BYTE;
    	BYTE_3:BYTE;
    END_VAR
    VAR
     IN : ARRAY[0..3] OF BYTE;
          PTDInt:POINTER TO DINT;
    
    END_VAR
    IN[0]:=BYTE_3;
    IN[1]:=BYTE_2;
    IN[2]:=BYTE_1;
    IN[3]:=BYTE_0;
    PTDInt:=ADR(IN);
    B_IEEE32_TO_Dint := PTDInt^;

  3. #3
    HK09 ist offline Benutzer
    Themenstarter
    Registriert seit
    16.11.2009
    Beiträge
    50
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Können sie mir kurz erklären wie die Funktion funktioniert?

  4. #4
    Registriert seit
    29.07.2006
    Beiträge
    78
    Danke
    17
    Erhielt 5 Danke für 4 Beiträge

    Standard

    Code:
    DintWert:=B_IEEE32_TO_Dint(Byte_Empfang[1]
    Byte_Empfang[2],Byte_Empfang[3],Byte_Empfang[4]);
    Byte_Empfang[1] von Siemens PLC
    Byte_Empfang[2] von Siemens PLC
    Byte_Empfang[3] von Siemens PLC
    Byte_Empfang[4] von Siemens PLC

    Wie gesagt ist nicht getestet

  5. #5
    Registriert seit
    29.07.2010
    Ort
    Bangsare Thailand
    Beiträge
    37
    Danke
    1
    Erhielt 9 Danke für 8 Beiträge

    Standard

    Ist dises OK ?
    Intelformat :=ROL(MotorolaFormat,16);

  6. #6
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.163
    Danke
    921
    Erhielt 3.286 Danke für 2.655 Beiträge

    Standard

    Zitat Zitat von Bjornf Beitrag anzeigen
    Ist dises OK ?
    Intelformat :=ROL(MotorolaFormat,16);
    Nein, so einfach ist es leider nicht.
    Damit änderst Du die Byte-Reihenfolge von 1234 zu 3412, Ziel ist aber 4321.

    Harald
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  7. #7
    Registriert seit
    29.07.2010
    Ort
    Bangsare Thailand
    Beiträge
    37
    Danke
    1
    Erhielt 9 Danke für 8 Beiträge

    Standard

    Sche.... zu wenig nachgedacht ,es ist ja DINT habe halt statt 8 16 hingefuegt
    (*VAR
    IntelFormat INT :=16#01020304;
    Teil1 :INT;
    Teil2 :INT;
    MotorolaFormat: DINT;
    END_VAR
    ************************************ *)
    Teil1:=ROL(DINT_TO_INT (IntelFormat),8 ;
    Teil1:=SHL(Teil1,16);
    Teil2:=ROL(DINT_TO_INT(SHR(IntelFormat ,16)),8 ;
    MotorolaFormat:=Teil1+Teil2;

    P.S Falls Beckhoff , In system manager gibts "Tausche Lobyte und Hibyte" bzw HiWord Loword wenn Daten auf Eingaenge kommen.
    Geändert von Bjornf (29.05.2011 um 21:22 Uhr)

  8. #8
    Registriert seit
    29.07.2010
    Ort
    Bangsare Thailand
    Beiträge
    37
    Danke
    1
    Erhielt 9 Danke für 8 Beiträge

    Standard

    Die Smile's hatmein text geaendert aber Ich habe nicht auf (: ) D aufgepasst
    Teil1 , 2 und IntelFormat sollen DINTsein
    Geändert von Bjornf (29.05.2011 um 21:52 Uhr)

  9. #9
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.163
    Danke
    921
    Erhielt 3.286 Danke für 2.655 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Wenn das Tauschen der Bytereihenfolge mit Rotieren sein soll, dann würde ich das so machen:
    Code:
    OutVar := DWORD_TO_DINT((ROL(DINT_TO_DWORD(InVar),8) AND 16#00FF00FF)
                         OR (ROR(DINT_TO_DWORD(InVar),8) AND 16#FF00FF00));
    Harald
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet
    Zitieren Zitieren Bytereihenfolge tauschen durch rotieren  

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

    Bjornf (30.05.2011)

Ähnliche Themen

  1. Bausteine tauschen
    Von rogseut im Forum Programmierstrategien
    Antworten: 1
    Letzter Beitrag: 26.04.2011, 21:31
  2. S5 CP143 tauschen
    Von flatlinerjb im Forum Simatic
    Antworten: 14
    Letzter Beitrag: 29.10.2009, 10:08
  3. CPU 2xx tauschen.
    Von EnemyNr1 im Forum Simatic
    Antworten: 9
    Letzter Beitrag: 19.11.2008, 09:53
  4. CPU 943 tauschen
    Von alonely01 im Forum Simatic
    Antworten: 5
    Letzter Beitrag: 22.11.2006, 16:45
  5. tauschen: CPU 315
    Von Henk im Forum Suche - Biete
    Antworten: 0
    Letzter Beitrag: 15.12.2004, 18:41

Lesezeichen

Berechtigungen

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