Bonjour
J’ai développé une application assez complexe constituée d’un modele simulink et d’IHM qui permet d’interagir sur le modele. (En gros 1 an de travail en délai et 1000h en temps).
Mon IHM est réalisée l’intérieur d’une S function (matlab level2 Sfunction) et utilise 2 grosses structures qui comportent la description de l’IHM (statique et dynamique).
Ces structures (relativement complexes) ne peuvent pas être en entrée ou sorties de la S function (port simulink) ni être mise dans les variables d’état de la S function. Donc pour garder ces structures d’un pas vers le pas suivant, je les transfère dans le workspace en fin de S function avec ;
assignin (‘base’, NomStructure, ’NomStructure’)
et je retourne les chercher dans le workspace en début de Sfunction au pas suivant :
NomStructure=evalin(‘base’, ‘NomStructure’) ;
Entre temps la structure a peut être aussi été « travaillée » par les callbacks de l’IHM.
Ca fonctionne fort bien (j’ai même une application avec une dizaine d’IHM et de S functions et ca marche…
L’intérêt est que ma S function est un controleur que je peux l'interfacer avec un modèle physique de process.
Mon souci est que je souhaite maintenant faire évoluer ce projet vers une application Standalone . La premiere étape est de transformer le modele simulink en dll. Puis de créer un environnement matlab que je puisse coder avec le matlab coder
Et la je bute sur ma S function et les assignin et evalin qui ne sont pas compilables.
Quelles solutions ?
Mettre mes strutures en variable globales ? (ou persistent ?)
Faire une application sans utiliser ni Simulink ni S function (ou donc les « structures » sont passées en paramètre pour chaque fonction (cela oblige à gérer manuellement les différentes fonctions etl’ordre de leur execution selon le temps ça parait possible, mais les difficultés vont venir des autres composants du modele simulink. (on perd les possibilités de simulink….)
Par ailleurs j’ai 2 autres soucis du aux variables énumérées que j’ai utilisées.
1) Je n’arrive pas à sortir les variables enumérées de la S function (matlab2 Sfunction) car je ne connait pas le DATATypeID des class que j’ai créé. C’est contourné avec un bloc simulink enumérated variable sur lequel la S function fait un « set_param « avec la sortie voulue. Ca marche mais le set_param n’est pas compilable donc c’est bloquant pour mon projet Stand alone.
Pas d’idée pour contourner cela !
2) Passer en parametre de dll (modele simulink compilé) une variable simulink ENUM parait possible mais le résultat est étrange, il semble que à l’interface dll on a des chaine des caractere et non des Simulink Enum, alors que dans le fichier header .h la viariable enumere semble reconnue. Ca va peut être marcher mais c’est étrange (je dois faire une erreur ?).
Pour conclure j’ai vraiment une difficultés pour aller vers cette version StandAlone.
Soit j’essaye d’adapter ce que j’ai avec les difficultés et limitations précédentes et en notant que le process création d’une Dll à partir de simulink puis intégration dans matlab pour ensuite passer par le matlad coder est un process complexe dont je maitrise très mal les limitations (ou possibilitées).
Soit je repars sur un nouveau developpement tout « matlab » en essayant de n’utiliser que des fonctions compilables ?? mais dans ce cas comment je m’interface avec le modeles de process ?
Un Avis SVP ???
Partager