SFunWrappedStaticLib

Anwendung

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

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:

SFunWrappedStaticLib 1:

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

Ü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:

SFunWrappedStaticLib 2:

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.
Um die Bibliotheken in diesem Beispiel für 32 und 64 Bit MATLAB zu erzeugen, muss BuildLibsAndSFunction.m aus beiden MATLAB Varianten heraus gestartet werden.

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.

SFunWrappedStaticLib 3:

SFunWrappedStaticLib 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, 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