WinCC Unified JS: aufrufendes Objekt auslesen

Wusel

Level-2
Beiträge
10
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo allerseits,

ich benutze TIA V18 Update 3 und habe folgende Frage.
In einem Bildfenster habe ich mehrere Schaltflächen, die Scripte ausführen. Wie kann ich in dem Script auslesen, welche Schaltfläche das Script ausführt? Hintergrund ist, dass ich in dem Script ein weiteres Bildfenster positionieren möchte, welches sich mit seinem .Top an dem .Top der aufrufenden Schaltfläche orientiert.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo PN/DP,

vielen Dank für die schnelle Antwort.
Leider habe ich keinen Ansatz dafür, wie so etwas zu machen ist.
Hast du dazu eventuell ein kleines Beispiel?
 
Beim Drücken des Buttons bekommst du auch den Namen des Buttons übergeben.

item.Name beinhaltet den Namen des Buttons

1721031936943.png
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich hab noch eine Frage dazu:
Wie kann ich "item" global ansprechen?

Ich habe eine Funktion unter Scripte erstellt:

Javascript:
export function anzeigen(Bild) {

try { HMIRuntime.Trace("item.Name = " + item.Name); }
catch (err) { HMIRuntime.Trace("Er find item.Name niad :-(: " + err);}

HMIRuntime.UI.SysFct.ChangeScreen(Bild, "//Show");
}

Benutze ich die Funktion bei Einem Objekt in Eigenschaften/Ereignisse/Drücken als Scriptfunktion,
dann bekomme Folgendes:

Code:
session: 0011, trace: Trace(): Er find item.Name niad :-(: ReferenceError: item is not defined

Tippe ich den Code direkt als lokale Funktion ein, dann tut es.

Gibt es eine Möglichkeit mein Vorhaben zu realisieren?
 
Wie wäre es wenn du "item" als Parameter deiner Funktion mit übergibts? Also genauso wie du "bild" beim aufruf mit übergibst?
Ja, das würde funktionieren. Aber zwei Sachen sprechen dagegen:
  • Möchte ich mehr dazulernen
  • Ist das Ziel, einen Aufruf wie im folgenden Bild zu erreichen, ohne das man selbst ein Skript anlangen muss. Mich stört gerade noch,
    • dass man die Paramter der Funktion nicht vordefinieren kann
    • dass man das Bild händisch eintippen muss und nicht aus der Liste auswählen kann
Mir geht es darum, dass meine Kollegen diese Funktion einfach benutzen können, auch wenn sie nur seltem im Tia arbeiten.



1722345562912.png
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ja, das würde funktionieren. Aber zwei Sachen sprechen dagegen:
  • Möchte ich mehr dazulernen
Wenn das so ist, musst du dich mal mit Scoping in JavaScript befassen. Einfach mal googeln.

Du hast kein Zugriff auf "item" in dem globalen Script, weil sich "item" nicht im globalen Scope befindet.

"item" befindet sich im Scope des Objektes, bei dem du die Funktion bei "linke Maustaste klicken" anlegst.
In dieser Funktion wird "item" übrings auch als Paramter übergeben.

1722415165802.png

In TIA hast du folgende Möglichkeiten auf Variablen eines anderen Objektes zuzugreifen.

1. Es ist eine Variable im globalen Scope
2. Du übergibst die Varibale als Parameter
3. Du greifst global über z.B.: HMIRuntime.UI.FindItem() darauf zu

Um Möglichkeit 3 zu nutzen müsstest du aber den Objektnamen wissen, wenn das globale Script aufgerufen wird.

Sieht also so aus, also ob nur die Übergabe als Parameter übrig bleibt.
 
Zuletzt bearbeitet:
Zurück
Oben