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



## saarlaender (27 Dezember 2011)

Hallo Leute,

ich habe 3 CPUs mit jeweils einer Meldung, die mich gerade interessiert. Wenn eine dieser Meldungen ansteht, soll eine Linie sichtbar werden und blinken (Sichtbarkeit = Sichtbar; Gestaltung = Blinkend).

Alternativ reicht auch nur das Blinken, wenn eine der 3 Meldungen ansteht und sonst kein Blinken - falls machbar.


Mit Meldung meine ich eine BOOL-Variable in einem DB, der jeweils in jeder CPU mit jeweils unterschiedlicher Adresse vorhanden ist.

z.B. CPU#1 db1000.dbx10.0 | CPU#2 db1000.dbx15.2 | CPU#3 db1000.dbx27.1


Ich habe schon was über das Multiplexen gelesen, aber bin mir nicht sicher ob dass das Richtige ist und wie ich es nutze... also was genau ich unter "Sichtbarkeit" und "Gestaltung" dann als Variable auswähle und welche weiteren Einstellungen ich in den Screens machen muss.


----------



## Aventinus (27 Dezember 2011)

Auf welchem Panel sollte das denn laufen?

Wieviele Verbindungen unterstützt dein Panel gleichzeitig?
Kannst du Skripte?

Evtl. jede Variable auf Zyklisch Lesen stellen und bei Wertänderung ein Skript triggern.
Im Skipt veroderst du die drei Variablen auf eine Interne Variable und die nimmst du für die Animation.

Oder du legst drei Linien übereinander, jeweils mit einer Variable zur Animation. Sollte auch klappen.


----------



## saarlaender (27 Dezember 2011)

Hallo. Das mit den 3 Linien ist bisher auch so gemacht worden - ich wollte mir das aber sparen, weil ich gerade alle Variablen aktualisieren muss und dann eben VIEL weniger Arbeit hätte, wenn das mit sowas wie Multiplex-Zeug funktioniert.

Scripten kann ich nicht und der komplette Rest funktioniert ... also ich pass die funktionierende Visu gerade nur an.


Wenn es also keine eingebaute Funktion gibt bzw. das Multiplexen nicht für diesen Verwendungszweck gedacht is muss ich wohl 3 Linien machen?!


----------



## Aventinus (27 Dezember 2011)

Mit Multiplexen würde auch bei gleichen Adressen so nicht funktionieren. Beim Mulitplexen wählst du ja über eine Multiplexvariable aus welche Variable zur Animation verwendet wird. Du möchtest ja gleichzeitig alle drei verwenden.


----------



## saarlaender (27 Dezember 2011)

Ja also wenn eine der 3 TRUE is, soll was passieren. Alles andere is egal (dh ob nun nur eine, 2 oder alle 3 TRUE sind ist egal).


----------



## Larry Laffer (27 Dezember 2011)

Hallo,
mir fällt hier auch nur die Möglichkeit ein, die 3 Variablen mit einem Script (das bei Wertänderung jeder der 3 Variablen aufgerufen wird) zu verknüpfen. In dem Script kannst du die 3 Variablen einfach zu einen neuen Variablen verodern, die du dann für die Darstellung nimmst. Außerdem müßten die 3 Variablen in ihrer Aktualisierung von "zyklisch bei Verwendung" auf "zyklisch fortlaufend" umgeswitched werden.

Kann die Visu also Scripte ?

Ansonsten mußt du die Variablen in einer der 3 SPS'en sammeln und daraus eine neue zusammen fassen - das wäre aber auch nicht weniger Aufwand ...

Gruß
Larry


----------



## saarlaender (27 Dezember 2011)

Also Scripte kann ich nich .. dh nich selbs machen. Wenn mir jmd ne Vorlage gibt, kann ich die schon Anpassen denk ich ... ^^


----------



## rostiger Nagel (27 Dezember 2011)

