F_iecAddTableEntry
Ab der Produktversion: TwinCAT PLC Library IEC60870-5-104 Zentralstation v1.0.0 und höher.
Die Funktion F_iecAddTableEntry konfiguriert die Applikationsobjekte (Single Points, Double Points, Measured Values...) in der Applikationsdatenbank als Hash-Tabelleneinträge. Die Funktion sucht automatisch nach einem freien, noch nicht belegten Tabellenelement (Arrayelement) und setzt dessen Konfigurationsparameter.
FUNCTION F_iecAddTableEntry: UDINT
VAR_INPUT
eType : E_IEC870_5_101TcTypeID := ASDU_TYPEUNDEF;
asduAddr : DWORD := 0;
objAddr : DWORD := 0;
group : DWORD := 0;
multiplier : BYTE := 0;
ioMapType : E_IEC870_5_101IOMappingType := MAP_AREA_NONE;
byteOffs : UDINT := 0;
bitOffs : UDINT := 0;
hUser : DWORD := 0;
END_VAR
VAR_IN_OUT
hTable : T_HAODBTable;
ENd_VAR
eType: Applikationsobjekt Typ, ASDU identifier (z.B.: M_SP_NA_1 für Single-Point oder M_DP_NA_1 für Double-Point ).
asduAddr: Gemeinsame ASDU-Adresse.
objAddr: Objektadresse, frei wählbar.
group: Object-Group-Konfigurationsflags. Hier finden sie die Beschreibung aller Group-Flags. Die Flags können mit OR-Verknüpfung kombiniert werden. Nicht alle Kombinationen sind aber sinnvoll!
multiplier: Basis-Zykluszeit-Multiplikator für zyklische/periodische Datenübertragung. 0 = Deaktiviert. Die Basis-Zykluszeit kann über den tPerCyclicBase-Parameter in den Systemparametern konfiguriert werden.
ioMapType: TwinCAT SPS-Prozessdatenbereich. Dieser Parameter legt fest wie die TwinCAT SPS und IEC-Applikationsobjekt Prozessdaten gemappt werden sollen.
byteOffs: TwinCAT SPS-Prozessdaten-Byte-Offset.
bitOffs: TwinCAT SPS-Prozessdaten-Bit-Offset.
hUser: Frei definierbarer 32-Bit-Wert. Dieser Wert wird in den Konfigurationsdaten des Applikationsobjekts abgelegt.
hTable: Applikationsobjekt-Datenbankhandle (Hash-Tabellenhandle). Das Tabellenhandle muss vor der Benutzung einmalig mit der Funktion F_iecCreateTableHnd initialisiert werden.
Rückgabeparameter | Beschreibung |
---|---|
0 | Kein Fehler. |
<> 0 | Fehler: IEC60870-5-10x Fehlercode |
Beispiel in ST:
Im folgenden Beispiel werden drei Datenpunkte in die Applikationsdatenbank als Hash-Tabelleneinträge hinzugefügt:
eType | asduAddr | objAddr | group | multiplier | ioMapType | byteOffs | bitOffs | hUser |
---|---|---|---|---|---|---|---|---|
M_SP_NA_1 | 11 | 100 | IEC870_GRP_INRO1 | 0 | MAP_AREA_MEMORY | 100 | 0 | 16#00BECF01 |
M_DP_NA_1 | 11 | 200 | IEC870_GRP_INROGEN | 0 | MAP_AREA_DATA | 200 | 0 | 16#00BECF02 |
M_IT_NA_1 | 11 | 800 | IEC870_GRP_REQCOGEN | 0 | MAP_AREA_MEMORY | 800 | 0 | 16#00BECF03 |
VAR_GLOBAL CONSTANT
MIN_TABLE_IDX : INT := 0;
MAX_TABLE_IDX : INT := 49;
END_VAR
PROGRAM P_HashTableConfig
VAR_IN_OUT
hTable : T_HAODBTable;
AODB : ARRAY[MIN_TABLE_IDX..MAX_TABLE_IDX] OF ST_IEC870_5_101AODBEntry;
END_VAR
VAR
init : BOOL := TRUE;
initError : UDINT;
END_VAR
IF init THEN
init := FALSE;
initError := F_iecCreateTableHnd( ADR( AODB ), SIZEOF( AODB ), hTable );
IF initError <> 0 THEN
ADSLOGSTR( ADSLOG_MSGTYPE_HINT OR ADSLOG_MSGTYPE_LOG,
'F_iecCreateTableHnd() error: %s',
DWORD_TO_HEXSTR( initError, 8, FALSE ) );
RETURN;
END_IF
initError := F_iecAddTableEntry( eType := M_SP_NA_1,
asduAddr := 11,
objAddr := 100,
group := IEC870_GRP_INRO1,
multiplier := 0,
ioMapType := MAP_AREA_MEMORY,
byteOffs := 100,
bitOffs := 0,
hUser := 16#00BECF01,
hTable := hTable );
IF initError <> 0 THEN
ADSLOGSTR( ADSLOG_MSGTYPE_ERROR OR ADSLOG_MSGTYPE_LOG,
'F_iecAddTableEntry() error: %s',
DWORD_TO_HEXSTR( initError, 8, FALSE ) );
RETURN;
END_IF
initError := F_iecAddTableEntry( eType := M_DP_NA_1,
asduAddr := 11,
objAddr := 200,
group := IEC870_GRP_INROGEN,
multiplier := 0,
ioMapType := MAP_AREA_DATA,
byteOffs := 200,
bitOffs := 0,
hUser := 16#00BECF02,
hTable := hTable );
IF initError <> 0 THEN
ADSLOGSTR( ADSLOG_MSGTYPE_ERROR OR ADSLOG_MSGTYPE_LOG,
'F_iecAddTableEntry() error: %s',
DWORD_TO_HEXSTR( initError, 8, FALSE ) );
RETURN;
END_IF
initError := F_iecAddTableEntry( eType := M_IT_NA_1,
asduAddr := 11,
objAddr := 800,
group := IEC870_GRP_REQCOGEN,
multiplier := 0,
ioMapType := MAP_AREA_MEMORY,
byteOffs := 800,
bitOffs := 0,
hUser := 16#00BECF03,
hTable := hTable );
IF initError <> 0 THEN
ADSLOGSTR( ADSLOG_MSGTYPE_ERROR OR ADSLOG_MSGTYPE_LOG,
'F_iecAddTableEntry() error: %s',
DWORD_TO_HEXSTR( initError, 8, FALSE ) );
RETURN;
END_IF
END_IF
Voraussetzungen
Entwicklungsumgebung | Zielplattform | Einzubindende SPS Bibliotheken |
---|---|---|
TwinCAT v2.10.0 Build >= 1301 | PC oder CX (x86) | TcIEC870_5_101.Lib |