-> Hier kostenlos registrieren
Moin zusammen,
ich versuche in WinCC Unified V20 über ein Faceplate ein Bild aufzurufen.
Hier in dem Faceplate ist der Button inklusive Status-Anzeige.
Der Status wird über die Variablen-Schnittstelle "type_motor" übergeben.

Wenn ich den Button drücke, möchte ich im Bildfenster "window_main" ein neues Bild öffnen: "function_motor".
Gleichzeitig möchte ich an das Faceplate "fp_header" innerhalb von "function_motor" die Variablen-Schnittstelle "type_motor" übergeben.
Ziel-Bild:

Hierzu rufe ich folgendes Script auf:
Den Bildtitel bekomme ich ohne Probleme im Header geschrieben, das funktioniert.
Ich bekomme "type_motor" aber einfach nicht übergeben:
Ich habe zwei Vermutungen: Ich kann nicht auf das Objekt zugreifen, weil es noch nicht geladen ist oder ich kann kein UDT übergeben?
Ich könnte natürlich in dem Faceplate mit dem Button noch einen String als Schnittstelle beschreiben und die Schnittstelle über eine globale Variable weiterleiten.
Das funktioniert auch.
Nur müsste ich dann bei Änderung der Variablen-Schnittstelle dann auch die String-Schnittstelle ändern.
Ich habe auch schon versucht, per Skript den Text der Schnittstelle "type_motor" als String auszulesen, aber das habe ich überhaupt nicht hinbekommen.
Hat jemand einen Ansatz für mich?
Vielleicht auch eine ganz andere Idee, wie ich die Aufrufe am besten löse?
ich versuche in WinCC Unified V20 über ein Faceplate ein Bild aufzurufen.
Hier in dem Faceplate ist der Button inklusive Status-Anzeige.
Der Status wird über die Variablen-Schnittstelle "type_motor" übergeben.

Wenn ich den Button drücke, möchte ich im Bildfenster "window_main" ein neues Bild öffnen: "function_motor".
Gleichzeitig möchte ich an das Faceplate "fp_header" innerhalb von "function_motor" die Variablen-Schnittstelle "type_motor" übergeben.
Ziel-Bild:

Hierzu rufe ich folgendes Script auf:
Javascript:
export function button_foreground_OnTapped(item, x, y, modifiers, trigger) {
try
{
/// Einschränkung des Faceplates umgehen
let ui = HMIRuntime.UI;
let sys = ui.SysFct;
/// Lese die Eigenschaft "screen_title"
let titletext = Faceplate.Properties.screen_title;
if (titletext !== undefined)
{
/// Setze "screen_title" im globalen Header im Objekt "Text"
sys.SetPropertyValue("~/header/screen_title", "Text", titletext);
}
/// Lese die Variable "type_motor"
let motorData = Faceplate.Properties.type_motor;
if (motorData !== undefined)
{
/// Setze "type_motor" aus dem aktuellen Faceplate im Ziel-Faceplate
sys.SetPropertyValue("~/function_motor/fp_header", "type_motor", motorData);
}
// 3. Screen-Wechsel
sys.ChangeScreen("function_motor", "~/window_main");
}
catch (err)
{
HMIRuntime.Trace("Fehler beim fensterübergreifenden Zugriff: " + err.message);
}
}
Den Bildtitel bekomme ich ohne Probleme im Header geschrieben, das funktioniert.
Ich bekomme "type_motor" aber einfach nicht übergeben:
session: 0011, trace: SystemFunction 'SetPropertyValue' failed! screenItemPath=~/header/screen_title screenItemPropertyName=Text value=Startbild error=ResultCode: 0x80000006 Error: CF_R_INVALID_POINTER Description: The component reported a general error (File: D:\agent\_work\157\s\source\ScriptSysFctPlugins\SysFct\GfxUISysFct.cpp, Func: HmiGfx::CHmiUISysFct::SetPropertyValue)
Ich habe zwei Vermutungen: Ich kann nicht auf das Objekt zugreifen, weil es noch nicht geladen ist oder ich kann kein UDT übergeben?
Ich könnte natürlich in dem Faceplate mit dem Button noch einen String als Schnittstelle beschreiben und die Schnittstelle über eine globale Variable weiterleiten.
Das funktioniert auch.
Nur müsste ich dann bei Änderung der Variablen-Schnittstelle dann auch die String-Schnittstelle ändern.
Ich habe auch schon versucht, per Skript den Text der Schnittstelle "type_motor" als String auszulesen, aber das habe ich überhaupt nicht hinbekommen.
Hat jemand einen Ansatz für mich?
Vielleicht auch eine ganz andere Idee, wie ich die Aufrufe am besten löse?