Bündelung mehrerer Modelle in einem TwinCAT-Treiber
Automatisch generierter Code von Simulink®-Modellen und MATLAB®-Funktionen können in einem einzelnen C++-Projekt gebündelt werden. Nach dem Build-Vorgang sind dann alle gebündelten Objekte in einem Treiber verfügbar.
Beispielcode in MATLAB®
![]() | Öffnen Sie das passende Beispiel mit: |
Vorteile der Bündelung
Wenn eine SPS-Bibliothek erzeugt wird, sind dann alle erstellen Objekte als Funktionsblock (FB) in dieser Bibliothek gelistet. Obwohl nur ein Treiber und eine tmc-Datei erstellt wird, sind dennoch alle Module einzeln unter System > TcCOM instanziierbar, d. h. aus Sicht des Anwenders in TwinCAT XAE ändert sich hinsichtlich der Nutzung der TcCOM-Objekte nichts. Bei Nutzung der SPS-Bibliothek erhöht sich die Übersichtlichkeit.

Vorteile der Bündelung in einem Treiber:
- Die Anzahl der Dateien im Repository Verzeichnis wird deutlich reduziert. Damit sind auch weniger Dateien auf andere Engineering Systeme zu kopieren, um eine Vielzahl von Modulen auf Engineering Systemen verfügbar zu machen.
- Die Verwaltung von verschiedenen Versionen wird vereinfacht, da miteinander interagierende Module gebündelt ausgetauscht werden können, sodass keine Versionskonflikte entstehen.
Hinweis | |
Simulink CoderTM unterstützt keine Namespaces Werden Datentypen oder Funktionen mit gleicher Benennung in mehreren Modellen definiert, schlägt der Build-Vorgang fehl, da die Definitionen im selben Namespace liegen. |
Vorgehensweise
- 1. Deaktivieren Sie in Simulink® „Run the publish step after project generation”. Dadurch wird nach der Code-Generierung abgebrochen und das erstellte C++-Projekt nicht kompiliert.
- 2. Nutzen Sie bei der Bündelung mehrerer Module einfach die generierten Ordner <modelname>_tcgrt, welche im aktuellen MATLAB®-Pfad abgelegt werden.
- 3. Laden, Bündeln und Konfigurieren Sie in einem Projekt über den ModuleGenerator die Exportkonfigurationen (<modelname>_tcgrt).
- 4. Erstellen Sie ein Export-Projekt.
Im Folgenden ist dies beispielhaft an der Bündelung von 2 Exportkonfigurationen gezeigt:
% find the code artifacts in the existing code generation directories
controllerBuildDir = fullfile(pwd,'TempCtrl_tcgrt');
ctrlsystemBuildDir = fullfile(pwd,'TempCtrlSysPT2_tcgrt');
% load existing export configurations
controllerCfg = TwinCAT.ModuleGenerator.ProjectExportConfig.Load(controllerBuildDir);
ctrlsystemCfg = TwinCAT.ModuleGenerator.ProjectExportConfig.Load(ctrlsystemBuildDir);
% create a new project export configuration
combinedCfg = TwinCAT.ModuleGenerator.ProjectExportConfig('FullPath',fullfile(pwd,'TempCtrlLib','TempCtrlLib.vcxproj'));
% add the loaded class export configurations to the new project configuration
combinedCfg.AddClassExportConfig(controllerCfg.ClassExportCfg{1});
combinedCfg.AddClassExportConfig(ctrlsystemCfg.ClassExportCfg{1});
% ...
% additinal class export configurations can be added here, loaded from
% - Simulink code generation directories (as described)
% - MATLAB code generation directories (from MATLAB Coder with TE1401) in the same way
% turn on generation and installation of the PLC library
combinedCfg.Project.GeneratePlcLibrary = true; % generate a PLC Lib true/false
combinedCfg.Project.InstallPlcLibrary = true; % install the PLC lib on local system true/false
% instantiate and run the project exporter
TwinCAT.ModuleGenerator.ProjectExporter(combinedCfg);