Tutorial

Dieses Tutorial verdeutlicht die Arbeitsschritte von einem leeren TwinCAT-Projekt bis hin zu einer abgesendeten Meldung. Es zeigt die im Abschnitt Technische Einführung beschriebenen Eigenschaften des TwinCAT 3 EventLoggers anschaulich im Arbeitsablauf.

Ereignisklasse in den Datentypen der TMC-Datei des C++-Projekts anlegen

Ein neues TwinCAT-C++-Projekt mit Modul aus dem Wizard „TwinCAT Module Class with Cyclic IO” exisitert.
1. Klicken Sie im C++-Projekt doppelt auf die TMC-Datei, um den TMC Editor zu öffnen. Wählen Sie im Kontextmenü von Data Types den Befehl Add new event class…
Tutorial 1:
Der TMC Editor öffnet die Ereignisklasse.
2. Geben Sie der Ereignisklasse einen Namen und geben Sie optional einen Display-Text an.
Tutorial 2:
3. Unterhalb der Ereignisklasse ist bereits ein Ereignis angelegt. Geben Sie dem Ereignis einen Namen und geben Sie einen Dispaly-Text und die Severity an.
Tutorial 3:
4. Nutzen Sie die Ereignisklasse in dem zuvor angelegten Modul.
Tutorial 4:
5. Legen Sie zusätzlich einen Eingang bSend anlegen, um das Ereignis bei steigender Flanke zu senden.
Tutorial 5:
6. Generieren Sie den Quellcode des Moduls.
Tutorial 6:

C++-Programm erstellen

7. Fügen Sie im C++-Programm Header zu der Untitled1Interfaces.h hinzu:
#include "TcRouterInterfaces.h"
#include "TcEventLoggerInterfaces.h"
8. In der Module1.h benötigen Sie lokal folgende Deklarationen:
UINT m_counter;
ITcEventLoggerPtr m_spEventLogger;
ITcMessagePtr m_spMessage;
BOOL m_OldSend;
9. Initialisieren Sie im Konstruktor des Moduls in der Module1.cpp folgende Werte:
CModule1::CModule1()
    : m_Trace(m_TraceLevelMax, m_spSrv)
, m_counter(0)
{
///<AutoGeneratedContent id="MemberInitialization">
    m_TraceLevelMax = tlAlways;
    memset(&m_Parameter, 0, sizeof(m_Parameter));
    memset(&m_Inputs, 0, sizeof(m_Inputs));
    memset(&m_Outputs, 0, sizeof(m_Outputs));
///</AutoGeneratedContent>
    m_spEventLogger = 0;
    m_spMessage = 0;
    m_OldSend = FALSE;
    m_Inputs.bSend = TRUE; 
}
10. Führen Sie in der Methode SetObjStateSO() zusätzlich folgende Initialisierung durch:
// TODO: Add any additional initialization
m_spEventLogger.SetOID(OID_TCEVENTLOGGER);
hr = FAILED(hr) ? hr : m_spSrv->TcQuerySmartObjectInterface(m_spEventLogger);
hr = FAILED(hr) ? hr : m_spEventLogger->CreateMessage(TcEvents::TutorialClass::EventClass, TcEvents::TutorialClass::TutorialEvent.nEventId, TcEvents::TutorialClass::TutorialEvent.eSeverity, 0, &m_spMessage);
11. Wenn der Aufruf der Methode AddModuleToCaller() fehlschlägt, führen Sie eine Deinitialisierung durch:
// Cleanup if transition failed at some stage
if ( FAILED(hr) )
{
    RemoveModuleFromCaller(); 
    m_spEventLogger = NULL; 
    m_spMessage = NULL; 
}
12. Führen Sie in der Methode SetObjStateOS() eine Deinitalisierung durch:
// TODO: Add any additional deinitialization
m_spEventLogger = NULL;
m_spMessage = NULL;
13. Erweitern Sie den zyklischen Code des Moduls um das Versenden der Nachricht:
// TODO: Replace the sample with your cyclic code
if (m_Inputs.bSend && ! m_OldSend) // raising edge
{
   m_spMessage->Send(0); 
}
m_OldSend = m_Inputs.bSend;
14. Legen Sie eine Modulinstanz an und verknüpfen Sie diese mit einem Task.
Tutorial 7:
15. Erstellen Sie das C++-Projekt und starten Sie TwinCAT.
Das Ergebnis wird im Fenster LoggedEvents des TwinCAT 3 Engineerings angezeigt.
Tutorial 8: