WinCC Unified Textlisten mit Parameterfeldern in Javascript auslesen und Alarm erstellen

don_looney

Level-2
Beiträge
103
Reaktionspunkte
6
Zuviel Werbung?
-> Hier kostenlos registrieren
Moin zusammen,

ich habe ein Problem mit der Alarming Funktion in Javascript. Ich nutze Textlisten mit Parameterfeldern in denen ich auf andere Textlisten verweise. Als Beispiel habe ich eine Masterliste in der ich auf Wert 1 einen Verweis auf zwei weitere Textlisten habe - Achse XYZ: Meldung XYZ (<Textliste : Slot1>:<TextlisteSlot2>)
In dem zugehörigen Symbolischen EA Feld übergebe ich dann drei Integer und die Meldung wird mir dort in der richtigen Sprache angezeigt.
Das funktioniert auch sehr gut, nur möchte ich jetzt zusätzlich für jede Meldung aus der Textliste auch eine Systemmeldung auslösen, damit ich diese in einem Archiv speichern kann. Momentan wird das noch über Bitmeldungen gemacht und das möchte ich ändern, weil es einfach ein riesen Aufwand ist beides zu pflegen.

Jetzt zum Problem.
Mein erster Ansatz war einen ProgramAlarm auszulösen wenn sich der Text im Meldefenster ändert. Das funktioniert auch, nur habe ich dann zusätzliche Kommunikation zwischen SPS&HMI und ich müsste für jede Sprache eine eigene Meldung erzeugen. Den Text kann ich über Javascript auslesen und bei Textänderung triggern lassen. Der effizientere Weg wäre direkt einen Alarm über das Script auszulösen. Das funktioniert auch, nur kann ich die Begleitwerte für die Verweise nicht übergeben oder ich weiß nicht wie.

Mein Script sieht momentan so aus:
Code:
export function Button_Test_OnDown(item, x, y, modifiers, trigger) {
      //Textlisten ID
      let ID = Tags("MessageSlot{1}_ID").Read();
      //Slot 1
      let ID_Value1 = Tags("MessageSlot{1}_Value1").Read();
      //Slot 2
      let ID_Value2 = Tags("MessageSlot{1}_Value2").Read();
      //Ländercode Deutschland
      let German = 1031;
      //Ländercode UK
      let English = 2057;  

      //Meldungen als Zeichenketten in SPS schreiben
      Tags("MessageSlot{1}_TextGerman").Write(HMIRuntime.Resources.TextLists("@Default.MasterList").Item(ID).Item(German));
      Tags("MessageSlot{1}_TextEnglish").Write(HMIRuntime.Resources.TextLists("@Default.MasterList").Item(ID).Item(English));

      //Alarm auslösen
      HMIRuntime.Alarming.SysFct.CreateOperatorInputInformation(
        HMIRuntime.Resources.TextLists("@Default.MasterList").Item(ID));   
      
}

Es gibt Beispiele unter Snippets die das ähnlich nutzen, nur müsste ich so alle Textlisten mit einem zusätzlichen Platzhalter "@1%t#2T@" versehen. Das funktioniert dann für das normale symbolische EA-Feld nicht so wie ich das möchte. Auf dem Bild von dem HMI kann man sehen wie die Meldung dann aussieht.
Mit Javascript kenne ich mich nicht aus, ist mein erster Anwendungsfall.
 

Anhänge

  • HMI Beispiel.PNG
    HMI Beispiel.PNG
    28,4 KB · Aufrufe: 12
  • Textlisten.PNG
    Textlisten.PNG
    38,1 KB · Aufrufe: 12
Ich kann dir da nicht wirklich weiterhelfen, aber mich würde wirklich ehrlich interessieren, warum du dein eigenes Alarmsystem erfindest.
Jedem Ergeignis kann man einen Alarm (Programmalarm) zuordnen, Parameter geben und Texte aus der Meldetextliste zuordnen. Das geht total einfachund ist völlig transparent, auch mehrsprachig, außer, wenn man Texte als Paramater mitgibt. Deshalb kommt da bei uns eine BMK mit ansonsten auch Meldetextlisten (Ventilename, Stationsname etc.) Textlisten, die sind dann auch wieder mehrsprachig. Da braucht es keine Scripte im HMI, nichts, jeder versteht es und Alarme werden von der SPS ausgelöst.Fufnktioniert diene Anlage noch, wenn du mal eben das HMI abklemmst? Ach so das Meldearchiv wird so auch korrekt geführt.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Wir haben in unseren Maschinen ein altes Meldesystem. Das wurde früher mal so entwickelt und besteht bis heute. Ich möchte das jetzt umbauen, aber der Stil soll halt erhalten bleiben. Bei den Maschinen kannst du ein Meldefenster öffnen, dass max. 4 Meldungen anzeigt (je nach Panelgröße). Es zeigt dir auch an wie viele Meldungen insgesamt anliegen und du kannst diese mit Tasten (hoch/runter) durchschalten. Neue Meldungen sollen immer an erster Stelle angezeigt werden, die alten Meldungen werden nach unten verschoben, verschwindet eine Meldung wird umsortiert. Wir wollen jetzt eine Möglichkeit einbauen, mit der man auf die Meldung "clickt" und dann zur einer Hilfestellung geführt wird.
Ich finde die ProgramAlarm Möglichkeiten auch sehr cool, habe ich früher auch genutzt, ohne Mehrsprachigkeit und die Texte wurden als Parameter übergeben.

Am liebsten würde ich es über ProgramAlarm und PLC-Textlisten machen, damit ich gar nichts in der HMI habe. Ich glaube nur, dass ich die gewünschten Funktionen so nicht abbilden kann. Habe zumindest nichts gefunden wie ich in der Steuerung mitbekomme, welche Meldung an welcher Position in der Meldeanzeige angezeigt wird.
 
Zuletzt bearbeitet:
Müsstest du nicht auch über die Methoden des Alarms-Objekts Meldungen im HMI schmeißen können?
Habe das bisher nur zum lesen anstehender Alarme verwendet, aber ich meine da auch was zum generieren von Alarmen gesehen zu haben...
 
Müsstest du nicht auch über die Methoden des Alarms-Objekts Meldungen im HMI schmeißen können?
Habe das bisher nur zum lesen anstehender Alarme verwendet, aber ich meine da auch was zum generieren von Alarmen gesehen zu haben...
Das schaue ich mir mal an. Hatte mit Hochsprachen auch noch keinen richtigen Kontakt. Mit dem Umstieg auf Unified möchte ich mich in dem Bereich aber weiterbilden.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen,
kann mir jemand sagen, wo man Anleitungen oder Informationen findet, wie man JavaScript im TIA Portal richtig verwendet?
Wie greift man korrekt auf Elemente zu und wie liest bzw. ändert man ihre Eigenschaften und Werte?
Mich interessiert besonders der richtige Syntax für den Zugriff auf die Elemente.
 
 
Zurück
Oben