Signalablauf: Konkurrierende Schreib- und Lesezugriffe auf denselben Datensatz
Das folgende Signalablauf-Diagramm zeigt das Verhalten der Rezeptur-FBs SF_RecipeWrite und SF_RecipeRead 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. |
Weitere Infos
Das Anwendungsbeispiel zeigt, wie Sie mehrfache und konkurrierende Zugriffe auf Rezeptur-Dateien verhindern können. |
0 | Nach 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). |
1 | SF_RecipeWrite und SF_RecipeRead 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. CommandRead). |
2 | Eine steigende Flanke an CommandWrite und CommandRead startet die Ausführung der FBs.Für beide FBs sind an den Eingängen IDRecipeFile und IDRecipeDataSet dieselben Werte angelegt.SF_RecipeWrite sendet eine Anforderung an die Sicherheitssteuerung, um den adressierten Datensatz schreiben zu dürfen.SF_RecipeRead liest die Daten vom adressierten Datensatz und validiert dann die gelesenen Daten. |
3 | SF_RecipeWrite: 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.Die Validierung im Baustein SF_RecipeRead war nicht erfolgreich, da die gelesenen Daten zwischenzeitlich überschrieben wurden. Ausgang Done bleibt SAFEFALSE und am Ausgang DiagCode liegt der Wert C050 an. |
4 | SF_RecipeWrite 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_RecipeRead bleibt im Fehlerzustand C050. |
5 | SF_RecipeWrite hat die Daten validiert und damit seine Operation erfolgreich abgeschlossen. Ausgang Done steuert auf SAFETRUE (DiagCode = 8000).SF_RecipeRead bleibt im Fehlerzustand C050. |