F_iecInitAOEntry

F_iecInitAOEntry 1:

The function F_iecInitAOEntry configures the application objects (single points, double points, measured values...) in the application database as linear table entries. The table element (array element) to be configured must be transferred to the function as a VAR_IN_OUT function parameter.

Syntax

FUNCTION F_iecInitAOEntry: UDINT
VAR_INPUT
    eType       : E_IEC870_5_101TcTypeID := ASDU_TYPEUNDEF;
    objAddr     : DWORD := 0;
    group       : DWORD := 0;
    multiplier  : BYTE := 0;
    ioMapType   : E_IEC870_5_101IOMappingType := MAP_AREA_NONE;
    byteOffs    : UXINT := 0;
    bitOffs     : UDINT := 0;
END_VAR
VAR_IN_OUT
    dbEntry     : ST_IEC870_5_101AODBEntry;
END_VAR

F_iecInitAOEntry 2: Inputs

eType: Application object type, ASDU identifier (e.g.: M_SP_NA_1 for single-point or M_DP_NA_1 for double point).

objAddr: Object address, freely selectable.

group: Object group configuration flags. A description of all group flags can be found here. The flags can be combined with an OR operation. Not all combinations are meaningful!

multiplier: Basic cycle time multiplier for cyclic/periodic data transfer. 0 = deactivated. The basic cycle time can be configured via the tPerCyclicBase parameter in the system parameters.

ioMapType: TwinCAT PLC process data area. This parameter defines the mapping for the TwinCAT PLC and IEC application object process data.

byteOffs: TwinCAT PLC process data byte offset (x86 platform => 32 bit, x64 platform => 64 bit).

bitOffs: TwinCAT PLC process data bit offset.

Inputs/outputs

dbEntry: The table element (array element) to be configured.

F_iecInitAOEntry 3: Return value

Return parameter

Description

0

No error.

<> 0

Error: IEC60870-5-10x error code

Sample in ST

In the following sample some data points are configured as linear table entries.

eType

objAddr

group

multiplier

ioMapType

byteOffs

bitOffs

M_SP_NA_1

100

IEC870_GRP_INRO1

0

MAP_AREA_MEMORY

100

0

M_SP_TB_1

101

IEC870_GRP_INRO1

0

MAP_AREA_MEMORY

101

0

M_DP_NA_1

200

IEC870_GRP_INROGEN

0

MAP_AREA_DATA

200

0

M_IT_NA_1

800

IEC870_GRP_REQCOGEN

0

MAP_AREA_MEMORY

800

0

VAR_GLOBAL CONSTANT
    MAX_TABLE_IDX : INT := 49;
END_VAR
PROGRAM P_iecInitAOEntry
VAR_IN_OUT
    AODB    : ARRAY[1..MAX_TABLE_IDX] OF ST_IEC870_5_101AODBEntry;
END_VAR
VAR
    bInit   : BOOL := TRUE;
    nError  : UDINT;
END_VAR
IF bInit THEN
    bInit := FALSE;
    IF ( nError := F_iecInitAOEntry ( eType := M_SP_NA_1,
                    objAddr     := 100,
                    group       := IEC870_GRP_INRO1,
                    multiplier  := 0,
                    ioMapType   := MAP_AREA_MEMORY,
                    byteOffs    := 100,
                    bitOffs     := 0,
                    dbEntry     := AODB[1] ) ) <> 0 THEN
        ADSLOGSTR( ADSLOG_MSGTYPE_ERROR OR ADSLOG_MSGTYPE_LOG, 'F_iecInitAOEntry() error: %s', 
                    DWORD_TO_HEXSTR( nError, 8, FALSE ) );
    END_IF
    
    IF ( nError := F_iecInitAOEntry ( eType := M_SP_TB_1,
                    objAddr     := 101,
                    group       := IEC870_GRP_INRO1,
                    multiplier  := 0,
                    ioMapType   := MAP_AREA_MEMORY,
                    byteOffs    := 101,
                    bitOffs     := 0,
                    dbEntry     := AODB[2] ) ) <> 0 THEN
        ADSLOGSTR( ADSLOG_MSGTYPE_ERROR OR ADSLOG_MSGTYPE_LOG, 'F_iecInitAOEntry() error: %s', 
                    DWORD_TO_HEXSTR( nError, 8, FALSE ) );
    END_IF
    
    IF ( nError := F_iecInitAOEntry ( eType := M_DP_NA_1,
                    objAddr     := 200,
                    group       := IEC870_GRP_INROGEN,
                    multiplier  := 0,
                    ioMapType   := MAP_AREA_DATA,
                    byteOffs    := 200,
                    bitOffs     := 0,
                    dbEntry     := AODB[3] ) ) <> 0 THEN
        ADSLOGSTR( ADSLOG_MSGTYPE_ERROR OR ADSLOG_MSGTYPE_LOG, 'F_iecInitAOEntry() error: %s', 
                    DWORD_TO_HEXSTR( nError, 8, FALSE ) );
    END_IF

    IF ( nError := F_iecInitAOEntry ( eType := M_IT_NA_1,
                    objAddr     := 800,
                    group       := IEC870_GRP_REQCOGEN,
                    multiplier  := 0,
                    ioMapType   := MAP_AREA_MEMORY,
                    byteOffs    := 800,
                    bitOffs     := 0,
                    dbEntry     := AODB[4] ) ) <> 0 THEN
        ADSLOGSTR( ADSLOG_MSGTYPE_ERROR OR ADSLOG_MSGTYPE_LOG, 'F_iecInitAOEntry() error: %s',  
                    DWORD_TO_HEXSTR( nError, 8, FALSE ) );
    END_IF
END_IF

Requirements

Development environment

Target system type

PLC libraries to be linked (category group)

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)