Ich würde bei einer solchen Anwendung, das wie in Larry's zweiten Ansatz auf der SPS Seite lösen. 
Zum einen spart so etwas Power Tags, belastet die HMI nicht mit belanglosen, ist für dritte viel 
einfacher zu durchschauen und erweiterbar.
Da dein Erfahrungsschatz mit scripten gering ist bleib auf der Steuerungsseite


----------



## Larry Laffer (27 Dezember 2011)

... ich denke aber, anlegen wirst du eins schon können ?

In dieses Script schreibst du dann :





> meineZusammenfassung = meine_Variable_1 OR meine_Variable_2 OR meine_Variable_3


"meineZusammenfassung wäre hier deine neue Variable - das kann auch eine interne sein.
Das Script wird dann wie von mir beschrieben aufgerufen. 
"meine_Variable_1" etc. wären durch die Namen deiner Bit's zu ersetzen - bitte die Aktulisierungs-Eigenschaften, wie von mir genannt, ändern.

Kommst du damit weiter ?


----------



## saarlaender (27 Dezember 2011)

Ich versuchs mal. Is aber definitiv einfacher als auf SPS-Seite, da ich dort zwischen den 3 CPUs die DBs hin und her kommunizieren müsste (da wird schon genug kommuniziert ^^). Wenn dann eine der CPUs ausfällt und ich über die Visu gerade auf diese zugreife, klappt erstmal nichts mehr. Daher würde ich eben gerne über die Visu auf alle 3 CPUs zugreifen und sobald eine TRUE is soll was passieren.


Ich werd das gleich mal Testen


----------



## saarlaender (27 Dezember 2011)

```
Dim TLZ-Error-1 = SmartTags("Interne\BIT_MELDUNGEN.COM_TLZ_ERROR")
Dim TLZ-Error-2 = SmartTags("Interne\Bit_Meldungen.COMM_TLZ_ERROR")
Dim TLZ-Error-3 = SmartTags("Interne\Bit_Meldungen.KOM_FEHLER_SE_TLZ")
Dim TLZ-Error-Alle = SmartTags("Interne\TLZ_COM_Error")
TLZ-Error-Alle = TLZ-Error-1 Or TLZ-Error-2 Or TLZ-Error-3
```

Passt das so?


----------



## Aventinus (27 Dezember 2011)

```
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")
```

sollte eigentlich auch reichen.


----------



## saarlaender (27 Dezember 2011)

THX!!!

Wo finde ich das mit dem Aktualisierungszeugs? Ich kann da in den Eigenschaften vom Script eigentlich garnix einstellen...


----------



## rostiger Nagel (27 Dezember 2011)

Das Script hat da keine Möglichkeiten zum einstellen, diese sind rein Ereignis gesteuert zb
Tastendruck oder Weränderung einer deiner Variablen. An den Variablen selber kannst du die
Aktualisierungszeti verändern von 100ms in festen Abständen aufwärts. Aber du musst daran
denken die Aktualisierung auf ständig lesen einzustellen, dami das Script auch ausgeführt wird
wenn andere Bilder aktiv sind.


----------



## saarlaender (30 Dezember 2011)

Das hat also alles geklappt soweit denke ich. Die Variablen aus den DBs hab ich auf 1s Zyklisch statt nur bei Verwendung eingestellt.

Mir fehlt jetzt eigentlich nur noch das gleiche mit Bitmeldungen bzw. DBs, aber möglichst ohne die alle einzeln als Variablen zu adden.


DH ich möchte entweder mehrere Bitmeldungen zu einer Variablen zusammenfassen oder mehrere Adressen von DBs. Es sind aber zuviele, um die einzeln reinzuhacken.

Gibts ne Möglichkeit, mehrere SmartTags gleichzeitig auszuwählen in einem DB oder eben DIREKT zu Adressieren?


DH:

Variable1 = db300.dbx10.0 OR db300.dbx10.1 OR ... bis z.B. 12.7


