Methode ITcCyclicCaller:AddModule
Meldet die ITcCyclic Schnittstelle eines Moduls bei einem zyklischen Aufrufer, z. B. einer TwinCAT Task an.
Syntax
virtual HRESULT TCOMAPI
AddModule(STcCyclicEntry* pEntry, ITcCyclic* ipMod, ULONG_PTR
context=0, ULONG sortOrder=0)=0;
Parameter
pEntry: (Typ: STcCyclicEntry) [in] Zeiger auf einen Listeneintrag, welcher in die interne Liste des zyklischen Aufrufers eingefügt wird, siehe auch Beschreibung.
ipMod: (Typ: ITcCyclic) [in] Schnittstellenzeiger, der vom zyklischen Aufrufer verwendet wird.
context: (Typ: ULONG_PTR) [optional] ein Kontextwert, der bei jedem Aufruf an die ITcCyclic::CyclicUpdate() Methode übergeben wird.
sortOrder: (Typ: ULONG) [optional] die Sortierreihenfolge kann für die Steuerung der Ausführungsreihenfolge verwendet werden, wenn verschiedene Modulinstanzen vom gleichen zyklischen Aufrufer ausgeführt werden.
Rückgabewert
Bei Erfolg wird S_OK („0“) oder ein anderer positiver Wert zurückgegeben, vgl. Rückgabewerte. Erweiterte Meldungen beziehen sich dabei insbesondere auf die Spalte HRESULT in ADS Return Codes.
Wenn der zyklische Aufrufer, d.h. die TwinCAT Task, nicht im OP-Zustand ist, wird der Fehler ADSERR_DEVICE_INVALIDSTATE zurückgegeben.
Beschreibung
Eine TwinCAT-Modulklasse verweist normalerweise mit einem Smart Pointer auf den zyklischen Aufrufer Typ ITcCyclicCallerPtr. Die Objekt-ID der Task ist in diesem Smart Pointer gespeichert und eine Referenz zum Task kann über den TwinCAT Objektserver erhalten werden. Darüber hinaus enthält die Klasse des Smart Pointers bereits einen Listeneintrag. Demzufolge kann der Smart Pointer als erster Parameter für die AddModule Methode verwendet werden.
Der folgende Beispielcode zeigt die Anmeldung der ITcCyclicCaller Schnittstelle.
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;
}
}
}