Methode ITcPostCyclicCaller:AddPostModule

Meldet die ITcPostCyclic Schnittstelle eines Moduls bei einem zyklischen Aufrufer, z. B. einer TwinCAT Task an.

Syntax

virtual HRESULT TCOMAPI
AddPostModule(STcPostCyclicEntry* pEntry, ITcPostCyclic* ipMod, ULONG_PTR
context=0, ULONG sortOrder=0)=0;

Parameter

pEntry: (Typ: STcPostCyclicEntry) [in] Zeiger auf einen Listeneintrag, welcher in die interne Liste des zyklischen Aufrufers eingefügt wird, siehe auch Beschreibung.

ipMod: (Typ: ITcPostCyclic) [in] Schnittstellenzeiger, der vom zyklischen Aufrufer verwendet wird.

context: (Typ: ULONG_PTR) [optional] ein Kontextwert, der bei jedem Aufruf an die ITcPostCyclic::PostCyclicUpdate() 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 verwendet einen Smart Pointer, um auf den zyklischen Aufrufer vom Typ ITcPostCyclicCallerPtr zu verweisen. Die Objekt-ID der Task ist in diesem Smart Pointer gespeichert und eine Referenz zur 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 AddPostModule Methode verwendet werden.

Das folgende Codebeispiel veranschaulicht die Anmeldung der ITcPostCyclicCaller Schnittstelle.

RESULT hr =
S_OK;

if ( m_spPostCyclicCaller.HasOID() ) {

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

    if ( FAILED(hr =
m_spPostCyclicCaller->AddPostModule(m_spPostCyclicCaller,
THIS_CAST(ITcPostCyclic))) ) {

     m_spPostCyclicCaller = NULL;

    }

}

}