----------



## Lupo (30 Dezember 2011)

Das geht gar nicht. Du mußt das schon in der SPS zusammenfassen.


----------



## saarlaender (30 Dezember 2011)

Rein theoretisch ginge es, wenn ich alles mit Smart-Tags mache. Da kann ich ja über Rechtsklick -> Objekte Anzeigen zu den jeweiligen DBs browsen. Aber das geht ja nur sehr langsam, wenn ich so viele Auswählen muss.

Also kein Workaround? :-(


----------



## saarlaender (4 Januar 2012)

Larry Laffer schrieb:


> ... ich denke aber, anlegen wirst du eins schon können ?
> 
> In dieses Script schreibst du dann :
> "meineZusammenfassung wäre hier deine neue Variable - das kann auch eine interne sein.
> ...




Hallo nochmal. Das hat ja wunderbar geklappt - LEIDER brauche ich aber auch einige Bitmeldungen, die ich so zusammen fasse. Diese funktionieren aber nur z.B. als INT (dh die Variable darf nicht BOOL sein).

Ich weiß nun aber nicht, wie ich das im Script realisiere um die einzelnen Bits anzusprechen (dh. z.B. Variable 1 als INT soll auf 0.0 das ODER-Verknüpfungsergebnis bekommen)


----------



## Lupo (4 Januar 2012)

Stichwort "Ausmaskieren"


```
myBit0 = (myInt and 256) <> 0
myBit1 = (myInt and 512) <> 0
...
myBit8 = (myInt and 1) <> 0
myBit9 = (myInt and 2) <> 0
...
```


----------



## saarlaender (4 Januar 2012)

Lupo schrieb:


> Stichwort "Ausmaskieren"
> 
> 
> ```
> ...




sry das versteh ich nich ganz... wie würde das bei folgendem Variablenzeugs aussehen:


```
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")
```

Wobei Interne\TLZ_COM_Error die INT-Variable für die Bitmeldung später ist (ich möchte nur ein Bit hier beschreiben, da ich für jede Meldung erstmal eine separate INT-Variable habe.


----------



## Lupo (4 Januar 2012)

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.


----------



## JesperMP (4 Januar 2012)

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.


----------



## saarlaender (4 Januar 2012)

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.


----------



## Lupo (5 Januar 2012)

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 :
	
	



```
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 8)


----------



## saarlaender (5 Januar 2012)

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_


----------



## Lupo (5 Januar 2012)

*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 :
	
	



```
[B]SmartTags("Interne\TLZ_COM_Error")[/B]  =  [B]SmartTags("Interne\TLZ_COM_Error")[/B]  or 256  'setzt das Bit 8 in der genannten Variablen
```


----------



## saarlaender (5 Januar 2012)

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")


----------



## Lupo (5 Januar 2012)

Ob das jetzt das Bit sein muss / kann weiß ich auch nicht - wenn du aber dieses setzen willst so ginge das so :
	
	



