WinCC Unified Filterfunktion Alarmhostorie

SPSnewbie91

Level-2
Beiträge
275
Reaktionspunkte
20
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen.

Erstmal zur HW und SW: Ich benutze einen Siemens IPC und 1512-2 PN SPS. Programmiert wird mit TIA V20 Update 4.

Nun zum Problem. Ich versuche vergebens eine vernünftige und funktionstüchtige Filterfunktion für meine Alarmhistorie aufzubauen.
1770814027125.png

Auf meinem Alarm Historie Screen ist das Alarm control abgebildet und zusätzlich ein ScreenWindow, das angezeigt wird, sobald man den gelben Button unten rechts drückt.

1770814129073.png
Das ist das zugehörige ScreenWindow. Der linke gelbe Button soll den Filter setzen und der rechte wieder zurücksetzen. Idee dahinter ist es die vergangenen Alarme nach Datum/Uhrzeit und ggf. nach einem Keywort zu filtern. Dafür sind die linken runden Buttons gedacht. Je nachdem was angewählt ist, soll auch nur das als Filter berücksichtigt werden.

1770814299376.png

Das Alarm control soll "Logged alarms" auslesen und der Filter ist als WString definiert.

Die IO-Felder für die Datum-Uhrzeiteingabe sind als Input/Output definiert und das Output Format über ein Skript.
Javascript:
export function IO_field_1_OutputFormat_Trigger(item, triggerDataSet) {
return (Tags("TimeFormat").Read() + " | " + Tags("DateFormat").Read());
}

DateFormat: {D,@dd.MM.yyyy}
TimeFormat: {T,@HH:mm:ss}

Das IO-Feld für das Keywort ist ebenfalls Input/Output und das Output Format ist {S}.

Die Datentypen für die Prozesswerte von Datum/Uhrzeit sind DateTime und die des Keyworts WString.
Alle sind als interne HMI-Variablen angelegt.

Die runden Buttons zur Auwahl was gefiltert werden soll sind für Datum/Uhrzeit und haben als OnButtonAction Event
Javascript:
export async function FpBtn_4_OnButtonAction(item, btnHMIEventTrigger) {
Tags("Filter_TimeFrom_Enable").Write(!Tags("Filter_TimeFrom_Enable").Read());
}

und die des Keyworts
Javascript:
export async function FpBtn_5_OnButtonAction(item, btnHMIEventTrigger) {
HMIRuntime.Tags.SysFct.InvertBitInTag("Filter_String_Enable", 0);
}

Die Filter_xxx_Enable sind Boolsche Werte.

Die Buttons zum Setzen und Zurücksetzen haben ebenfalls OnButtonAction Events

Setzen:
Javascript:
export function FpBtn_1_OnButtonAction(item, btnHMIEventTrigger) {
let stringFilter = "";
let timeFromEn = Tags("Filter_TimeFrom_Enable").Read();
let timeToEn = Tags("Filter_TimeTo_Enable").Read();
let stringEn = Tags("Filter_String_Enable").Read();
let isodatetime;


if(timeFromEn == true)
{
  isodatetime = new Date(Tags("Filter_TimeFrom_Value").Read());
  stringFilter = stringFilter + 'RaiseTime > ' + isodatetime/*new Date(Tags("Filter_TimeFrom_Value").Read())*/.toISOString();
}


if(timeToEn == true)
{
  if(stringFilter != '')
  {
    stringFilter = stringFilter + ' AND ';
  }
  isodatetime = new Date(Tags("Filter_TimeTo_Value").Read());
  stringFilter = stringFilter + 'RaiseTime < ' + isodatetime.toISOString();
}

if(stringEn)
{
  if(stringFilter != '')
  {
    stringFilter = stringFilter + ' AND ';
  }
  stringFilter = stringFilter + "EventText LIKE '*" + Tags("Filter_String_Value").Read() + "*'";
}


  Tags("AlarmControlFilter").Write(stringFilter);

 Tags("VisibilityFilterPopup").Write(0);
}


Zurücksetzen:
Javascript:
export async function FpBtn_2_OnButtonAction(item, btnHMIEventTrigger) {   
HMIRuntime.Tags.SysFct.SetTagValue("AlarmControlFilter", "");

Tags("Filter_TimeFrom_Enable").Write(false);
Tags("Filter_TimeTo_Enable").Write(false);
Tags("Filter_String_Enable").Write(false);
}

Mein Problem ist, dass die Filterfunktion einfach nicht klappen will. Wenn ich das Bild am HMI öffne und das PopUp für den Filter aktiviere stelle ich irgendein Datum ein für Start und Ende. Anschliessend klicke ich auf Filter anwenden. Es werden Alarme im Alarm Control angezeigt, aber überhaupt nicht gefiltert. Es zeigt gefühlt alle vergangenen Alarme an. Wenn ich das Datum danach ändere und erneut filtern will ändert sich an der Anzeige gar nichts. Ausserdem kann ich den Filter auch nicht zurücksetzen.

Hat jemand eine Idee wo der/die Fehler liegen könnten? Ich habe schon an ein falsches Datumsformat gedacht, aber da die Keywort Filterung auch nicht funktioniert schliesse ich das wohl eher aus. Ich denke das ist ein tiefer liegendes Problem.

Wäre super, wenn mir jemand ein paar Denkanstösse geben könnte.

Vielen Dank schon Mal
 
Was stehen im Trace Viewer für (Fehler)-Meldungen?
Skript in Try-Catch-Block packen und schauen, was im Trace Viewer für Meldungen auflaufen.
Ansonsten mal im Debugger durch das Skript zeilenweise durchklicken und schauen, ob wirklich das passiert, was du möchtest
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Was stehen im Trace Viewer für (Fehler)-Meldungen?
Skript in Try-Catch-Block packen und schauen, was im Trace Viewer für Meldungen auflaufen.
Ansonsten mal im Debugger durch das Skript zeilenweise durchklicken und schauen, ob wirklich das passiert, was du möchtest
Hallo.
Danke für den Hinweis. Ich werde es gleich ausprobieren.
 
Zurück
Oben