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

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

Thema: Bit/Byte toggle

  1. #1
    Registriert seit
    15.10.2005
    Ort
    49586 Neuenkirchen
    Beiträge
    329
    Danke
    30
    Erhielt 4 Danke für 4 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo,
    als "C Luser" brauche ich euch mal! Wie toggle ich ne' Bit in einem Byte unter WinCC 7.0?
    SG Farinin
    Zitieren Zitieren Bit/Byte toggle  

  2. #2
    Registriert seit
    24.10.2007
    Ort
    USA
    Beiträge
    815
    Danke
    3
    Erhielt 73 Danke für 57 Beiträge

    Standard

    Zitat Zitat von Farinin Beitrag anzeigen
    Hallo,
    als "C Luser" brauche ich euch mal! Wie toggle ich ne' Bit in einem Byte unter WinCC 7.0?

    in C:

    Code:
    if x then 
    x=false
    else
    x=true
    end if
    In WinCC hat man keine reine C-programmierung sondern eine Mischung
    zwischen C und C a lá S.

    In WinCC hast (denke ich ) GetTag und Settag

    Code:
    if Gettag("x") then 
    Settag("x",0)
    else
    Settag("x",1)
    end if
    PS: Bitte check die richtige Schreibweise von Gettag und settag ab
    Partys sind krass, am besten ist das Bier aus dem fränkischen Fass ...
    "Programming today is a race between the programmers and software engineers to create better
    and more idiot-proof programs, and the universe, creating bigger and better idiots. So far,
    the universe is winning". - Rich Cook

  3. #3
    Avatar von Farinin
    Farinin ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    15.10.2005
    Ort
    49586 Neuenkirchen
    Beiträge
    329
    Danke
    30
    Erhielt 4 Danke für 4 Beiträge

    Standard

    Hi,
    ich darf aber nur ein Bit des Bytes ändern. Der Rest muss unverändert bleiben!
    SG Farinin

  4. #4
    Registriert seit
    24.10.2007
    Ort
    USA
    Beiträge
    815
    Danke
    3
    Erhielt 73 Danke für 57 Beiträge

    Standard

    Zitat Zitat von Farinin Beitrag anzeigen
    Hi,
    ich darf aber nur ein Bit des Bytes ändern. Der Rest muss unverändert bleiben!
    Das soll mit der Maskierung von 2 Bytes gehen
    (ich habe leider die WinCC Bibliothek nicht dabei)
    Partys sind krass, am besten ist das Bier aus dem fränkischen Fass ...
    "Programming today is a race between the programmers and software engineers to create better
    and more idiot-proof programs, and the universe, creating bigger and better idiots. So far,
    the universe is winning". - Rich Cook

  5. #5
    Avatar von Farinin
    Farinin ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    15.10.2005
    Ort
    49586 Neuenkirchen
    Beiträge
    329
    Danke
    30
    Erhielt 4 Danke für 4 Beiträge

    Standard

    Zitat Zitat von johnij Beitrag anzeigen
    Das soll mit der Maskierung von 2 Bytes gehen
    (ich habe leider die WinCC Bibliothek nicht dabei)
    Könntest du vielleicht da bei nächster Gelegenheit noch den genauen Code heraus finden?
    SG Farinin

  6. #6
    Registriert seit
    24.10.2007
    Ort
    USA
    Beiträge
    815
    Danke
    3
    Erhielt 73 Danke für 57 Beiträge

    Standard

    Ups....

    wieder xxxxxxxxxxxx
    xxxxxxxxxxxxxxxxxxx
    Geändert von johnij (18.09.2008 um 16:44 Uhr)
    Partys sind krass, am besten ist das Bier aus dem fränkischen Fass ...
    "Programming today is a race between the programmers and software engineers to create better
    and more idiot-proof programs, and the universe, creating bigger and better idiots. So far,
    the universe is winning". - Rich Cook

  7. #7
    Registriert seit
    24.10.2007
    Ort
    USA
    Beiträge
    815
    Danke
    3
    Erhielt 73 Danke für 57 Beiträge

    Standard

    Das kann ich leider nicht, weil ich keine WinCC-Packet bei mir habe
    Bzw. nicht brauche.

    Ich weiss, in der Library gibt es genug functions, die die Aufgabe lösen können.
    2 ter Vorschlag (keine saubere Lösung) aus der SPS kannst du dein Byte Maskieren und das ergebnis in einem DB speichern---> im DB hast du
    0000 0001-->1 (Int)
    0000 0010-->2


    1000 000--->-128
    insgesamt 8 Bytes
    In Wincc schreibst Du ein Skript mit 8 Abfragen:

    Code:
    x=dein Byte, nach dem Maskieren in der SPS
    y=originales Byte vor dem Maskieren in der SPS
     
     if (Gettag("x")==1)     then            //Abrage ob Bit0=1
    Settag("y", Gettag("y")-1)
    else
    Settag("y", Gettag("y")+1)
    end if
     
    if (Gettag("x")==2)  then               //Abrage ob Bit1=1
    Settag("y", Gettag("y")-2)
    else
    Settag("y", Gettag("y")+2)
    end if
     
    if (Gettag("x")==4)   then              //Abrage ob Bit2=1
    Settag("y", Gettag("y")-4)
    else
    Settag("y", Gettag("y")+4)
    end if
     
    .
    .
    .
    if (Gettag("x")==-128)   then              //Abrage ob Bit7=1
    Settag("y", Gettag("y")+128)
    else
    Settag("y", Gettag("y")-128)
    end if
    Geändert von johnij (18.09.2008 um 16:43 Uhr)
    Partys sind krass, am besten ist das Bier aus dem fränkischen Fass ...
    "Programming today is a race between the programmers and software engineers to create better
    and more idiot-proof programs, and the universe, creating bigger and better idiots. So far,
    the universe is winning". - Rich Cook

  8. #8
    Registriert seit
    22.09.2006
    Ort
    Bodenseeraum
    Beiträge
    1.022
    Danke
    61
    Erhielt 136 Danke für 122 Beiträge

    Beitrag

    Hallo Kollege,
    das geht mittels exclusive und bzw. oder, z.B.
    --------------------------------------------------------
    void OnClick(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName)
    {
    // variablen deklaration
    unsigned setzen = 0x00000001;
    unsigned ruecksetzen = 0x00000000;
    unsigned var1;
    unsigned var1;

    //Rückgabe-Typ :BYTE
    var1=GetTagByte("Variable_BYTExx"); // Variablenwert holen..
    var2 = var1; // Wert intern speichern

    // schauen, was macht das Bit gerade..
    var1 = var1 & 0x01; // passendes Bit ausmaskieren, z.B. hier Bit 0..
    if (var1 == 1)
    var1= var2 & ruecksetzen; // Bit reset
    else var1= var2 | setzen; // Bit setzen

    // Variable zurückschreiben:
    SetTagByte("Variable_BYTExx",var1); //Rückgabe-Typ :BOOL

    return 0;
    -----------------------------------------
    Gruss: V.
    ______________________________________
    relax, take it easy
    Zitieren Zitieren Bits und Bytes..  

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

    Standard

    Hier noch einmal ein Programmbeispiel in VBScript für das Toggeln eines Bits in einer Byte-Variablen.

    Das jeweilige Script wird mit dem Drücken der linken Maustaste auf einen Button ausgeführt.

    Code:
    Sub OnLButtonDown(ByVal Item, ByVal Flags, ByVal x, ByVal y)  
     
    'Bit 0 toggeln
     
    Dim Variable
     
    Set Variable = HMIRuntime.Tags("Variable_Byte")
     
    If Variable.Read And 2^0 Then
       Variable.Write(Variable.Read And (Not 2^0))
    Else
       Variable.Write(Variable.Read Or 2^0)
    End If
     
    End Sub
    Code:
    Sub OnLButtonDown(ByVal Item, ByVal Flags, ByVal x, ByVal y)  
     
    'Bit 1 toggeln
     
    Dim Variable
     
    Set Variable = HMIRuntime.Tags("Variable_Byte")
     
    If Variable.Read And 2^1 Then
       Variable.Write(Variable.Read And (Not 2^1))
    Else
       Variable.Write(Variable.Read Or 2^1)
    End If
     
    End Sub
    Code:
    Sub OnLButtonDown(ByVal Item, ByVal Flags, ByVal x, ByVal y)  
     
    'Bit 2 toggeln
     
    Dim Variable
     
    Set Variable = HMIRuntime.Tags("Variable_Byte")
     
    If Variable.Read And 2^2 Then
       Variable.Write(Variable.Read And (Not 2^2))
    Else
       Variable.Write(Variable.Read Or 2^2)
    End If
     
    End Sub
    Gruß Kai
    Angehängte Grafiken Angehängte Grafiken

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

    Farinin (19.09.2008)

  11. #10
    Registriert seit
    24.10.2007
    Ort
    USA
    Beiträge
    815
    Danke
    3
    Erhielt 73 Danke für 57 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von vladi Beitrag anzeigen
    Hallo Kollege,
    das geht mittels exclusive und bzw. oder, z.B.
    --------------------------------------------------------
    void OnClick(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName)
    {
    // variablen deklaration
    unsigned setzen = 0x00000001;
    unsigned ruecksetzen = 0x00000000;
    unsigned var1;
    unsigned var1;

    //Rückgabe-Typ :BYTE
    var1=GetTagByte("Variable_BYTExx"); // Variablenwert holen..
    var2 = var1; // Wert intern speichern

    // schauen, was macht das Bit gerade..
    var1 = var1 & 0x01; // passendes Bit ausmaskieren, z.B. hier Bit 0..
    if (var1 == 1)
    var1= var2 & ruecksetzen; // Bit reset
    else var1= var2 | setzen; // Bit setzen

    // Variable zurückschreiben:
    SetTagByte("Variable_BYTExx",var1); //Rückgabe-Typ :BOOL

    return 0;
    -----------------------------------------
    Gruss: V.
    Morgääääään Forumer,
    @vladi: der Code ist nicht ganz richtig.....

    Korrektur:


    Code:
    variablen deklaration
    unsigned setzen = 0x11111111;
    unsigned ruecksetzen = 0x11111110;
    unsigned var1;
    unsigned var2;
    //Rückgabe-Typ :BYTE 
    var1=GetTagByte("Variable_BYTExx"); // Variablenwert holen..
    var2 = var1; // Wert zwischenspeichern
    // schauen, was macht das Bit gerade.. 
    var1 = var1 & 0x01; // passendes Bit ausmaskieren, z.B. hier Bit 0.. 
    if (var1 == 1) 
    var1= var2 & ruecksetzen; // Bit reset
    else var1= var2 & setzen; // Bit setzen
    // Variable zurückschreiben:
    SetTagByte("Variable_BYTExx",var1); //Rückgabe-Typ :BOOL
    Partys sind krass, am besten ist das Bier aus dem fränkischen Fass ...
    "Programming today is a race between the programmers and software engineers to create better
    and more idiot-proof programs, and the universe, creating bigger and better idiots. So far,
    the universe is winning". - Rich Cook

  12. Folgender Benutzer sagt Danke zu johnij für den nützlichen Beitrag:

    Farinin (19.09.2008)

Ähnliche Themen

  1. Toggle Mechanismus Allen Bradley
    Von jansen im Forum Sonstige Steuerungen
    Antworten: 3
    Letzter Beitrag: 24.01.2009, 18:04
  2. Toggle Mechanismus - wie funktioniert er ?
    Von jansen im Forum Simatic
    Antworten: 0
    Letzter Beitrag: 22.01.2009, 20:39
  3. Antworten: 4
    Letzter Beitrag: 08.07.2008, 08:52
  4. Toggle funktion ??
    Von hank12 im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 23.05.2008, 13:30
  5. Toggle Betrieb für eine Kolbenpositionierung
    Von Admiral im Forum Sonstige Steuerungen
    Antworten: 11
    Letzter Beitrag: 20.02.2007, 14:19

Lesezeichen

Berechtigungen

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