```
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.


----------



## saarlaender (8 Januar 2012)

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 ?! :-(


----------



## Lupo (8 Januar 2012)

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.


----------



## saarlaender (12 Januar 2012)

Dass das bei WinCC so kompliziert ist hätte ich nicht gedacht... 

Jedenfalls hat das hier nicht funktioniert. Ich habe das Beispiel sowohl mikt 256 als auch mit 512 getestet und JEWEILS zur Sicherheit auf Bit 0 und Bit 1 abgefragt. Zum Test dann sowohl als Integer, Binär und Bit mit jeweils Wert 0 und 1.

Bin ich also quasi der Erste, der einen BOOL-Wert als BITMELDUNG ausgeben will? Ich kann mir echt nicht vorstellen, dass es da keine Lösung für gibt... (außer alle Linien - in meinem Fall - 3 mal übereinander zu legen). Man stelle sich vor, man hat mehr als 3....


----------



## Larry Laffer (12 Januar 2012)

Ob du dabei der erste bist weiß ich nicht.
Allerdings, wenn ich auch am Anfang dieses Thread noch dachte, dass ich wüßte um was es ging/geht - jetzt nun nicht mehr.
Somit ist es (aus meiner Sicht) sehr schwierig zu helfen, wenn man nicht weiß, was dabei herauskommen soll.
Ich wiederhole also an dieser Stelle die schon geäußerte Frage : "Was willst du nun genau bezwecken ?"

Gruß
Larry


----------



## saarlaender (12 Januar 2012)

also zu beginn gings um das zusammenfassen von bool-variablen zu einer (ebenfalls) bool-variable um diese als animation zu verwenden.

das klappte



nun brauche ich aber nicht nur animationen sondern auch bitmeldungen. leider kann man aber keine bool-variablen als bitmeldung auswählen. Daher war mein ansatz, eine nicht-bool-variable aus den entspr bool-variablen zu "generieren"

dh zb das bit 0 einer int-variable setzen, wenn eine der 3 bool-variablen true ist.


----------



## Larry Laffer (13 Januar 2012)

OK ... und so eine Variable wäre dann z.B. "*SmartTags("Interne\TLZ_COM_Error")*  " ???

Die ist in den Bit-Meldungen projektiert ? Ich nehme mal an : Ja.
Als was ist die Variable angelegt ? Intern oder einer Steuerung zugeordnet. Die Frage deshalb, da ich annehme, dass bei Bit-Meldungen interne Variablen nicht auf Wertänderung überprüft und ausgewertet werden.
Wie wird die Variable aktualisiert ? Es müßte hier dann m.E. schon "zyklisch fortlaufend" passieren.
Ist das Alles so realisiert und auch sicher gestellt, dass das Script, in dem du die Variable zuweist, auch wirklich aufgerufen wird und weiterhin auch sichergestellt ist, dass nicht noch jemand anders (z.B. einer der SPS'en) die gleiche Variable auch modifizieren kann (und das auch tut), dann sollte das auch funktionieren - egal ob du nun das richtige Bit herein-geodert hast oder nicht.

Es wäre schön, wenn du zu den von mir gestellten Fragen antworten würdest ...

Gruß
Larry


----------



## saarlaender (13 Januar 2012)

aaaalso

Ich habe 3 verschiedene 300er CPUs hier. Jede CPU (jeweils natürlich aus einem bestimmten DB) hat jeweils 3 Meldungen, die aber auf jeder CPU das gleiche bedeuten. Sinn ist, dass auch bei Ausfall einer oder 2 dieser CPUs die Meldung noch über die 2. oder 3. CPU an die Visu kommt. Die CPUs kommunizieren untereinander.

Der Einfachheit halber gehen wir erstmal von EINER internen Meldung aus, welche aus 3 verschiedenen Meldungen über ODER verknüpft wird. Nachher kann ich die 2 anderen selbst ERstellen.

In der Visu sollen Animationen und Bitmeldungen verwirklicht werden.


Animationen kann man über BOOL-Variablen verwirklichen. Dank eurer Hilfe habe ich bisher z.B. eine INTERNE VARIABLE (BOOL) mit 3 Variablen der CPUs (BOOL) über ODER verknüpft.

Bitmeldungen kann man aber nicht über BOOL-Variablen verwirklichen. Das Problem ist nun, aus den vorliegenden BOOL-Variablen (ob nun die zusammengefasste INTERNE oder eine aus den CPUs) eine INTERNE Bitmeldungs-Variable (NICHT-BOOL) zu machen, um diese einer Bitmeldung (Triggeradresse) zuzuweisen.

PS: Die aktualisierung hab ich jeweils zyklisch fortlaufend auf 1s


----------



## Kai (13 Januar 2012)

saarlaender schrieb:


> Das Problem ist nun, aus den vorliegenden BOOL-Variablen (ob nun die zusammengefasste INTERNE oder eine aus den CPUs) eine INTERNE Bitmeldungs-Variable (NICHT-BOOL) zu machen, um diese einer Bitmeldung (Triggeradresse) zuzuweisen.



Du könntest in WinCC flexible die Systemfunktionen SetBitInTag und ResetBitInTag verwenden:


```
Dim blnMeldung1
Dim blnMeldung2
Dim blnMeldung3

