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

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:

Event Detection FUNCTION_BLOCKS 1:
TcPlcLibACSI_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:

Event Detection FUNCTION_BLOCKS 2:

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:

Event Detection FUNCTION_BLOCKS 3:

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