C++-Projektbefehle und -Eigenschaften

Neben dem Erstellen und Öffnen von Projekten kann das TwinCAT Automation Interface C++-Projekte programmatisch verwalten. Projektbefehle wie das Starten des TMC Code Generators oder das Veröffentlichen von Modulen werden über ConsumeXml() auf dem Projektknoten ausgelöst. Dazu wird ein XML-Fragment übergeben, das die auszuführende Aktion beschreibt. Das TwinCAT XAE verarbeitet das XML und führt den entsprechenden Befehl aus. Mit demselben Muster können Projekteigenschaften über ProduceXml() gelesen und über ConsumeXml() geschrieben werden.

TMC Code Generator aufrufen

Der TMC Code Generator liest die .tmc-Datei eines C++-Projekts und generiert oder aktualisiert daraus die zugehörigen C++-Klassenstubs. Dieser Schritt ist nach jeder Änderung an der TMC-Datei erforderlich, damit der generierte C++-Code mit der Modulbeschreibung übereinstimmt. Der Aufruf per Automation Interface entspricht dem manuellen Start über den Kontextmenü-Eintrag Run TMC Code Generator auf dem Projektknoten in der IDE. Das Ergebnis ist identisch: Die generierten .cpp- und .h-Dateien im Projekt werden aktualisiert.

C++-Projektbefehle und -Eigenschaften 1:

C#:

string startTmcCodeGenerator = @"<?xml version=""1.0"" encoding=""UTF-16""?>
<TreeItem>
  <CppProjectDef>
    <Methods>
      <StartTmcCodeGenerator>
        <Active>true</Active>
      </StartTmcCodeGenerator>
    </Methods>
  </CppProjectDef>
</TreeItem>";

// Trigger the TMC code generator by consuming the action XML on the project node
cppProject.ConsumeXml(startTmcCodeGenerator);

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

Der Publish Modules-Befehl veröffentlicht die kompilierten Module eines C++-Projekts im TwinCAT-Modulsystem. Nach dem Veröffentlichen erscheinen die Module in der TwinCAT-Modulliste und können in der Modulinstanzierung anderer TwinCAT-Projekte auf demselben oder anderen Zielsystemen referenziert werden. Der Befehl entspricht dem manuellen Publish Modules-Aufruf über das Kontextmenü des Projektknotens und wird ebenfalls über ConsumeXml() auf dem C++-Projektknoten ausgelöst.

string publishModules = @"<?xml version=""1.0"" encoding=""UTF-16""?>
<TreeItem>
  <CppProjectDef>
    <Methods>
      <PublishModules>
        <Active>true</Active>
      </PublishModules>
    </Methods>
  </CppProjectDef>
</TreeItem>";

// Trigger the Publish Modules command on the C++ project node
cppProject.ConsumeXml(publishModules);

C++-Projekteigenschaften setzen

Projekteigenschaften des C++-Knotens sind über das XML-Interface erreichbar. Mit ProduceXml() werden die aktuellen Einstellungen als XML ausgelesen. Änderungen werden mit ConsumeXml() zurückgeschrieben. Das folgende Beispiel zeigt, wie die Verschlüsselungseinstellung für das Boot-Projekt sowie die Archivierungsoptionen für Zielsystem- und Dateiarchive konfiguriert werden.

Der Wert "None" deaktiviert die Verschlüsselung vollständig. "Target" erzeugt eine gerätespezifische Verschlüsselung, die an das konkrete Zielsystem gebunden ist. Die SaveProjectSources-Felder steuern, ob die Quelldateien des Projekts beim Erstellen eines Archivs mit eingebettet werden.

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>";

// Apply C++ project properties via ConsumeXml
cppProject.ConsumeXml(projProps);

Projekt bauen

Zum Bauen des C++-Projekts oder der gesamten Solution können die Methoden der Visual Studio Automatisierungs-API verwendet werden. Nähere Informationen dazu finden sich in den Artikeln L02-solution-konfiguration.md und C02-plc-projekt-kompilieren.md.