Zuviel Werbung? - > Hier kostenlos beim SPS-Forum registrieren

Ergebnis 1 bis 9 von 9

Thema: Bedienfreigabe per VB

  1. #1
    Registriert seit
    23.08.2004
    Beiträge
    565
    Danke
    73
    Erhielt 19 Danke für 18 Beiträge

    Standard


    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."

    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
    Zitieren Zitieren Bedienfreigabe per VB  

  2. #2
    Registriert seit
    11.07.2004
    Beiträge
    1.597
    Danke
    10
    Erhielt 213 Danke für 183 Beiträge

  3. #3
    Anonymous Gast

    Standard

    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

  4. #4
    Registriert seit
    19.06.2003
    Beiträge
    2.200
    Danke
    85
    Erhielt 259 Danke für 175 Beiträge

    Standard

    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..

  5. #5
    Anonymous Gast

    Standard

    Zitat Zitat von Zottel
    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.

  6. #6
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.227
    Danke
    534
    Erhielt 2.698 Danke für 1.950 Beiträge

    Standard

    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.
    Gruß
    Ralle

    ... there\'re 10 kinds of people ... those who understand binaries and those who don\'t …
    and the third kinds of people … those who love TIA-Portal

  7. #7
    Registriert seit
    28.07.2005
    Beiträge
    15
    Danke
    0
    Erhielt 2 Danke für 2 Beiträge

    Standard

    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&#40;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&#41;
        Dim Trainer, TestVar As Single
        Dim rep As Integer
        Trainer = ByteCode
        For rep = 7 To 0 Step -1
            TestVar = Trainer / &#40;2 ^ rep&#41;
            If TestVar >= 1 Then
                Trainer = Trainer - &#40;2 ^ rep&#41;
                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

  8. #8
    Registriert seit
    19.06.2003
    Beiträge
    2.200
    Danke
    85
    Erhielt 259 Danke für 175 Beiträge

    Standard

    Zitat Zitat von Ralle
    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 .
    [/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.

  9. #9
    Anonymous Gast

    Standard


    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

Ähnliche Themen

  1. Bedienfreigabe? Wie lösen?
    Von detoto im Forum HMI
    Antworten: 3
    Letzter Beitrag: 14.09.2009, 12:44

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •