TIA Program Alarm - Variable für Sammelmeldung

don_looney

Level-1
Beiträge
94
Reaktionspunkte
5
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen
Ich habe mich gerade mit dem Program_Alarm befasst und finde es sehr nützlich. Ich nutze eine 1518F und würde gerne wissen wann eine Programmmeldung irgendwo in der Steuerung anliegt.
Momentan nutze ich die Funktion in meinen FB´s (für Zylinder,Motoren,etc..). Deswegen sind die Aufrufe der Funktionen in Multiinstanzen und somit schwer einzeln über das ganze Programm abzufragen.
Gibt es dafür eine Systemfunktion um einen Status der Programmmeldungen zu bekommen (z.B. das eine anliegt)?
Besten Dank
 
Ich hab das mit GetAlarm gemacht, ist allerdings sehr umständlich (jedenfalls meine Lösung).
GetAlarm funktioniert im Prinzip genau so wie die Meldungsanzeige auf dem HMI, d.h. es gibt je Alarm eine 'Kommt'-Meldung und eine 'Geht'-Meldung. Mit jeder 'Kommt'-Meldung schreibe ich mir die jeweilige Störungs-ID in einen DB (bei mir noch zusammen mit der Priorität), bei einer 'Geht'-Meldung suche ich die passende ID im DB, lösche diesen Eintrag und rücke die Liste wieder zusammen. Dann überprüfe ich meinen DB ob Meldungen eingetragen sind und mit welcher Priorität und erzeuge damit meine Sammelstörmeldung und meine Prio 1-Prio x Meldungen.

Allerdings bin ich auch der Meinung das sowas einfacher gehen müsste? Ist Sammelstörung nicht Standard in fast jeder Maschine?

Frank
 
Ist Sammelstörung nicht Standard in fast jeder Maschine?

Ich denke schon.
Aber weil es mit dem Siemens Alarmsystem so umständlich ist, werden die meisten wohl den Herkömmlichen Weg mit den Bitmeldungen gehen auch wenn sie diese nicht mehr bis zum Panel hochführen.
die Einzelbits werden dann mit einem Program_alarm verbunden. Sammelalarme kann man dann mit den Boolschen Variablen machen.

Natürlich sind damit die ganzen Vorteile von Program_alarm unnütz weil dann wieder ein eigenes Globales Alarmhandling programmiert werden muss.

Wenn ich z.B. in einer Objektinstanz welche diverse Program_alarm nutzt direkt diese nach Prioritäten und Status durchsuchen könnte, hätte ich die Sammelalarmlampe des Schaltschranks schon programmiert. Stattdessen verodere ich jetzt wieder einen Beutel an Bits um das zu bewerkstelligen. Und muss dann auch immer drauf achten das ich die Bits der richtigen Alarmprio nehme und wenn ich ne Prio ändere dieses Bit dann entsprechend aus einem SA Pfad rausnehme und in den SA Pfad der neuen Prio einpflege.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen,

ich möchte das Thema gerne nochmal aufgreifen.
Ich bin ebenfalls auf der Suche nach der Möglichkeit, einfach ein Bit zu setzen, wenn mindestens ein Program_Alarm ausgeführt wird.
Ist kein Program_Alarm aktiv, soll das Bit wieder ausgehen.

Da ich momentan unsere Standardbausteine auf die Program_Alarme umschreibe und damit den Vorteil nutzen will, nicht jedesmal die gleichen Meldungen in dem normalen Bitmeldeverfahren zu programmieren / einzutragen, stellt sich nur die Frage mit dem "Sammelbit" für eine Meldebit (Lampe blinken lassen o.ä.)

Ist mitlerweile jemand mal auf eine einfache Lösung gestoßen?

Ich nutze aktuell Tia V16 mit einer CPU 1513 F

Vielen Dank Euch
 
Mit Program_alarm nicht. Mit Prodiag ist dieses Handling wesentlich comfortabler, genauso wie Sammelquittierung.

Könntest du mir mal ein ELI5 (Explain it like I'm five) geben zu ProDiag? Irgendwie bin ich da noch nicht ganz durchgestiegen wie ich mit dem ProDiag genau umgehen/vorgehen soll.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Meine Lösung ist mittels GetAlarm alle kommenden und gehende Alarme zu registrieren und das in ein Array(inkl. PRIO) zu speichern.
Dieses Array werte ich in einem anderen Baustein aus und lasse entsprechend meine Lampen leuchten bzw. kann sowas wie ein Sammelalarm generieren.

GetAlarm hat aber einen riesen Nachteil:
Der Quittierstatus wird nicht berücksichtigt. Es bekommt tatsächlich nur mit ob bei der jeweiligen Programm_Alarm Instanz der Alarm kommt oder geht, ohne Rücksicht darauf zu nehmen ob er Quittierpflichtig ist oder nicht.

Siemens weiß darüber bescheid... aber ich bin da scheinbar wieder ein Exot :evil:
 
Könntest du mir mal ein ELI5 (Explain it like I'm five) geben zu ProDiag? Irgendwie bin ich da noch nicht ganz durchgestiegen wie ich mit dem ProDiag genau umgehen/vorgehen soll.

Mir fehlt grad ein bisschen die Zeit um es haarklein zu erklären. Aber Grundsätzlich

Lizenz im Hardwaremanager einstellen (man braucht zum testen keine gekaufte Lizenz, nachher für den Betrieb wäre es natürlich fair)
lizenz.jpg

Dann neuen Baustein einfügen. Unterpunkt FB da als Typ Prodiag inkl. IDB auswählen. Man kann da soviele Bausteine machen wie man will. die kann man dann z.B. unterschiedlichen Anlagenteilen zuordnen. Ich mach z.B. einen für Zentrale Funktionen und dann pro Hangar einer Löschanlage nochmal einen. Damit kann ich dann die Sammelalarme schön auseinanderhalten und einzelnen Anlagenteilen zuordnen.

Jetzt kannst du überall Variablen auswählen und überwachen lassen. in FBs z.B. jede Variable die in der Instanz landet (ich nehme dazu üblicherweise Stat variablen) oder auch jede Variable eines DBs
überwachung einfügen.jpg

Das siemens Handbuch ist hilfreich und recht ausführlich
https://support.industry.siemens.co...nd-anlagendiagnose-mit-prodiag?dti=0&lc=de-WW

Irgendwann ist dann mal noch der Baustein Ack_Alarms dazugekommen, frag mich nicht wann. Damit ist endlich meine ersehnte Funktion zur Quittierung per Sammelquitt auf einem Anlagenschaltschrank möglich geworden.

Ein wichtiger Punkt sind die Meldeklassen und überwachungseinstellungen in den gemeinsamen Daten des Projekts. Da gehört das ganze Zeug hin, damit auch die Panels wissen was sie damit tun sollen.

überwachungseinstellungen.jpg

überwachungseinstellungen 2.jpg
 
@vollmi: Vielen Dank schonmal!

Wie sieht es denn aus mit den Meldungen? Muss ich die immer noch händisch im HMI definieren und da entsprechend dann ein Ereignis definieren? Wie weiss das HMI welche Störungen es anzeigen soll und welche nicht? Und wie wird eine Störung dann quittiert? Ich nehme ann da brauchst du immer noch von der HMI ein Bit welches du dann in deinen Bits verarbeitest welche die Störung ursprünglich ausgelöst haben und welches diese dann zurücksetzt?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Wie sieht es denn aus mit den Meldungen? Muss ich die immer noch händisch im HMI definieren und da entsprechend dann ein Ereignis definieren? Wie weiss das HMI welche Störungen es anzeigen soll und welche nicht? Und wie wird eine Störung dann quittiert? Ich nehme ann da brauchst du immer noch von der HMI ein Bit welches du dann in deinen Bits verarbeitest welche die Störung ursprünglich ausgelöst haben und welches diese dann zurücksetzt?

Grundsätzlich erstmal. Ein Quittierbit gibt es nicht (keine Ahnung was man sich dabei gedacht hat) GetAlarm kann dir diese Information offenbar auch nicht bringen. Ich bin mir da aber nicht sicher, da ich mich mit der einzelquittierung und Zustandsanalyse im Programm bisher nicht auseinandergesetzt habe. Mir reicht eigentlich in der SPS eine Sammelquittierung und eine Gruppenmeldung für Anstehend.

Welche Störung das Panel anzeigen soll, teilst du ihm mit anhand der Meldeklassen. Allerdings, wenn du dir Summenmeldungen Bilden willst, die auch in Meldeklassen unterteilt sind. Bist du auf 8 Meldeklassen beschränkt. Da du dann auf die Kategorien angewiesen bist, und von denen gibt es nur 8. Ggf kann man da was mit den Subkategorien was machen. Habe ich bis jetzt ebenfalls nicht gebraucht. Ich denke Prodiag ist sehr mächtig, aber man muss erstmal durch die vielen schlecht dokumentierten Funktionen durchsteigen.
 
Moin,

ich habe es so gelöst um die Sammelmeldung auszuwerten:

Ich habe mir einen FB-Baustein erstellt in dem ich Get_alarmstate aufrufe.
In dem FB werte ich dann die Meldung aus und addiere die Variable "Laufzähler.TEMP.Fehler".
Den FB rufe ich nach jedem Aufruf von Program_Alarm und übergebe die Information an den FB mit der Variable Alarm_Base.

In meinem Main-OB übertrage ich dann den gezählten Wert und setze ihn anschließen zurück.
Damit habe ich die Anzahl meiner aktuellen Fehler und kann mit einem einfachen Vergleicher >0 dann eine Sammelmeldung generieren.

screenshot.60.jpgscreenshot.61.jpgscreenshot.62.jpg
 

Anhänge

  • screenshot.59.jpg
    screenshot.59.jpg
    172,4 KB · Aufrufe: 81
Hallo St3v3a3,

die Lösung find ich nicht schlecht.
Die Variable "XAnlageX.Laufzähler_TEMP.Fehler" ist dann quasi eine INT Variable in einem DB oder?


Gruß
 
Zurück
Oben