wincc flexible 2008 - Objekte ausblenden/ausgrauen/deaktivieren

pille333_73

Level-1
Beiträge
56
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Experten,

benötige mal wieder Eure Hilfe.

Möchte gerne in wincc mehrere Objekte in diese Fall Schalter entweder ausblenden/ausgrauen oder deaktivieren,
wenn 1 Schalter aktiv (Schalter an). Schalter aus wieder alle anderen Schalter auswählbar.
Mit 2 Schalter bekommen ich mit Sichtbar usw. hin, aber mit mehreren leider nicht.
Hat jemand eine Idee?

Vielen Dank im Voraus!

Gruß
Frank
 
Gib mal ein Beispiel von dem, was du machen möchtest (so eine Art Tabelle) und vielleicht auch mal deinen bisherigen Code dazu ...

Gruß
Larry
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

folgende Visualisierung vor:

Schalter 1 -> soll Ventil 1 an/aus schalten
Schalter 2 -> soll Ventil 2 an/aus schalten
Schalter 3 -> soll Ventil 2 an/aus schalten
Schalter 4 -> soll Ventil 2 an/aus schalten
Schalter 5 -> soll Ventil 2 an/aus schalten
Schalter 6 -> soll Ventil 2 an/aus schalten

Wenn ich jetzt irgend ein Schalter 1-6 betätige sollen alle anderen Schalter nicht mehr schaltbar sein ausgrauen oder deaktivieren aber wenn möglich sichtbar.
Wenn ich erst den betätigten Schalter ausschalte sollen die anderen wieder auswählbar/schaltbar sein. Im SPS Programm sind diese veriegelt. Möchte nur andeuten, das man erst den betätigten Schalter ausschalten muss, damit man ein anderen schalten kann.
Evt. gibt es ja eine einfache Lösung, die ich noch nicht gefunden habe.

Gruß
Frank
 
Du könntest die Bedienbarkeit über eine Variable sperren (TIA Taster anklicken, Eigenschaften Animation, Neue Animation Bedienbarkeit)

Der Taster ist dann aber nicht ausgegraut, das könntest du ja dann als Animation einfügen das er ein anderes Grau bekommt...
 
So kann man sich auch etwas darunter vorstellen.
Ich würde es wie folgt lösen :
Bei 6 Schaltern hast du auch 6 Bool-Variablen in deiner Visu, die dazu dienen, die Bedienbarkeit/Animation der Schalter zu steuern.
Schaltest du Schalter 1 ein, so setzt du die Bedienbarkeit-Sperre für die Schalter 2 - 5 auf TRUE - schaltest du ihn wieder aus dann wieder auf FALSE.
Analog verfährst du mit jedem der anderen Schalter.
An jedem Schalter verbindest du nun die jeweilige Bool-Variable mit der Bedienbarkeit und ggf. zusätzlich mit der Animation.

Gruß
Larry
 
Zuviel Werbung?
-> Hier kostenlos registrieren
o.k. Prinzip verstanden

Habe 6 Bool-Variablen V10.1 - V10.7 (Schalter 1-6)
Wo stelle ich aber die Bedienbarkeit-Sperre für Schalter 2-5 ein, kann ja nur eine Variable auswählen (Bild), oder bin ich in der falschen Maske zum Einstellen (evt. unter Ereignisse)?
Könnt Ihr ggf. den Weg kurz beschreiben?

Danke
Frank

Bild1.jpg
 
Hallo Pille,

es ist eigentlich ganz einfach, wenn du anstatt von Schaltern Schaltflächen (bzw. Taster) verwendest. Jede einzelne dieser Schaltflächen betrachtest du wie einen simplen Leuchtdrucktaster. D.h. du hast jeweils eine Steuervariable als "Kontakt" und eine Statusvariable als "Meldeleuchte".

Ohne es zu begründen, beschreibe ich im Folgenden nur EINE Lösung, die beste natürlich ;-) .

Steuervariable:
Eine boolsche Variable, die unter Ereignis/Klicken/SetzeBit gesetzt wird. Zurückgesetzt wird sie in der Steuerung.

Statusvariable:
Das ist im Idealfall eine echte Betriebsmeldung wie z.Bsp. ein Strömungswächter, die Ausgabe des Schaltzustandes oder eine Kombination aus beiden (blinkend/nicht blinkend). Mit diesem Bit zeigt man über Animation/Gestaltung den Schaltzustand grafisch an. Eine Erweiterung wäre die Anzeige weiterer Zustände wie "Störung quittiert", "nicht quittiert", etc. Dann müsste die Statusvariable aus einem Byte, Word o.ä. bestehen.

Das war's eigentlich auch schon. Der Rest ist Aufgabe der Steuerung.
Das könnte dann so aussehen:

