WinCC Unified Aktuelle Popup Position auslesen

Supermario73

Level-2
Beiträge
108
Reaktionspunkte
3
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen
Etwas sehr einfaches, was bei mir (TIAV19) leider nicht funtioniert. Ich habe in einem Popup einen Button projektiert, bei klick wird folgendes Script ausgefürt:

Das Script sollte die aktuelle Position des Popups in die Variablen schreiben, habe das Popup verschoben und füre das Script aus, doch die Variablen zeigen den neuen Wert nicht an. Was ist hier falsch??


Javascript:
export function PositionPopup(xPosition, yPosition) {

    // X-Position des Popups auslesen und in die Variable schreiben
    xPosition = obj_RT.ActiveScreenItem.Left;

    // Y-Position des Popups auslesen und in die Variable schreiben
    yPosition = obj_RT.ActiveScreenItem.Top;
}

Besten Dank für die Hilfe!
 
Ist ja abartig kompliziert.Kann es sein das du ereignisgesteuert dann das wieder in die lokale variable importieren musst.
Da müssen andere ran.
 
Hallo Leute
Alles gute im neuen Jahr wünsche ich Euch!
Das Script funktioniert nicht. Hat jemand eine Idee, warum die aktuelle Position des Popups nicht in den Variablen ausgegeben wird?
Code:
export async function PositionPopup(xPosition, yPosition, Popupname) {

let ui = UI;
let FindItemPopup = ui.FindItem("Popupname");
xPosition = FindItemPopup.Left;
yPosition = FindItemPopup.Top;
}

Besten Dank für Eure Hilfe
 
Ich versuche mal morgen den TIA Wizard einzusetzen.Du kannst dort die Bildverwaltung komplett parametrieren.
Ich hoffe das funktioniert.Dann erkennt man auch die Struktur von den einzelnen Screens und Bildern.
Da man frueher oder später sowieso nicht um das Thema Bildverwaltung drum rum kommt, fange ich mit dem an.
Auf java habe ich keinen Bock.Solche Elementaren Aktionen sollten auch ohne Java Script funktionieren.

Ich denke wenn man diese Bildverwaltung hat, hat man schon viele dieser Probleme gelöst, da man ja immer weiss von wo man was aufruft.
Fuer mich ist eher interessant diese Popups auf einem Motorsymbol aufzurufen und dann den Motor einzuschalten.(als Bsp.)
Das geht auch mit Faceplates ist aber aufwendig.Beim Popup kann ich die Koordinaten angeben.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
He Folks,

ich hänge mich hier mal mit dran. Folgende Aufgabenstellung:

Über Schaltfläche A in einem Bild öffnet ein Faceplate mit Daten Ventil 1 im Popup zentral in der Mitte positioniert. Funktioniert einwandfrei.
Ich kann dieses geöffnete PopUp jetzt beliebig verschieben auf dem Bildschirm - so gewollt i.o.
Wenn ich nun eine andere Schaltfläche B im selben Bild wie Schaltfläche A anklicke, soll ein Faceplate mit Daten Ventil 2 an der Position öffnen, wo vorher das andere PopUp hingeschoben wurde.

Ich habe jetzt 8h das Netz durchforstet, alle SUS HowTos von Siemens dazu gelesen die halbwegs in die Richtung geht und selbst probiert.
Kein Chance, es scheitert daran die aktuelle Position zur Laufzeit wie man so schön sagt, des geöffneten PopUps auszulesen.

Hat jemand Tipps oder Codeschnipsel dazu?

Zum Testen habe ich das hier unten mal auf einen sepparaten Button gelegt. Wenn das PopUp "V340F" offen ist, dann findet er es auch
und setzt popup_exists auf true aber die Position left bekomme ich gar nix.

export function Schaltfläche_3_OnDown(item, x, y, modifiers, trigger) {
let tag1 = Tags("pos_x");
let title = "V340F";
let ui = UI;
let count = ui.PopupScreenWindows.Count;
let popup_exists = false;

for (let i = 0; i < count; i++) {
let popup_title = ui.PopupScreenWindows(i).Caption.Text;
if (popup_title == title){
popup_exists = true;
tag1.Write(PopupScreenWindow(i).left);
}
}


}
 
Zum Testen habe ich das hier unten mal auf einen sepparaten Button gelegt. Wenn das PopUp "V340F" offen ist, dann findet er es auch
und setzt popup_exists auf true aber die Position left bekomme ich gar nix.

for (let i = 0; i < count; i++) {
let popup_title = ui.PopupScreenWindows(i).Caption.Text;
if (popup_title == title){
popup_exists = true;
tag1.Write(PopupScreenWindow(i).left);
}
}


}
Hi, du hast hier einen Syntaxfehler beim schreiben von tag1, dieser Fehler sollte eig. auch im Traceviewer auftauchen.
Korrekt wäre:

tag1.Write(PopupScreenWindows(i).Left);

(also ein s vergessen und Groß-Kleinschreibung beachten)
Ansonsten dürfte dein Code so funktionieren, versuchs einfach mal damit ;)

PS: Ich habe das ganze in meinen Projekten gleich als Globales Skript in der Projektbibliothek definiert, so habe ich 1 Zentralen Ort und kann dies in allen Faceplates gleichermaßen nutzen, das kann ich dir nur empfehlen gerade bei solchen grundlegenden "Popupmanagement" Skripten.
 
Das das s fehlte war Absicht da es das Objekt so auch gibt(siehe Referenz) um die Eigenschaft anzusprechen explizit von dem Pop-up.Aber so oder so funktioniert es leider nicht auch bei Korrektur des Syntax.

Dein P.S.: das hatte ich auch so vor zukünftig.
 
Ich arbeite aktuell nur mit einer RT Simulation.
Den Traceviewer...muss ich mir erstmal zu Gemüte führen ob ich den auch da zum laufen bekomme.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hier das Codeschnipsel für die Nachwelt, falls es jemand braucht.

export function Schaltfläche_1_OnDown(item, x, y, modifiers, trigger) {
let ui = UI;
let count = ui.PopupScreenWindows.Count;
let pos_x = 550;
let pos_y = 310;

// check if there is already an pop up openned, save his position and close openned pop up
for (let i = 0; i < count; i++) {
pos_x = ui.PopupScreenWindows(i).Left;
pos_y = ui.PopupScreenWindows(i).Top;
ui.PopupScreenWindows(0).Close();
}
// Open new PopUp on saved position or central
let title = Tags('Ventil_2.Name').Read();
let data = {"Schnittstellen_UDT_Ventil":{Tag:"Ventil_2"}, Status_Textliste:"@Default.Status", ColorProperty:0xffffffff};
let po = UI.OpenFaceplateInPopup("FP_Ventil_V_1_0_5", title, data, false);
po.Left = pos_x;
po.Top = pos_y;
po.Visible = true;
po.CaptionColor = 0xff00ff0000;
po.ShowFocusVisual = false;

}
 
Zurück
Oben