Datenkonsistenz
Ein typisches Beispiel fehlerhafter Datenkonsistenz ist das Setzen eines Triggers, der in der SPS eine Aktion startet und dort auch automatisch zurückgesetzt wird. In der Praxis führt dies oftmals zum Fehler in der Anzeige und zu der Vermutung, dass Wertänderungen von der Visualisierung „verschluckt“ werden.
Beispiel: „Verlorene“ Werte
| Aktionen (in chronologischer Reihenfolge) | Bitwert | ||||
|---|---|---|---|---|---|
|
Steuerelement |
Variablenserver |
OPC-Server (Lesecache) |
OPC-Server (Schreibcache) |
SPS | |
| Ausgangszustand | 0 | 0 | 0 | - | 0 |
| Bediener setzt Bit | 1 | 0 | 0 | - | 0 |
| Anforderung wird weitergereicht an Variablenserver | 1 | 1 | 0 | - | 0 |
| Anforderung wird weitergereicht an OPC-Server | 1 | 1 | 0 | 1 | 0 |
| OPC-Server reicht Anforderung im Schreibcache an SPS weiter | 1 | 1 | 0 | 1 | 1 |
| SPS verarbeitet die Aktion und setzt den Wert zurück auf 0 | 1 | 1 | 0 | - | 0 |
|
. . . |
|||||
| Endzustand: Beim nächsten Lesen vergleicht der OPC-Server den gelesenen Wert mit dem Wert im Lesecache, stellt fest, dass keine Änderung vorgenommen wurde und gibt keine weiteren Nachrichten an den Variablenserver ab. | 1 | 1 | 0 | - | 0 |
Der hier gezeigte Ablauf entspricht genau der OPC-Spezifikation mit der Anforderung eines getrennten Schreib- und Lesepuffers. Tatsächlich ist es so, dass eine Menge Supportfälle von der INOSOFT bearbeitet werden, die genau dieses völlig unerwünschte Verhalten zeigen.
Abhilfen
- Der Hersteller eines OPC-Servers kann gegen die Spezifikation verstoßen und eine Verbindung zwischen Schreib- und Lesecache einbauen, d. h. er müsste den geänderten Wert nach dem Versenden in den Lesecache übertragen. Allerdings sind solche Informationen üblicherweise nicht aus dem Datenblatt zu ersehen und müssen ggf. genau mit dem Hersteller abgesprochen sein.
- Eine andere Möglichkeit besteht darin, genau diese Konstellationen des beidseitigen Schreibens auf eine Variable zu vermeiden. Möglicherweise hilft ein inkrementierender Zähler, der als Trigger an die SPS übersendet wird. Eine Quittierung der SPS über Start oder Ende einer Aktion sollte auf einer anderen Variablen zurückgegeben werden. Letztlich erkauft man sich so eine Datenkonsistenz durch erhöhten Programmieraufwand in SPS und Visualisierung.