EtherNet/IP™ Adapter  1.04.06
User Reference Manual

◆ EI_API_CIP_cloneInstance()

uint32_t EI_API_CIP_cloneInstance ( T pCipNode_p,
uint16_t  classId_p,
uint16_t  instanceId_p,
uint16_t  instanceIdSrc_p 
)

Clone attributes from source instance to a another/new instance.

This function can be used to clone the attributes of an instance to another one. The cloning helps during initialization if there are multiple instances with the same attributes.

Remarks
This function creates the new instance with the identifier passed as parameter instanceId_p.
Parameters
[in]pCipNode_pPointer to the CIP node.
[in]classId_pClass identifier.
[in]instanceId_pInstance identifier.
[in]instanceIdSrc_pInstance identifier of the source instance.
Returns
EI_API_CIP_EError_t as uint32_t value.
Return values
EI_API_CIP_eERR_OKSuccess.
EI_API_CIP_eERR_NODE_INVALIDCIP node is invalid, possibly EI_API_CIP_NODE_new() was not called.
EI_API_CIP_eERR_CLASS_BLACKLISTOperation on the CIP object with specified identifier (class ID) are not allowed.
EI_API_CIP_eERR_CLASS_ALREADY_EXISTClass already exists in CIP node dictionary.
EI_API_CIP_eERR_CLASS_DOES_NOT_EXISTClass does not exists in CIP node dictionary.
EI_API_CIP_eERR_CLASS_UNKNOWN_STATEUnknown state during class operation reached.
EI_API_CIP_eERR_INSTANCE_ALREADY_EXISTInstance already exists in CIP node dictionary.
EI_API_CIP_eERR_INSTANCE_DOES_NOT_EXISTInstance does not exist in CIP node dictionary.
EI_API_CIP_eERR_INSTANCE_UNKNOWN_STATEUnknown state during class operation reached.
EI_API_CIP_eERR_ATTRIBUTE_ALREADY_EXISTAttribute already exists in class or instance.
EI_API_CIP_eERR_ATTRIBUTE_DOES_NOT_EXISTAttribute does not exist in class or instance.
EI_API_CIP_eERR_ATTRIBUTE_NOT_IMPLEMENTEDAttribute function not implemented.
EI_API_CIP_eERR_ATTRIBUTE_INVALID_VALUEInvalid data pointer.
EI_API_CIP_eERR_ATTRIBUTE_CDT_SIZEPassed constructed data type size for e.g. farray not within valid range.
EI_API_CIP_eERR_ATTRIBUTE_EDT_SIZEPassed elementary data type size for e.g. short string not within valid range.
EI_API_CIP_eERR_ATTRIBUTE_UNKNOWN_STATEUnknown state during attribute operation reached.
EI_API_CIP_eERR_SERVICE_ALREADY_EXISTService already exist.
EI_API_CIP_eERR_SERVICE_PARAMETERWrong or invalid service parameters.
EI_API_CIP_eERR_DICTIONARY_FULLCIP dictionary is full, no more class or instance can be added.
EI_API_CIP_eERR_NOT_IMPLEMENTEDNot implemented function.
EI_API_CIP_eERR_MEMALLOCMemory allocation error.
Example
#include <api/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 = 0x0064;
uint16_t instanceId = 0x01;
// Create a new adapter first
pEI_API_ADP = EI_API_ADP_new(numInterfaces);
// Create a CIP node next
pEI_API_CIP_NODE = EI_API_CIP_NODE_new();
// Create a class
errCode = EI_API_CIP_createClass(pEI_API_CIP_NODE, classId);
// Create instance in class with identifier classId
errCode = EI_API_CIP_createInstance(pEI_API_CIP_NODE, classId, instanceId);
// Attribute parameter set
attr.id = 0x01;
attr.edtSize = 0;
attr.cdtSize = 0;
errCode = EI_API_CIP_addInstanceAttr(pEI_API_CIP_NODE, classId, instanceId, &attr);
attr.id = 0x02;
attr.edtSize = 0;
attr.cdtSize = 0;
errCode = EI_API_CIP_addInstanceAttr(pEI_API_CIP_NODE, classId, instanceId, &attr);
// Create two instances (0x0002 and 0x0003) with the same attributes as instanceId 0x0001 (source instance ID)
errCode = EI_API_CIP_cloneInstance(pEI_API_CIP_NODE, classId, 0x0002, instanceId);
errCode = EI_API_CIP_cloneInstance(pEI_API_CIP_NODE, classId, 0x0003, instanceId);
See also
EI_API_CIP_createClass EI_API_CIP_createInstance EI_API_CIP_addInstanceAttr EI_API_CIP_SAttr_t EI_API_CIP_EError_t
EI_API_CIP_SAttr::edt
EI_API_CIP_EEdt_t edt
Definition: EI_API_CIP.h:194
EI_API_CIP_SAttr::cdt
EI_API_CIP_ECdt_t cdt
Definition: EI_API_CIP.h:195
EI_API_CIP_eEDT_UINT
@ EI_API_CIP_eEDT_UINT
Definition: EI_API_CIP.h:128
EI_API_CIP_cloneInstance
ETHIP_API uint32_t EI_API_CIP_cloneInstance(T *pCipNode_p, uint16_t classId_p, uint16_t instanceId_p, uint16_t instanceIdSrc_p)
Clone attributes from source instance to a another/new instance.
Definition: EI_API_CIP_main.c:1928
EI_API_CIP_SAttr
General attribute parameter collection.
Definition: EI_API_CIP.h:192
EI_API_CIP_createInstance
ETHIP_API uint32_t EI_API_CIP_createInstance(T *pCipNode_p, uint16_t classId_p, uint16_t instanceId_p)
Creates a CIP instance.
Definition: EI_API_CIP_main.c:906
EI_API_CIP_createClass
ETHIP_API uint32_t EI_API_CIP_createClass(T *pCipNode_p, uint16_t classId_p)
Create a CIP class.
Definition: EI_API_CIP_main.c:361
EI_API_CIP_NODE_new
ETHIP_API T * EI_API_CIP_NODE_new(void)
Create a new CIP node.
Definition: EI_API_CIP_main.c:69
EI_API_CIP_SAttr::cdtSize
uint16_t cdtSize
Definition: EI_API_CIP.h:198
EI_API_CIP_SAttr::accessRule
EI_API_CIP_EAr_t accessRule
Definition: EI_API_CIP.h:196
EI_API_CIP_SAttr::id
uint16_t id
Definition: EI_API_CIP.h:193
EI_API_CIP_SAttr::edtSize
uint16_t edtSize
Definition: EI_API_CIP.h:197
EI_API_CIP_eCDT_NO
@ EI_API_CIP_eCDT_NO
Definition: EI_API_CIP.h:163
EI_API_ADP_new
ETHIP_API T * EI_API_ADP_new(uint8_t numInterfaces_p)
Create a new EtherNet/IP adapter.
Definition: EI_API_ADP_main.c:235
EI_API_CIP_eAR_GET
@ EI_API_CIP_eAR_GET
Attribute is gettable.
Definition: EI_API_def.h:130
EI_API_CIP_addInstanceAttr
ETHIP_API uint32_t EI_API_CIP_addInstanceAttr(T *pCipNode_p, uint16_t classId_p, uint16_t instanceId_p, EI_API_CIP_SAttr_t *pAttr_p)
Add an attribute to an instance.
Definition: EI_API_CIP_main.c:1455