Bit im Word abfragen

johnij

Level-1
Beiträge
823
Reaktionspunkte
75
Hallo,
es geht mir nämlich darum, in einem VBS in Wincc Fflexible 2007 ein Bit
in einem Word_Datentyp abzufragen.
Ich habe hier gesucht, die Lösung war aber nicht richtig
( Beisp (Abfragen ob das Bit 0 vom Meldung gesetzt ist):

Meldung: Word
Also

if SmartTags("Meldung") and 2^0 then
.......
End If
)
Beim übersetzten habe ich kein Fehler bekommen.
Als ich das Projekt ins Panel übertragen habe, habe ich versucht den Skript durch ein Button zu aktivieren. Ich habe leider (im Meldepuffer)
vom MP277 10 die Meldung: Fehler 'Type mismatch' .....
d.h. es wurde gemekert, dass der Variable einen anderen Datentyp zugeordnet ist als hat.

Danke im Vorraus

johnij
 
Das ist von der Syntax her auch nicht korrekt ...
Es müßte heißen :
Code:
if (SmartTags("Meldung") and 2^0) <> 0 then
.......
End If
 
Ich habe gerade mal in meinen Scripten nachgesehen ... Ich habe nirgendwo "2^0" oder so stehen, sondern anstelle dessen dann "&H01" für die Maskierung. Es wäre also möglich, dass diese Funktion in diesem Zusammenhang so nicht funktioniert - teste das mal bitte ...

Gruß
LL
 

ich versuche es zu testen.
Ich finde es so scheisse, dass einige hier im Forum so ein Quatsch (2^x) :twisted: schreiben

Ich habe was unter

http://support.microsoft.com/kb/113476/de

http://www.aboutvb.de/khw/artikel/khwkeypressed.htm


gefunden.
 
Zuletzt bearbeitet:
Ich finde es so scheisse, dass einige hier im Forum so ein Quatsch (2^x) :twisted: schreiben ...

Wie ich schon sagte, weiß ich nicht sicher, ob das funktioniert oder nicht. Im Standard-VB-Script (unter Excel z.b.) funktioniert das so - ich weiß nur nicht, ob Flex das auch alles so schluckt ...

Anmerkung dazu noch :
Wie groß wird denn dein "x" bei der "2^x"-Geschichte ?
 
Also, an Deinem ^x wirds wohl nicht liegen, es sei denn Dein x ist vom Datentyp her kein Integer.

Ich habe mal das umgekehrte programmiert, also ein Bit gesetzt.

Folgendes funktioniert einwandfrei:

Value = 2^Bit_Nr
S_Bit_In_Int = Variable Or Value

Ist Deine Variable "Meldung" auch auf der SPS Seite vom Typ Word?

Ansonsten versuch doch mal, so wie bei mir erstmal einen Zwischenwert zu bilden, evtl. so:

Value = 2^Bit_Nr
MyBitTest = Variable And Value
 
warum denn immer mit Scripts ?

Für solche Fälle (Bit im Wort abfragen) benutze ich die Systemfunktion "SchiebenUndMaskieren"
 
... ich denke nicht, dass das ein konstruktiver Beitrag zu diesem Thread ist ...
@ Larry Laffer
ich stimme dir 100% zu.

@ tiefflieger
vbmenu_register("postmenu_138750", true);

So eine Antwort von Dir bringt mir gar nix.

Also liebe Forumer: immer auf die sache eingehen

Gruß johnij
 
Zuletzt bearbeitet:
Also,
bei Wincc flex gibt es kein reines VB, sondern eine Mischung zwsichen Microsoft und Siemens.
In VB gibt es keinen Datentyp Word. Ich habe deshalb mit Byte gearbeitet.
Es funktioniert.

Gruß johnij
 
habe ich nicht verstanden ... was funktioniert nun ...?

Hast du die Variable in der Visu oder im Script deklariert ?
Wenn in der Visu und du ein WORD haben willst, so heißt das dann UINT (unsigned Integer oder so ähnlich). Versuch ggf. mal das ...

Gruß
LL
 

Hallo,
ich mache mal ein Systemtest.
Man kann aber keine Maskierung bei einem UINT
Bei einem datentyp: Byte ist es möglich das zu erreichen (in einem Skrip).

Gruß johnij
 
Das geht auch nur über nen Typecast im Script

Dim TempLong, Ergebnis, BitStelle, TestUint

TestUint = 10 ' Hier einfach ne Testzuweisung
TempLong = CLng(TestUint) ' Typecast
BitStelle = 5 ' Hier 5. Bit...

ShiftAndMask TempLong, Ergebnis, BitStelle, &H0001

If Ergebnis Then
' Mach was du magst wenn's True ist...
End if
 
Zuletzt bearbeitet:
Ich habe das jetzt noch mal getestet ...
Code:
if (UINT_Test_Var and 2^14) = 2^14 then
'  hier die Aktion
End If
... funktioniert bei mir ...

Gruß
LL
 
Klar geht auch. Den ^ Operator gibt's ja.
Ich hab's ja nur hier so hingeschrieben weil ihr den Beitrag mit dem ShiftAndMask so runtergemacht habt...
 
Für die Nutzung dieser Website sind Cookies erforderlich. Du musst diese akzeptieren, um die Website weiter nutzen zu können. Erfahre mehr…