Method ITcCyclicCaller:AddModule

Logs the ITcCyclic interface of a module to a cyclic caller, e.g. a TwinCAT task.

Syntax

virtual HRESULT TCOMAPI
AddModule(STcCyclicEntry* pEntry, ITcCyclic* ipMod, ULONG_PTR
context=0, ULONG sortOrder=0)=0;

Method ITcCyclicCaller:AddModule 1: Return value

If successful, S_OK ("0") or another positive value will be returned, cf. Return values. Extended messages refer in particular to the column HRESULT in ADS Return Codes.

The error ADSERR_DEVICE_INVALIDSTATE is returned if the cyclic caller, i.e. the TwinCAT task, is not in the OP state.

Parameter

Name

Type

Description

pEntry

STcCyclicEntry

[in] Pointer to a list item that is inserted into the internal list of the cyclic caller; see also description.

ipMod

ITcCyclic

[in] Interface pointer used by the cyclic caller.

context

ULONG_PTR

[optional] A context value that is passed to the ITcCyclic::CycleUpdate() method each time it is called.

sortOrder

ULONG

[optional] The sort order can be used for controlling the order of execution if various module instances are executed by the same cyclic caller.

Description

A TwinCAT module class normally uses a Smart Pointer to refer to the cyclic caller type ITcCyclicCallerPtr. The object ID of the task is stored in this Smart Pointer and a reference to the task can be obtained via the TwinCAT object server. In addition, the Smart Pointer class already contains a list item. Therefore the Smart Pointer can be used as the first parameter for the AddModule method.

The following sample code shows the login of the ITcCyclicCaller interface.

RESULT hr =
S_OK;

if ( m_spCyclicCaller.HasOID() ) {

if ( SUCCEEDED_DBG(hr =
m_spSrv->TcQuerySmartObjectInterface(m_spCyclicCaller)) )
{

if ( FAILED(hr =
m_spCyclicCaller->AddModule(m_spCyclicCaller,
THIS_CAST(ITcCyclic))) ) {

m_spCyclicCaller = NULL;

}

}

}