Funktioniert die Code-Generierung auch wenn ich S-Functions in mein Modell einbinde?

S-Functions können in Simulink®-Modelle eingebunden und diese dann auch für die Verwendung in der TwinCAT Runtime gebaut werden.

Es gibt verschiedenen Workflows, die auf unterschiedlichen Gegebenheiten beruhen. Die gängigen 4 Fälle werden hier kurz erläutert und die entsprechende Lösung für die Integration in den Code-Generierungs-Prozess aufgezeigt.

Fall 1: Ich habe Zugriff auf den Quellcode, der in der S-Function verwendet wird.

In diesem Fall kann in der S-Function der Ort des Quellcodes angegeben werden. Der Code-Generierungs-Prozess kann ohne weitere Schritte direkt gestartet werden. Der Quellcode wird gefunden und entsprechend für die Verwendung in TwinCAT kompiliert.

Fall 2: Ich habe eine inlined S-Function (TLC Datei bei)

In diesem Fall kann der Code-Generierungs-Prozess kann ohne weitere Schritte direkt gestartet werden, da der einzufügende Code der S-Function in der TLC Datei vorliegt. Wie eine TLC Datei für eine S-Function erstellt wird, ist der Dokumentation von The MathWorks® zu entnehmen: https://de.mathworks.com/help/simulink/sfg/how-to-implement-s-functions.html

Fall 3: Ich habe ein kompiliertes MEX-File ohne Zugriff auf den Quellcode

In diesem Fall wurde von Dritten eine Funktion erstellt und als MEX-File kompiliert. Der Quellcode oder die TLC Datei wurde z.B. aus Know-How-Schutz-Gründen nicht mitgeliefert. In diesem Fall muss die Dritte Partei die das MEX-File liefert, ihren Quellcode als TwinCAT-fähige Bibliothek kompilieren, damit in der Echtzeit auf diese Bibliothek gelinked werden kann. Eine Anleitung ist unter Beispiele zu finden: SFunStaticLib.

Fall 4: Ich binde in meine S-Function (dessen Quellcode vorliegt) wiederum eine MEX-Bibliothek ein, dessen Quellcode mir nicht vorliegt.

Auch in diesem Fall muss die Dritte Partei die das MEX-File liefert, ihren Quellcode als TwinCAT-fähige Bibliothek kompilieren. Eine Anleitung ist unter Beispiele zu finden: SFunWrappedStaticLib.