FB_IEC870_5_101TableEventHandler
Das Auslesen der Ereignisse ist optional und nicht zwingend notwendig. D.h. die SPS-Applikation muss diesen Baustein nicht unbedingt instanzieren. Zur Zeit wird diese Funktionalität nur vom High-Level IEC 60870-5-101/104 Master unterstützt! |
Mit diesem Funktionsbaustein kann die SPS-Applikation einige Änderungen in der IEC-Applikationsobjektdatenbank erkennen und, wenn nötig, darauf entsprechend reagieren. Die Änderungen werden als Ereignisse bezeichnet. Jeder Ereignis-Typ wird in einer separaten internen Liste verwaltet. Die SPS-Applikation kann durch den Aufruf der Bausteinaktionen die anstehenden Ereignisse aus einer der Listen auslesen. Da auch mehrere Ereignisse pro SPS-Zyklus auftreten können werden die Ereignisse intern gezählt. Der Zähler wird beim Auftreten eines Ereignisses immer inkrementiert. An dem Bausteinausgang wird nur der letzte Wert und der Zählerstand ausgegeben.
Folgende Ereignisse werden von dem Funktionsbaustein registriert:
- OnCreate-Ereignisse werden immer dann gemeldet wenn ein neues Applikationsobjekt (Single Point, Double Point, Measured Value...) der Applikationsdatenbank hinzugefügt wurde.
- OnChange-Ereignisse werden dann gemeldet wenn ein Applikationsobjekt von der unteren Transportschicht empfangen wurde (Rx-Frames) oder verschickt wird (Tx-Frames), unabhängig davon ob sich der Wert des Informationsobjektes tatsächlich geändert hat oder nicht. Bei einem direkten Kommando z.B. C_SC_NA_1 in Steuerungsrichtung (Master->Slave) werden im Normalfall bei folgenden Übertragungsursachen Ereignisse gemeldet: eIEC870_COT_ACT (Aktivierung), eIEC870_COT_ACT_CON (Bestätigung der Aktivierung) und bei eIEC870_COT_TERM (Beendigung der Aktivierung). Bei einem Datenpunkt in Überwachungsrichtung (Slave->Master) z.B. M_SP_NA_1 können bei folgenden Übertragungsursachen Ereignisse gemeldet werden: eIEC870_COT_SPONTAN, eIEC870_COT_INROGEN, eIEC870_COT_BACKGROUND usw.
Der Funktionsbaustein besitzt zwei Aktionen:
- RemoveOnCreateEvent (Liest einen Eintrag aus der OnCreate-Ereignisliste aus);
- RemoveOnChangeEvent (Liest einen Eintrag aus der OnChange-Ereignisliste aus);
VAR_IN_OUT
VAR_IN_OUT
hTable : T_HAODBTable;
END_VAR
hTable: Applikationsobjekt-Datenbankhandle (Hash-Tabellenhandle). Das Tabellenhandle muss vor der Benutzung einmalig mit der Funktion F_iecCreateTableHnd initialisiert werden.
VAR_OUTPUT
VAR_OUTPUT
bOk : BOOL := FALSE;
getObj : ST_IEC870_5_101AOGen;
getCfg : ST_IEC870_5_101AOCfg;
nEvents : DWORD := 0;
END_VAR
bOk: Diese Variable wird TRUE, wenn ein Ereignis erfolgreich ausgelesen wurde. Bei FALSE ist die zuletzt gelesene Ereignisliste leer.
getObj: Der aktuelle Wert der Dateneinheit (ASDU).
getCfg: Die aktuellen Konfigurationsparameter der Dateneinheit (ASDU).
nEvents: Ereignis-Zähler (Multiplikator). Wertebereich: (0 bis 16#FFFFFFFF). Beim Erreichen des Maximalwertes wird nicht mehr inkrementiert.
Beispiel in ST:
Im folgenden Programmausschnitt werden die anstehenden Ereignisse in REPEAT-Schleifen ausgelesen und in Windows Application Log geschrieben. Die gesuchten Datenpunkte sind bereits als Hash-Tabelleneinträge konfiguriert worden. Siehe in der Beschreibung der Funktion: F_iecAddTableEntry.
PROGRAM P_LogEvents
VAR_IN_OUT
hTable : T_HAODBTable;
END_VAR
VAR
fbHandler : FB_IEC870_5_101TableEventHandler;
END_VAR
REPEAT
fbHandler.RemoveOnChangeEvent( hTable := hTable );
IF fbHandler.bOk THEN
ADSLOGSTR( ADSLOG_MSGTYPE_HINT OR ADSLOG_MSGTYPE_LOG,
'RemoveOnChangeEvent(), IOA: %s',
DWORD_TO_STRING( fbHandler.getObj.info.objAddr ) );
END_IF
UNTIL NOT fbHandler.bOk
END_REPEAT
REPEAT
fbHandler.RemoveOnCreateEvent( hTable := hTable );
IF fbHandler.bOk THEN
ADSLOGSTR( ADSLOG_MSGTYPE_HINT OR ADSLOG_MSGTYPE_LOG,
'RemoveOnCreateEvent(), IOA: %s',
DWORD_TO_STRING( fbHandler.getObj.info.objAddr ) );
END_IF
UNTIL NOT fbHandler.bOk
END_REPEAT
Voraussetzungen
Entwicklungsumgebung |
Zielplattform |
Einzubindende SPS Bibliotheken (Kategoriegruppe) |
---|---|---|
TwinCAT v3.1.4012.0 |
PC oder CX (x86, x64, ARM) |
Tc2_IEC60870_5_10x (Communication->IEC60870) |