WinCC Unified Faceplate: Eigenschaften Schnittstelle in JS ansprechen

Balu_der_Bär

Level-2
Beiträge
114
Reaktionspunkte
44
Zuviel Werbung?
-> Hier kostenlos registrieren
TIA V18
Comfort unified panel

Hallo zusammen,
ich haben ein Faceplate welches beim Ereignis "Aufgebaut" gewisse Funktionen ausführt die ich in JS erstellt habe.
Beim Aufruf des Faceplates sollen Werte übergeben werden welche in den Funktionen berücksichtigt werden. Diese Werte solle allerdings nicht per Variable übergeben werden sondern als Ganzzahl. Bsp: Das Faceplate "Ampel" hat abhängig von der Zahl 1-3 nur ne Rote leuchte oder Rot gelb grün.
An die "Variablen Schnittstellen" können keine Werte sondern nur Variablen gelegt werden.

Frage1:
Anders als bei "Variablen Schnittstellen" habe ich noch keine Möglichkeit gefunden "Eigenschaften Schnittstellen" Elemente direkt abzufragen. Zur Zeit mach ich das über den Umweg, dass ich die Eigenschaft bei einem Element anbinde das keine Auswirkung hat (z.B. als rotationspunkt) und den Wert dann wiederum auslese und im Script verwende. Geht das nur so oder übersehe ich da was?

Frage2:
Falls das funktioniert würde ich auch gerne eine Grafikliste übergeben und die einzelnen Grafikelemente an verschiedene Taster anbinden. geht das?
Also anstatt für fünf Buttons fünf Grafiken anzubinden weise ich nur eine grafikliste zu und weise die entsprechenden Bilder beim Aufruf den gewünschten Buttons zu. da ich in dem Beispiel die Buttons eh in einer for schleife bearbeite wäre das mit der Grafikliste eleganter. Gleiches gilt für eine Textliste.

Grüße

Balu
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

Frage1: Versuch es mal anhand diese Beispiels:
- Eigenschaft "nTyp" 64-Bit-Integer ist in den Eigenschaften Schnittstellen erstellt worden
- Auf deinem Bild befindet sich ein Textfeld mit dem Namen "T1"
- Bei Aufgebaut erstelltst du ein Script mit folgendem Inhalt:
Faceplate.items("T1").Text = Faceplate.Properties.nTyp;

Theoretisch könnte man anstelle von "Faceplate" auch "item" verwendet. Da das Ereignis Aufgebaut vom Faceplate selbst ausgelöst wird, wird als Parameter item das Objekt selbst übergeben, aber das ist Ansichtssache.

Frage2: Wenn du den Teil aus Frage1 implementiert hast versuch es mal anhand dieses Beispiels:
- Alle Bilder, die du verwendet möchtest versionieren. D.h. In deiner Bib für jedes Bild ein Grafikelement (SVG) anlegen. Ist sehr nervig aber muss ja auch nur einmal für jedes Bild gemacht werden.
- Eine Grafikanzeige mit dem Namen "gGrafik" erstellen.

Nun erstellen wir ein Skript bei einer Änderung der Propertie Text: ( Bei dem Textfeld kannst du bei Text eine Variable oder Skript hinzufuegen. Klappst du den Reiter auf kommt noch "Änderung" dort wählst du Skript aus)

export function T1_Text_OnPropertyChanged(item, value) {
// Variable
let _nTyp;

try {
_nTyp = Faceplate.Properties.nTyp;

switch (_nTyp) {
case 0: // Bild 1
Faceplate.FindItem("gGrafik").Graphic = HMIRuntime.Resources.Graphics("GraphicCollection.Bild1_V_0_0_1").Name
break;
case 1:// Bild 2
Faceplate.FindItem("gGrafik").Graphic = HMIRuntime.Resources.Graphics("GraphicCollection.Bild2_V_0_0_1").Name
break;
case 2: // Bild 3
Faceplate.FindItem("gGrafik").Graphic = HMIRuntime.Resources.Graphics("GraphicCollection.Bild3_V_0_0_1").Name
break;
case 3: // Bild 4
Faceplate.FindItem("gGrafik").Graphic = HMIRuntime.Resources.Graphics("GraphicCollection.Bild4_V_0_0_1").Name
}
catch (err) {
//statements
}
}

Persönlich würde ich eher eine Variable anstatt einer Eigenschaft wählen, da man hier eine Variable anhängen kann, aber das kommt ja
auch immer auf den Anwendungsfall an.

Hoffe ich konnte helfen.

Grüße
 
Zurück
Oben