Bit im Word abfragen

johnij

Level-1
Beiträge
823
Reaktionspunkte
75
Zuviel Werbung?
-> Hier kostenlos registrieren
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 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:
Zuviel Werbung?
-> Hier kostenlos registrieren
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
user_offline.gif
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
 
Zuviel Werbung?
-> Hier kostenlos registrieren
:confused: 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
 
:confused: 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 :rolleyes:
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:
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...
 
Zurück
Oben