-

Optimierung der CPU-Auslastung für ein Instanzpaar zum Lesen und Schreiben einer Rezeptur-Datei

Falls in einem sicherheitsbezogenen Projekt Rezepturdaten geschrieben und gelesen werden, kann es nützlich sein, die Aktivierung der SF_RecipeRead- und RecipeWrite-Instanzen so zu koordinieren, dass die CPU-Auslastung verringert wird. Ein inaktive Instanz eines Rezeptur-Funktionsbausteins verursacht nur die halbe CPU-Auslastung wie eine aktivierte Instanz.

So könnte beispielsweise eine Instanz von SF_RecipeRead nach dem Starten der Sicherheitssteuerung und der sicherheitsbezogenen Applikation aktiviert werden. Der FB liest dann Rezepturwerte, anhand derer die sicherheitsbezogene Applikation den erforderlichen Zustand einnehmen kann. Sobald angekündigt oder erkannt wird, dass die Sicherheitssteuerung ausgeschaltet wird (Shutdown-Ereignis wird in der Applikation signalisiert), könnte diese Instanz deaktiviert werden, um die CPU-Auslastung zu senken. Es könnte dann ein SF_RecipeWrite-FB aktiviert werden, um den aktuellen Zustand der sicherheitsbezogenen Applikation in einer Rezeptur-Datei zu sichern.

Das folgende Diagramm zeigt einen möglichen Signalablauf für ein solches Szenario.

In diesem Beispiel wird die sicherheitsbezogene Applikation mit Hilfe einer Variablen bzw. einem Signal namens SPLCShutdownExpected über den erwarteten Shutdown der Sicherheitssteuerung informiert. Dieses Signal ist wie folgt verschaltet:

Durch die abwechselnde (exklusive) Aktivierung der Bausteine SF_RecipeRead und SF_RecipeWrite) kann die CPU-Auslastung auf 2/3 des Wertes reduziert werden, als wenn beide Instanzen permanent aktiviert wären.

Hinweis
1) Um die Darstellung zu vereinfachen, wird im Signalablauf für jeden Zustandswechsel der FBs eine Dauer von einem Zyklus der Sicherheitssteuerung angenommen. In der Realität können hierfür mehrere Zyklen nötig sein. Die Dauer, um Rezepturdaten vollständig zu lesen, variiert und hängt von der Menge der zu verarbeitenden Daten ab.

0Nach dem Start der Sicherheitssteuerung ist SF_RecipeRead sofort aktiviert (Activate = TRUE), da kein Shutdown-Ereignis für die Sicherheitssteuerung erwartet wird.

In der Folge durchläuft SF_RecipeRead die Zustände 8002 (Prepare), 8004 (Warten auf Bereitschaft) und 8006 (Warten auf den Befehl zur Ausführung am Eingang CommandRead).

In der Zwischenzeit bleibt SF_RecipeWrite inaktiv (DiagCode = 0000, Idle-Zustand).
1Durch eine steigende Flanke am CommandRead-Eingang von SF_RecipeRead wird das Lesen der Rezepturdaten angefordert. Der FB liest die Daten vom adressierten Datensatz und validiert dann die gelesenen Daten.
2SF_RecipeRead hat seine Operation erfolgreich beendet. Ausgang Done steuert auf SAFETRUE und die gelesenen Rezepturwerte liegen an den Ausgängen PayloadRead** (mit ** von 0 bis 15) an.
3Es wurde die Anforderung für den Shutdown der Sicherheitssteuerung erkannt: Das Signal SPLCShutdownExpected steuert auf TRUE. Dieser Zustandswechsel deaktiviert die SF_RecipeRead-Instanz. Der FB wechselt in den Idle-Zustand (DiagCode = 0000) und steuert seinen Done-Ausgang auf SAFEFALSE. Die PayloadRead**-Ausgänge zeigen nun die Failsafe-Werte an, die an den Eingängen FV_PayloadRead** anliegen.

Gleichzeitig wird SF_RecipeWrite aktiviert. Der FB durchläuft die Zustände 8002 (Prepare), 8004 (Warten auf Bereitschaft) und 8006 (Warten auf den Befehl zur Ausführung am Eingang CommandWrite).
4Durch eine steigende Flanke am CommandWrite-Eingang von SF_RecipeWrite wird das Schreiben der Rezepturdaten angefordert. Der FB sendet eine Anforderung an die Sicherheitssteuerung, um den an IDRecipeDataSet spezifizierten Datensatz schreiben zu dürfen.
5Nach dem Schreiben/Ändern des Datensatzes wartet der FB auf die Bestätigung der Sicherheitssteuerung, dass die Datei in das Dateisystem im Flash-Speicher der Standard-Steuerung geschrieben wurde.

Der Schreibvorgang kann mehrere Zyklen dauern (was in diesem Beispiel nicht berücksichtigt ist).
6SF_RecipeWrite liest die neu geschriebenen Daten aus dem RAM und prüft mittels CRC-Vergleich, ob der Datensatz nicht zwischenzeitlich durch eine andere SF_RecipeWrite-Instanz überschrieben oder gelöscht wurde. Außerdem prüft der FB, ob die Werte an seinen PayloadWrite-Eingängen nicht verändert wurden.

Nach der erfolgreichen Validierung steuert Ausgang Done auf SAFETRUE und zeigt damit die Beendigung der FB-Ausführung an.
7Der erwartete Shutdown der Sicherheitssteuerung wird eingeleitet. Eingang Activate steuert auf FALSE. In der Folge geht Ausgang Done zurück auf SAFEFALSE.