SFunWrappedStaticLib
Anwendung
Die Einbindung eigener Codes in statische Bibliotheken kann nützlich sein, um
- die Erstellung von Modulen zu beschleunigen, sofern der Code nahezu unveränderliche Algorithmen enthält
- Kunden TwinCAT Target kompatible SFunction Algorithmen zur Verfügung zu stellen, ohne dass der Quellcode herausgegeben werden muss (es werden nur kompilierte Bibliotheken herausgegeben).
Beschreibung
Im folgenden Beispiel zeigt die Konfiguration des Modulgenerators, wenn von statisch verknüpften Bibliotheken abhänge SFunctions verwendet werden. Für diese Art der Codeintegration muss für alle TwinCAT Plattformen, für die das Modul erstellt werden soll, eine geeignete Bibliothek verfügbar sein.
Die folgende Grafik verdeutlicht den typischen Arbeitsfluss bei der Nutzung von Algorithmen Dritter in einem eigenen Simulink Modell:

In diesem Beispiel ist der Quellcode der „Algorithmus Entwicklungsseite“ verfügbar und kann für alle TwinCAT Plattformen kompiliert werden. Es zeigt wie
- abhängige Bibliotheken erzeugt werden
- solche Bibliotheken bereitgestellt werden (z.B. Kunden)
- solche Bibliotheken in eigenen Modellen verwendet werden
Überblick Projektverzeichnis
TE1400Sample_SFunWrappedStaticLib enthält alle notwendigen Dateien, um dieses Beispiel zu reproduzieren:
TctSmplSFunWrappedStaticLib.mdl | enthält das Modell, das die SFunction referenziert. |
TctSample_SFunLibWrapper.cpp | muss auf Zielsystem vorhanden sein. Enthält den Quellcode der SFunction. |
StaticLib.cpp | einfacher Beispiel-Quellcode einer statischen Bibliothek. |
BuildLibsAndSFunction.m | enthält ein M-Skript, das die statische Bibliothek für alle derzeit verfügbaren TwinCAT Plattformen und die SFunktion erstellt. |
OpenLibProject.m | enthält ein M-Skript, das die MATLAB Build Umgebung für Visual Studio, wie z.B. MATLAB Include- und Bibliotheks-Verzeichnisse definiert. Anschließend wird die statische Bibliothek mit den vordefinierten Umgebungsvariablen in Microsoft Visual Studio 2010 geöffnet. |
Unterverzeichnis LibProject | enthält die statische Bibliothek. |
Unterverzeichnis BuildScripts | enthält einige M-Skripts für "BuildLibsAndSFunction.m" und "OpenLibProject.m". |
_PrecompiledTcComModules | Dieses Unterverzeichnis enthält bereits fertig kompilierte, aus den beiliegenden Simulink-Modellen erzeugte TwinCAT-Module. Diese erlauben es, die Einbindung eines Moduls in TwinCAT ohne vorherige Modulgenerierung auszuprobieren. Sie können z. B. genutzt werden, wenn beispielsweise noch keine MATLAB-Lizenz vorhanden ist. Eine Kurzanleitung zur Installation der Module auf dem Entwicklungsrechner liegt ebenfalls bei. Achtung: Um das Modul auf einem x64-Zielsystem starten zu können, muss dieses in den Testmodus versetzt werden! |
_PreviousSimulinkVersions | Die oben beschriebenen MDL-Dateien sind im Datei-Format der aktuellen Simulink-Version gespeichert. Dieses Unterverzeichnis enthält die Modelle im Datei-Format älterer Simulink-Versionen. |
SFunction und entsprechende statisch verknüpfte Bibliotheken erstellen
Erstellungsvoraussetzungen
Für die Erstellung der Binärdateien sollte (nicht muss) TwinCAT 3 auf Ihrem Rechner installiert sein. Voraussetzungen:
Windows-Treiberkit |
auf dem Rechner installiert, Umgebungsvariable WinDDK auf entsprechenden Pfad gesetzt. |
TwinCAT SDK |
auf dem Rechner installiert, Umgebungsvariable TwinCatSdk auf entsprechenden Pfad gesetzt. |
Weitere Auskünfte dazu siehe Systemanforderungen in der TwinCAT 3 Dokumentation.
Statische Bibliotheken manuell erstellen
Sie können die statischen Bibliotheken mit Visual Studio manuell erstellen. Führen Sie dazu OpenLibProject.m aus. Dadurch werden die erforderlichen Umgebungsvariablen vorbereitet und das SFunction Projekt in Visual Studio geöffnet. Erzeugen Sie ein Projekt für alle Plattformen, die unterstützt werden sollen. Die Ausgabedatei für alle Plattformen ist eine statische Bibliothek:

Erstellen der statischen Bibliothek via Build Skript
Starten Sie BuildLibsAndSFunction.m. Dadurch wird die Build-Umgebung vorbereitet und MSBUILD mehrfach aufgerufen, um die lib Dateien für die Plattformen zu erstellen. Anschließend werden alle Build-Ausgabedateien in das Unterverzeichnis LibProject\TctSample_WrappedStaticLib\BuildOutput kopiert. Die .LIB Dateien zum Erzeugen der SFunction und die generierten TwinCAT Module werden ebenfalls in das Verzeichnis LibProject\TctSample_WrappedStaticLib\LibPackage kopiert.
Weitergabe statischer Bibliotheken
Das Verzeichnis LibProject\TctSample_WrappedStaticLib\LibPackage kann nun an Kunden weitergegeben werden, die diese Bibliothek in ihren eigenen - TwinCAT Target kompatiblen – SFunctions verwenden möchten. Kopieren Sie den Inhalt dieses Verzeichnisses in das Verzeichnis %TwinCat3Dir%Functions\TE1400-TargetForMatlabSimulink\Libraries auf dem System des Nutzers. BuildLibsAndSFunction.m erledig das auf einem lokalen System. Das Verzeichnis sollte folgenden Inhalt haben:
Unterverzeichnis TwinCAT xx (xxx) |
enthält die statischen Bibliotheken für verschiedene TwinCAT Plattformen. Sie werden verwendet, um TwinCAT Module aus dem entsprechenden Simulink Modell zu generieren. |
Unterverzeichnisse Win32 / Win64 |
enthalten die statischen Bibliotheken für die MATLAB Plattformen (32 und/oder 64 Bit). Sie werden verwendet, um TwinCAT Module aus dem entsprechenden Simulink Modell zu generieren. |
MEX-Dateicode kompilieren
Bevor die SFunction im Simulink Modell verwendet werden kann, muss sie erzeugt werden. Das kann manuell geschehen, wie für andere SFunktionen auch. Der MEX Compiler muss die Anweisung erhalten, die statische Bibliothek mit der SFunktion zu verknüpfen.
BuildLibsAndSFunction.m erledigt das automatisch. Danach gibt es in Ihrem Arbeitsverzeichnis eine Datei "SFunStaticLib.mexw32".
Zum Testen öffnen Sie "TctSmplSFunWrappedStaticLib.mdl" und starten die Simulation. Die Simulation muss ohne Fehlermeldung starten.
TwinCAT Modul generieren
Modell konfigurieren
Die allgemeinen Einstellungen zum Generieren eines TwinCAT Moduls müssen gesetzt sein, so muss ein Fixed-Step-Solver konfiguriert und unter dem Karteireiter „General“ in den Modellcodereinstellungen das SystemTargetFile "TwinCAT.tlc“ ausgewählt sein. Weitere Informationen zur allgemeinen Konfiguration des TwinCAT Modulgenerators siehe Quickstart.
Der Codegenerator muss auch wissen, welche statischen Bibliotheken mit dem generierten Code zu verknüpfen sind und wo diese zu finden sind. Tragen Sie diese Informationen in die entsprechenden Optionsfelder des Simulink-Coders ein, wie in den folgenden Abbildungen gezeigt.
Das "Include-Verzeichnisse" sollte bereits automatisch von TwinCAT Target erstellt worden sein. Die "Libraries" Einstellung muss die Namen der zu verknüpfenden statischen Bibliotheken enthalten.
Hintergrundinformation zu diesen Einstellungen:
In diesem Beispiel (und den meisten anderen Fällen) gibt es diese Bibliotheken in den angegebenen Verzeichnissen mehrfach. Welche Version mit dem Modul verknüpft wird, entscheided MSBUILD bei der Verknüpfung der generierten TwinCAT Modul-Binärdateien.
Dieses Beispiel als Vorlage verwenden
Nachfolgend ist der einfachste Weg zu einer eigenen TwinCAT Target kompatible SFunction Dependency kurz beschrieben:
- 1. Beispielverzeichnis kopieren
- 2. MDL Datei durch eigene ersetzen
- 3. VCXPROJ Datei in den Namen Ihrer SFunction umbenennen
- 4. Eigene Quelldateien in das Verzeichnis der VCXPROJ Datei kopieren
- 5. Die Skripts BuildLibsAndSFunction.m und OpenLibProject.m an den neuen Projektnamen anpassen
- 6. VCXPROJ Datei mit OpenLibProject.m öffnen
- 7. Bestehende CPP-Dateien aus dem Projekt entfernen
- 8. Eigene CPP Dateien zum Projekt hinzufügen
- 9. Gegebenenfalls Include-und Dependency-Verzeichnisse sowie Bibliotheken zu Compiler- und Linkereinstellungen hinzufügen
- 10. Projekt erzeugen (für verschiedene Plattformen und/oder Konfigurationen)
- 11. VCXPROJ Datei schließen
- 12. BuildLibsAndSFunction.m starten