IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MATLAB Discussion :

[MCC, Simulink, feval] Faisabilité ?


Sujet :

MATLAB

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2010
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2010
    Messages : 11
    Points : 5
    Points
    5
    Par défaut [MCC, Simulink, feval] Faisabilité ?
    Bonjour,

    Je suis débutant en MCC. Je cherche actuellement à compiler un programme Matlab, qui fait appel à d'autres fonctions, et à un modèle Simulink (Le tout sous RedHat).

    Voici un exemple simple de code utilisé:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    function titi = test_fun(toto)
     
    if toto == 5
             titi = 2 
    else 
             titi = 4
    end
     
    U = feval ('une_autre_fonction')
    V = feval ('Un_modele_Simulink')
     
    end
    -Sans la ligne " V = feval ('Un_modele_Simulink') ", je lance le MCC. Les fichiers sont crées. Quand je lance le script .sh, dans la console, il y a bien affiché les valeurs de titi, et U.
    -Avec la ligne " V = feval ('Un_modele_Simulink') ", les fichiers sont aussi crées. Le hic, quand je lance le script .sh, est qu'il ne trouve pas le fichier 'Un_modele_Simulink'.
    Sous Matlab, cela fonctionne sans problèmes. Je comprends que MCC cherche un fichier nommé 'Un_modele_Simulink.m' et pas un .mdl.
    Comment puis-je faire pour effectuer cette manip' ?



    La prochaine étape est de générer des fichiers C/C++ avec les mêmes programmes. Rencontrerai-je les mêmes soucis? Est-ce faisable ? Je m'excuse s'il y a des confusions, je débute avec MCC.


    Merci pour les conseils.

  2. #2
    Expert confirmé
    Avatar de duf42
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Novembre 2007
    Messages
    3 111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Formateur en informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 111
    Points : 4 661
    Points
    4 661
    Par défaut
    Bonjour,

    Je te conseille de jeter un oeil à cette discussion, je pense qu'elle contient des éléments de réponse à ton problème.

    Duf
    Simulink & Embedded Coder

    Au boulot : Windows 7 , MATLAB r2016b
    A la maison : ArchLinux mais pas MATLAB

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2010
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2010
    Messages : 11
    Points : 5
    Points
    5
    Par défaut
    Merci. Je suis en train d'y jeter un oeil, et il y a effectivement des bonnes pistes.

    Sachant que je travaille sous Linux, je n'utilise pas les DLL. En revanche, il semble que la procédure soit semblable (avec l'utilisation des .so). Je rencontre des soucis durant l'étape de loadlibrary (justement). J'essaye de voir ce que je peux faire, et je te tiens au courant.

    Merci bien

    [Edit]

    J'ai utilisé le RTW pour compiler le modèle Simulink. Les .cpp et .h sont générés, mais pas les .o ou .so. En revanche, un fichier <modele>.mk est crée (Je l'ai modifié pour ajouter les options -shared et -fPIC pour les librairies). Je le lance donc en utilisant la commande "make -f <modele>.mk".
    Cela crée les libraries .o.
    Ensuite, pour rassembler ces librairies dans un .so, j'ai utilisé la commande "ld -G *.o -o libmodel.so", afin de créer le fichier libmodel.so.


    Enfin à cette étape, j'ai une shared library de mon modèle Simulink.


    En voulant charger cette library dans Matlab, avec la commande loadlibrary, ce dernier m'insulte à grands coups de "missing files". Il semble qu'il manque des fichiers header (.h) qui sont situés dans un folder de Matlab.
    En les copiant dans mon répertoire "projet", et en relançant le chargement de la shared library, j'obtiens les erreurs suivantes, au final:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    >> loadlibrary libmdl1 mdl1.h
    ??? Error using ==> loadlibrary at 365
    Failed to preprocess the input file.
     Output from preprocessor is:In file included from
     [...]/Essai_compile/mdl1_grt_rtw/mdl1.h:23:
    [...]/Essai_compile/mdl1_grt_rtw/simstruc.h:278:3:
    error: #error Unrecognized use.
    [...]/Essai_compile/mdl1_grt_rtw/simstruc.h:350:3:
    error: #error Must define one of RT, NRT, MATLAB_MEX_FILE, SL_INTERNAL,
    or FIPXT_SHARED_MODULE
    [...]/Essai_compile/mdl1_grt_rtw/simstruc.h:473:3:
    error: #error Unhandled case
    [...]/Essai_compile/mdl1_grt_rtw/mdl1.h:25:24:
    error: rt_logging.h: No such file or directory

    Aurais-tu des pistes? Je suis allé un peu vite dans les explications, n'hésite pas à me demander des détails si besoin.


    Pour rappel: l'idée est de "compiler" le modèle Simulink, afin de pouvoir l'appeler dans un script Matlab. Ensuite, j'aimerais "compiler" ce script Matlab, pour en faire des appels depuis un script c++.

    Merci.

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2010
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2010
    Messages : 11
    Points : 5
    Points
    5
    Par défaut
    Up, avec un édit.

    En attendant ta réponse, je me suis attelé à la génération du code C++ d'un script Matlab.
    J'ai le script généré, que j'ai intégré dans un main C++. Pour le moment, ça fonctionne presque, et mes soucis devraient être réglés rapidement.
    Une fois le soucis de compilation du modèle Simulink réglé, je pourrais l'intégrer dans mon script Matlab.

    La procédure sera la suivante:

    Simulink ---(Génération)--> C++ ---(appel)--> Script Matlab ---(Génération)--> C++


    Au final, je devrais avoir juste des fichiers .cpp, .so, et .h. La fonction Matlab (qui appelle du Simulink) devrait donc pouvoir s’exécuter en totalité en C++.

  5. #5
    Expert confirmé
    Avatar de duf42
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Novembre 2007
    Messages
    3 111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Formateur en informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 111
    Points : 4 661
    Points
    4 661
    Par défaut
    Pourrais-tu mettre la ligne de code que tu utilises avec LOADLIBRARY (et qui te retourne l'erreur)?
    Simulink & Embedded Coder

    Au boulot : Windows 7 , MATLAB r2016b
    A la maison : ArchLinux mais pas MATLAB

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2010
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2010
    Messages : 11
    Points : 5
    Points
    5
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    loadlibrary('libmdl1.so','mdl1.h');
    Sachant que certaines librairies de Matlab n'étaient pas présentes au départ, j'ai du les ajouter à la main. Je suspecte que cette opération soit foireuse.


    J'ai généré le code avec RTW. Suite à cela, j'ai crée le fichier .so. Lors de l'éxécution sans ajouter les librairies, il manque les fichier suivant: simstruc.h, fixedpoint.h, rtwtypes.h, rt_logging.h. J'ai du les copier depuis un répertoire de Matlab.

  7. #7
    Expert confirmé
    Avatar de duf42
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Novembre 2007
    Messages
    3 111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Formateur en informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 111
    Points : 4 661
    Points
    4 661
    Par défaut
    Pour compiler ta librairie, as-tu essayé d'utiliser le fichier .bat qui est généré avec les sources?
    Simulink & Embedded Coder

    Au boulot : Windows 7 , MATLAB r2016b
    A la maison : ArchLinux mais pas MATLAB

  8. #8
    Futur Membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2010
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2010
    Messages : 11
    Points : 5
    Points
    5
    Par défaut
    Je suis sous Linux, donc pas de .bat. De plus, je demande à RTW de "build", et pas simplement de générer le code. Cette étape est normalement intégrée, du coup.


    L'équivalent du .bat est le .sh. Or ici, il n'y en a pas avec RTW. Le seul fichier qui pourrait s'y approcher, c'est le fichier .mk, qui s'utilise avec la commande "make". Cependant, c'est ce même fichier qui est utilisé lorsqu'on choisi l'option "build"...


    Au passage, merci beaucoup pour ton aide

  9. #9
    Futur Membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2010
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2010
    Messages : 11
    Points : 5
    Points
    5
    Par défaut
    En choisissant "ert_shrlib" dans les paramètres du RTW, ça fonctionne nettement mieux. J'ai suivi ensuite la procédure que tu expliques dans l'autre post, et ça fonctionne plutôt pas mal!


    Maintenant, j'ai généré du code c++ à partir d'un script .m (donc qui contient les appels à la shared library du modele Simulink). Ensuite, j'ai crée un main.cpp pour lancer cette fonction. Grâce à ton aide, je suis à deux doigts de réussir.


    Je bataille maintenant avec la classe mwArray de C++, qui est utilisée lors de l'appel à la fonction Matlab. Je te tiens au courant de l'avancement.


    Merci pour tout.

Discussions similaires

  1. Commande mcc
    Par flzox dans le forum MATLAB
    Réponses: 28
    Dernier message: 23/10/2006, 14h55
  2. Faisabilité d'un projet
    Par Captain_JS dans le forum Windows
    Réponses: 10
    Dernier message: 10/12/2004, 18h31
  3. [Faisabilité] Outils wysiwyg de cartes perso...
    Par pikow dans le forum Général Java
    Réponses: 4
    Dernier message: 07/06/2004, 15h25
  4. Question de faisabilité
    Par lisarasu dans le forum CORBA
    Réponses: 3
    Dernier message: 14/05/2002, 11h26

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo