Server - Ereignisse bei Datenzugriff

Dieses Beispiel zeigt mögliche Anwendungen für die Ereignisse bei Datenzugriff.

Download TwinCAT XAE Project (*.zip): Sample27.zip

Das hier beschriebene Beispiel nutzt die Statemachine, welche in dem Kapitel „Allgemeine Server - Projektstruktur“ beschrieben ist. Die States: 0,1,10 und 100 sind identisch zu der dort beschriebenen Statemachine. Andere States wurden für das Beispiel modifiziert oder auch neue States hinzugefügt.

Beim Datenzugriff auf einen Wert im Datenmodell über die Eigenschaft oder Kommunikationsdienste kann durch das Nutzen der Ereignismethoden anwenderspezifisches Verhalten implementiert werden. Dafür kann an jeden Datenobjekt-Funktionsbaustein bestimmte Methoden hinzugefügt werden, die vor und nach Schreib- und Lesezugriffen von der Server-Applikation aufgerufen werden. Dabei handelt es sich um die folgenden vier Methoden:

Methodenname

Beschreibung

OnGetVPreEvent

Wird bei Lesezugriffen aufgerufen, bevor die Daten aus dem Datenmodell gelesen werden. In dieser Methode können die zu lesenden Daten angepasst werden oder die Leseanfrage kann mit einem Fehlercode abgelehnt werden.

OnGetVEvent

Wird bei Lesezugriffen aufgerufen, nachdem die Daten aus dem Datenmodell gelesen wurden. Diese Methode kann z. B. für das Zurücksetzen von für eine Leseanfrage gesetzten Werten genutzt werden.

OnSetVPreEvent

Wird bei Schreibzugriffen aufgerufen, bevor die Daten in das Datenmodell geschrieben werden. In dieser Methode können die zu schreibenden Daten überprüft und die Schreibanfrage ggfs. abgelehnt werden.

OnSetVEvent

Wird bei Schreibzugriffen aufgerufen, nachdem die Daten in das Datenmodell geschrieben wurden. Diese Methode kann z. B. genutzt werden, um andere Werte entsprechend dem geschriebenen Wert zu aktualisieren.

Im Folgenden werden die in diesem Beispiel implementierten exemplarischen Anwendungsfälle für diese Methoden erläutert.

Substitution

Das Nutzen von Ersatzwerten (Substitution) lässt sich mit den Methoden „OnGetVPreEvent“ und „OnGetVEvent“ umsetzen. Im Beispiel ist dies in den Funktionsbausteinen „FB_DO_IED_LD1_MMXU1_PhV_phsA“ und „FB_DO_IED_LD1_MMXU1_PhV_phsB“ implementiert. Im ersten wird bei aktivierter Substitution bei Leseanfrage der Prozesswert mit dem Ersatzwert überschrieben. Im zweiten Funktionsbaustein wird dabei zudem der aktuelle Prozesswert zwischengespeichert, um diesen nach der Leseanfrage wieder zu setzen.

Prüfen von Einstellungswerten

Im Funktionsbaustein „FB_DO_IED_LD1_CCGR1_OilTmpSet“ ist das Überprüfen von Schreibanfragen auf Einstellungswerte mit der „OnSetVPreEvent“-Methode implementiert. In dem Funktionsbaustein können über die Datenattribute „minVal“ und „maxVal“ der minimale und maximale gültige Wert für das Datenattribut „setMag“ eingestellt werden. Bei jeder Schreibanfrage auf „setMag“ wird nun überprüft, ob der zu schreibende Wert innerhalb des eingestellten Bereichs liegt. Ist dies nicht der Fall, wird ein Fehlercode an die Serverapplikation zurückgegeben. Dann wird der Wert nicht geschrieben und der Fehler wird an den Client geschickt.

Runden von Messwerten

In der „OnSetVEvent“-Methode können gerundete Messwerte berechnet und Wertebereich bestimmt werden. Dies ist im Funktionsbaustein „FB_DO_IED_LD1_MMDC1_Vol“ implementiert. Dafür wird im „FB_IEDServerSession“-Funktionsbaustein der Wert des „IEDL1/MMDC1.Vol.instMag.f“-Datenattributs mit einem zufälligen Wert überschrieben. Beim Schreibzugriff über die Eigenschaft wird nach dem Übernehmen des Werts ins Datenmodell die „OnSetVEvent“-Methode aufgerufen. In dieser wird zuerst der Wert vom Datenattribut „instMag.f“ gerundet und in das Datenattribut „mag.f“ übernommen. Danach wird anhand der konfigurierten Wertebereiche bestimmt, in welchem Wertebereich sich der aktuelle Wert von „instMag.f“ befindet. Zudem wird geprüft, ob dieser sich außerhalb des definierten Bereichs befindet.