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

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:

Grundsätzlich repräsentieren diese Werte die Funktionalitäten (Ja, Nein, Abbrechen) von der folgenden MessageBox in TwinCAT XAE:
Erstellung von und Umgang mit C++ Projekten und Modulen 1:

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.