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

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 16

Thema: VBSkritpt: Variable in einer if-Abfrage testen

  1. #1
    Registriert seit
    24.03.2011
    Beiträge
    4
    Danke
    1
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo, ich habe ein VBSkript geschrieben. Das Skript dreht ein Polygon (das funktioniert bereits). Nun soll das Skript so erweitert werden, dass sich das Polygon nur dann dreht, wenn das 0-te Bit der Variable DrehenBeginnen gesetzt ist. DrehenBeginnen ist eine interne Variable. Leider funktioniert dieser Teil noch nicht. Findet jemand den Fehler?

    Function Left_Trigger(Byval Item)

    Dim angle, txt
    Set txt = HMIRuntime.ActiveScreen.ScreenItems("Polygon1")
    angle = txt.RotationAngle
    Dim DrehenBeginnen0
    Set DrehenBeginnen0 = HMIRuntime.Tags("DrehenBeginnen")

    If (DrehenBeginnen0 And &h00) = 1 Then
    txt.RotationAngle = angle + 30
    End If

    End Function
    Hinweise:
    mit "And &h00" möchte ich das erste Bit Maskieren (das habe ich auf einem anderen Forumseintrag gelesen). Wenn ich die Maskierung weglasse, funktioniert es auch nicht.

    Vielen Dank im Vorraus für die Hilfe
    Zitieren Zitieren VBSkritpt: Variable in einer if-Abfrage testen  

  2. #2
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.727
    Danke
    398
    Erhielt 2.405 Danke für 2.002 Beiträge

    Standard

    Hallo,
    schreib mal &h01 - dann wird es funktionieren.
    Das Bit 2^0 hat den Wert &h01
    usw. ...

    Gruß
    Larry

    Nachsatz:
    was hier noch offen bleibt ist allerdings ob und wann dein Skript aufgerufen wird ...

  3. #3
    Registriert seit
    24.03.2011
    Beiträge
    4
    Danke
    1
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Danke für die schnelle Antwort. Leider funktioniert es trotzdem noch nicht. Ich habe folgenden zwei Varianten ausprobiert:

    If (DrehenBeginnen0 And &h01) Then 'Variante 1
    If (DrehenBeginnen0 And &h01) = 1Then 'Variante 2

    Ich bin mir auch sicher, dass das Bit in "DrehenBeginnen" tatsächliche gesetzt wird(ich habe die Anzeige zweier Bilder mit DrehenBeginnen verknüpft, jenachdem welchen Wert "DrehenBeginnen" hat, ändert sich das Bild - und das funktioniert).

    Das Skript wird über Objekteigenschaften/Eigenschaften/Position X aufgerugen (ist zwar nicht ganz korrekt, doch ohne if-Bedingung funktioniert die Drehung).

    Was könnte noch falsch sein?

  4. #4
    Registriert seit
    31.08.2010
    Beiträge
    50
    Danke
    2
    Erhielt 10 Danke für 10 Beiträge

    Standard

    Ist "DrehenBeginnen" eine Byte Variable?
    Bei Word und DWord werden ja gelegentlich die Low & High-Bytes getauscht.
    Vllt mal mit &h0100 versuchen.

    Ansonsten für DrehenBeginnen mal die Bits aufschlüsseln, und dann schauen, welches bit dann mit toogelt.

  5. #5
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.727
    Danke
    398
    Erhielt 2.405 Danke für 2.002 Beiträge

    Standard

    Zitat Zitat von mechatroniker2011 Beitrag anzeigen
    Das Skript wird über Objekteigenschaften/Eigenschaften/Position X aufgerugen (ist zwar nicht ganz korrekt, doch ohne if-Bedingung funktioniert die Drehung).
    Ähh ... noch einmal bitte ...
    Bei welchem Ereignis wird das Script aufgerufen ?
    Und vielleicht noch etwas ... in welcher Umgebung befinden wir uns eigentlich ?

    Gruß
    Larry

  6. #6
    Registriert seit
    26.02.2009
    Ort
    Schweiz
    Beiträge
    33
    Danke
    3
    Erhielt 3 Danke für 3 Beiträge

    Standard

    Set txt = HMIRuntime.ActiveScreen.ScreenItems("Polygon1")
    angle = txt.RotationAngle
    Dim DrehenBeginnen0
    Set DrehenBeginnen0 = HMIRuntime.Tags("DrehenBeginnen")

    If (DrehenBeginnen0 And &h00) = 1 Then
    txt.RotationAngle = angle + 30
    End If
    Es ist auch möglich, dass das Objekt "txt" in der Funktion gedreht wird, aber nicht das ScreenItem "Polygon1". Ich bin mir hier nicht sicher, ob txt eine Referenz auf das Polygon darstellt (dann sollte es sich drehen) oder eine lokale Kopie dessen ist (dann wird nur die Kopie gedreht).

    Vieleicht zum Schluss folgendes ausprobieren:
    HMIRuntime.ActiveScreen.ScreenItems("Polygon1") = txt

    Oder das Polygon der Funktion "ByRef" direkt übergeben (anstelle "ByVal Item").
    Jedes Problem erlaubt zwei Standpunkte: unseren eigenen und den falschen.

  7. #7
    Registriert seit
    30.03.2005
    Beiträge
    2.096
    Danke
    0
    Erhielt 673 Danke für 541 Beiträge

    Standard

    Das folgende VBScript in WinCC sollte funktionieren:

    Code:
    Function Left_Trigger(ByVal Item)
     
    Dim intDrehenBeginnen
     
    intDrehenBeginnen = HMIRuntime.Tags("DrehenBeginnen").Read
     
    If intDrehenBeginnen And &H01 Then
        Item.RotationAngle = Item.RotationAngle + 30
    End If
     
    End Function
    Gruß Kai

  8. #8
    Registriert seit
    30.03.2005
    Beiträge
    2.096
    Danke
    0
    Erhielt 673 Danke für 541 Beiträge

    Standard

    Zitat Zitat von Larry Laffer Beitrag anzeigen
    Bei welchem Ereignis wird das Script aufgerufen ?
    Und vielleicht noch etwas ... in welcher Umgebung befinden wir uns eigentlich ?
    Hallo Larry,

    es geht hier um WinCC (nicht WinCC flexible) und ich gehe davon aus, dass als Trigger ein Standardzyklus (z.B. 2 Sekunden) verwendet wird.

    Gruß Kai

  9. #9
    Registriert seit
    24.03.2011
    Beiträge
    4
    Danke
    1
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Das Skript wird über einen Trigger aufgerufen. Das Programm ist WinCC 6.2.
    Danke für die zahlreichen Rückmeldungen. Morgen, wenn ich wieder an den PC mit WinCC arbeiten kann, werde ich die Vorschläge ausprobieren.

  10. #10
    Registriert seit
    30.03.2005
    Beiträge
    2.096
    Danke
    0
    Erhielt 673 Danke für 541 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Da in der Aufgabenstellung der Rotationswinkel eines Polygons dynamisiert werden soll, sollte man das VBScript in den Objekteigenschaften des Polygons unter dem Attribut Rotationswinkel aufrufen:

    Code:
    Function RotationAngle_Trigger(ByVal Item)
     
    Dim intDrehenBeginnen
     
    intDrehenBeginnen = HMIRuntime.Tags("DrehenBeginnen").Read
     
    If intDrehenBeginnen And &H01 Then
        Item.RotationAngle = Item.RotationAngle + 30
    End If
     
    End Function
    WinCC_Explorer.jpg

    WinCC_Graphics_Designer_1.jpg WinCC_Graphics_Designer_2.jpg WinCC_Graphics_Designer_3.jpg

    WinCC_Graphics_Designer_4.jpg

    Gruß Kai

  11. Folgender Benutzer sagt Danke zu Kai für den nützlichen Beitrag:

    mechatroniker2011 (25.03.2011)

Ähnliche Themen

  1. Globale Variable in einer Aktion?
    Von Phase8421 im Forum HMI
    Antworten: 3
    Letzter Beitrag: 17.06.2008, 15:00
  2. WinCC anlegen einer globalen Variable in C?
    Von BorisDieKlinge80 im Forum Hochsprachen - OPC
    Antworten: 0
    Letzter Beitrag: 11.06.2008, 12:29
  3. Variable laden bei einer bestimmten Uhrzeit
    Von noeppkes im Forum Simatic
    Antworten: 1
    Letzter Beitrag: 18.01.2007, 15:22
  4. In einer INT-Variable ein gezieltes Bit setzen
    Von noeppkes im Forum Simatic
    Antworten: 1
    Letzter Beitrag: 04.08.2006, 16:58
  5. Bit in einer 8Bit Variable mit VBS setzen
    Von Anonymous im Forum HMI
    Antworten: 4
    Letzter Beitrag: 14.12.2005, 11:45

Stichworte

Lesezeichen

Berechtigungen

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