Code:
// Ventil 1
U    V10.1      // Steuerbit aus Visu 
FP   V10.1.FLM  // Impulsbildung
X    VENTIL_1   // toggeln
UN   VENTIL_2   // verriegeln
UN   VENTIL_3   // verriegeln
..
UN   VENTIL_x   // verriegeln
=    VENTIL_1   // Ausgang
CLR
=    V10.1      // Steuerbit aus Visu zurücksetzen
Unter Animation/Bedienbarkeit würde ich in diesem Fall erst einmal garnichts machen.


Gruß, Onkel
 
hab es hinbekommen über 2 Skripte, dass wenn ich Schalter 1 betätige Schalter 2,3,4,5,6 nicht sichtbar sind und umgekehrt.
---------------------------------------------------------------------------------------------------------------------------
Skript_1

Dim Objekt
Set Objekt = HmiRuntime.Screens("Seite_3_Bewässerung").ScreenItems("Schalter_3")
Objekt.Visible = False
Set Objekt = HmiRuntime.Screens("Seite_3_Bewässerung").ScreenItems("Schalter_4")
Objekt.Visible = False
Set Objekt = HmiRuntime.Screens("Seite_3_Bewässerung").ScreenItems("Schalter_5")
Objekt.Visible = False
Set Objekt = HmiRuntime.Screens("Seite_3_Bewässerung").ScreenItems("Schalter_6")
Objekt.Visible = False
Set Objekt = HmiRuntime.Screens("Seite_3_Bewässerung").ScreenItems("Schalter_7")
Objekt.Visible = False
Set Objekt = HmiRuntime.Screens("Seite_3_Bewässerung").ScreenItems("Schalter_8")
Objekt.Visible = False

Skript_2

Dim Objekt
Set Objekt = HmiRuntime.Screens("Seite_3_Bewässerung").ScreenItems("Schalter_3")
Objekt.Visible = True
Set Objekt = HmiRuntime.Screens("Seite_3_Bewässerung").ScreenItems("Schalter_4")
Objekt.Visible = True
Set Objekt = HmiRuntime.Screens("Seite_3_Bewässerung").ScreenItems("Schalter_5")
Objekt.Visible = True
Set Objekt = HmiRuntime.Screens("Seite_3_Bewässerung").ScreenItems("Schalter_6")
Objekt.Visible = True
Set Objekt = HmiRuntime.Screens("Seite_3_Bewässerung").ScreenItems("Schalter_7")
Objekt.Visible = True
Set Objekt = HmiRuntime.Screens("Seite_3_Bewässerung").ScreenItems("Schalter_8")
Objekt.Visible = True

---------------------------------------------------------------------------------------------

Müsste dann aber 14 Skripte schreiben, kann man das evt. etwas vereinfachen mit if then usw., damit ich nur 2 skripte habe?

Jetzt sind diese ja nicht sichtbar, kann diese auch auf Enabled setzen, würde diese dann aber gerne ausgrauen - wie heist diese Funktion?

Danke im Voraus

Gruß
Frank
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Frank,
du kannst sie nicht ausgrauen - dafür gibt es keine Property. Es gibt aber die Möglichkeit der Animation (Schriftfarbe) - ich kann aber zur Zeit nicht checken, ob du an die im HMIRuntime-Obejkt auch rankommst. Wenn du sie nicht unsichtbar machen willst dann solltest du sie aber sperren - also Bedienbarkeit - auch da mußt du kontrollieren, ob du im HMIRuntime-Obejekt diese Property ansprechen kannst.

Wenn du nicht 14 Scripte erstellen willst dann ginge das auch in dem du deiner Prozedur als Übergabe-Parameter z.B. den Namen des aktuellen Schalters mitgibst.
Nun kannst du innen dann mit IF-Abfragen checken, welche der ScreenItems noch barbeitet werden können/sollen.
Mit einem weiteren Übergabe-Parameter könntest du festlegen, ob Enabled oder Disabled werden soll. Nun hättest du dann insgesamt nur noch ein Script - dies allerdings mit 2 Parametern, die sinnvoll beschaltet werden wollen ...

Gruß
Larry
 
Hallo,

für die 'Deaktivierung' einer Schaltfläche oder anderer Eingabeobjekte verwende ich meistens eine/mehrere separate, auf einer höheren Ebene liegende Grafikanzeige(n), welche ich mit Hilfsvariablen steuere.
Für die meisten Bilder bzw. Editoren meiner HMIs haben ich Scripte projektiert, die quasi global solche Hilfsvariablen behandeln. So bin ich relativ flexibel. Ein weiterer Vorteil ist dabei die Debugmöglichkeit der Beobachtung von solchen Variablen.


Gruß, Fred
 
Zuletzt bearbeitet:
Hallo zusammen,

habe es jetzt so wie ich es möchte, funktioniert!
Habe die Variante ausblenden über Skripte usw. gewählt.

Danke an alle, für Infos/Anregungen.

Bis dann

Gruß
Frank
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Pille,

