Bedienfreigabe per VB

Bender25

Level-2
Beiträge
584
Reaktionspunkte
20
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen

Dank "KaffeeSaufenderKamin" und seine Programm Beispiel bin ich heute
einen rießigen Schritt weiter gekommen. "Vielen Dank KaffeeSaufenderKamin für dein Projekt." :D :D

Hab mir ein schönes Eingabefenster jetzt zusammen gebaut und würde
nun gerne folgende Dinge haben. Wäre super wenn mir jemand helfen könnte, da ich der volle VB/C Noob bin.

1.Wie kann ich in einer 32Bit Variable einzelne Bit Setzen oder (Rücksetzen mit Hilfe von VBS)

2. Habe ich in meinem Fenster 3 Button eingebaut (Zu Auf Halt) deren Bedienfreigabe ich gerne untereinander verschalten würde.
Sodas z.b. der Auf Button nicht benützt werden kann wenn das Tor auf ist.
Mit dem DynamikDialog ist es glaub ich nicht mehr möglich, da ich keine Indirekte Variablen eingeben kann.

3.Würde ich gerne dieses Fenster über einen Button wieder schließen
Habs mit dem Befehl Fenster.Visible=False versucht geht aber irgendwie nicht.


Wäre euch super dankbar wenn ihr mir weiter helfen könntet.

Danke
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich brauch nochmal eure Hilfe. Bin am verzeifeln.

Hab es jetzt so hinbekommen das ich meine Bedienfreigabe wie folgt löse

Dim Button,Wert1,Wert2,merker


Wert1 = HMIRuntime.Tags(".B_Zustand").Read
wert2 = HMIRuntime.Tags(".B_Art").Read

Set Button = ScreenItems("Button3")

If Wert2 = 2 Then
If wert1 = 2 Then
Button.Enabled = False
Else
Button.Enabled = True
End If
Else

Button.Enabled = False
End If


Bis her ging das alles wunderbar da in diesen Variablen nur 1 Bit gestzt wird (entweder Hand oder Automatik) deshalb der vergleich mit der Zahl in der Variablen.

Nun brauch ich aber 1 einzelnes Bit in einer Variable. Zusätzlich können in diesem Byte noch andere Bit gesetzt sein. z.b. Bit 0 = Betriebsart Fern
Bit 1 = Regelung Ein usw.

Meine Frag nun, wie kann ich dieses 1. Bit auslesen und wie oben gezeit verwenden. Wäre super wenn ihr mir weiter helfen könntet
 
Meine Frag nun, wie kann ich dieses 1. Bit auslesen und wie oben gezeit verwenden. Wäre super wenn ihr mir weiter helfen könntet
Das heißt du willst testen, ob in einem byte ein bestimmtes Bit gesetzt ist, sagen wir mal Bit 3?
Bit 3 alleine: 0000 1000 =8
if (byteVar and 8 ) <>0 then

bin kein VB-Experte, aber das sollte gehen..
 
Zottel schrieb:
Meine Frag nun, wie kann ich dieses 1. Bit auslesen und wie oben gezeit verwenden. Wäre super wenn ihr mir weiter helfen könntet
Das heißt du willst testen, ob in einem byte ein bestimmtes Bit gesetzt ist, sagen wir mal Bit 3?
Bit 3 alleine: 0000 1000 =8
if (byteVar and 8 ) <>0 then

bin kein VB-Experte, aber das sollte gehen..

hmm das habe ich im Grund ja schon gemacht das ich eine Zahl vergleiche. Dies geht auch wenn in diesem Byte nichts anderes Zusätzlich gesetzt ist. Das problem ist das in dieser Variablen andere Bitz trozdem gesetzt oder auch nicht gesetzt sein können (z.b 0000 1010 = 10)
Sprich ich will nur z.b. das Bit 3 abfragen ob 1 oder 0.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Das hat Zottel dir ja geschrieben, durch das "and 8" werden alle Bit Null, außer Bit 3, das bleibt wie es ist. Wenn das Ergebnis > 0 ist, dann ist Bit 3 True, wenn das Ergebnis =0 ist, dann ist Bit 3 False.
 
Also ich habe dafür extra eine Globale Subrutine geschrieben die mir eine ByteVariable, Bitweise aufschlüsselt.
So kann ich jederzeit jedes einzelne Bit abfragen egal ob noch andere gesetzt sind oder nicht.
Du kannst sie ja für deine 32Bit Variable erweitern.
Vieleicht hilft dir das.

Code:
Public Sub conv_by2bi(ByVal ByteCode As Single, Optional ByRef Result0 As Byte = 0, Optional _
		      ByRef Result1 As Byte = 0, Optional ByRef Result2 As Byte = 0, Optional _
		      ByRef Result3 As Byte = 0, Optional ByRef Result4 As Byte = 0, Optional _
		      ByRef Result5 As Byte = 0, Optional ByRef Result6 As Byte = 0, Optional _
		      ByRef Result7 As Byte = 0)
    Dim Trainer, TestVar As Single
    Dim rep As Integer
    Trainer = ByteCode
    For rep = 7 To 0 Step -1
        TestVar = Trainer / (2 ^ rep)
        If TestVar >= 1 Then
            Trainer = Trainer - (2 ^ rep)
            If rep = 7 Then Result7 = 1
            If rep = 6 Then Result6 = 1
            If rep = 5 Then Result5 = 1
            If rep = 4 Then Result4 = 1
            If rep = 3 Then Result3 = 1
            If rep = 2 Then Result2 = 1
            If rep = 1 Then Result1 = 1
            If rep = 0 Then Result0 = 1
        End If
        If TestVar < 1 Then
            TestVa = Trainer
            If rep = 7 Then Result7 = 0
            If rep = 6 Then Result6 = 0
            If rep = 5 Then Result5 = 0
            If rep = 4 Then Result4 = 0
            If rep = 3 Then Result3 = 0
            If rep = 2 Then Result2 = 0
            If rep = 1 Then Result1 = 0
            If rep = 0 Then Result0 = 0
        End If
    Next
End Sub

Cu Turbman
 
Ralle schrieb:
durch das "and 8" werden alle Bit Null, außer Bit 3, das bleibt wie es ist.
Wenn er das noch nicht kennt, ist die Formulierung mißverständlich. Die Bits in der ursprünglichen Variablen werden ja nicht geändert. Also:... werden alle Bit ignoriert, außer Bit 3, das bestimmt den Wert des Ausdrucks (byteVar and 8).
[/quote]
Wenn das Ergebnis > 0 ist
Ungleich 0. Geht auch mit vorzeichenbehafteten Zahlen.

Und nix gegen TurbMans globale Routine, aber aus "ByteVar and 8" macht ein Compiler so was wie:
AND EAX,8
JZ irgendwohin.

der Aufruf der Routine sieht eher so aus
PUSH EAX
CALL globaleRoutine
schon das dauert länger.
nun noch geschätzte 40 Masschinenanweisungen der globalen Routine...
Da weiß man, was der GHZ-Pentium tut.

Der Tipp für Turbman: Wenn vor allen außer dem 1.IF ein else steht, werden wenigstens die weiteren Vergleiche gespart, wenn einer zutrifft. Statistisch 50% gespart.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
oh stimmt dann habe ich bei Zottel da was mißverstanden.
Also ich dank euch nmal recht Herzlich. Werds morgen früh gleich mal versuchen. Mach jetzt erst mal Feierabend.

Vielen dank nochmal
 
Zurück
Oben