-

Signalablauf: Konkurrierende Schreib- und Löschzugriffe auf denselben Datensatz

Das folgende Signalablauf-Diagramm zeigt das Verhalten der Rezeptur-FBs SF_RecipeWrite und SF_RecipeDeleteDataSet wenn sie gleichzeitig auf dieselbe Datei und denselben Datensatz zugreifen. Durch diese konkurrierenden Operationen kann nur ein FB seine Ausführung erfolgreich beenden.

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/schreiben, variiert und hängt von der Menge der zu verarbeitenden Daten ab.

0Nach dem Start der Sicherheitssteuerung sind beide FBs deaktiviert. Folglich sind die Done-Ausgänge beider FBs SAFEFALSE und beide DiagCode-Ausgänge zeigen den Wert 0000 (Zustand Idle).
1SF_RecipeWrite und SF_RecipeDeleteDataSet werden aktiviert, indem ihre Activate-Eingänge auf TRUE gesteuert werden.

In der Folge durchlaufen beide FBs die Zustände 8002 (Prepare), 8004 (Warten auf Bereitschaft) und 8006 (Warten auf den Befehl zur Ausführung am Eingang CommandWrite bzw. CommandDelete).
2Eine steigende Flanke an CommandWrite und CommandDelete startet die Ausführung der FBs.

Für beide FBs sind an den Eingängen IDRecipeFile und IDRecipeDataSet dieselben Werte angelegt.

SF_RecipeWrite

  • 8008: Der FB sendet eine Anforderung an die Sicherheitssteuerung, um den adressierten Datensatz schreiben zu dürfen.
  • 8005: Nach 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.
  • 800C: Der Funktionsbaustein validiert die geschriebenen Daten. Zu diesem Zweck werden die Daten vom RAM eingelesen und der FB prüft durch einen Vergleich der CRC, dass der Datensatz zwischenzeitlich weder überschrieben noch gelöscht wurde. Außerdem prüft der FB, ob die Werte an seinen Payload-Eingängen nicht verändert wurden.
SF_RecipeDeleteDataSet

  • 8008: Der FB sendet eine Anforderung an die Sicherheitssteuerung, um den Datensatz löschen zu dürfen. Löschen bedeutet, alle Werte mit 0 zu überschreiben.
  • 8005: Nachdem er das Löschen des Datensatzes angefordert hat, wartet der FB auf die Antwort der Sicherheitssteuerung.
  • 800C: Der FB liest den gelöschten Datensatz aus dem RAM der Sicherheitssteuerung und validiert ihn. Die CRC der Dateisektion muss den Wert 0 haben. Auf diese Weise prüft der FB, ob der Datensatz zwischenzeitlich im gleichen Zyklus durch eine SF_RecipeWrite-Instanz überschrieben wurde.
3SF_RecipeDeleteDataSet hat die Daten validiert und damit seine Operation erfolgreich abgeschlossen. Ausgang Done steuert auf SAFETRUE (DiagCode = 8000).

Die Validierung im Baustein SF_RecipeWrite war dagegen nicht erfolgreich, da die geschriebenen Daten zwischenzeitlich gelöscht wurden. Ausgang Done bleibt SAFEFALSE und am Ausgang DiagCode liegt der Wert C070 an.