Event Detection FUNCTION_BLOCKS
Diese Funktionsbausteine werden genutzt, um Wertänderungen an den Variablen eines IEC-Servers zu erkennen. Es können verschiedene Events die an einer Variablen auftreten detektiert werden. Der Baustein kann auch verwendet werden, um ein Reporting Frame an einen Client zu schicken. Dafür müssen die entsprechenden Variablen in einem Report Control Block als Referenz vorhanden sein.
Diese Art von Funktionsbaustein existiert in der TcACSI.lib für jeden IEC-Datentyp. Da sich die Bausteine auch nur an diesem Datentyp unterscheiden gibt es auf dieser Seite eine Übersicht der Bausteine, von denen stellvertretend einige beschrieben werden.
Alle Funktionsbausteine besitzen drei Aktionen:
- A_SetValue: Setzt einen Wert in der IEC Datenstruktur und teilt dem Server-Baustein mit, das der Wert eines Datenattributes mit einem neuen oder dem selben Wert beschrieben wurde (UPDATE oder CHANGE). Nur so kann der Server-Baustein erkennen das er für dieses Datenattribut ein Reporting generieren soll. Ein Reporting wird aber auch nur dann generiert, wenn dieses Attribut in dem zugehörigen Dataset des Report-Control-Blocks konfiguriert wurde.
- A_GetEvent: Erkennt, ob ein Client ein Datenattribut in der IEC-Datenstruktur geändert oder gelesen hat. Aktuell können folgende Events detektiert werden: ACSI_EVENT_WRITE, ACSI_EVENT_READ, ACSI_EVENT_UPDATE, ACSI_EVENT_CHANGE. A_GetEvent wird gemeinsam mit A_ClearEvent verwendet.
- A_ClearEvent: Setzt ein detektiertes Event zurück, damit die nächste Änderung erkannt werden kann.
| A_SetValue | A_GetEvent | A_ClearEvent |
---|---|---|---|
value, bits or octets | Der neue Attributwert der geschrieben werden soll | Wird nicht verwendet | Wird nicht verwendet |
event_ctrl | Reserviert. Sollte := 0 sein | Wird nicht verwendet | Legt fest, welches Event zurückgesetzt werden soll. Mehrere Events können bei einem Aufruf zurückgesetzt werden. Folgende Werte können mit "OR" verknüpft werden: ACSI_EVENT_WRITE, ACSI_EVENT_READ, ACSI_EVENT_UPDATE, ACSI_EVENT_CHANGE. Um alle Events auf einmal zurückzusetzen, kann der Wert 0xFFFFFFFF verwendet werden |
event_ind | Diese Variable ist eine Bitmaske. Jedes Bit entspricht einem Event. Ein Event steht an, wenn das entsprechende Bit gesetzt ist | Diese Variable ist eine Bitmaske. Jedes Bit entspricht einem Event. Ein Event steht an, wenn das entsprechende Bit gesetzt ist | Diese Variable ist eine Bitmaske. Jedes Bit entspricht einem Event. Ein Event steht an, wenn das entsprechende Bit gesetzt ist |
event_cnf | Wird zurzeit nicht verwendet | Wird zurzeit nicht verwendet | Wird zurzeit nicht verwendet |
Funktionsbausteine mit Interface "value":
FB_ACSI_BOOLEAN ⇒ BOOLEAN
FB_ACSI_INT8 ⇒ INT8
FB_ACSI_INT16 ⇒ INT16
FB_ACSI_INT32 ⇒ INT32
FB_ACSI_INT64 ⇒ INT64
FB_ACSI_INT128 ⇒ INT128
FB_ACSI_UINT8 ⇒ UINT8
FB_ACSI_UINT16 ⇒ UINT16
FB_ACSI_UINT32 ⇒ UINT32
FB_ACSI_UINT64 ⇒ UINT64
FB_ACSI_UINT128 ⇒ UINT128
FB_ACSI_FLOAT32 ⇒ FLOAT32
FB_ACSI_FLOAT64 ⇒ FLOAT64
FB_ACSI_ENUMERATED ⇒ ENUMERATED
FB_ACSI_VISIBLESTRING255 ⇒ VISIBLESTRING255
FB_ACSI_UNICODESTRING255 ⇒ UNICODESTRING64
FB_ACSI_ENTRYTIME ⇒ ENTRYTIME
FB_ACSI_TIMESTAMP ⇒ TIMESTAMP
FB_ACSI_ENTRYID ⇒ ENTRYID
FB_ACSI_QUALITY ⇒ QUALITY
FB_ACSI_TRIGGERCON ⇒ TRIGGERCON
FB_ACSI_OPTIONFLDS ⇒ OPTIONFLDS
Funktionsbaustein FB_ACSI_BOOLEAN:
VAR_IN_OUT
VAR_IN_OUT
attr : T_ACSI_BOOLEAN; (* ACSI attribute; It depends on the data type *)END_VAR
attr: Ist das Attribut des IEC-Standards des entsprechenden Datentyps.
VAR_INPUT
VAR_INPUT
event_ctrl : DWORD := 16#FFFFFFFF;(* Event control mask (used by A_ClearEvent), default: clear all events *)
value : BOOL;(* New value to set; The data type depends on the Function Block *)
END_VAR
event_ctrl: Siehe Tabelle oben.
value: Siehe Tabelle oben.
VAR_OUTPUT
VAR_OUTPUT
bOk : BOOL;(* TRUE = Success, FALSE = Access failed *)
event_ind : DWORD := 16#00000000;(* Event indication bits, bit set => event indication, bit reset => no event indication *)
event_cnf : DWORD := 16#FFFFFFFF;(* Event confirmation bits, bit set => event confirmed, bit reset => waiting for event confirmation *)
END_VAR
bOk: Ist dieser Wert TRUE sind keine Fehler aufgetreten die Bearbeitung kann fortgesetzt werden. Bei FALSE liegt ein Fehler vor.
event_ind: Siehe Tabelle oben.
event_cnf: Siehe Tabelle oben.
Beispiel:
Im folgenden Beispiel wird die Anwendung von A_SetValue, A_GetEvent und A_ClearEvent gezeigt.
PROGRAM MAIN
VAR
dataCtrl : ST_ACSI_DATACTRL; bValue : T_ACSI_BOOLEAN; (* Value from the data type BOOLEAN *)
END_VAR
---------------------(* Read Value *)
ctrl.BOOLEAN.A_GetEvent(attr := IEDRelay.XCBR1.BlkCls.stVal, event_ctrl := 0);
IF ctrl.BOOLEAN.bOk THEN (* Detect when value is written (check the event_ind bits )*)IF (ctrl.BOOLEAN.event_ind AND ACSI_EVENT_WRITE) = ACSI_EVENT_WRITE THEN
write_bool_counter := write_bool_counter + 1;
END_IF(* Detect when value is read (check the event_ind bits) *)IF (ctrl.BOOLEAN.event_ind AND ACSI_EVENT_READ) = ACSI_EVENT_READ THEN
read_bool_counter := read_bool_counter + 1;
END_IF(* clear events (is necessary to detect the next event)*)
ctrl.BOOLEAN.A_ClearEvent(attr := IEDRelay.XCBR1.BlkCls.stVal, event_ctrl := ACSI_EVENT_WRITE OR ACSI_EVENT_READ);(* clear read and write events *)END_IF
---------------------(* Write value *)
dataCtrl.BOOLEAN.A_SetValue(attr :=IEDDevice.XCBR1.SumSwARs.actVal, value := bValue.value, event_ctrl := 0);
Funktionsbaustein mit Interface "bits":
FB_ACSI_CODEDENUM8 ⇒ CODEDENUM8
FB_ACSI_CODEDENUM16 ⇒ CODEDENUM16
FB_ACSI_CODEDENUM32 ⇒ CODEDENUM32
FB_ACSI_CODEDENUM64 ⇒ CODEDENUM64
FB_ACSI_CODEDENUM128 ⇒ CODEDENUM128
Funktionsbaustein FB_ACSI_CODEDENUM8:
VAR_IN_OUT
VAR_IN_OUT
attr : T_ACSI_CODEDENUM8; (* ACSI attribute; It depends on the data type *)
END_VAR
attr: Ist das Attribut des IEC-Standards vom entsprechenden Datentyp.
VAR_INPUT
VAR_INPUT
event_ctrl : DWORD := 16#FFFFFFFF;(* Event control mask (used by A_ClearEvent), default: clear all events *)
bits : ARRAY[0..0] OF BYTE := 1(0); (* New value to set; The data type depends on the Function Block *)
END_VAR
event_ctrl: Siehe Tabelle oben.
bits: Siehe Tabelle oben.
VAR_OUTPUT
VAR_OUTPUT
bOk : BOOL;(* TRUE = Success, FALSE = Access failed *)
event_ind : DWORD := 16#00000000;(* Event indication bits, bit set => event indication, bit reset => no event indication *)
event_cnf : DWORD := 16#FFFFFFFF;(* Event confirmation bits, bit set => event confirmed, bit reset => waiting for event confirmation *)
END_VAR
bOk: Ist dieser Wert TRUE sind keine Fehler aufgetreten die Bearbeitung kann fortgesetzt werden. Bei FALSE liegt ein Fehler vor.
event_ind: Siehe Tabelle oben.
event_cnf: Siehe Tabelle oben.
Funktionsbaustein mit Interface "octets":
FB_ACSI_OCTETSTRING8 ⇒ OCTETSTRING8
FB_ACSI_OCTETSTRING16 ⇒ OCTETSTRING16
FB_ACSI_OCTETSTRING32 ⇒ OCTETSTRING32
FB_ACSI_OCTETSTRING64 ⇒ OCTETSTRING64
Funktionsbaustein FB_ACSI_OCTETSTRING8:
VAR_IN_OUT
VAR_IN_OUT
attr : T_ACSI_OCTETSTRING8; (* ACSI attribute; It depends on the data type *)
END_VAR
attr: Ist das Attribut des IEC-Standards vom entsprechenden Datentyp.
VAR_INPUT
VAR_INPUT
event_ctrl : DWORD := 16#FFFFFFFF;(* Event control mask (used by A_ClearEvent), default: clear all events *)
octets : ARRAY[0..7] OF BYTE := 8(0);(* OCTETS: 8 byte; New value to set; The data type depends on the Function Block *)
END_VAR
event_ctrl: Siehe Tabelle oben.
bits: Siehe Tabelle oben.
VAR_OUTPUT
VAR_OUTPUT
bOk : BOOL;(* TRUE = Success, FALSE = Access failed *)
event_ind : DWORD := 16#00000000;(* Event indication bits, bit set => event indication, bit reset => no event indication *)
event_cnf : DWORD := 16#FFFFFFFF;(* Event confirmation bits, bit set => event confirmed, bit reset => waiting for event confirmation *)
END_VAR
bOk: Ist dieser Wert TRUE sind keine Fehler aufgetreten die Bearbeitung kann fortgesetzt werden. Bei FALSE liegt ein Fehler vor.
event_ind: Siehe Tabelle oben.
event_cnf: Siehe Tabelle oben.
Voraussetzungen
Entwicklungsumgebung | Zielplattform | Einzubindende SPS-Bibliotheken |
---|---|---|
TwinCAT v2.10.0 Build >= 1340 | PC or CX (x86, ARM) | TcACSI.Lib |