Wie man eine C++ S-Funktion zu Simulink hinzufügt
In unseren vorherigen Beispielen wie Matlab Level 2 S-Function Beispiel: Sinuswelle (kontinuierliche Ausgabe) haben wir gezeigt, wie man eine einfache S-Funktion in C++ erstellt.
So fügen Sie eine C++ S-Funktion zu Simulink hinzu:
Schritt 1: Erstellen Sie die Quelldatei der S-Funktion
Erstellen Sie im Verzeichnis, das Sie in Matlab/Simulink geöffnet haben, eine neue Datei namens z.B. sine_wave_generator.cpp. Siehe Matlab Level 2 S-Function Beispiel: Sinuswelle (kontinuierliche Ausgabe) für ein Beispiel des C++-Codes.
Ich empfehle, Visual Studio Code statt Matlab als C++-Editor zu verwenden.
Schritt 2: Kompilieren Sie die S-Funktion
Öffnen Sie ein Terminal und führen Sie aus
mex sine_wave_generator.cppIch empfehle nicht, dies in Matlab auszuführen, obwohl dies möglich ist. Ich empfehle immer, ein System-Terminal zu verwenden.
Der Kompilierungsprozess funktioniert nur, wenn die letzte Zeile der Ausgabe MEX completed successfully. lautet.
Wenn Sie eine andere Ausgabe sehen, müssen Sie das Problem debuggen.
Häufige Probleme sind:
- Wie man den Matlab mex-Fehler behebt: You can’t use ‘macro parameter character #’ in vertical mode.
- Fehlende zusätzliche Bibliotheken oder Include-Pfade: Wie man zusätzliche Bibliotheken beim Kompilieren von Matlab/Simulink S-Funktionen über ‘mex’ verlinkt
- Wenn Sie Features von modernem C++ verwenden, müssen Sie möglicherweise den richtigen C++-Standard auswählen: Wie man die C++-Version beim Kompilieren von Matlab/Simulink S-Funktionen mit ‘mex’ festlegt
Schritt 3: Erstellen Sie ein neues Simulink-Modell
Für Tests empfehle ich, ein neues Simulink-Modell zu erstellen, anstatt ein altes wiederzuverwenden.
Schritt 4: Fügen Sie einen S-Funktions-Block hinzu
Beginnen Sie, indem Sie auf den Dialog zum Hinzufügen eines neuen Blocks klicken:

Klicken Sie nun auf User-defined functions und wählen Sie den S-function-Block. Wählen Sie nicht den Matlab Level-2 S-function-Block, auch wenn Sie eine Level-2-S-Funktion verwenden. Level-2-S-Funktionen funktionieren auch mit dem normalen S-function-Block einwandfrei.

Ziehen Sie diesen Block in den Haupt-Simulink-Modellbereich, d.h. den großen weißen leeren Bereich im anderen Fenster, das sich normalerweise direkt hinter dem library browser-Dialog befindet:

Schritt 5: Konfigurieren Sie den S-Funktions-Block
Doppelklicken Sie auf den S-Funktions-Block, um den Konfigurationsdialog zu öffnen:

Bearbeiten Sie im Dialog den Name und geben Sie den Namen der S-Funktion ein.
Der Name der S-Funktion ist immer der Name der .cpp-Datei ohne die .cpp-Erweiterung.
In unserem Fall heißt die C++-Datei sine_wave_generator.cpp, daher lautet der Name der S-Funktion sine_wave_generator.
Klicken Sie auf Apply, um die Änderungen zu speichern und den Dialog zu schließen.
Schritt 6: Verbinden Sie den S-Funktions-Block in Simulink
In unserem Beispiel können wir den S-Funktions-Block mit einem Scope-Block verbinden, um die Ausgabe zu visualisieren.
Dies ist nicht zwingend erforderlich, aber es ist eine gute Möglichkeit zu überprüfen, ob die S-Funktion wie erwartet funktioniert.
Um den Scope-Block hinzuzufügen, klicken Sie erneut auf das Library browser-Symbol in der Navigationsleiste:

Klicken Sie auf Sinks und wählen Sie den Scope-Block:

Ziehen Sie den Scope-Block in den Haupt-Simulink-Modellbereich:

Schließen Sie den Library browser-Dialog.
Verbinden Sie nun den Ausgang des S-Funktions-Blocks mit dem Eingang des Scope-Blocks:

Die verbundenen Blöcke sollten nun so aussehen:

Schritt 7: Führen Sie das Simulink-Modell aus
Klicken Sie auf die Run-Schaltfläche in der Simulink-Symbolleiste, um die Simulation auszuführen:

Schritt 8: Überprüfen Sie das Scope
Wenn alles wie erwartet funktioniert, können Sie nun den Scope-Block doppelklicken, um die Ausgabe der S-Funktion zu sehen:

Dies öffnet ein neues Fenster, das die Scope-Ausgabe der S-Funktion anzeigt:
