F_iecAddTableEntry

F_iecAddTableEntry 1:

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.

Syntax

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    : UXINT := 0;
    bitOffs     : UDINT := 0;
    hUser       : UXINT := 0;
END_VAR
VAR_IN_OUT
    hTable      : T_HAODBTable;
ENd_VAR

F_iecAddTableEntry 2: Eingänge

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 (x86 Plattform => 32 Bit, x64 Plattform => 64 Bit).

bitOffs: TwinCAT SPS-Prozessdaten-Bit-Offset.

hUser: Frei definierbarer Wert, auch Pointer (x86 Plattform => 32 Bit, x64 Plattform => 64 Bit). Dieser Wert wird in den Konfigurationsdaten des Applikationsobjekts abgelegt.

Ein-/Ausgänge

hTable: Applikationsobjekt-Datenbankhandle (Hash-Tabellenhandle). Das Tabellenhandle muss vor der Benutzung einmalig mit der Funktion F_iecCreateTableHnd initialisiert werden.

F_iecAddTableEntry 3: Rückgabewert

Rückgabeparameter

Beschreibung

0

Kein Fehler.

<> 0

Fehler: IEC60870-5-10x Fehlercode

Beispiel in ST

Im folgenden Beispiel werden einige 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_SP_TB_1

11

101

IEC870_GRP_INRO1

0

MAP_AREA_MEMORY

101

0

16#00BECF11

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
    MAX_TABLE_IDX   : INT := 49;
END_VAR
PROGRAM P_iecAddTableEntry
VAR_IN_OUT
    hTable  : T_HAODBTable;
    AODB    : ARRAY[1..MAX_TABLE_IDX] OF ST_IEC870_5_101AODBEntry;
END_VAR
VAR
    bAdd    : BOOL := TRUE;
    nError  : UDINT;
END_VAR
IF bAdd THEN
    bAdd := FALSE;
    
    IF ( nError := F_iecCreateTableHnd( ADR( AODB ), SIZEOF( AODB ), hTable )) <> 0 THEN 
        ADSLOGSTR( ADSLOG_MSGTYPE_ERROR OR ADSLOG_MSGTYPE_LOG, 'F_iecCreateTableHnd() error: %s', 
                DWORD_TO_HEXSTR( nError, 8, FALSE ) );
        RETURN;
    END_IF

    IF ( nError := 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 ) ) <> 0 THEN
                                        
        ADSLOGSTR( ADSLOG_MSGTYPE_ERROR OR ADSLOG_MSGTYPE_LOG, 'F_iecAddTableEntry() error: %s',    
                DWORD_TO_HEXSTR( nError, 8, FALSE ) );
    END_IF

    IF ( nError := F_iecAddTableEntry( eType := M_SP_TB_1,
                    asduAddr    := 11,
                    objAddr     := 101,
                    group       := IEC870_GRP_INRO1,
                    multiplier  := 0,
                    ioMapType   := MAP_AREA_MEMORY,
                    byteOffs    := 101,
                    bitOffs     := 0,
                    hUser       := 16#00BECF11,
                    hTable      := hTable ) ) <> 0 THEN
                                        
        ADSLOGSTR( ADSLOG_MSGTYPE_ERROR OR ADSLOG_MSGTYPE_LOG, 'F_iecAddTableEntry() error: %s',    
                DWORD_TO_HEXSTR( nError, 8, FALSE ) );
    END_IF
    
    IF ( nError := 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 ) ) <> 0 THEN
        ADSLOGSTR( ADSLOG_MSGTYPE_ERROR OR ADSLOG_MSGTYPE_LOG, 'F_iecAddTableEntry() error: %s', 
                DWORD_TO_HEXSTR( nError, 8, FALSE ) );
    END_IF

    IF ( nError := 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 ) ) <> 0 THEN
        ADSLOGSTR( ADSLOG_MSGTYPE_ERROR OR ADSLOG_MSGTYPE_LOG, 'F_iecAddTableEntry() error: %s',
                DWORD_TO_HEXSTR( nError, 8, FALSE ) );
    END_IF
END_IF

Voraussetzungen

Entwicklungsumgebung

Zielplattform

Einzubindende SPS Bibliotheken (Kategoriegruppe)

TwinCAT v3.1.4012.0

PC oder CX (x86, x64, ARM)

Tc2_IEC60870_5_10x (Communication->IEC60870)
Tc2_SerialCom (Communication->Serial)
Tc2_TcpIp (Communication->TcpIp)
Tc2_Utilities (System)