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

Results 1 to 7 of 7

Thread: Skript in Bildbaustein: Bit in Variable setzten

  1. #1
    Join Date
    09.03.2006
    Posts
    137
    Danke
    19
    Erhielt 4 Danke für 4 Beiträge

    Default


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo zusammen,

    ich verwende WinCCflex2007 mit einem MP377. Ich habe ein Bildbaustein erstellt in dem 4 Buttons (Steuerfunktionen) , sowie anzeigende Elemente (Statusfunktionen) enthalten sind. Dieser Bildbaustein hat als Schnittstelle jeweils eine 1Byte-Variable "Status" und "Steuer". Meine Buttons und anzeigenden Elemente funktionieren soweit einwandfrei.

    Jetzt benötige ich jedoch noch folgende Funktion. Und die soll mit dem Skript in dem Bildbaustein realisiert werden:

    Ich möchte abhängig von dem 4.Bit im Byte "Status" das 2.Bit im Byte "Steuer" setzten.
    Bedeutet: Wenn "Status".Bit4 = TRUE soll auch "Steuer".Bit2 = TRUE gesetzt werden. Alle anderen Bits im "Steuer" und "Status" können beliebige Werte annehmen und dürfen nicht verändert werden.

    Weiß jemand wie das geht?

    Gruß HarryH
    Reply With Quote Reply With Quote Skript in Bildbaustein: Bit in Variable setzten  

  2. #2
    Join Date
    12.05.2007
    Posts
    416
    Danke
    14
    Erhielt 46 Danke für 40 Beiträge

    Default

    ShiftAndMask

    und

    SetBitInTag
    Last edited by xhasx; 21.01.2009 at 14:00.

  3. #3
    Join Date
    30.03.2005
    Posts
    2,134
    Danke
    0
    Erhielt 681 Danke für 545 Beiträge

    Default

    Quote Originally Posted by HarryH View Post
    Ich möchte abhängig von dem 4.Bit im Byte "Status" das 2.Bit im Byte "Steuer" setzten.
    Bedeutet: Wenn "Status".Bit4 = TRUE soll auch "Steuer".Bit2 = TRUE gesetzt werden. Alle anderen Bits im "Steuer" und "Status" können beliebige Werte annehmen und dürfen nicht verändert werden.
    Hier ist einmal ein kurzes Programmbeispiel in VB-Script:

    Code:
    'Statusbyte = Bit 0 - Bit 7 = 2^0 - 2^7 
    'Steuerbyte = Bit 0 - Bit 7 = 2^0 - 2^7
     
    If SmartTags("Statusbyte") And 2^4 Then
        SmartTags("Steuerbyte") = SmartTags("Steuerbyte") Or 2^2
    Else
        SmartTags("Steuerbyte") = SmartTags("Steuerbyte") And (Not 2^2)
    End If
    Gruß Kai

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

    HarryH (22.01.2009)

  5. #4
    Join Date
    30.03.2005
    Posts
    2,134
    Danke
    0
    Erhielt 681 Danke für 545 Beiträge

    Default

    Und hier noch einmal ein Programmbeispiel in VB-Script mit der Systemfunktion SchiebenUndMaskieren (ShiftAndMask):

    Code:
    ' SchiebenUndMaskieren
    '    Quellvariable <Variable>
    '    Zielvariable <Variable>
    '    Zu schiebende Bits <Konstante>
    '    Zu maskierende Bits (Dezimalnotierung) <Konstante>
    '
    ' Quellvariable
    ' Der Wert dieser Variable wird geschoben und maskiert.
    '
    ' Zielvariable
    ' Das Ergebnis wird in diese Variable geschrieben.
    '
    ' Zu schiebende Bits
    ' Wenn 'Zu schiebende Bits' positiv ist, dann werden die Bits
    ' nach rechts geschoben, andernfalls werden sie nach links
    ' geschoben. Die gesamte Bitdarstellung wird geschoben,
    ' einschließlich ein mögliches Vorzeichenbit.
    '
    ' Zu maskierende Bits
    ' Die 'Zu maskierenden Bits', mit denen das Ergebnis der
    ' Schiebeoperation maskiert wird. Jedes Bit wird bitweise
    ' durch UND verknüpft. 
     
    Dim Quellvariable
    Dim Zielvariable
     
    Quellvariable = SmartTags("Statusbyte")
     
    ShiftAndMask Quellvariable, Zielvariable , 4, 1
     
    If Zielvariable Then
        SetBitInTag SmartTags("Steuerbyte"), 2
    Else
        ResetBitInTag SmartTags("Steuerbyte"), 2
    End If
    Oder:

    Code:
    ' SchiebenUndMaskieren
    '    Quellvariable <Variable>
    '    Zielvariable <Variable>
    '    Zu schiebende Bits <Konstante>
    '    Zu maskierende Bits (Dezimalnotierung) <Konstante>
    '
    ' Quellvariable
    ' Der Wert dieser Variable wird geschoben und maskiert.
    '
    ' Zielvariable
    ' Das Ergebnis wird in diese Variable geschrieben.
    '
    ' Zu schiebende Bits
    ' Wenn 'Zu schiebende Bits' positiv ist, dann werden die Bits
    ' nach rechts geschoben, andernfalls werden sie nach links
    ' geschoben. Die gesamte Bitdarstellung wird geschoben,
    ' einschließlich ein mögliches Vorzeichenbit.
    '
    ' Zu maskierende Bits
    ' Die 'Zu maskierenden Bits', mit denen das Ergebnis der
    ' Schiebeoperation maskiert wird. Jedes Bit wird bitweise
    ' durch UND verknüpft. 
     
    Dim Quellvariable
    Dim Zielvariable
     
    Quellvariable = SmartTags("Statusbyte")
     
    ShiftAndMask Quellvariable, Zielvariable , 0, 16
     
    If Zielvariable Then
        SetBitInTag SmartTags("Steuerbyte"), 2
    Else
        ResetBitInTag SmartTags("Steuerbyte"), 2
    End If
    Gruß Kai

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

    HarryH (23.01.2009)

  7. #5
    HarryH's Avatar
    HarryH is offline Erfahrener Benutzer
    Themenstarter
    Join Date
    09.03.2006
    Posts
    137
    Danke
    19
    Erhielt 4 Danke für 4 Beiträge

    Default

    Danke Kai für deine Info! Ich habe es inzwischen wie in deinem ersten Beitrag realisiert. Funktioniert sehr gut.
    Allerdings der Befehl "SetBitInTag" (kannte ich nicht) gefällt mir besser als die logische Disjunktion mit "or" die du in deinem ersten Beitrag verwendet hast. Ist für Leute die noch nichts/wenig mit VB gemacht haben intuitiver zu verstehen.

    Gruß HarryH

  8. #6
    Join Date
    12.05.2007
    Posts
    416
    Danke
    14
    Erhielt 46 Danke für 40 Beiträge

    Default

    Na prima,

    ich habe absichtlich keinen "Code" hier platziert. Die Befehle sind in der Wcf Hilfe recht gut dokumentiert...

  9. #7
    Join Date
    11.10.2006
    Location
    Verden (Aller)
    Posts
    560
    Danke
    34
    Erhielt 60 Danke für 51 Beiträge

    Default


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Quote Originally Posted by xhasx View Post
    Na prima,

    ich habe absichtlich keinen "Code" hier platziert. Die Befehle sind in der Wcf Hilfe recht gut dokumentiert...

    Ist das so? Ich mußte erst hierher kommen, um zu sehen, wie der Aufruf von ShiftAndMask wirklich aussieht. In der WcF-Hilfe steht:

    SchiebenUndMaskieren (Quellvariable, Zielvariable, Zu schiebende Bits, Zu maskierende Bits)

    Das ist doch mal gut dokumentiert........
    "Ein lahmer Drecksplanet ist das, ich habe nicht das geringste Mitleid" (Prostetnik Vogon Jeltz)

Similar Threads

  1. TIA C-Skript im Bildbaustein
    By TIAISM in forum Simatic
    Replies: 2
    Last Post: 11.01.2018, 14:19
  2. WinCCflex Bildbaustein Skript Trigger
    By Egon88 in forum HMI
    Replies: 2
    Last Post: 08.08.2013, 11:30
  3. Replies: 6
    Last Post: 30.09.2011, 13:35
  4. im WinCC einmal pro Tag ein Bit setzten
    By Tommy1981 in forum HMI
    Replies: 6
    Last Post: 16.01.2009, 15:40
  5. Quittierentaste und ein Bit in CFC setzten
    By Elton_500 in forum HMI
    Replies: 0
    Last Post: 21.04.2008, 16:12

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •