MFreiberger
Level-3
- Beiträge
- 3.327
- Reaktionspunkte
- 949
-> Hier kostenlos registrieren
Offensichtlich. Denn so funktioniert es bei unsWas ich mich frage: Zählt das hier auch als Flanke, das beim "erstmaligen" Aufruf der SIG schon auf TRUE ist?

Folge dem Video um zu sehen, wie unsere Website als Web-App auf dem Startbildschirm installiert werden kann.
Anmerkung: Diese Funktion ist in einigen Browsern möglicherweise nicht verfügbar.
Offensichtlich. Denn so funktioniert es bei unsWas ich mich frage: Zählt das hier auch als Flanke, das beim "erstmaligen" Aufruf der SIG schon auf TRUE ist?
Hab ich mich auch schon gefragt, aber was willst du tun. Ich finde es auch voll nervig das man ausenrum programmieren muss. Vorallem springs du wenn du auf den Alarm klickst, erst mal auf den Alarmbaustein der das kapselt (zumindest bei uns). Unschön... aber wahrscheinlich soll ProDiag forciert werden.Warum muss man das um den Program_alarm denn herum programmieren? Bzw. was macht der Baustein denn noch alles so um die Zykluszeit so nach oben zu treiben wenn sich der Zustand von SIG nicht ändert, und er somit eigentlich nichts zu tun hat? Also irgendeine Funktion muss einem dann doch fehlen wenn der Baustein nicht aufgerufen wird. Oder da ist ein grober Fehler innerhalb von Program_alarm.
So auch, Mario:So wird der Program_Alarm nur aufgerufen, wenn ein Trigger kommt, ansteht oder geht.
FOR #i := 0 TO msgMaxIndex DO
IF "DB".TRIGGER_aux[#i] OR "DB".TRIGGER[#i] THEN
Program_Alarm[#i](SIG := "DB".TRIGGER[#i] ...) ;
END_IF;
"DB".TRIGGER_aux[#i] := "DB".TRIGGER[#i] ;
END_FOR ;
FOR #i := 0 TO msgMaxIndex DO
IF "DB".TRIGGER_aux[#i] XOR "DB".TRIGGER[#i] THEN
Program_Alarm[#i](SIG := "DB".TRIGGER[#i] ...) ;
END_IF;
"DB".TRIGGER_aux[#i] := "DB".TRIGGER[#i] ;
END_FOR ;
FOR #i := 0 TO msgMaxIndex DO
IF "DB".TRIGGER_aux2[#i] XOR "DB".TRIGGER[#i] THEN
Program_Alarm[#i](SIG := "DB".TRIGGER[#i] ...) ;
END_IF;
"DB".TRIGGER_aux2[#i] := "DB".TRIGGER_aux[#i] ;
"DB".TRIGGER_aux[#i] := "DB".TRIGGER[#i] ;
END_FOR ;
Was passiert, wenn der Melde-DB verändert und neu geladen wird? Was passiert bei SPS Neustart? Wenn das nicht alle Bedingungen zuverlässig abfängt, dann führt das zu "hängenden" Meldungen, die nur noch wegzubekommen sind wenn man die Ursache noch einmal auslöst. Das Bausteinmeldeverfahren gab es bei den S7-300/400 auch schon, nicht umsonst gab es da in WinCC ein "Not-Quittieren". Beim Alarm_8 verfahren wurde das auch so programmiert wie von dir, aber zusätzlich wurde der meldefähige Baustein auch noch bei SPS-Neuanlauf / Warmstart angestoßen.So wird der Program_Alarm nur aufgerufen, wenn ein Trigger kommt, ansteht oder geht. Wenn der Trigger false ist, wird der Program_Alarm für diese Meldung nicht aufgerufen.
Das führt zwar einerseits zu Zykluszeitschwankungen (abhängig von der Menge der anstehenden Trigger), reduziert die Zykluszeit aber auch effektiv auf die aktiven Trigger.
Der Trigger ist quasi das Meldebit. Je nach Meldung wird es gesetzt/rückgesetzt (bei quittierpflicht) oder nur zugewiesen (also selbstquittierend).
Wie habt ihr das gelöst? Kenne das Problem auch - es bleibt ja nur abzufragen wie der Alarm Status ist und das mit der eigenen Logik vergleichen... also zu merken ob der Alarm theoretisch angezeigt werden sollte oder eben nicht.Was passiert, wenn der Melde-DB verändert und neu geladen wird? Was passiert bei SPS Neustart? Wenn das nicht alle Bedingungen zuverlässig abfängt, dann führt das zu "hängenden" Meldungen, die nur noch wegzubekommen sind wenn man die Ursache noch einmal auslöst. Das Bausteinmeldeverfahren gab es bei den S7-300/400 auch schon, nicht umsonst gab es da in WinCC ein "Not-Quittieren". Beim Alarm_8 verfahren wurde das auch so programmiert wie von dir, aber zusätzlich wurde der meldefähige Baustein auch noch bei SPS-Neuanlauf / Warmstart angestoßen.
Ich habe da einen FB um den Program_Alarm geschrieben, der mit Get_AlarmState und dem Program_Alarm zusammen den Status abfragt und daraus dann verknüpft den EN-Eingang vom Program_Alarm schaltet.Wie habt ihr das gelöst? Kenne das Problem auch - es bleibt ja nur abzufragen wie der Alarm Status ist und das mit der eigenen Logik vergleichen... also zu merken ob der Alarm theoretisch angezeigt werden sollte oder eben nicht.
Prüfst du permanent den Status? Ich dachte mir ich mache das nur beim Neustart-SPS oder wenn ich per Button in der VISU einen "Hardreset" der Meldungen durchführe.Ich habe da einen FB um den Program_Alarm geschrieben, der mit Get_AlarmState und dem Program_Alarm zusammen den Status abfragt und daraus dann verknüpft den EN-Eingang vom Program_Alarm schaltet.
Die Zykluszeit geht damit deutlich weniger hoch als wenn Program_Alarm dauerhaft enabled ist.
Ja, den Status prüfe ich permanent. Daraus schaue ich ob ein Alarm gekommen, gegangen, quittiert, nicht quittiert ist, etc.Prüfst du permanent den Status? Ich dachte mir ich mache das nur beim Neustart-SPS oder wenn ich per Button in der VISU einen "Hardreset" der Meldungen durchführe.
Okay super danke! Das werde ich auch so machen. Habe bisher einen FB "Program_Alarm_Control" vor dem Program_Alarm aufgerufen der den EN und SIG des Program_Alarm schaltet. Dann kommt da jetzt noch der Status reinJa, den Status prüfe ich permanent. Daraus schaue ich ob ein Alarm gekommen, gegangen, quittiert, nicht quittiert ist, etc.
Zusätzlich merke ich mir auch den externen AlarmTrigger und verhackstücke diesen mit dem AlarmStatus.
Das dürfte genau das sein. Und ja ProDiag ist schon cool Aber es kann halt so viel das man üblicherweise nicht braucht, das man da ruhig die einfache Alarmfunktionalität for free weitergeben könnte.Hab ich mich auch schon gefragt, aber was willst du tun. Ich finde es auch voll nervig das man ausenrum programmieren muss. Vorallem springs du wenn du auf den Alarm klickst, erst mal auf den Alarmbaustein der das kapselt (zumindest bei uns). Unschön... aber wahrscheinlich soll ProDiag forciert werden.
Moin. Könntest du dein Stück Code mal erklären?Ja, den Status prüfe ich permanent. Daraus schaue ich ob ein Alarm gekommen, gegangen, quittiert, nicht quittiert ist, etc.
Zusätzlich merke ich mir auch den externen AlarmTrigger und verhackstücke diesen mit dem AlarmStatus.
Ja das wäre super! Ich habe nämlich eine 1512 mit ca. 400 Meldungen. Wenn ich die Programm-Alarme permanent aufrufe sind das ca 33ms.Ich habe den Code gerade nicht zur Hand, das war bei meinem vorherigen Arbeitgeber.
Kann bei Gelegenheit mal nachschauen wie es ungefähr gemacht ist.
Ich habe das bei einem Projekt mit einer 1517F initial gemacht, da war natürlich Power vorhanden.
Es waren geschätzt insgesamt 1500-2000 Instanzen des Bausteins.
Später habe ich das auch auf 1516F und 1512SP laufen gehabt, mit deutlich weniger Instanzen ( ca. 100 bei der 1512SP).
Die Zykluszeiten waren aber alle im Rahmen, sodass es für unsere Anlagen damit gut liefen. Auch bei Meldeschwällen (-schwallen?!), da ich das erzeugen der Meldungen über eine pseudo-Zufallszahl verteilt habe (mit gespeichertem Zeitstempel)
Meldet er wirklich alle 400 Meldungen, auch wenn diese alle miteinander kommen? Z.B. Meldeschwall?Ja das wäre super! Ich habe nämlich eine 1512 mit ca. 400 Meldungen. Wenn ich die Programm-Alarme permanent aufrufe sind das ca 33ms.
Mit der Routine drum herum sind das 22ms.
Die 33ms sind rein "Aufruf" Program_AlarmMeldet er wirklich alle 400 Meldungen, auch wenn diese alle miteinander kommen? Z.B. Meldeschwall?
Jap, das wird so sein.Hat denn schon mal jemand bei Siemens eine Support-Anfrage gestellt, warum der Bausteinaufruf so viel Rechenleistung kostet?
Die Frage ist ja, was macht der Baustein da. Der Meldezustand muss ihm intern schon vorliegen, denn die Meldung ans HMI geschieht ja auch nur bei Änderung. Darum ergibt es überhaupt keinen Sinn, um diese intern technisch notwendige Flankenauswertung noch eine eigene Flankenauswertung drumherum bauen zu müssen. Und warum dauert eine Abfrage des Meldezustands so lange? Eine Meldung besitzt eine ID, da schaue ich in einer Liste nach dem Zustand und fertig. Wenn man so ein komplettes Meldesystem im Anwenderprogramm selber inklusive Netzwerkprotokoll zu Fuß ausprogrammiert, ist das vermutlich immer noch leistungsfähiger als das was Siemens da im Betriebssystem verankert hat, und das prinzipbedingt wesentlich schneller sein sollte.
Wir verwenden essentielle Cookies, damit diese Website funktioniert, und optionale Cookies, um den Komfort bei der Nutzung zu verbessern.
Siehe weitere Informationen und konfiguriere deine Einstellungen