Limitierungen
TwinCAT 3 C++ Module werden im Windows Kernel-Modus ausgeführt. Deswegen müssen die Entwickler einige Limitierungen beachten:
- Win32 API ist nicht im Kernel-Modus verfügbar
- Windows Kernel Mode API darf nicht direkt genutzt werden.
TwinCAT stellt in dem TwinCAT SDK Funktionen bereit, die unterstützt werden. - Usermode Bibliotheken (DLL) können nicht verwendet werden. (siehe Bibliotheken von Drittanbietern)
- Speicherplatz für dynamische Allokation im Echtzeit-Kontext ist durch den Router-Speicher begrenzt (kann im Verlauf des Engineerings konfiguriert werden), siehe Speicherallokation.
- Untermenge der C++ Laufzeit-Bibliotheksfunktionen (CRT) wird unterstützt
- C++ Ausnahmen (C++ Exceptions) werden nicht unterstützt.
- Laufzeit-Typinformation (RTTI, Runtime Type Information) wird nicht unterstützt.
- Untermenge von STL wird unterstützt (siehe STL / Container)
- Unterstützung für Funktionen aus math.h durch TwinCAT Implementierung (siehe Mathematische Funktionen)
TwinCAT-Funktionen als Ersatz für Win32 API Funktionen
Die originale Win32 API ist nicht im Windows Kernel-Modus verfügbar. Aus diesem Grund ist hier eine Liste der normalerweise verwendeten Funktionen aus der Win32 API und was stattdessen in TwinCAT verwendet werden kann:
Win32API | TwinCAT Funktionalität |
WinSock | TF6311 TCP/UDP Echtzeit |
Message Boxen | |
Datei-I/O | Siehe Schnittstelle ITcFileAccess, Schnittstelle ITcFileAccessAsync und Beispiel19: Synchroner Dateizugriff, Beispiel20: FileIO-Write, Beispiel20a: FileIO-Cyclic Read / Write |
Synchronisation | Siehe Beispiel11a: Modulkommunikation: C-Modul ruft eine Methode eines anderen C-Moduls auf |
Visual C CRT | Siehe RtlR0.h |
RTTI dynamic_cast Funktion in TwinCAT
TwinCAT hat keine Unterstützung für dynamic_cast<>.
Stattdessen kann die TCOM-Vorgehensweise möglicherweise verwendet werden. Definieren Sie eine Schnittstelle ICustom, die von ITcUnknown abgeleitet ist und die die Methoden enthält, die von einer abgeleiteten Klasse aufgerufen werden. Die Basisklasse CMyBase wird von ITcUnknown abgeleitet und implementiert dieses Interface. Die Klasse CMyDerived wird von CMyBase und von ICustom abgeleitet. Sie überschreibt die TcQueryInterface Methode, die dann anstelle von dynamic cast verwendet werden kann.
TcQueryInterface kann auch zur Darstellung der IsType() Funktion mittels Auswertung des Rückgabewerts verwendet werden.
Siehe Schnittstelle ITcUnknown.