Methode ITcIoCyclicCaller:AddIoDriver
Meldet die ITcIoCyclic Schnittstelle eines Moduls bei einem zyklischen I/O-Aufrufer, z. B. einer TwinCAT Task an.
Syntax
virtual HRESULT TCOMAPI AddIoDriver(STcIoCyclicEntry*
pEntry, ITcIoCyclic* ipDrv, ULONG_PTR context=0, ULONG sortOrder=0)=0;
Parameter
pEntry: (Typ: STcIoCyclicEntry) Zeiger auf einen Listeneintrag, welcher in die interne Liste des zyklischen I/O-Aufrufers eingefügt wird, siehe auch Beschreibung.
ipDrv: (Typ: ITcIoCyclic) [in] Schnittstellenzeiger, der vom zyklischen I/O-Aufrufer verwendet wird.
context: (Typ: ULONG_PTR) [optional] ein Kontextwert, der bei jedem Aufruf an die ITcIoCyclic::InputUpdate() und ITcIoCyclic::OutputUpdate 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.
Beschreibung
Eine TwinCAT-Modulklasse verwendet normalerweise einen Smart Pointer, um auf den zyklischen I/O-Aufrufer vom Typ ITcIoCyclicCallerPtr zu verweisen. Die Objekt-ID des zyklischen I/O-Aufrufers ist in diesem Smart Pointer gespeichert und eine Referenz 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 AddIoDriver Methode verwendet werden.
Das folgende Codebeispiel veranschaulicht die Anmeldung der ITcIoCyclicCaller Schnittstelle.
HRESULT hr = S_OK;
if ( m_spIoCyclicCaller.HasOID() )
{
if ( SUCCEEDED_DBG(hr = m_spSrv->TcQuerySmartObjectInterface(m_spIoCyclicCaller))
)
{
if ( FAILED(hr = m_spIoCyclicCaller->AddIoDriver(m_spIoCyclicCaller,
THIS_CAST(ITcIoCyclic))) )
{
m_spIoCyclicCaller = NULL;
}
}
}