Bonjour,
J'ai un modèle Simulink composé de sous modèles continus et discrets et je dois livrer le code généré correspondant à cette simulation. Pour simplifier on va dire que tout est fait avec Simulink.
Mon idée est de valider un minimum le code avant la livraison. J'envisage donc 2 solutions:
1) Je génère le code et je passe ça sous Visual (mais pas évident à mon sens car je vais devoir refaire les stimulations (entrées de la simu) et écrire les résultats dans un fichier pour pouvoir comparer avec Simulink). Je crois qu'il y a des possibilités avec les M-File loggin, mais je ne veux pas que le code généré soit surchargé inutilement. Enfin bon, n'écartons aucune possibilité...
2) Je fais des S-Fonctions des modèles générés et je teste ces S-Fonctions sous Simulink (Software In the Loop).
Ca me plaît bien car je garde l'environnement Simulink qui me permet de faire des iso-stimulations et des iso-tracés et donc de comparer/valider facilement. En effet, La simulation est soit basée sur les modèles, soit basée sur le code généré (via les S-Fonctions) et je vérifie que le fonctionnement est identique.
Dans ce cas, 2 alternatives:
a) Je génère des S-Fonctions qui correspondent aux sous modèles et je livre le code des S-Fonctions directement.
J'ai un peu regardé, mais ça me parait TRES DIFFICILE de spécifier le branchement des S-Funtions à ceux à qui je vais livrer le code: la SIMSTRUCT c'est pas du tout évident, on sent que c'est fait pour rester dans matlab ça (ou alors s'il y a des tutos qui expliquent comment ça marche)...
b) Je génère le code des sous modèles, de préférence au format ERT car il est plus lisible et plus simple au niveau des appels (1 fct d'init + 1 fct pour chaque pas) et des interfaces.
C'est ce code que je livre. Pour le valider, je l'encapsule dans une S-Function avec un wrapper si j'ai bien compris (wrapper qui fait le lien entre le code généré et le monde de Matlab/Simulink en faisant "parler" le code généré avec la Simstruct de Matlab Simulink).
- Quand mes modèles sont discrets, ô miracle, Simulink me fait automatiquement le wrapper (c'est bien). Quand mes modèles sont continus, je dois sélectionner l'option "continuous time" et là un message m'indique que cette option est incompatible de la génération du wrapper (donc de la S-Fonction)
. J'ai bien le code généré mais pas son encapsulation qui permet de l'insérer dans Simulink.
(si je choisis le format GRT, je n'ai pas vu de possibilité d'avoir un wrapper généré automatiquement).
Mes questions sont:
Entre 1) et 2) qu'est-ce qui vous paraît bien ? (pour info, sachant que je compte favoriser le 2) pour pas tout refaire sous Visual)
En 2)a) La S-Fonction livrée: bien ou pas ? une Simstruc en dehors de Simulink: branchable / créable ? ou pas ? J'ai l'impression tout de même qu'il ne faut pas que je me lance dans une spécification de la Simstruct aux gens à qui je vais livrer.
En 2)b) Le Wrapper avec un code généré ERT qui contient du continu: faisable ou pas ? Si oui comment et pourquoi Simulink ne le fait pas ? Faisable avec un code généré en GRT ? Faisable automatiquement ?
Sinon, d'autres idées, pistes, ou liens pour répondre à mon problème (valider un code généré Matlab avant livraison). Des options particulières à employer pour générer le code ? Je débute sur ces points.
Merci de m'avoir lu![]()
Partager