# Bitzugriff in WinCC VBS



## Anfängerproggi (26 Juli 2007)

Moinsen,

ich habe in WinCC ein Visual Basic Script programmiert, in dem ich mehrere Variablen miteinander vergleiche und "umsortiere". Bei diesen Variablen möchte ich nun aber gerne auf einzelne Bits zugreifen. Wie komme ich an diese ran?


----------



## Bender25 (26 Juli 2007)

z.b. so 

Dim Tag
Tag = HMIRuntime.Tags("Deine Variable").Read

If (Tag And 8 ) <>0 then ' 8 steht z.b. für Bit 3 
'Anweisung
else
' Anweisung

End If

Set Tag = Nothing


----------



## Anfängerproggi (26 Juli 2007)

Das sieht ja schon mal gut aus. Aber wenn ich das bei circa 200 Variablen bei jedem Bit machen muss, ist das ziemlich aufwendig... 

Geht es zufällig auch kürzer?


----------



## xhasx (27 Juli 2007)

Shift and mask!!!


----------



## Anfängerproggi (30 Juli 2007)

Shift and Mask klingt super, aber was ist das jetzt??


----------



## Bender25 (30 Juli 2007)

Hmm also nochmal. Du hast ca. 200 Variablen. Aus diesen willst du jeweils ein Bit auslesen. Was soll passieren wenn das Bit "True" ist... 
Oder müssen alle 200 eine 1 haben.

Beschreib doch mal bischen genauer was du machen willst. (Kann aber nicht versprechen, das ich weiter helfen kann)


----------



## Anfängerproggi (30 Juli 2007)

Also...ich habe ein Haufen Messwerte(circa 200) die in Bytes abgelegt werden. Diese Messwerte sind in einem Datenbaustein. Nun habe ich ein Skript geschrieben, in dem immer bestimmte Bits abgefragt werden müssen. Es gibt in jeder Variable ein Bit, das anzeigt, ob ein Sensor Netzspannung hat bzw. in Betireb ist. Das ist das Bit 3 der Variable.

Nun steht im Skript: if Variable1 Bit 3 =1 then Variable1Betrieb=1 else Variable1Betrieb=0

Das ganze Circa also 200 mal und teilweise muss ich dann noch auf andere Bits der Variablen zugreifen.

z.B. Variable2 Bit2 =1 oder Variable3 Bit2 dann Ergebnis=1

Wie schreibe ich nun den Bittzugriff?


----------



## Bender25 (30 Juli 2007)

hm da du auf 200 Variablen zugreifen mußt. Sprich lesen denke ich bleibt dir nichts anders als diese 200 einzeln im skript zu schreiben.
Andere möglichkeit wäre dein DB in Rohdaten einlesen.

Mit diesen Rohdaten kannst du glaub ich 256 Byte einlesen. Bin mir aber nicht mehr ganz sicher.... Aber du sparst dir halt nur das einlesen der 200 Variablen. das zuweisen denke ich mußt du trozdem einzeln schreiben


Schreiben kannst du in VB z.b. so..

Tag = HMIRuntime.Tags("Deine_Variable").Read

HMIRuntime.Tags("Deine_Variable").Write (Tag Or &H4) ' z.b. Bit 2 schreiben


Hier noch die einzelnen Bits aufgelistet

Bit 0 Bit 1   Bit 2   Bit 3   Bit 4    Bit 5    Bit 6     Bit 7
&H1   &H2    &H4     &H8     &H10    &H20     &H40     &H80


----------



## Anfängerproggi (30 Juli 2007)

Ja sauber danke...

Ich habe sie vorher alle ausgelesen und am Ende des Skriptes schreib ich wieder alle. Wusste nur das Mit dem &H1 nicht. Dankeschön...


----------



## Bender25 (30 Juli 2007)

No Prob.


----------

