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…
- Der TMC Editor öffnet die Ereignisklasse.
- 2. Geben Sie der Ereignisklasse einen Namen und geben Sie optional einen Display-Text an.
- 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.
- 4. Nutzen Sie die Ereignisklasse in dem zuvor angelegten Modul.
- 5. Legen Sie zusätzlich einen Eingang bSend anlegen, um das Ereignis bei steigender Flanke zu senden.
- 6. Generieren Sie den Quellcode des Moduls.
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.
- 15. Erstellen Sie das C++-Projekt und starten Sie TwinCAT.
- Das Ergebnis wird im Fenster LoggedEvents des TwinCAT 3 Engineerings angezeigt.