F_iecGetPosOfTableEntry

Ab der Produktversion: TwinCAT PLC Library IEC60870-5-104 Zentralstation v1.0.0 und höher.

F_iecGetPosOfTableEntry 1:

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
( Standard.Lib; TcBase.Lib; TcSystem.Lib; TcUtilities.Lib;  werden automatisch eingebunden )