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

Ergebnis 1 bis 10 von 10

Thema: BitMaske mit Doppelword oder HEX erstellen

  1. #1
    Registriert seit
    02.05.2012
    Beiträge
    49
    Danke
    3
    Erhielt 1 Danke für 1 Beitrag

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Liebe Forum Mitglieder,

    Ich möchte aus einem externen Teilnehmer die Fehler über eine Bit-Maske auslesen.

    Mein Ansatz scheint nicht zu funktionieren, kann mir ev. jemand erklären weshalb?

    Code:
    bTest:= ((DWORD_TO_BYTE(dwVision)) AND (DWORD_TO_BYTE(dwVisionErrorCode))) = (DWORD_TO_BYTE(dwVisionErrorCode));


    In einem zweiten Schritt möchte ich eigentlich direkt auf auf eine Hex Konstante vergleichen
    Zum Beispiel so;
    Code:
    bTest:= (DWORD_TO_BYTE(dwVision) AND 16x0010) = 16x0010;
    Danke schon mal vorab für Eure Unterstützung
    Zitieren Zitieren BitMaske mit Doppelword oder HEX erstellen  

  2. #2
    Registriert seit
    02.05.2012
    Beiträge
    49
    Danke
    3
    Erhielt 1 Danke für 1 Beitrag

    Standard

    Kommt Zeit kommt Rat......

    Code:
    bTest:=(dwVision AND 16#100) = 16#100;
    Warum einfach wenn auch kompliziert geht.....;-

  3. #3
    Registriert seit
    25.06.2008
    Ort
    Blomberg/Lippe
    Beiträge
    1.293
    Danke
    51
    Erhielt 130 Danke für 124 Beiträge

    Standard

    Also bei Konstanten kenn ich das nur mit der Raute also 16#10.
    DWORD_TO_BYTE nimmt ja dann das niederwertigste Byte. Willst du auch das haben?

    Edit: man sollte sich mit dem Antworten auch beeilen.
    Geändert von Mobi (27.04.2014 um 11:21 Uhr)
    Gruß
    Mobi


    „Das Einfache kompliziert zu machen ist alltäglich. Das Komplizierte einfach zu machen –
    das ist Kreativität“ (Charles Mingus).

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

    Standard

    Dass mit der Konstante ist gut. Genau das brauche ich

    Kannst du DWORD_TO_BYTE genauer erläutern?
    Was meinst du mit dem niederwertigstem Bit?

    Danke und Gruss

  5. #5
    Registriert seit
    25.06.2008
    Ort
    Blomberg/Lippe
    Beiträge
    1.293
    Danke
    51
    Erhielt 130 Danke für 124 Beiträge

    Standard

    Z.B. aus 16#EEFFABCD wird dann 16#CD. D.h. wenn du ein bestimmtes Byte haben willst musst du vorher shiften oder mit .B0, .B1, .B2 oder .B3 das benennen.
    Gruß
    Mobi


    „Das Einfache kompliziert zu machen ist alltäglich. Das Komplizierte einfach zu machen –
    das ist Kreativität“ (Charles Mingus).

  6. Folgender Benutzer sagt Danke zu Mobi für den nützlichen Beitrag:

    carepicha (27.04.2014)

  7. #6
    Registriert seit
    02.05.2012
    Beiträge
    49
    Danke
    3
    Erhielt 1 Danke für 1 Beitrag

    Standard

    alles klar.....
    Byte = 8 Bit
    Datentyp DWORD = 32 Bit = 4 Byte
    und dann nimmt es einfach niederwertigste.........

    gut zu wissen.

    Gruss

  8. #7
    Registriert seit
    29.03.2004
    Beiträge
    5.735
    Danke
    143
    Erhielt 1.685 Danke für 1.225 Beiträge

    Standard

    Ich würde nach der Und-Verknüpfung mit der Bitmaske lediglich auf ungleich Null prüfen, das lässt sich vom Compiler oftmals besser optimieren.

  9. #8
    Registriert seit
    02.05.2012
    Beiträge
    49
    Danke
    3
    Erhielt 1 Danke für 1 Beitrag

    Standard

    Also so?

    Code:
    bTest:= (DWORD_TO_BYTE(dwVision) AND 16x0010) <> 0 
    Gibt das immer das gleiche wie?
    Code:
    bTest:= (DWORD_TO_BYTE(dwVision) AND 16x0010) = 16x0010;
    Gruss

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

    Standard

    Das DWORD_TO_BYTE kannst Du weglassen, denn mit der UND-Verknüpfung blendest Du eh schon alle anderen 31 Bit aus!
    Außerdem geh# ich mal davon aus, das die Kollegen Recht haben und auch bei CoDeSys die Raute # statt des x zur Trennung des Zahlensystems und des Wertes benutzt wird. Und führende Nullen kann man sich wohl in den meisten Zahlensystemen sparen:

    Code:
    btest:= (dwVision AND 16#10) <> 0
    Geändert von hucki (27.04.2014 um 14:14 Uhr) Grund: Klammer vergessen und soll da nicht falsch stehen bleiben

  11. #10
    Registriert seit
    16.01.2009
    Beiträge
    24
    Danke
    1
    Erhielt 9 Danke für 9 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von hucki Beitrag anzeigen
    Code:
    btest:= dwVision AND 16#10 <> 0
    Fehlt eine Klammer: btest:= (dwVision AND 16#10) <> 0;

    Ist übrigens auch das gleiche wie
    btest:=dwVision.4; (sofern du immer nur 1 Bit kontrollierst)

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

    hucki (27.04.2014)

Ähnliche Themen

  1. Baustein mit IN & OUT Paramtern, oder INOUT`erstellen?
    Von Bensen83 im Forum CODESYS und IEC61131
    Antworten: 13
    Letzter Beitrag: 23.11.2012, 13:08
  2. Antworten: 2
    Letzter Beitrag: 11.10.2012, 16:51
  3. Doppelword umdrehen
    Von Deep Blue im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 15.02.2008, 09:18
  4. Antworten: 17
    Letzter Beitrag: 08.10.2007, 12:19
  5. Ausgänge mit Bitmaske ansteuern
    Von Anonymous im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 08.10.2003, 11:16

Lesezeichen

Berechtigungen

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