Erstellung von und Umgang mit C++ Projekten und Modulen
In diesem Kapitel wird die Erstellung von, der Zugriff auf und der Umgang mit TwinCAT C++ Projekten ausführlich erklärt. Die folgende Liste enthält alle Kapitel dieses Artikels:
- Allgemeine Informationen über C++ Projekte
- Neue C++ Projekte erstellen
- Neues Modul innerhalb eines C++ Projekts erstellen
- Bestehende C++ Projekte öffnen
- Modulinstanzen erstellen
- TMC Code Generator aufrufen
- Publish Modules Befehl aufrufen
- C++ Projekteigenschaften einstellen
- Projekt aufbauen
Allgemeine Informationen über C++ Projekte
C++ Projekte werden durch ihre sogenannten Projektvorlagen spezifiziert, die vom „TwinCAT C++ Projekt-Assistenten“ verwendet werden. Innerhalb eines Projekts können verschiedene Module durch Modulvorlagen spezifiziert werden, die vom „TwinCAT Klassenassistenten“ verwendet werden.
TwinCAT-definierte Vorlagen sind im Abschnitt C++ / Assistenten dokumentiert.
Der Kunde kann eigene Vorlagen definieren, was in dem entsprechenden Unterabschnitt C++ Abschnitt / Assistenten dokumentiert ist.
C++ Projekte erstellen
Um ein neues C++ Projekt mit Hilfe des Automation Interface zu erstellen, müssen Sie zum C++ Knoten navigieren und dann die CreateChild()-Methode mit entsprechenden Vorlagendatei als Parameter ausführen.
Code-Ausschnitt (C#):
ITcSmTreeItem cpp = systemManager.LookupTreeItem("TIXC");
ITcSmTreeItem cppProject = cpp.CreateChild("NewCppProject", 0, "", pathToTemplateFile);
Code-Ausschnitt (Powershell):
$cpp = $systemManager.LookupTreeItem("TIXC")
$newProject = $cpp.CreateChild("NewCppProject", 0, "", $pathToTemplateFile)
Zur Instanziierung eines Treiber-Projekts verwenden Sie "TcVersionedDriverWizard" als pathToTemplateFile.
Neues Modul innerhalb eines C++ Projekts erstellen
Innerhalb eines C++ Projekts wird ein TwinCAT Modul-Assistent verwendet, damit der Assistent aus einer Vorlage ein Modul erstellt.
Code-Ausschnitt (C#):
ITcSmTreeItem cppModule = cppProject.CreateChild("NewModule", 1, "", pathToTemplateFile);
Code-Ausschnitt (Powershell):
$cppModule = $cppProject.CreateChild("NewModule", 0, "", $pathToTemplateFile);
Als Beispiel zur Instanziierung eines Cyclic IO-Modulprojekts verwenden Sie "TcModuleCyclicCallerWizard" als pathToTemplateFile.
Bestehende C++ Projekte öffnen
Zum Öffnen eines bestehenden C++ Projekts mit Hilfe von Automation Interface, müssen Sie zum C++ Knoten navigieren und dann die CreateChild()-Methode mit dem Pfad der entsprechenden C++ Projektdatei als Parameter ausführen.
Sie können drei verschiedene Werte als SubType verwenden:
- 0: Projekt zum Solution-Verzeichnis kopieren
- 1: Projekt zum Solution-Verzeichnis verschieben
- 2: Verwenden Sie den Original-Projektspeicherort (spezifizieren Sie “” als NameOfProject Parameter)
Grundsätzlich repräsentieren diese Werte die Funktionalitäten (Ja, Nein, Abbrechen) von der folgenden MessageBox in TwinCAT XAE:
Anstelle der Vorlagendatei müssen Sie den Pfad zum C++ Projekt (bzw. dessen vcxproj Datei) verwenden, das hinzugefügt werden muss. Alternativ können Sie auch ein C++ Projektarchiv (tczip Datei) verwenden.
Code-Ausschnitt (C#):
ITcSmTreeItem cpp = systemManager.LookupTreeItem("TIXC");
ITcSmTreeItem newProject = cpp.CreateChild("NameOfProject", 1, "", pathToProjectOrTczipFile);
Code-Ausschnitt (Powershell):
$cpp = $systemManager.LookupTreeItem("TIXC")
$newProject = $cpp.CreateChild("NameOfProject", 1, "", $pathToProjectOrTczipFile)
Achten Sie darauf, dass C++ Projekte nicht umbenannt werden können, somit muss der Original-Projektname spezifiziert werden. (vergl. Umbenennen von TwinCAT-C++ Projekten)
Modulinstanzen erstellen
TcCOM Module können am System -> TcCOM Modulknoten erstellt werden. Siehe dort diesbezügliche Dokumentation.
Das gleiche Verfahren kann auch für den C++ Projektknoten gelten, um die TcCOM Instanzen an der Stelle hinzuzufügen ($newProject
im Code oben auf dieser Seite).
TMC Code Generator aufrufen
Der TMC-Code-Generator kann aufgerufen werden, um den C++ Code nach den Änderungen der TMC-Datei oder dem C++ Projekt zu erstellen.
Code-Ausschnitt (C#):
string startTmcCodeGenerator = @"<?xml version=""1.0"" encoding=""UTF-16""?>
<TreeItem>
<CppProjectDef>
<Methods>
<StartTmcCodeGenerator>
<Active>true</Active>
</StartTmcCodeGenerator>
</Methods>
</CppProjectDef>
</TreeItem>";
cppProject.ConsumeXml(startTmcCodeGenerator);
Code-Ausschnitt (Powershell):
$startTmcCodeGenerator = @"<?xml version=""1.0"" encoding=""UTF-16""?>
<TreeItem>
<CppProjectDef>
<Methods>
<StartTmcCodeGenerator>
<Active>true</Active>
</StartTmcCodeGenerator>
</Methods>
</CppProjectDef>
</TreeItem>"
$cppProject.ConsumeXml($startTmcCodeGenerator)
Publish Modules Befehl aufrufen
Die Veröffentlichung umfasst den Aufbau des Projekts für alle Plattformen. Das kompilierte Modul wird für den Export bereitgestellt, wie dies im Abschnitt Modulumgang bei C++ beschrieben ist.
Code-Ausschnitt (C#):
string publishModules = @"<?xml version=""1.0"" encoding=""UTF-16""?>
<TreeItem>
<CppProjectDef>
<Methods>
<PublishModules>
<Active>true</Active>
</PublishModules>
</Methods>
</CppProjectDef>
</TreeItem>";
cppProject.ConsumeXml(publishModules);
Code-Ausschnitt (Powershell):
$publishModules = @"<?xml version=""1.0"" encoding=""UTF-16""?>
<TreeItem>
<CppProjectDef>
<Methods>
<PublishModules>
<Active>true</Active>
</PublishModules>
</Methods>
</CppProjectDef>
</TreeItem>"
$cppProject.ConsumeXml($publishModules)
C++ Projekteigenschaften einstellen
C++ Projekte bieten verschiedene Optionen für den Aufbau- und Bereitstellungsprozess.
Diese sind über das Automation Interface einstellbar.
Code-Ausschnitt (C#):
string projProps = @"<?xml version=""1.0"" encoding=""UTF-16""?>
<TreeItem>
<CppProjectDef>
<BootProjectEncryption>Target</BootProjectEncryption>
<TargetArchiveSettings>
<SaveProjectSources>false</SaveProjectSources>
</TargetArchiveSettings>
<FileArchiveSettings>
<SaveProjectSources>false</SaveProjectSources>
</FileArchiveSettings>
</CppProjectDef>
</TreeItem>";
cppProject.ConsumeXml(projProps);
Code-Ausschnitt (Powershell):
$projProps = @"<?xml version=""1.0"" encoding=""UTF-16""?>
<TreeItem>
<CppProjectDef>
<BootProjectEncryption>Target</BootProjectEncryption>
<TargetArchiveSettings>
<SaveProjectSources>false</SaveProjectSources>
</TargetArchiveSettings>
<FileArchiveSettings>
<SaveProjectSources>false</SaveProjectSources>
</FileArchiveSettings>
</CppProjectDef>
</TreeItem>"
$cppProject.ConsumeXml($projProps)
Für die BootProjectEncryption sind die Werte „None“ und „Target“ gültig.
Beide anderen Einstellungen sind „false“ und „true“ Werte.
Projekt aufbauen
Zum Aufbau des Projekts oder der Solution können Sie die entsprechenden Klassen und Methoden der Visual Studio API verwenden, die hier dokumentiert sind.