EtherNet/IP™ Adapter3.09.00
 
Loading...
Searching...
No Matches

◆ EI_API_CIP_createRoutableInstance()

uint32_t EI_API_CIP_createRoutableInstance ( T *  pCipNode_p,
uint16_t  classId_p,
uint16_t  instanceId_p,
uint8_t  linkAddr_p 
)

Creates a routable CIP instance.

This function creates a routable CIP instance in a class. The class and instance identifiers are passed as parameters classId and instanceId. Target instance is encoded by instance ID and link address.

Encoding done by following calculation:

Result = ROUTABLE_OBJ_END - (NUM_ROUTABLE_OBJ_INSTANCES * MAX_LINK_ADDR) + ((linkAddr * NUM_ROUTABLE_OBJ_INSTANCES) + Instance)

Encoding constants are defined below:

ROUTABLE_OBJ_END = 0xFFFE;
NUM_ROUTABLE_OBJ_INSTANCES = 256;
MAX_LINK_ADDR = 20;

Remarks
Function needs to be called after EI_API_CIP_setRoutingMaxLinkAddr.
Parameters
[in]pCipNode_pPointer to the CIP node.
[in]classId_pClass identifier.
[in]instanceId_pInstance identifier, value needs to be from range 0 - 255.
[in]linkAddr_pLink address used to encode the target instance ID, value needs to be from range 0 - maximimum defined by application. For maximum application value see EI_API_CIP_setRoutingMaxLinkAddr
Returns
EI_API_CIP_EError_t as uint32_t value.
Return values
EI_API_CIP_eERR_OKSuccess.
EI_API_CIP_eERR_GENERALInstance encoding failed.
EI_API_CIP_eERR_NODE_INVALIDCIP node is invalid, possibly EI_API_CIP_NODE_new() was not called.
EI_API_CIP_eERR_DICTIONARY_FULLCIP dictionary is full, no more class or instance can be added.
EI_API_CIP_eERR_CLASS_ALREADY_EXISTClass already exists in CIP node dictionary.
EI_API_CIP_eERR_INSTANCE_ALREADY_EXISTInstance already exists in CIP node dictionary.
EI_API_CIP_eERR_MEMALLOCMemory allocation error.
EI_API_CIP_eERR_INSTANCE_UNKNOWN_STATEUnknown state during class operation reached.
Example
#include "EI_API.h"
EI_API_ADP_T* pEI_API_ADP = NULL;
EI_API_CIP_NODE_T* pEI_API_CIP_NODE = NULL;
uint32_t errCode;
uint8_t numInterfaces = 1;
uint16_t classId = 0x10D;
uint8_t maxLinkAddr = 8;
uint8_t linkAddr = 0;
// Create a new adapter first
pEI_API_ADP = EI_API_ADP_new(numInterfaces);
// Create a CIP node next
initParams.maxInstanceNum = 256;
pEI_API_CIP_NODE = EI_API_CIP_NODE_new(&initParams);
// Create a class
errCode = EI_API_CIP_createClass(pEI_API_CIP_NODE, classId);
errCode = EI_API_CIP_setRoutingMaxLinkAddr(pEI_API_CIP_NODE, maxLinkAddr);
linkAddr = 1;
// Create routable instance in class.
errCode = EI_API_CIP_createRoutableInstance(pEI_API_CIP_NODE, classId, 0x0001, linkAddr); // Instance 1
ETHIP_API T * EI_API_ADP_new(uint8_t numInterfaces_p)
Create a new EtherNet/IP adapter.
Definition EI_API_ADP_stub.c:231
ETHIP_API uint32_t EI_API_CIP_createClass(T *pCipNode_p, uint16_t classId_p)
Create a CIP class.
Definition EI_API_CIP_stub.c:215
ETHIP_API uint32_t EI_API_CIP_setRoutingMaxLinkAddr(T *pCipNode_p, uint8_t linkAddr_p)
Initialize a maximum number of link addresses used by application.
Definition EI_API_CIP_stub.c:5457
ETHIP_API uint32_t EI_API_CIP_createRoutableInstance(T *pCipNode_p, uint16_t classId_p, uint16_t instanceId_p, uint8_t linkAddr_p)
Creates a routable CIP instance.
Definition EI_API_CIP_stub.c:5712
ETHIP_API T * EI_API_CIP_NODE_new(EI_API_CIP_NODE_InitParams_t *pInitParams)
Create a new CIP node.
Definition EI_API_CIP_stub.c:81
uint16_t maxInstanceNum
Definition EI_API_CIP_define.h:162
Initialization parameters to create new CIP Node.
Definition EI_API_CIP_define.h:161
General attribute parameter collection.
Definition EI_API_CIP_define.h:184
See also
EI_API_CIP_createClass EI_API_CIP_setRoutingMaxLinkAddr EI_API_CIP_EError_t