eipReadAttr

PLCopen motion icon

 Function Block - Sends an explicit message (UCMM) to an EtherNet/IP adapter to read a single CIP attribute.

  • The servers (adapters) accessed by this block must be configured in the EtherNet/IP Scanner fieldbus configuration.
  • Only one explicit message (read or write) can be sent at one time to the same server.
    • If another message is pending you receive the error report 3 (busy) after calling the block to start a new exchange.
  • Consider SerializeIn and SerializeOut functions for extracting data from the read buffer.

Inputs

Input

Data Type and hyperlink for F/FB table header cellsData TypeSee Data Types.

Range

Unit

Default

Description

Snd

BOOL

FALSE, TRUE

N/A

No default

  • A rising edge on this input starts the exchange.
  • The DONE output signals the end of exchange.

SrvIP

STRING

No range

N/A

No default

IP address of the server (adapter) (e.g., configured in the EtherNet/IP Scanner configuration).

Class

UINT

No range

N/A

No default

Class identifier of the CIP object.

Inst

UINT

1 to 65535

N/A

No default

Instance identifier of the CIP object.

Attr

UINT

No range

N/A

No default

Identifier of the CIP attribute.

Data

USINT[ ]

Dimension: The number of bytes to read.

Data: No range

N/A

No default

  • Buffer where to store the received data.
  • If the actual attribute length is greater than the size of this array, the value is truncated when read.

Outputs

Output

Data Type and hyperlink for F/FB table header cellsData TypeSee Data Types.

Range

Unit

Description

Done

BOOL

FALSE, TRUE

N/A

This output is TRUE during one cycle when the exchange is finished, whether the exchange succeeded or failed.


  • Warning: This output can be TRUE just after the call to block when starting a new exchange in case of invalid parameters.

RcvSize

UINT

0 to 450

N/A

  • Actual size of the CIP attribute answered by the server.
  • If this size is greater than the size of the DATA input array, it indicates the value was truncated.

Err

UINT

No range

N/A

Main error report.

  • Can be one of these values:
    • 0 = No error.
      1 = Invalid input arguments.
      2 = System is busy (see remarks).
      3 = Timeout waiting for the answer (the timeout value is 3 seconds).
      4 = UCMM error was returned by the server others = internal errors (reserved for technical support).

EmErr

UINT

No range

N/A

In case of a UCMM error, this is the CIP general status error code.

EmErrExt

UINT

No range

N/A

In case of a UCMM error, this is the CIP extended status error code.

FBD Language Example

Not available.

FFLD Language Example

Not available.

IL Language Example

Not available.

ST Language Example

// used variables
// Inst_eipReadAttr : eipReadAttr ;
// bRead : BOOL ; (* request for READ *)
// DataRead : ARRAY [0 .. 15] OF USINT ; (* read data *)
// Server identification and CIP things

#define SRVIP '192.168.33.21'
#define CLASSID UINT#100
#define INSTID_READ UINT#1
#define ATTRID UINT#3
/////////////////////////////////////////////////////////////////////////////////////////
// requested READ command

if bRead then
Inst_eipReadAttr (bRead, SRVIP, CLASSID, INSTID_READ, ATTRID, DataRead);
end_if;
// READ answer here ?
if Inst_eipReadAttr.Done then
// check answer - if OK answered data is in DataRead array
if Inst_eipReadAttr.Err = 0 then
printf ('READ ok - size = %lu bytes',
any_to_dint (Inst_eipReadAttr.RcvSize));
else
printf ('READ Error %lu (UCMM Error %lu, %lu)',
any_to_dint (Inst_eipReadAttr.Err),
any_to_dint (Inst_eipReadAttr.EmErr),
any_to_dint (Inst_eipReadAttr.EmErrExt));
end_if;
// reset READ command and block input
Inst_eipReadAttr (false, SRVIP, CLASSID, INSTID_READ, ATTRID, DataRead);
bRead := false;
end_if;

See Also