SPSnewbie91
Level-2
- Beiträge
- 275
- Reaktionspunkte
- 20
-> 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.

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.

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.

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.
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
und die des Keyworts
Die Filter_xxx_Enable sind Boolsche Werte.
Die Buttons zum Setzen und Zurücksetzen haben ebenfalls OnButtonAction Events
Setzen:
Zurücksetzen:
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
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.

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.

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.

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