eipReadAttr
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.
|
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: |
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