WinCC Unified Meldezeile WinCC Unified

Wolfgang14

Level-1
Beiträge
175
Reaktionspunkte
5
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

im TIA Portal WinCC Unified keine Meldezeile zu geben scheint, wollte ich mir einen Workaround über die CPU anlegen.
Also E/A Ausgangsfeld als "Meldezeile" anlegen.
In der SPS mir meine Störmeldungen basteln und dann in das E/A Feld schreiben lassen.

Nur weiß ich gerade nicht mit welchen Datentyp ich arbeiten muss. Meine Idee war es meine Störung mittels Movebaustein das Ganze in einen DB schreiben zu lassen.
ALs Datentyp dachte ich als erstes WString aber so recht klappt das nicht.

Hat jemand einen Ansatz ?
 
Hat sich erledigt, habe herausgefunden das es die Option Meldezeile zwar nicht mehr gibt. Jedoch kann man alle Punkte abwählen das es so aussieht wie eine Meldezeile
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Vor dem gleichen Problem stehe ich auch gerade. Ich dachte auch erst das klappt, wenn ich alles unnötige ausblende und das Fenster einfach nur eine Zeile groß mache. Das funktioniert uach, so lange immer nur eine Meldung ansteht. Wenn mehrere Meldunegn anstehen verschiebt sich die Zeile im Fenster und es wird nicht mehr die neuste Meldung angezeigt.
Ich hab dann einen SR bei Siemens aufgemacht und heute die Antwort bekommen, dass das aktuell wohl nur über ein Script mit GetActiveAlarms geht.
Das hatte ich selbst auch schon gefunden, konnte aber nicht glauben, dass es so umständlich sein soll. Ist aber momentan wohl so. Ich werde mir das die Tage mal anschauen.

Gruß
the_elk
 
Grüße,
also es gibt auch noch einen Trick das es so geht wie du es beschrieben hast. Wir haben alles ausgeblendet. Dann es auf eine Zeile gezogen, nun musst du die richtigen Hacken setzen dann erscheint auch immer die aktuellste Meldung. Zumindest geht es bei uns. Ich schau am Montag mal was wir abgehackt haben.
Aber bin auch gespannt wie deine Variante abläuft
 
Das würde mich wirklich interessieren. Ich hab schon Stunden damit verbracht irgend welche Haken zu setzen und zu entfernen, leider ohne Erfolg.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Also hier sind unsere Einstellungen

Bei:
Format -> Standartsortierung -> keine
Gestaltung ->Fenstereinstellung -> Immer im Vordergrund (sonst nichts weiter)
Verschiedenes -> Aktuelle Anzeigen deaktivieren
Verschiedenes -> Meldeanzeige -> Einstellung Kopfzeile -> Spaltenüberschrift -> keine
Verschiedenes -> Meldeanzeige -> Einstellung Kopfzeile -> Zeilenüberschrift -> keine
Verschiedenes -> Meldeanzeige -> Spalten -> Zeit des Auftretens -> Sichtbarkeit zulassen, Sortierreihenfolge 1 , Sortierrichtung absteigend
Verschiedenes -> Statuszeile -> Sichtbarkeit deaktivieren
Verschiedenes -> Symbolleiste -> Sichtbarkeit deaktivieren

Das haben wir alles aktiv eingestellt
 
Ich hab das gerade getestet. Funktioniert bei mir leider nicht. Das Verhalten, ist so, wie es auch bei meinen Einstellungen ist. Wenn ich das Panel starte, stehen aktuell bereits 3 Meldungen an, da ich keinen USB-Stick gesteckt habe und das Alarm-Logging somit nicht funktioniert. Hier passt die Anzeige noch. Jetzt steuere ich einen Alarm. Dieser wird dann angezeigt, es passt also noch alles. Wenn ich den Alarm wieder ausschalte, springt die Meldeanzeige aber in die 3. Zeile und bleibt nicht auf der ersten stehen. Wenn man zum testen die zeilenüberschrift auf Index stellt, kann man es besser beobachten.
Ist das Verhalten bei dir nicht so?
Ich teset gerade die Alarm-Subscription. Das scheint zu funktionieren.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Der Vorschlag von Siemens mit GetActiveAlarms ist einfach umzusetzen. Soll aber bei erhöhtem Meldeaufkommen wohl die Performance leiden lasse, da jedes mal, beim zyklischen Aufruf alle Meldungen gelesen werden. Ich werde es mit einer AlarmSubscription versuchen. Komm im Moment aber leider nicht wirklich dazu. Konntest du denn das von mir beschriebene Verhalten bei dir auch feststellen?
 
