Dans nos exemples précédents tels que Exemple Matlab Level 2 S-Function : onde sinusoïdale (sortie continue) nous avons montré comment créer une S-function simple en C++.
Voici comment ajouter une S-function C++ à Simulink :
Étape 1 : Créer le fichier de code source de la S-function
Dans le répertoire que vous avez ouvert dans Matlab/Simulink, créez un nouveau fichier nommé par ex. sine_wave_generator.cpp. Voir Exemple Matlab Level 2 S-Function : onde sinusoïdale (sortie continue) pour un exemple du code C++.
Je recommande d’utiliser Visual Studio Code au lieu de Matlab comme éditeur C++.
Étape 2 : Compiler la S-function
Ouvrez un terminal et exécutez
mex sine_wave_generator.cppJe ne recommande pas d’exécuter ceci dans Matlab même si c’est possible. Je recommande de toujours utiliser un terminal système.
Le processus de compilation fonctionne uniquement si la dernière ligne de la sortie est MEX completed successfully.
Si vous voyez une autre sortie, vous devez déboguer le problème.
Les problèmes courants sont :
- Comment corriger l’erreur Matlab mex : You can’t use ‘macro parameter character #’ in vertical mode.
- Bibliothèques supplémentaires ou chemins d’inclusion manquants : Comment lier des bibliothèques supplémentaires lors de la compilation d’une S-function Matlab/Simulink via ‘mex’
- Si vous utilisez des fonctionnalités du C++ moderne, vous pourriez avoir besoin de sélectionner la norme C++ correcte : Comment spécifier la version C++ lors de la compilation d’une S-function Matlab/Simulink en utilisant ‘mex’
Étape 3 : Créer un nouveau modèle Simulink
Pour les tests, je recommande de créer un nouveau modèle Simulink au lieu de réutiliser un ancien.
Étape 4 : Ajouter un bloc S-function
Commencez d’abord par cliquer sur le dialogue pour ajouter un nouveau bloc :

Maintenant, cliquez sur User-defined functions et sélectionnez le bloc S-function. Ne sélectionnez pas le bloc Matlab Level-2 S-function même si vous utilisez une S-function de niveau 2. Les S-functions de niveau 2 fonctionnent très bien avec le bloc normal S-function.

Faites glisser ce bloc dans la zone principale du modèle Simulink, c’est-à-dire le grand espace blanc vide dans l’autre fenêtre qui se trouve généralement juste derrière le dialogue library browser :

Étape 5 : Configurer le bloc S-function
Double-cliquez sur le bloc S-function pour ouvrir le dialogue de configuration :

Dans le dialogue, éditez le Name et entrez le nom de la S-function.
Le nom de la S-function est toujours le nom du fichier .cpp sans l’extension .cpp.
Dans notre cas, le fichier C++ est nommé sine_wave_generator.cpp, donc le nom de la S-function est sine_wave_generator.
Appuyez sur Apply pour sauvegarder les changements et fermer le dialogue.
Étape 6 : Connecter le bloc S-function dans Simulink
Dans notre exemple, nous pouvons connecter le bloc S-function à un bloc Scope pour visualiser la sortie.
Ce n’est pas obligatoire mais c’est une bonne façon de vérifier que la S-function fonctionne comme attendu.
Afin d’ajouter le bloc Scope, cliquez sur l’icône Library browser dans la barre de navigation à nouveau :

Cliquez sur Sinks et sélectionnez le bloc Scope :

Faites glisser le bloc Scope dans la zone principale du modèle Simulink :

Fermez le dialogue Library browser.
Maintenant, connectez la sortie du bloc S-function à l’entrée du bloc Scope :

Les blocs connectés devraient maintenant ressembler à ceci :

Étape 7 : Exécuter le modèle Simulink
Cliquez sur le bouton Run dans la barre d’outils Simulink pour exécuter la simulation :

Étape 8 : Vérifier le scope
Si tout fonctionne comme attendu, vous pouvez maintenant double-cliquer sur le bloc Scope pour voir la sortie de la S-function :

Ceci ouvrira une nouvelle fenêtre montrant la sortie du scope de la S-function :
