SFunStaticLib

Anwendung

Die Einbindung eigener Codes in statische Bibliotheken kann nützlich sein, um

Beschreibung

Das folgende Beispiel zeigt, wie mit SFunctions TwinCAT Module aus Simulink Modellen generiert werden, für die kein Quellcode verfügbar ist. In diesem Fall kann die SFunction Funktionalität über statische Bibliotheken in das generierte TwinCAT Modul eingebunden werden. Das setzt aber voraus, dass für alle TwinCAT Plattformen, für die das Modul erstellt werden soll, geeignete Bibliotheken verfügbar sind.
Die folgende Grafik verdeutlicht den typischen Arbeitsfluss bei der Nutzung von Algorithmen Dritter in einem eigenen Simulink Modell:

SFunStaticLib 1:

In diesem Beispiel ist der Quellcode der „Algorithmus Entwicklungsseite“ verfügbar und kann für alle TwinCAT Plattformen kompiliert werden. Es zeigt wie

Übersicht Projektverzeichnis

TE1400Sample_SFunStaticLib enthält alle notwendigen Dateien, um dieses Beispiel zu reproduzieren:

TctSmplSFunStaticLib.mdl

enthält das Modell, das die SFunction referenziert.

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 SFunLibProject

enthält das Sfunction Projekt.

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.

Info: 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.

Binärdateien manuell erstellen

Sie können die Binärdateien 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.

SFunStaticLib 2:

TwinCAT xx(xxx)

Erzeugt die plattformspezifische statische Bibliothek, die mit dem generierten TwinCAT Modul verknüpft wird.

Win32

Erzeugt die .MEXW32 SFunction, mit der die Simulation des Modells mit Simulink in 32-Bit-MATLAB laufen kann. Sie kann nur erzeugt werden, wenn Visual Studio aus 32-Bit-MATLAB gestartet wurde.

x64

Erzeugt die .MEXW64 SFunction, mit der die Simulation des Modells mit Simulink in 64-Bit-MATLAB laufen kann. Sie kann nur erzeugt werden, wenn Visual Studio aus 64-Bit-MATLAB gestartet wurde. Um die MEX Dateien dieses Beispiels für 32 und 64 Bit MATLAB zu erzeugen, muss Visual Studio aus beiden MATLAB Varianten heraus gestartet werden.

Erstellen der Binärdateien via Build Skript

Um das Erstellen der Dateien für einen schnellen Überblick zu beschleunigen, können Sie alternativ BuildLibsAndSFunction.m ausführen. Damit werden die Variablen der Build-Umgebung vorbereitet und MSBUILD wird mehrfach aufgerufen, um die .LIB und .MEXWxx Dateien für die TwinCAT Plattformen und die aktuelle MATLAB Plattform (32 oder 64 Bit) zu erzeugen. Um die MEX Dateien dieses Beispiels für 32 und 64 Bit MATLAB zu erzeugen, muss BuildLibsAndSFunction.m aus beiden MATLAB Varianten heraus gestartet werden.
Nach der Erstellung werden alle Build-Ausgabedateien in das Unterverzeichnis LibProject\TctSample_SFunLib\BuildOutput kopiert. Alle notwendigen Binärdateien werden darüber hinaus auch in das Verzeichnis LibProject\TctSample_SFunLib\LibPackage kopiert.

Binärdateien liefern

Das Verzeichnis LibProject\TctSample_SFunLib\LibPackage kann nun an Kunden übergeben werden, die die erzeugte - TwinCAT Target kompatible – SFunction verwenden möchten. Kopieren Sie den Inhalt dieses Verzeichnisses in das Verzeichnis %TwinCat3Dir%Functions\TE1400-TargetForMatlabSimulink\Libraries auf dem System des Nutzers. Wurde die Binärdatei mit BuildLibsAndSFunction.m erzeugt, wurde das im lokalen System bereits erledigt. 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 entsprechenden Simulink Modellen zu generieren.

Unterverzeichnisse Win32 / Win64

enthalten die MEX Dateien (und optional einige statische Bibliotheken) für die MATLAB Plattformen (32 und/oder 64 Bit). Das Unterverzeichnis Win32 oder Win64 wird dem MATLAB-Pfad beim Einrichten von TwinCAT Target über SetupTwinCatTarget.m hinzugefügt. So findet MATLAB die SFunction MEX Dateien und kann sie direkt von hier aus verwenden.

Simulation ausführen

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.

SFunStaticLib 3:

SFunStaticLib 4:
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, entscheidet 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 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. Inhalt der DEF Datei an den neuen Projektnamen anpassen
10. Gegebenenfalls Include-und Dependency-Verzeichnisse sowie Bibliotheken zu Compiler- und Linkereinstellungen hinzufügen
11. Projekt erzeugen (für verschiedene Plattformen und/oder Konfigurationen)
12. VCXPROJ Datei schließen
13. BuildLibsAndSFunction.m starten