WinCC "BackFillStyle" eines Buttons mit C oder VB anpassen

Jerry

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

ich arbeite erst seit recht kurzer Zeit in TIA und kenne mich allgemein noch nicht so gut aus. Aber ich komme gerade an dieser Stelle einfach nicht weiter.

Erstmal zu den allgemeinen Informationen: Ich verwende TIA V18 Update 1 mit WinCC Professional. Die Anwendung soll auf einem PC mit Windows 10 laufen.

In der Anwendung gibt es eine Navigationsleiste über die unterschiedliche Screens angewählt und abgewählt werden können. Aufgrund unterschiedlicher Beschränkungen von WinCC Professional war ich leider dazu gezwungen, diese Navigationsleiste für jeden Screen einzeln zu erstellen.

Damit ich bei einer Änderung an der Navigationsleiste diese einfach nur kopieren kann, versuche ich die Darstellung der Navigations-Buttons über ein einheitliches C-Skript zu gestalten. Das funktioniert mit der Eigenschaft „Pressed“ auch wunderbar, sodass sich diese Eigenschaft bei allen Buttons beim Bildwechsel pasend anpasst. Nun möchte ich jedoch auch die Eigenschaft „BackFillStyle“ der Buttons anpassen, sodass sie im aktiven Zustand „solid" und im inaktiven zustand „transparent“ sind. Über Animationen – Eigenschaft animieren, mit einer Variablen, funktioniert das auch, jedoch gibt es dann eine sehr hohe Reaktionszeit, welche durch ein C- bzw. VB-Skript vermieden werden könnte.

Zu den Problemen:
1. Versuche ich in C dem „BackFillStyle“ True oder False zuzuweisen, ist der Button einfach immer „solid“. Weise ich Zahlenwerte zu, so erhalte ich bei Werten von kleiner gleich -1 einen weißen, aber nicht transparenten Hintergrund und bei allen positiven Werten wieder einen „solid"Hintergrund .

2. Das alles wäre kein großes Problem, wenn ich in VB, wo das mittels Eigenschaft animieren funktioniert, den Zustand des Buttons mit der Eigenschaft „Pressed“ abfragen könnte, aber dann bekomme ich den folgenden Fehler.

Weiß einer von euch evtl. eine Lösung für eines meiner beiden Probleme?

Danke schonmal im Voraus
 

Anhänge

  • Error_property_Pressed.png
    Error_property_Pressed.png
    5,3 KB · Aufrufe: 7
Du kannst in C-Script die Eigenschaften mit folgendem abfragen, wenn der Button "btnTest" heißt:

printf("BackFillStyle=%s\r\n", GetPropLong(screenName,"btnTest","BackFillStyle"));
printf("Pressed=%d\r\n", GetPropBOOL(screenName,"btnTest","Pressed"));

Da kann man sich auch die Werte ansehen die eine Eigenschaft besitzt, wenn man diese in dem Editor einstellt. Dieser Wert lässt sich dann genauso setzen. In TIA V17 war ein Fehler bei den Konstanten von BackFillStyle, die Doku sagt 0 und 1, wenn man abfragt sind das da aber 0 und 65536.

Übrigens, dass das mit der Navigation nicht möglich ist, glaube ich fast nicht. Man muss nur eine entsprechende Hierarchie von Bildfenstern aufbauen. Also Beispielsweise für oben Navigation und unten Bild, dann ein Hauptbild, welches ein Bildfenster oben enthält welches die Navigation enthält, und ein Bildfenster unten welches das Bild enthält. Dann ist das Hintergrundbild immer aktiv, und es werden nur die Bilder in dem Bildfenster ausgetauscht. Dazu muss man z.B. aus der Navigation heraus eben das Elternfenster und das Bildfenster abfragen, und dann alles zusammenbauen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Thomas,

danke für deine Antwort. Ich habe mittlerweile eine Möglichkeit gefunden. Tatsächlich verwende ich ein Bildfenster, indem mein Hauptbild ist, was ich bei der Adressierung in VB nicht beachtet habe. Nachdem ich das korrigiert habe, ging es über das VB-Skript.

Was du mit der Navigation geschrieben hast, stimmt natürlich. Das habe ich in meiner ersten Anfrage nicht genau genug beschrieben. Die Navigationsleiste soll einerseits ein- und ausgeblendet werden und damit über einem Teil des eigentlichen Bilds liegen, andererseits soll es auch noch im eingeblendeten Zustand teiltransparent sein, sodass man sieht, was im eigentlichen Bild dahinter ist. Das geht mit einem Bildfenster soweit ich weiß nicht.

Ich wollte trotzdem mal mit deinem Code die Werte überprüfen, bekomme dann jedoch je nach Button entweder eine access violation oder nur den Wert (null) zurück. Anbei mal die Fehlermeldung. Habe deinen Code kopiert und Bildname und Bildobjekt ausgetauscht. Hast du eine Idee, was der Fehler hier sein könnte?
 

Anhänge

  • Access_violation.png
    Access_violation.png
    23,4 KB · Aufrufe: 6
Hab mich oben vertippt, anstatt %s muss dort ein %ld hinein, da GetPropLong ja kein Zeiger auf einen String zurückgibt, sondern eine Zahl

printf("BackFillStyle=%ld\r\n", GetPropLong(screenName,"btnTest","BackFillStyle"));
 
Perfekt, so funktioniert es, auch in C. Ich habe es mit Set/GetPropBOOL/Double probiert, aber da ging es nicht. Ich habe im Informationssystem auch kein Beispiel oder Überblick dazu, gefunden, welche Eigenschaft, welchen Datentyp hat, bzw. welcher Get/SetProp-Befehl geeignet ist.

Man gewöhnt sich sicher daran und wenn man die Möglichkeiten langsam kennen lernt, weiß man sich selbst auch besser zu helfen, aber als Anfänger tue ich mir da gerade echt schwer und brauche für viele einfache Kleinigkeiten einfach viel zu lange. Gibt es da irgendwo eine gute Übersicht oder auch Einführung in diese Themen? Oder kannst du mir irgendetwas anderes empfehlen, wo man sich gut informieren kann?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Meinst du wie sich Eigenschaften über Skripte modifizieren lassen? Bei WinCC 6/7 habe ich dazu gelegentlich die Sprache der Oberfläche auf Englisch umgestellt, dann sieht man nämlich direkt den Namen der Eigenschaften im Graphics Editor, und anhand der Werte sieht man auch direkt, um welchen Datentyp es sich dabei handelt. Irgendwo in der Dokumentation ist das auch zu finden, aber das Problem ist dann meistens zu finden wo es steht.
Ob das bei WinCC Prof. mit der Sprachumschaltung auch noch funktioniert und die Namen dort identisch sind habe ich noch nicht geprüft. Dort gibt es bei den Eigenschaften auch zwei Ansichten, einmal diese Übersicht und die Listendarstellung. Aus den Namen in der Übersicht lässt sich meiner Meinung nach überhaupt nicht mehr auf den Namen der Eigenschaft schließen.
 
Mit der Maus die Eigenschaft anwählen und dann F1 drücken. Dann wird der Name und Infos für Scripte angezeigt.
 
Zurück
Oben