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

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

Thema: In VBS maske auf DWord-Variable - Hilfeeee

  1. #1
    Registriert seit
    03.11.2010
    Beiträge
    39
    Danke
    1
    Erhielt 1 Danke für 1 Beitrag

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo zusammen,

    ich habe ein problem beim maskieren einer DWord-Variable in VBS in einem WInCC Projekt!

    In der SPS gibt es ein DWord (Adresse 0.0 bis 3.7) aus dem das 8 Bit abgefragt (also 1.0) werden soll. Ist dieses Bit gesetzt soll eine Meldung ausgegeben werden.

    Mein Code sieht folgendermaßen aus:
    Code:
    dim objVar
    set objVar = HMIRuntime.Tags("Tag1")
    objVar.read
    
    if objVar.value & 2^8 then
    MsgBox "Es sitzt"
    end if
    Leider funktioniert das ganze aber nicht wie ich es mir vorstelle. Ich bekomme andauernd die Msgbox angezeit unabhängig ob das bit sitzt oder nicht!!

    Kann mir da jemand sagen was ich falsch mache?!


    Grüße schuld
    Zitieren Zitieren In VBS maske auf DWord-Variable - Hilfeeee  

  2. #2
    Registriert seit
    07.06.2011
    Beiträge
    117
    Danke
    4
    Erhielt 18 Danke für 18 Beiträge

    Standard

    Hallo,

    & verknüpft Zeichenketten, versuch mal AND.
    Mario

  3. #3
    Registriert seit
    29.03.2004
    Beiträge
    5.731
    Danke
    143
    Erhielt 1.685 Danke für 1.225 Beiträge

    Standard

    Mit AND sollte es gehen.

    Bei VBS gibt es aber in dem Zusammenhang noch einen Fallstrick.
    Wenn du eine logische Verknüpfung machen willst und im Wert ist das höherwertigste Bit gesetzt, so bricht VBS das Skript mit Fehler ab.
    Darum muss man das vorher abfangen:

    If value > 2^31 Then
    value = value - 2^31 ' höherwertigstes Bit zurücksetzen
    End If

    Wenn du das Bit auswerten willst musst du das dort auch noch einbauen.

    Wegen diesen Merkwürdigkeiten versuche ich VBS in WinCC wo immer es geht zu vermeiden, aber in Faceplates kommt man bei WinCC leider nicht drumherum.

  4. #4
    Registriert seit
    07.06.2011
    Beiträge
    117
    Danke
    4
    Erhielt 18 Danke für 18 Beiträge

    Standard

    Tritt der Fehler bei der Variante auch auf?
    Code:
    (objVar.value and 2^8) <> 0
    btw:
    Ist vielleicht auch besser lesbar, da erst maskiert und dann geprüft wird.
    Mario

  5. #5
    Registriert seit
    29.03.2004
    Beiträge
    5.731
    Danke
    143
    Erhielt 1.685 Danke für 1.225 Beiträge

    Standard

    Weiß gar nicht wo ich meine Lösung her hatte, auf die Schnelle habe ich aber hier einen Thread gefunden wo das angesprochen wird:
    http://microsoft.public.de.vb.narkiv...riablen-setzen

    Ich glaube du kannst nicht "And 2^31" prüfen, hab mir damals einen Wolf gesucht als mein Skript darum nicht funktionierte.

  6. #6
    schuld ist offline Benutzer
    Themenstarter
    Registriert seit
    03.11.2010
    Beiträge
    39
    Danke
    1
    Erhielt 1 Danke für 1 Beitrag

    Standard

    Hey zusammen,

    @Thomas: ich glaube genau das mit dem 2^31 scheint der Fall zu sein!!!!!!! :P

    Die Bits 2^31 bis 2^25 sind bei mir in WinCC True (also in der Steuerung Bit 0.0 bis 0.6 = True ) Ich interessiere mich zwar für die anderen Bits aber ich bekomme den Fehler Overflow, wenn ich es mit dem MS Script debugger im Befehlsfenster ausführen lasse.

    Werde es also gleich mal versuchen

  7. #7
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.712
    Danke
    398
    Erhielt 2.397 Danke für 1.997 Beiträge

    Standard

    Hallo,
    wenn es um das Bit 2^31 geht dann könntest du es auch noch mal mit "and &h8000" versuchen. Ich habe das jetzt allerdings nicht getestet ...

    Das mit deinem Overflow gibt mir aber zu denken. Vielleicht solltest du doch mal dein ganzes Script hier posten ...

    Gruß
    Larry

  8. #8
    Registriert seit
    06.10.2004
    Ort
    Kopenhagen.
    Beiträge
    4.622
    Danke
    377
    Erhielt 799 Danke für 642 Beiträge

    Standard

    Wird das VBS Skript zyklisch aufgerufen ?
    Und es wird ein MsgBox angezeigt !
    Beide sind no-no.

    Ist dies eine Übung, oder ist es ernsthaft gemeint ?

    Und: Wichtig. WinCC oder WinCC Flexible.
    v6, v7, 2004, 2005, 2007, 2008 oder v11 ?
    Jesper M. Pedersen

  9. #9
    schuld ist offline Benutzer
    Themenstarter
    Registriert seit
    03.11.2010
    Beiträge
    39
    Danke
    1
    Erhielt 1 Danke für 1 Beitrag

    Standard

    Hi zusammen,

    also nachdem ich es implementiert habe läufts! ... Weiß jetzt halt nicht ob es so gut ist, nach euren Beiträgen^^

    Eingesetzt wird WinCC 6.2.2.7
    Es ist eine Aktion --> zyklischer Aufruf alle 5sec, wird aber nicht in einer MsgBox angezeigt.

    Mein script sieht wie folgt aus:

    Code:
    Function SetzeBitWennTrue(Tag1, Tag2, RetTag, mask)
    Dim objTag1
    Dim objTag2
    Dim objRet
     Set objTag1 = HMIRuntime.Tags(Tag1)
     Set objTag2 = HMIRuntime.Tags(Tag2)
     
     objTag1.Read
     objTag2.Read
     
     If objtag2.Value > 2^31 Then
      objTag2.Value = objTag2.Value - 2^31
     End If
    
     If (objTag1.Value = 1) And ((objtag2.Value And mask) <> 0) Then 
      Set objRet = HMIRuntime.Tags(RetTag)
      objRet.Value = True
      objRet.Write
     Else
      Set objRet = HMIRuntime.Tags(RetTag)
      objRet.Value = False
      objRet.Write
     End If 
    End Function
    Der Übergabeparameter mask ist also mein Bit das ich maskieren will, z.B. das 18 Bit --> 2^17 wird übergeben.

    Wäre cool wenn ihr dazu was sagen könntet wo da noch schwierigkeiten auftreten können!!

    Danke schuld

  10. #10
    Registriert seit
    29.03.2004
    Beiträge
    5.731
    Danke
    143
    Erhielt 1.685 Danke für 1.225 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Dadurch dass du meinen Codeschnipsel zum Rücksetzen des MSB einfach so übernommen hast, kannst du das Bit nicht mehr abfragen.
    In der SPS ist das dann im Word das Offset-Bit 0.7 welches nicht abgefragt werden kann.

    Wenn du das aber brauchst, musst du deine Funktion noch etwas modifizieren.

Ähnliche Themen

  1. Antworten: 1
    Letzter Beitrag: 01.07.2009, 11:56
  2. Antworten: 3
    Letzter Beitrag: 25.11.2008, 20:08
  3. Antworten: 7
    Letzter Beitrag: 15.10.2008, 09:45
  4. Rohdaten Variable mit VBS verarbeiten
    Von Bender25 im Forum HMI
    Antworten: 11
    Letzter Beitrag: 04.04.2006, 12:45
  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
  •