Mit VB-Script auf inaktives Bild zugreifen

Januar

Level-2
Beiträge
221
Reaktionspunkte
47
Zuviel Werbung?
-> Hier kostenlos registrieren
Guten Tag.

Ich hab mal wieder eine Frage zu VBS. Ich möchte über eine Schaltfläche ein Script aktivieren, dass ein Objekt in dem aktiven Bild färbt. Für Bequemlichkeit wäre es jedoch auch ganz nützlich, mit selbigem Script ein Objekt in einem anderen Bild mit der gleichen Farbe zu versehen.

Bei folgendem Text gibt es aber eine Fehlermeldung:

Dim color, color2
Set color = Hmi.Runtime.Screens("coloring").ScreenItems("GRundform") //coloring ist das aktive Bild, aus dem das Script aufgerufen wird
color.BackColor = RGB (x,y,z)
Set color2 = Hmi.Runtime.Screens("Anlage").ScreenItems("GRundform") //Anlage ist ein inaktives Bild, in dem sich das Objekt befindet, das ich auch färben möchte
color2.BackColor = RGB (x,y,z)

Die Fehlermeldung sagt mir "Fehler: no screen "Anlage", either..."

Ist mein Vorhaben generell möglich, oder muss ich mir einen Umweg überlegen?

Viele Grüße
Januar

Edit: Ich hab grad erfahren, dass das wohl nur mit WinCC Professional möglich sei.
 
Zuletzt bearbeitet:
führe den 2ten teil des scriptes doch einfach beim bildaufbau des bildes anlage durch.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
führe den 2ten teil des scriptes doch einfach beim bildaufbau des bildes anlage durch.

Das ist jetzt auch das Workaround, allerdings hab ich das an die BEdingung geknüpft, dass das ursprüngliche Script schonmal ausgeführt wurde.
Dadurch verhindere ich, dass das Objekt schon beim ersten Aufbau des Bildes gefärbt wird, bevor die eigentliche Farbe eingestellt wurde.
 
Du meinst vermutlich WinCC flexible oder den TIA-Nachfolger davon?
Dann ist Dein Vorhaben generell nicht möglich und außerdem auch nicht sinnvoll, weil bei jedem Bildaufbau werden die Properties aller Bildobjekte auf die Startwerte aus der Projektierung gesetzt. Dynamisch zugewiesene Werte gehen verloren. Geskriptete Änderungen von Bildobjekt-Eigenschaften führen deshalb meistens zu Darstellungsfehlern, wenn ein bereits angezeigtes Bild erneut aufgebaut wird. Man müßte wirklich ALLE Zuweisungen an Eigenschaften von Bildobjekten bei jedem Bildaufbau wiederholen.

Harald
 
Das ist jetzt auch das Workaround, allerdings hab ich das an die BEdingung geknüpft, dass das ursprüngliche Script schonmal ausgeführt wurde.
Dadurch verhindere ich, dass das Objekt schon beim ersten Aufbau des Bildes gefärbt wird, bevor die eigentliche Farbe eingestellt wurde.
Dein Vorhaben ist sehr einfach realisierbar (und vor allem nachvollziehbar!), indem Du Deine Zuweisungen an (Panel-)interne Variablen machst und die betreffenden Objekteigenschaften mit den Variablen verknüpfst.

Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Dein Vorhaben ist sehr einfach realisierbar (und vor allem nachvollziehbar!), indem Du Deine Zuweisungen an (Panel-)interne Variablen machst und die betreffenden Objekteigenschaften mit den Variablen verknüpfst.

Und wie binde ich die Farbe eines Polygons an drei Integervariablen, die zusammen einen RGB-Code ergeben? Zumal erschwerend hinzukommt, dass diese Variablen immer wieder initialisiert warden...
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich hab in einem Bild drei Schieberegler, die an jeweils eine Int-Variable gebunden sind. Diese drei Int-Variablen zusammen ergeben einen RGB-Code, nach dem ein Objekt gefärbt wird.
Wenn ich das Bild wechsle und dann wieder zurückschalte, werden diese drei Schieberegler wieder auf Null zurückgestellt. Die Variablen sind alle Panel-intern (bzw. werden von einem zweiten Panel über eine HTTP-Verbindung ausgelesen)

Wie kann ich dafür sorgen, dass die Anzeige auch nach einem Bildwechsel noch die ursprünglichen Werte hat?
 
Wenn ich das Bild wechsle und dann wieder zurückschalte, werden diese drei Schieberegler wieder auf Null zurückgestellt.
Warum? Wodurch? :confused:
Die Schieberegler sollten den Einstellwert nicht vergessen, irgendwas schreibt anscheinend auf die Prozessvariablen.


Wie kann ich dafür sorgen, dass die Anzeige auch nach einem Bildwechsel noch die ursprünglichen Werte hat?
Bei den Schiebereglern als Prozessvariable die internen Variablen (x, y, z) anbinden. Bei den Variablen bei Wertänderung ein Skript aufrufen, was prüft, ob das aktuelle Bild (HmiRuntime.BaseScreenName) das Bild mit dem Objekt ist und wenn ja, dann aus den 3 Variablen den RGB-Code berechnet und dem Objekt zuweist. Das Skript auch beim Ereignis "Bild aufgebaut" aufrufen.

Harald
 
Okay, es liegt allem Anschein nach daran, dass diese Variablen auch an eine Rezeptur gebunden sind, wodurch beim Bildaufruf die Standard-Wert aus der Rezeptur in die Variablen gelegt werden...
 
Zurück
Oben