blnMeldung1 = SmartTags("Interne\BIT_MELDUNGEN.COM_TLZ_ERROR") 
blnMeldung2 = SmartTags("Interne\Bit_Meldungen.COMM_TLZ_ERROR") 
blnMeldung3 = SmartTags("Interne\Bit_Meldungen.KOM_FEHLER_SE_TLZ")

If blnMeldung1 Or blnMeldung2 Or blnMeldung3 Then
    ' Bit 0 in Variable setzen
    SetBitInTag SmartTags("Interne\TLZ_COM_Error"), 0
Else
    ' Bit 0 in Variabel rücksetzen
    ResetBitInTag SmartTags("Interne\TLZ_COM_Error"), 0
End If
```

Gruß Kai


----------



## Kai (13 Januar 2012)

Siehe auch die Programmbeispiele in dem folgendem Thread:

http://www.sps-forum.de/showthread.php?24871-Skript-in-Bildbaustein-Bit-in-Variable-setzten

Gruß Kai


----------



## Larry Laffer (13 Januar 2012)

@Kai:
auf die von dir genannten Funktionen bin ich noch gar nicht gekommen ... Die sind im Grunde aber auch nur eine andere Variante des Vorschlags von Lupo.
Ich habe irgendwie noch immer das Gefühl, nicht verstanden zu haben, wovon der TE spricht / wo er hinwill (ich beziehe mich dabei auf seinen Beitrag #35) obwohl ich schon mal gedacht habe, es verstanden zu haben ...

@TE:
siehe meine Statement an Kai ...


----------



## saarlaender (2 Februar 2012)

Sorry war im Urlaub ^^

Also ich wollte genau das, was mir der Kollege hier geschrieben hat. Ich konnts noch nicht testen, aber das ist zu 99% das was ich suche...



In einfachen Sätzen nochmal rein zum Verständnis:

1.) MEHRERE BOOL-Variablen sollen EIN Objekt Animieren. Ein mehrfaches Zeichnen soll wegfallen. Die OR-Verknüpfung hat hier funktioniert (zwischenzeitlich nicht mehr, aber WinCC Flexible hat halt sein Eigenleben).

2.) BOOL-Variablen sollen BITMELDUNGEN generieren bzw. diesen zugeordnet werden. Problem: BITMELDUNGEN verlangen z.B. INT/WORD/...-Variablen, BOOL-Variablen werden nicht unterstützt. Ein entsprechendes Zusammenfassen soll SPS-Seitig WEGFALLEN bzw. NICHT realisiert werden sondern auf Seiten von WINCC FLEX erfolgen (z.B. mit dieser SetBit-Geschichte)


----------



## Larry Laffer (2 Februar 2012)

... ich denke, dann ist dir ja erstmal geholfen.
Du solltest aber trotz Allem nicht vergessen (aus den Augen verlieren) dass die Visu nicht vordergründig für so etwas gedacht (gemacht) ist.
Damit diese Zusammenfassung funktioniert muss jede Variable IMMER aktualisiert werden (zyklisch fortlaufend). Sind dies dann sehr viele Variablen kann es dann irgendwann einmal problematisch werden.
Jede dieser Variablen muss das Script, in dem sie verwendet wird, bei Wert-Änderung aufrufen. Das ist an sich nichts Schlimmes, belastet aber die Visu und deren Performance bei vielen Variablen ganz schön.

Wie weit willst du denn dabei gehen ?

Gruß
Larry


----------

