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

Seite 3 von 4 ErsteErste 1234 LetzteLetzte
Ergebnis 21 bis 30 von 40

Thema: WinCC Flexible 2008 SP2 | Mehrere Variablen (DBs) zusammenfassen für Sichtbarkeit

  1. #21
    Registriert seit
    19.12.2008
    Beiträge
    336
    Danke
    19
    Erhielt 28 Danke für 28 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Wenn du es konkreter haben willst dann schreib doch mal bitte, welches Bit in welcher Variablen du setzen und/oder abfragen möchtest.

    In meinem Beipiel ist myBit0 und folgende z.B. eine Script-interne Variable.
    In myBit0 würde dann ein TRUE drinstehen wenn myInt and 256 (also das tatsächlich 8.Bit des INT ist gesetzt) einen Werte <> 0 ergibt.

  2. #22
    Registriert seit
    06.10.2004
    Ort
    Kopenhagen.
    Beiträge
    4.639
    Danke
    377
    Erhielt 803 Danke für 644 Beiträge

    Standard

    Eine Idée, ohne Skripte:

    Anstatt EINE Blinker versuchen mit mehrere Variabeln zu aktivieren, mehrere Blinker Visible/Hidden animieren über je sein eigene Variabel.
    Wenn die Blinker genau auf denselbe Position auf den Schirm sind, sieht es aus als ein Blinker.
    Soll der Blinker graue aussehen wenn kein Variabel aktiv ist, dann hinter die andere Blinker eine graue Feld ohne animation plazieren.

    Sollte klappen.
    Jesper M. Pedersen

  3. #23
    Registriert seit
    05.11.2011
    Beiträge
    75
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Die Idee war bereits so verwirklicht, ich finde es so aber galanter

    Es funktioniert ja auch, aber ich brauche nun das gleiche auch für Bitmeldungen.


    WIE GENAU, hab ich eigentlich geschrieben ... siehe letzter Beitrag auf Seite 2:

    SmartTags("Interne\TLZ_COM_Error") = SmartTags("Interne\BIT_MELDUNGEN.COM_TLZ_ERROR") OR SmartTags("Interne\Bit_Meldungen.COMM_TLZ_ERROR") OR SmartTags("Interne\Bit_Meldungen.KOM_FEHLER_SE_TLZ")


    Hierbei ist SmartTags("Interne\TLZ_COM_Error") nun nicht mehr eine BOOL-, sondern eine INT-Variable, die ich in EINEM beliebigen Bit beschreiben möchte um selbiges Bit als BITMELDUNG auswählen zu können. Idealerweise Bit 0

    Der nächste Schritt KÖNNTE sein, EINE INT-Variable "komplett" zu beschreiben (also alle möglichen BITs der INT-Variable). Wichtig ist mir aber erstmal, zu verstehen wie ich über die SmartTag-Geschichte überhaupt ein BIT einer INT-Variable ansprechen kann.

  4. #24
    Registriert seit
    19.12.2008
    Beiträge
    336
    Danke
    19
    Erhielt 28 Danke für 28 Beiträge

    Standard

    Wie man ein Bit in einer INT-Variablen abfragt habe ich oben dargestellt.

    Wenn du in einer INT-Variablen gezielt ein Bit setzen möchtest ginge das mit OR - also :
    Code:
    myInt = myInt or 256  ' setzt das Bit 0
    myInt = myInt or 512  ' setzt das Bit 1
    
    myInt = myInt or 1  ' setzt das Bit 8
    myInt = myInt or 2  ' setzt das Bit 9
    Irgendwie habe ich aber den Verdacht, dass wir nicht die gleiche Sprache sprechen

  5. #25
    Registriert seit
    05.11.2011
    Beiträge
    75
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Ja ´richtig versteh ich das noch immer nich... was soll das OR denn da überhaupt?

    Nochmal,

    Ich möchte EIN Bit von SmartTags("Interne\TLZ_COM_Error") setzen, um diese Variable mit diesem einen gesetzten Bit als BITMELDUNG auswählen zu können.

    Die Logik hab ich ja auch schon geschrieben, aber wie ich eben dieses eine Bit setze weiß ich noch immer nicht...


    SmartTags("Interne\TLZ_COM_Error") = SmartTags("Interne\BIT_MELDUNGEN.COM_TLZ_ERROR") OR SmartTags("Interne\Bit_Meldungen.COMM_TLZ_ERROR") OR SmartTags("Interne\Bit_Meldungen.KOM_FEHLER_SE_TLZ")


    Dabei gibts die eine INT-Variable und 3 BOOL-Variablen
    Geändert von saarlaender (05.01.2012 um 12:57 Uhr)

  6. #26
    Registriert seit
    19.12.2008
    Beiträge
    336
    Danke
    19
    Erhielt 28 Danke für 28 Beiträge

    Standard

    Welches Bit möchtest du setzen ? Es gibt keine Funktion, die irgendein Bit setzt. Man kann immer nur ein bestimmtes Bit setzen.

    Am Beispiel deiner Variablen :
    Code:
     SmartTags("Interne\TLZ_COM_Error")  =  SmartTags("Interne\TLZ_COM_Error")  or 256  'setzt das Bit 8 in der genannten Variablen

  7. #27
    Registriert seit
    05.11.2011
    Beiträge
    75
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Böse

    Hab doch schon geschrieben dass es grundsätzlich egal is. Das 1. Bit wär wohl am logischsten.

    Ich verstehe aber nach wie vor nicht, wie ich über die 3 BOOL-Variablen das 1. Bit (oder irgendein anders, ich muss nur wissen welches) der INT-Variable setze. Ich verstehe nicht, warum ich mit der INT-Variable das Bit der selben INT-Variable setzen sollte bzw. wie das logisch funktionieren soll. In deinen Beispielen schreibst du immer "INT-Variable = INT-Variable OR xyz" ... ich will aber "INT-Variable BIT 1 = BOOL-Variable 1 OR BOOL-Variable 2 OR BOOL-Variable 3"


    Als Textaufgabe:
    3 verschiedene BOOL-Variablen sollen als EINE Bitmeldung erscheinen.
    Möchte man eine Bitmeldung deklarieren, kann man diese aber nicht aus BOOL-Variablen "ziehen" sondern man braucht z.B. eine INT-Variable (es könnte auch Word usw sein)

    IRGENDEIN Bit dieser INT-Variable muss also über ODER-Verknüpfung von den 3 BOOL-Variablen gesetzt werden. Natürlich muss ich wissen, WELCHES BIT gesetzt wird - es gibt aber von mir aus keine Vorgabe.

    Nachher wähle ich dann beim Einfügen einer neuen Bitmeldung die INT-Variable samt dem eben gesetzten BIT aus und habe meine Bitmeldung.



    Problem:
    Ich weiß dank euch, wie ich eine BOOL-Variable über ODER-Verknüpfung mehrerer BOOL-Variablen setzen kann ... aber nicht, wie ich durch verschiedene BOOL-Variablen ein bestimmtes BIT (egal welches...) einer INT-Variable setze. Das Ganze soll auch über SmartTags laufen...



    Ergebnis:
    Ein Script mit SmartTags, welches z.B. so aussieht ... bloß solls halt funktionieren

    SmartTags("Interne\TLZ_COM_Error".BIT1) = SmartTags("Interne\BIT_MELDUNGEN.COM_TLZ_ERROR") OR SmartTags("Interne\Bit_Meldungen.COMM_TLZ_ERROR") OR SmartTags("Interne\Bit_Meldungen.KOM_FEHLER_SE_TLZ")
    Geändert von saarlaender (05.01.2012 um 13:19 Uhr)

  8. #28
    Registriert seit
    19.12.2008
    Beiträge
    336
    Danke
    19
    Erhielt 28 Danke für 28 Beiträge

    Standard

    Ob das jetzt das Bit sein muss / kann weiß ich auch nicht - wenn du aber dieses setzen willst so ginge das so :
    Code:
    if (SmartTags("Interne\BIT_MELDUNGEN.COM_TLZ_ERROR") OR SmartTags("Interne\Bit_Meldungen.COMM_TLZ_ERROR") OR SmartTags("Interne\Bit_Meldungen.KOM_FEHLER_SE_TLZ") ) then 
       SmartTags("Interne\TLZ_COM_Error") = SmartTags("Interne\TLZ_COM_Error") or 512
    end if
    Vielleicht tust du dir (und mir) den Gefallen und testest das einfach mal - von mir aus auch mir der Visu.
    Du kannst dir ja die Ausgabe-Variable SmartTags("Interne\TLZ_COM_Error") auch auf dem Bildschirm anzeigen lassen - oder in der SPS im Status beobachten.

  9. #29
    Registriert seit
    05.11.2011
    Beiträge
    75
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Danke für die Antwort. Ich hoffe, man versteht was ich machen möchte ^^


    Dein Script werde ich dann mal ausprobieren - bin aber leider erst in ein paar Tagen wieder am Projekt (dh. an der SPS). Bis dahin erhoffe ich mir evt. noch weitere Beispiele - zum Verständnis aber vor Allem zur Sicherheit, damit ich dann auch wirklich was Funktionierendes hab.

    Ich weiß ja auch nicht, aber es kann ja nicht so schwer sein aus BOOL-Variablen eine Bitmeldung zu generieren ?!

  10. #30
    Registriert seit
    19.12.2008
    Beiträge
    336
    Danke
    19
    Erhielt 28 Danke für 28 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Du wirst keine grundlegend anderen Antworten bekommen.
    In einer Variablen (ob Byte, Word, DWord - INT,DINT) repräsentieren die Bits einen bestimmen Zahlenwert. Das Bit 0 z.B. den Wert 2^0 = 1, das Bit 1 den Wert 2^1 = 2, das Bit 2 den Wert 2^2 = 4 usw.. Willst du also grundsätzlich ein Bit einer solchen Variablen setzen so geht das über das ODER-Verknüpfen mit dem entsprechenden Zahlenwert. Hierzu sollte einem natürlich die Grundlage dieser Mathematik vertraut sein - das kann man aber nachlesen. Bei Siemens kommt nun noch erschwerend hinzu, das die Byte-Reihenfolge in Word,DWors bzw. INT,DINT vertauscht sind. Das führt dann z.B. dazu, dass wenn ich das Bit 1 setzen möchte ich den Wert 2^9 verodern muss. Entsprechend aber auch umgekehrt - also für Bit 9 den Wert 2^1.

    Ich denke, jetzt habe ich dich vollkommen verunsichert - aber so ist es nun mal.

Ähnliche Themen

  1. Antworten: 4
    Letzter Beitrag: 20.07.2011, 21:37
  2. Sichtbarkeit von Variablen begrenzen
    Von Thomas E. im Forum CODESYS und IEC61131
    Antworten: 3
    Letzter Beitrag: 27.08.2010, 15:07
  3. Antworten: 2
    Letzter Beitrag: 05.03.2010, 12:46
  4. Antworten: 1
    Letzter Beitrag: 02.03.2009, 13:04
  5. Antworten: 4
    Letzter Beitrag: 12.12.2008, 18:10

Stichworte

Lesezeichen

Berechtigungen

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