F_iecGetPosOfTableEntry
Ab der Produktversion: TwinCAT PLC Library IEC60870-5-104 Zentralstation v1.0.0 und höher.
Die Funktion F_iecGetPosOfTableEntry liefert den zum Lookup-Schlüssel passenden Tabellenindex (Arrayindex) eines Hash-Tabelleneintrags. Das erste Arrayelement hat die Positionsnummer eins (non-zero-based array position).
FUNCTION F_iecGetPosOfTableEntry: UDINT
VAR_INPUT
key : ST_IEC870_5_101HashTableKey;
END_VAR
VAR_IN_OUT
hTable : T_HAODBTable;
ENd_VAR
key: Lookup-Schlüssel.
hTable: Applikationsobjekt-Datenbankhandle (Hash-Tabellenhandle). Das Tabellenhandle muss vor der Benutzung einmalig mit der Funktion F_iecCreateTableHnd initialisiert werden.
Rückgabeparameter | Beschreibung |
---|---|
0 | Es wurde kein zum Schlüssel passender Tabelleneintrag gefunden. |
<> 0 | Kein Fehler. Der Rückgabeparameter liefert den gesuchten Tabellenindex (non-zero-based array position). |
Beispiel in ST:
Es wird nach dem Linearen-Tabellenindex von drei Datenpunkten gesucht. Die gesuchten Datenpunkte sind bereits als Hash-Tabelleneinträge konfiguriert worden. Siehe in der Beschreibung der Funktion: F_iecAddTableEntry.
eType | objAddr | asduAddr | group |
---|---|---|---|
M_SP_NA_1 | 100 | 11 | IEC870_GRP_INRO1 |
M_DP_NA_1 | 200 | 11 | IEC870_GRP_INROGEN |
M_IT_NA_1 | 800 | 11 | IEC870_GRP_REQCOGEN |
VAR_GLOBAL CONSTANT
MIN_TABLE_IDX : INT := 0;
MAX_TABLE_IDX : INT := 49;
END_VAR
PROGRAM P_GetPosOfTableEntry
VAR_IN_OUT
hTable : T_HAODBTable;
AODB : ARRAY[MIN_TABLE_IDX..MAX_TABLE_IDX] OF ST_IEC870_5_101AODBEntry;
END_VAR
VAR
bGetPos : BOOL;
position : UDINT;
key : ST_IEC870_5_101HashTableKey;
hUser : UDINT;
END_VAR
IF bGetPos THEN
bGetPos := FALSE;
key.eType := M_SP_NA_1;
key.asduAddr := 11;
key.objAddr := 100;
key.group := IEC870_GRP_INRO1;
key.lookup := IEC870_LOOKUP_KEY_ALL_ON;
position := F_iecGetPosOfTableEntry( key := key, hTable := hTable );
IF position <> 0 THEN
hUser := AODB[MIN_TABLE_IDX+position-1].aObj.cfg.hUser;
ELSE
ADSLOGSTR( ADSLOG_MSGTYPE_HINT OR ADSLOG_MSGTYPE_LOG,
'F_iecGetPosOfTableEntry() error: %s', '' );
END_IF
key.eType := M_DP_NA_1;
key.objAddr := 200;
key.group := IEC870_GRP_INROGEN;
key.lookup := IEC870_LOOKUP_KEY_ALL_ON;
position := F_iecGetPosOfTableEntry( key := key, hTable := hTable );
IF position <> 0 THEN
hUser := AODB[MIN_TABLE_IDX+position-1].aObj.cfg.hUser;
ELSE
ADSLOGSTR( ADSLOG_MSGTYPE_HINT OR ADSLOG_MSGTYPE_LOG,
'F_iecGetPosOfTableEntry() error: %s', '' );
END_IF
key.eType := M_IT_NA_1;
key.objAddr := 800;
key.group := IEC870_GRP_REQCOGEN;
key.lookup := IEC870_LOOKUP_KEY_ALL_ON;
position := F_iecGetPosOfTableEntry( key := key, hTable := hTable );
IF position <> 0 THEN
hUser := AODB[MIN_TABLE_IDX+position-1].aObj.cfg.hUser;
ELSE
ADSLOGSTR( ADSLOG_MSGTYPE_HINT OR ADSLOG_MSGTYPE_LOG,
'F_iecGetPosOfTableEntry() error: %s', '' );
END_IF
END_IF
Voraussetzungen
Entwicklungsumgebung | Zielplattform | Einzubindende SPS Bibliotheken |
---|---|---|
TwinCAT v2.10.0 Build >= 1301 | PC oder CX (x86, ARM) | TcIEC870_5_101.Lib |