WinCC flexible 2008: Bitweise Verknüpfung von Doppelwortvariablen in VB

Da_Basco

Level-1
Beiträge
104
Reaktionspunkte
21
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

ich habe ein Problem mit folgendem VB Skript Code:

Code:
If (statdbd4 And (2^26)) And (statdbd14 And 2^29) Then
                var4 = True
Else
                var4 = False
End If
var4 soll auf True gesetzt werden sobald das 26 Bit im Doppelwort statdbd4 und das 29 Bit im Doppelwort statdbd14 "1" haben.
Warum funktioniert der Code so nicht? var4 bleibt immer False obwohl beide Bits gesetzt sind. Es muss zu 99% am Syntax der UND Verknüpfung der beiden bitweisen Verknüpfungen liegen. :confused:

Wenn ich nur eine Doppelwortvariable in der IF Anweisung benutze funktioniert es.
Also so:

Code:
If (statdbd4 And (2^26)) Then
  var4 = True
Else
                var4 = False
End If

Vielen Dank für eure Antworten!
 
Hallo,
es liegt daran, dass die Byte-Reihenfolge in der Betrachtung verdreht ist. Wenn du das Bit 26 im DWord setzt dann ist es nicht 2^26 in der Visu.
Das Dword wäre dann so aufgebaut (für die Visu) :
LowWord , Highword
Bit 7..0 , Bit 15..8 , Bit 23..16 , Bit 31..24

Gruß
Larry
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Larry,

das ist nicht richtig. Wenn ich die entsprechenden Bits des DWords in der SPS setze, kommen diese auch richtig im Skript an. Es funktioniert ja lediglich diese UND Verknüpfung der beiden Klammerausdrücke nicht.
Code:
If (statdbd4 And (2^26)) And (statdbd14 And 2^29) Then
 
Das funkioniert. Danke schonmal. Aber warum muss es jetzt auf einmal so aussehen wenn es mit einer Bedingung auch ohne <>0 geht? :?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
... dann geht auch :
Code:
var4 = ((statdbd4 And (2^26))<>0) And ((statdbd14 And 2^29)) <>0)
ohne if und Konsorten ...

Zu deiner letzten Frage :
Die Verknüpfung "statdbd4 And (2^26)" bringt als Ergebnis entweder "0" (wenn das Bit nicht gesetzt ist) oder "2^26" (wenn das Bit gesetzt ist) zurück.
Ich denke mal, das VB-Script den Wert "2^26" nicht als TRUE interpretiert ...
Die Verknüpfung "((statdbd4 And (2^26))<>0)" kann als Ergebnis aber nur entweder TRUE oder FALSE haben ...

Gruß
Larry
 
Zurück
Oben