schön dass du es nach deinen Vorstellungen hinbekommen hast. Für eine Einzelanwendung ist so eine Lösung sicherlich auch völlig akzeptabel. Auf Dauer, bzw. wenn man tagtäglich solche Systeme projektieren muss, macht man sich mit solchen Vorgehensweisen allerdings das Leben sehr schwer. Hierzu fallen mir zwei, drei gewichtige Gründe ein. Zum Einem hat es unsereiner täglich mit verschiedenen HMI-Techniken zu tun. Stell dir vor, du bekommst morgen ein Basic-Panel vorgesetzt, mit dem du deine Ventile visualisieren musst. Dann musst du das irgendwie ohne Scripte bewältigen, fängst also wieder ganz von vorn an. Und übermorgen kommt einer und möchte noch eine zweite oder dritte Bedienstelle für die Ventile, in welcher Form auch immer. Wie willst du dann die Anzeigen synchronisieren? Das ist weder flexibel noch professionell.

Meines Erachtens wird gerne mal aus Übereifer in HMI-Systeme viel zu viel "Intelligenz" gepackt. Ich wollte nur mal darauf hinweisen. Wie gesagt, für Einzelfälle ist das schon völlig in Ordnung.


Gruß, Onkel
 
Ich halte die umständliche Skript-Lösung ebenfalls für nicht optimal. Ausserdem muß noch beachtet werden, daß per Skript zugewiesene Eigenschaften an ScreenItems-Objekten nur bis zum nächsten Bildaufbau halten und danach erneut zugewiesen werden müssen.

Harald
 
Meines Erachtens wird gerne mal aus Übereifer in HMI-Systeme viel zu viel "Intelligenz" gepackt. Ich wollte nur mal darauf hinweisen. Wie gesagt, für Einzelfälle ist das schon völlig in Ordnung.

in diesen Fall hätte ich auch auf Scripte verzichtet, leider ist gerade bei Siemens so
das die Software ProTool bis TIA zu wenig bietet um auf Scripte zu verzichten.

Aber schön bunt ist Sie ...
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen,

zu früh gefreut, ist natürlich das passiert was Ihr geschrieben habt mit dem Menüwechsel/Bildaufbau.
Sobald ich das Menüwechsel mache sind die Schalter Ventil 1-6 wieder komplett sichtbar auch wenn z.B. Schalter Ventil 1 an.
Nochmal mein Aufbau in diesem Menü:

1 Hauptschalter -> der die Schalter Ventil 1-6 sichtabr machen, das funktioniert auch bei Menüwechsel -> über Animation Sichtbarkeit gelöst.
Schalter Ventil 1-6, wenn einer an dann alle anderen nicht sichtbar, über Skript wie oben beschrieben gelöst, aber Thema Menüwechsel.
Würde gerne wie beim Hauptschalter lösen, kann aber ja nur eine Variable über Animation Sichtbarkeit eintragen (evt. mehrere aber wie).
Hat jemand noch eine Idee/Vorschlag/Anregung?

Vielen Dank im Voraus!

Frank
 
Hallo Pille,

es freut mich wirklich sehr dass du einen großen Schritt der Erkenntnis bewältigt hast ;-) .

Bilde deine Statusanzeigen in der Steuerung! Das hat zum einen den äußerst positiven Effekt dass diese Anzeigen einen realitätsnahen Zustand darstellen, zum anderen kannst du soviel verknüpfen wie du willst.


Gruß, Onkel
 
Zuletzt bearbeitet:
*dem-Onkel-ein-bisschen-in-den-Rücken-fall*

Statt in den Skripten sichtbar/unsichtbar direkt an die Screen-Objekte zuzuweisen kann man den gewünschten Zustand an HMI-interne Variablen zuweisen (SmartTags("showButton1") ) und die Variable bei der Animation verknüpfen. Dann überstehen die Zuweisungen auch Bildwechsel - doch beim nächsten Runtime-Start ist auch dieses System unkontrolliert.

Was man noch testen könnte: kann das HMI die Sichtbarkeits-Animation per Bit-Auswahl oder kann man Multiplex-Variablen verwenden?

Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
*dem-Onkel-zur-Unterstützung-herbei-eilt* .... ;)

Ein Problem das vielleicht noch nicht erwähnt wurde:
Falls sich, während du dein Bild offen hast, irgendwas an den Ventilen ändert, z.B. die SPS schaltet Sie ab, dann müsstest du
dein Skript wahrscheinlich neu triggern. Um so ein Fall entgegen zu wirken müsstest du dein Skript womöglich zyklisch aufrufen.
Auch nicht gerade toll.
 
Zuletzt bearbeitet:
Hallo an alle,

klappt jetzt wie ich es möchte.
Habe Vorschlag von Onkel Dagobert mit Statusvariablen (aus SPS Steuerung) -> WinCC Animation / Sichtbarkeit realisiert.

Vielen Dank für Eure Hilfe!

Gruß
Frank
 
Zurück
Oben