eipReadAttr

PLCopen motion icon

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

Inputs

Input

Data Type

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

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.

Remarks

  • 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.

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