FB_EcPhysicalReadCmd

FB_EcPhysicalReadCmd 1:

The function block FB_EcPhysicalReadCmd can be used to send an EtherCAT read command (FPRD, APRD, BRD) to a particular EtherCAT slave or to all EtherCAT slaves. This command can be used by the PLC to read a register or the DPRAM of the EtherCAT slave controller.

FB_EcPhysicalReadCmd 2: Inputs

VAR_INPUT
    sNetId   : T_AmsNetId; 
    adp      : UINT;
    ado      : UINT;
    len      : UDINT;
    eType    : E_EcAdressingType := eAdressingType_Fixed;
    pDstBuf  : PVOID;
    bExecute : BOOL;
    tTimeout : TIME := DEFAULT_ADS_TIMEOUT;
END_VAR

Name

Type

Description

sNetId

T_AmsNetId

String containing the AMS network ID of the EtherCAT master device. (Type: T_AmsNetId)

adp

UINT

This value determines which EtherCAT slave is to be addressed with this command. The meaning of this value depends on the addressing mode selected with eType. (See adp value)

ado

UINT

Physical memory (DPRAM) or register to be read.

len

UDINT

Number of bytes to be read.

eType

E_EcAdressingType

Different EtherCAT commands are sent, depending on value of eType.
(See eType)

pDstBuf

PVOID

The address (pointer) of the receive buffer.

bExecute

BOOL

The function block is activated by a positive edge at this input.

tTimeout

TIME

Maximum time allowed for the execution of the function block.

adp value

This value determines which EtherCAT slave is to be addressed with this command. The meaning of this value depends on the addressing mode selected with eType:

eType

Description

eAdressingType_Fixed

The slave is addressed by means of its configured EtherCAT address. These EtherCAT addresses can be read via the function block FB_EcGetAllSlaveAddr.

eAdressingType_AutoInc

The slave is addressed based on its position in the ring. The first device has the address 0 (adp=0); adp is decremented by one for all subsequent slaves:
1. Slave adp = 0
2. Slave adp = 16#ffff (-1)
3. Slave adp = 16#fffe(-2)
4. Slave adp = 16#fffd(-3)
etc.

eAdressingType_BroadCAST

All slaves are addressed by this command. adp can be set to 0.

eType

Different EtherCAT commands are sent, depending on value of eType:

eType

Command

eAdressingType_Fixed

Configured Address Physical Read ( FPRD)

eAdressingType_AutoInc

Auto Increment Physical Read ( APRD)

eAdressingType_BroadCAST

Broadcast Read ( BRD)

The individual commands differ in terms of addressing mode (see adp).

FB_EcPhysicalReadCmd 3: Outputs

VAR_OUTPUT
    bBusy  : BOOL;
    bError : BOOL;
    nErrId : UDINT;
    wkc    : UINT; 
END_VAR

Name

Type

Description

bBusy

BOOL

This output is set when the function block is activated, and remains set until a feedback is received.

bError

BOOL

This output is set after the bBusy output has been reset when an error occurs in the transmission of the command.

nErrId

UDINT

Supplies the ADS error code associated with the most recently executed command if the bError output is set.

wkc

UINT

The working counter is incremented by each EtherCAT slave that has processed this command successfully. If only one EtherCAT slave was addressed by this command, this value should therefore be 1.

Example of an implementation in ST:

PROGRAM TEST_PhysicalReadCmd
VAR
    fbReadCmd : FB_EcPhysicalReadCmd;
    bExecute  : BOOL;
    value     : UINT;
    adp       : UINT:=16#3E9;
    ado       : UINT:=16#1100;
    eType     : E_EcAdressingType := eAdressingType_Fixed;
    sNetId    : T_AmsNetId:='192.168.1.5.3.1';
    wkc       : UINT;
    bError    : BOOL;
    nErrId    : UDINT;
END_VAR

fbReadCmd (sNetId:=sNetID, ado:=ado, adp:=adp, eType:=eType, LEN := SIZEOF(value), pDstBuf:=ADR(value), bExecute:=bExecute);
wkc := fbReadCmd.wkc;
bError:= fbReadCmd.bError;
nErrId:= fbReadCmd.nErrId;

Requirements

Development environment

Target platform

PLC libraries to include

TwinCAT v3.1.0

PC or CX (x86, x64, ARM)

Tc2_EtherCAT