Modulgenerierung (Tc Build)

Mit Hilfe des Publish-Mechanismus können TwinCAT-C++-Projekte für mehrere TwinCAT-Plattformen übersetzt und in ein zentrales Publish-Verzeichnis exportiert werden. Im ersten Schritt werden die Module für alle ausgewählten Plattformen gebaut. Danach werden alle zur Instanziierung und Ausführung des Moduls unter TwinCAT 3 benötigten Dateien in das Publish-Verzeichnis kopiert.
"TC3 Module exportieren“ unter TC3 Engineering > C/C++ > Module-Handhabung beschreibt, wie der Publish-Mechanismus auf TC3-C++-Module angewendet wird. Im Folgenden wird beschrieben, wie Simulink konfiguriert werden muss, um TwinCAT Module direkt nach Generierung des Codes mit Hilfe des Publish-Mechanismus zu exportieren.

Publish-Verzeichnis

Die Dateien exportierter Module werden in das Verzeichnis %TwinCat3Dir%CustomConfig\Modules\<MODULENAME>\ kopiert. Zur Instanziierung des Moduls auf einem anderen Entwicklungsrechner, kann dieser Ordner in das entsprechende Verzeichnis dieses Rechners kopiert werden.

Anwendung

Sinnvollerweise werden Module dann publiziert, wenn sie nur noch selten geändert werden und sie in mehreren TwinCAT-Projekten verwendet werden. Sonst ist es möglicherweise effizienter, das gesamte C++-Projekt in das TwinCAT-Projekt zu integrieren, z. B. wenn sich das Simulink-Modell noch in der Entwicklung befindet, wodurch regelmäßige Änderungen zu erwarten sind, oder das Modul nur in einem speziellen TwinCAT-Projekt verwendet wird.

Konfiguration in Simulink

Der Publish-Mechanismus kann unter Tc Build konfiguriert werden: (Export Optionen für TwinCAT Module)

Modulgenerierung (Tc Build) 1:

Publish module:

Modulgenerierung (Tc Build) 2:

„Generate Code only“ Option

Die Option Generate code only (im Bereich Build process des Fensters für die Codereinstellungen Code Generation) hat wegen der Verwendung des TwinCAT-Publish-Mechanismus anstelle des Make-Mechanismus von MATLAB keine Funktion.

Platform toolset:

Erlaubt die Auswahl eines bestimmten „Platform toolset“ (Compiler) zum Bauen der Modul-Treiber. Die auswählbaren Optionen hängen von den auf dem System installierten VisualStudio-Versionen ab. Ist die Option Auto ausgewählt, wird automatisch ein Compiler ausgewählt.

Publish configuration:

Um ein Debuggen in TwinCAT 3 im exportierten Block Diagramm zu ermöglichen, muss hier Debug gewählt werden. Ist ein Debuggen nicht notwendig, z. B. in einer Release Version, kann hier Release ausgewählt werden.

Eigenschaft

TC3 Build

Beschreibung

Große DataAreas

< 4018

DataAreas > 16 MB werden nicht unterstützt

>= 4018

DataAreas > 16 MB nutzen die Datenbereiche mehrerer DataArea-IDs unter Verwendung der „OBJDATAAREA_SPAN_xxx“-Makros.

Projekt-Unterverzeichnis _ModuleInstall

< 4018

Bei der Instanziierung eines zuvor per „Publish“ exportierten Moduls, wird nur die TMC-Beschreibung in das TwinCAT-Projekt importiert. Die Modulinstanz verweist weiterhin auf Dateien innerhalb des Publish-Verzeichnis. Soll das TwinCAT-Projekt auf weiteren Entwicklungsrechnern geladen werden, müssen die Publish-Verzeichnisse der verwendeten Module manuell in die entsprechenden Verzeichnisse dieser Rechner kopiert werden. Andernfalls kann das Projekt nicht aktiviert werden und das Blockdiagramm wird nicht angezeigt.

>= 4018

Bei der Instanziierung eines exportierten Moduls werden alle zugehörigen Dateien in das Unterverzeichnis „_ModuleInstall“ des Projektverzeichnisses kopiert.

Das Projekt kann jetzt (auch als Archiv verpackt) auf einem anderen Entwicklungsrechner geöffnet werden, ohne zusätzliche Dateien manuell kopieren zu müssen.

Weiterer Vorteil ist, dass die Dateien im Publish-Verzeichnis nun vollständig vom TwinCAT-Projekt entkoppelt sind. Die Modul-Beschreibung, welche nach der Instanziierung Bestandteil des TwinCAT-Projektes ist, und die zugehörigen Dateien (z. B. die Treiber) werden konsistent gehalten. Dateien im Publish-Verzeichnis können überschrieben werden, während das Projekt bis zum „Reload TMC“ mit einer anderen Version des Moduls verwendet und auch weiterhin auf einem Zielsystem neu aktiviert werden kann.

PreCodeGeneration / PostCodeGeneration / PostPublish callback:

Hier können MATLAB-Funktionen eingetragen werden, die vor und nach der Codegenerierung bzw. nach dem Publish aufgerufen werden: (Callback Aufrufreihenfolge)

Modulgenerierung (Tc Build) 3:

Um modell- bzw. modulspezifische Aktionen ausführen zu können, kann hier auf die Struktur cgStruct zurückgegriffen werden, die folgende Unterelemente enthält:

Bezeichnung

Wert

Bemerkung

ModelName

Name des Simulink-Modells

 

StartTime

Rückgabewert der MATLAB-Funktion „now()“ zu Beginn der Codegenerierung

 

BuildDirectory

Aktuelles Build-Verzeichnis

Ab „PostCodeGeneration“

ModuleName

Name des generierten TwinCAT-Moduls

Ab „PostCodeGeneration“

ModuleClassId

ClassId des generierten TwinCAT-Moduls

Ab „PostCodeGeneration“

<UserDefined>

Der Struktur können weitere benutzerspezifische Felder hinzugefügt werden, um nachfolgenden Callbacks zusätzliche Informationen zu übergeben.

 

Beispielsweise könnten so im einfachsten Fall zwischen den einzelnen Phasen der Modul-Generierung zusätzliche Informationen ausgegeben werden:

Modulgenerierung (Tc Build) 4:

Siehe auch: Callback-Beispiele

Signing Certificate for x64 Windows Loader:

Definiert das Zertifikat, das zur Signierung des Treibers für die „TwinCAT RT (x64)“-Plattform verwendet wird. Der Standardwert $(TWINCATTESTCERTIFICATE) verweist auf die Umgebungsvariable TWINCATTESTCERTIFICATE, die unter „Treibersignierung“ (TC3 Engineering > C/C++ >Vorbereitung) beschrieben ist. Alternativ kann hier der Zertifikatname direkt eingetragen werden oder es können - je nach gewünschtem Verhalten bei der Signierung - unterschiedliche Platzhalter verwendet werden:

Wert

Verhalten

$<UMGEBUNGSVARIABLE>

Dieser Platzhalter wird schon bei der Codegenerierung aufgelöst und ihr Wert fest in das generierte C++-Projekt geschrieben. Wenn die angegebene Umgebungsvariable nicht gefunden wird, bricht der Codegenerierungsprozess mit einer entsprechenden Fehlermeldung ab.

$(UMGEBUNGSVARIABLE)

Dieser Platzhalter wird erst beim Bauen des generierten C++-Projektes aufgelöst. Wird die Umgebungsvariable nicht gefunden, erscheint lediglich eine Warnung. Der x64-Treiber kann dann trotzdem gebaut aber auf einem Zielsystem nicht vom Windows-Loader geladen werden.

ZertifikatName

Der Name des Zertifikates wird fest in das generierte C++-Projekt geschrieben.

 

Bleibt das Feld leer, erscheint lediglich eine Warnung. Der x64-Treiber kann dann trotzdem gebaut, aber nicht auf einem Zielsystem vom Windows-Loader geladen werden.