Ja bei mehr Alarmen scheint es mit meiner Methode auch nicht zu funktionieren.

Hast du irgendwie einen Link wo das mit den GetActiveAlarms steht ?
Würde das gern mal austesten.
 
var value;

// SPRACHE (1031) eventuell über Variable

const alarmFilter = "State <> 2AND ID < 100000";
HMIRuntime.Alarming.GetActiveAlarms(HMIRuntime.Language, alarmFilter).then(
function(numAlarms){
// lezte Meldung ausgeben
let index=numAlarms.length-1;
item.Text=numAlarms[index].EventText;

if (numAlarms.length<1) {
item.Text="";
}

let alarmClass=numAlarms[index].AlarmClassName;

//Blinklen ermöglichen
if (item.ForeColor== HMIRuntime.Math.RGB(236, 236, 236, 255)) {
if (alarmClass=="Warning") {
item.ForeColor= HMIRuntime.Math.RGB(255, 153, 0, 255);
}
if (alarmClass=="Alarm") {
item.ForeColor= HMIRuntime.Math.RGB(229, 7, 18, 255);
}
if (alarmClass=="Notification") {
item.ForeColor= HMIRuntime.Math.RGB(236, 236, 236, 50);
}

} else {
item.ForeColor = HMIRuntime.Math.RGB(236, 236, 236, 255)
}

}).catch(function(errorCode){
item.Text=="";
});
return value;

Als Trigger 1 Sekunde. Funktioniert bei "Normalen" Meldungsaufkommen sehr gut.
Und einfach einen Text als Ausgabe. Wir quittieren oä benötigt, dann muss natürlich ein Meldecontrol projektiert werden.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
var value;
const alarmFilter = "State <> 2AND ID < 100000";
let subs = HMIRuntime.Alarming.CreateSubscription();
subs.Filter = alarmFilter;
subs.Language = HMIRuntime.Language;
subs.OnAlarm = function(Errorcode, SystemNames, ResultSet) {
let lastAlarm = ResultSet.length-1;
let alarmClass= ResultSet[lastAlarm].AlarmClassName;
item.Text=ResultSet[lastAlarm].EventText+alarmClass;
//Blinklen ermöglichen
if (item.ForeColor== HMIRuntime.Math.RGB(236, 236, 236, 255)) {
if (alarmClass=="Warning") {
item.ForeColor= HMIRuntime.Math.RGB(255, 153, 0, 255);
}
if (alarmClass=="Alarm") {
item.ForeColor= HMIRuntime.Math.RGB(229, 7, 18, 255);
}
if (alarmClass=="Notification") {
item.ForeColor= HMIRuntime.Math.RGB(236, 236, 236, 50);
}

} else {
item.ForeColor = HMIRuntime.Math.RGB(236, 236, 236, 255)
}
if(lastAlarm<1){item.Text="";}
};
subs.Start();

return value;

hier die Variante als Subscription, hoffe, dass sie wirklich perfomanter ist. Wenn ich ehrlich bin, war mir das nicht bewusst ;-).Wenn es so ist, dann hat sich die stunde Arbeit mal ausnahmsweise gelohnt
 
Ich muss trotzdem nochmal doof fragen :) , diese Variante lege ich jetzt als Prozesswert->Script in einem E/A Feld an oder ?
Wenn ja meckert er den Punkt item.Text an ( was soll dieser Punkt bedeuten ? )
 
wenn du zur Ausgabe ein IO-Feld einsetzt, dann kannst value, oder item.ProcessValue benutzen.( Je nach dem, an welcher Eigenschaft, dein Script angebunden ist. Ich hab einen Textfeld zur Ausgabe genommen, deshalb das ".Text".
Sage fairer weise, dass ich das alles noch nicht ausgiebig getestet habe.
 
Habe, es jetzt ein paar mal getestet und es funktioniert ohne Probleme, allerdings müsste ich noch die Uhrzeit dazu haben und beim Quittieren müsste es dann verschwinden. Kann man das noch integrieren ?

Hast du irgendwo eine Anleitung vom man findet welche Java Kommandos so funktionieren ? habe da noch nichts gefunden
 
für die Uhrzeit solltest du folgendes zu deinem String hinzufügen:
ResultSet[lastAlarm].RaiseTime
sollte gehen. hab es nicht getestet.

die einzelnen Eigenschaften kannst du sonst hier nachlesen:
 
Zurück
Oben