WinCC Unified Sprachumschaltung via Toggle Button und angezeigter Fahne

L4s3r73k

Level-2
Beiträge
129
Reaktionspunkte
31
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen,

ich mache gerade mein erstes Projekt mit Unified als solches. Dabei ist mir das Thema schon fast zu peinlich um es hier zu stellen, aber ich komme nicht weiter.

Zur Zielsetzung und was bisher unternommen wurde:
  • Button, der die verfügbaren Sprachen durchtoggelt.
    • Button mit ToggleLanguage() Befehl bzw. Nutzung der "WechsleSprache" Funktion.
  • Button soll die aktuelle Fahne der Sprache anzeigen.
    • Grafikliste mit Fahnen.
  • Projektunabhängige Benutzbarkeit.
    • Fahnengrafiken bekommen die Indizes der LCIDs der Sprachen
    • 1. Versuch die HMI Systemvariable "@CurrentLanguage" zu verwenden
      • Resultat: Der Inhalt der Variable lässt sich zwar als IO Wert anzeigen, die Nutzung der Variable zur Dynamisierung der Fahne/des Buttons taugt nicht.
    • 2. Versuch: Arbeiten mit Hilfsvariablen:
      • Hilfsvariablen im HMI angelegt für den LCID-Code als interne Variable und als PLC-Variable angelegt.
      • Java-Skript Code geschrieben um zuerst bei Tastendruck die Sprache umzuschalten um dann die Werte in den angelegten Variablen zu speichern.
      • Resultat: Funktioniert auf manchen Geräten ganz gut (9/10 Versuche), bei anderen eher schlecht (1/2 Versuche). Sprache wird weitergeschaltet, aber die Variablen übernehmen den Wert der vorherigen Sprache.
      • Code weiter unten.
  • HMI soll aufstarten/Browserfenster neu laden mit zuletzt eingestellter Sprache - was zumindest standardmäßig nicht tat.
    • Nutzung der internen HMI-Variable bzw. der PLC-Variable zur Widerherstellung der letzten Sprache via Java-Skript
      • Funktioniert soweit. Nutztung bei "Bild aufgebaut".
      • Code weiter unten.

Code zur Umschaltung.
Java:
export function Funktion_LCID_() {

// 1. Toggle Language.
HMIRuntime.UI.SysFct.ToggleLanguage();

// 2. Mirror back from system tag to HMI/PLC tag.

let LCID = Tags("@CurrentLanguage").Read();

Tags("HMI_LanguageLCID_HMI").Write(LCID);
Tags("HMI_LanguageLCID_PLC").Write(LCID);

}

Code zur Widerherstellung der Sprache beim "Bild-Aufgebaut-Ereignis".
Javascript:
export function Funktion_Restore_LCID() {


if (HMIRuntime.Tags.SysFct.GetTagValue("HMI_LanguageLCID_PLC") != 0)
{
HMIRuntime.UI.SysFct.SetLanguage(HMIRuntime.Tags.SysFct.GetTagValue("HMI_LanguageLCID_PLC"));
}
else if (HMIRuntime.Tags.SysFct.GetTagValue("HMI_LanguageLCID_PLC") != 0)
{
HMIRuntime.UI.SysFct.SetLanguage(HMIRuntime.Tags.SysFct.GetTagValue("HMI_LanguageLCID_HMI"));
}

}

Meine Fragen:

1. Was kann ich machen, dass dieser Button für seine Grafikliste die Systemvariable "@CurrentLanguage" akzeptiert?

2. Wie muss ich diese Code(s) ändern, dass der Vollzug des Sprachwechsels und die damit verbundene Änderung der Variabel "@CurrentLanguage" zwingend vor dem Schreiben der PLC/HMI Variablen passiert?

Ich bedanke mich für Eure Aufmerksamkeit.
 
1. Was kann ich machen, dass dieser Button für seine Grafikliste die Systemvariable "@CurrentLanguage" akzeptiert?
Bei mir wuppt das wunderbar ¯\_(ツ)_/¯
1753961722146.png
(TIA V20 Update 3)

Welche TIA-Version verwendest du?
Bitte generell immer TIA-Version / Runtime Version dazu schreiben.
Ist grade bei Unified wichtig, da sich über die einzelnen Versionen bisher viel getan hat.

2. Wie muss ich diese Code(s) ändern, dass der Vollzug des Sprachwechsels und die damit verbundene Änderung der Variabel "@CurrentLanguage" zwingend vor dem Schreiben der PLC/HMI Variablen passiert?
Thema: synchrone/asynchrone Scripte.
Teste mal ob sich mit nem asynchronen Script und await HMIRuntime.UI.SysFct.ToggleLanguage(); was machen lässt.
Ansonsten im Hauptbild Aufgebaut-Ereignis eine Subscription auf @CurrentLanguage starten & dort auf die Wertänderung reagieren.

Beachte wenn du den Webclient verwendest:
dann hast du für den jeweiligen Runtime-Server mehrere Clients, die mit jeweils unterschiedlicher Spracheinstellung auf die gleiche SPS-Variable schreiben würden. Das beißt sich...

HMI soll aufstarten/Browserfenster neu laden mit zuletzt eingestellter Sprache - was zumindest standardmäßig nicht tat.
  • Nutzung der internen HMI-Variable bzw. der PLC-Variable zur Widerherstellung der letzten Sprache via Java-Skript
    • Funktioniert soweit. Nutztung bei "Bild aufgebaut".
Das funktioniert nicht, wenn du beim Runtime-Start keine Verbindung zur SPS hast (wie du der Abfrage auf != 0 nach vermutlich schon festgestellt hast).
Schau dir vllt. mal das an:
 
Zurück
Oben