Problème avec «Simulink ne prend pas en charge la génération de code»

Rrz0

Problème avec «Simulink ne prend pas en charge la génération de code»


J’ai quelque chose de similaire à ce schéma fonctionnel simplifié suivant sur Simulink. Cela semble plutôt désordonné.

entrez la description de l'image ici

Je veux remplacer un bloc sommateur 3 points par un bloc fonction, tout en conservant la même sortie.

entrez la description de l'image ici

J’ai commencé par placer le code dans le bloc fonction:

 function y = fcn(u) sys1 = tf(0.5,[1 0 0 4]); sys2 = tf([3 0.5],[1 0 15]); sys3 = tf(1,[1 1]); y = sys1 + sys2 + sys3; 

Cependant, j’ai été accueilli avec une erreur disant que Simulink ne prend pas en charge la génération de code.

« La classe ‘tf’ ne prend pas en charge la génération de code. »

J’ai ensuite rencontré un problème similaire ici: https://nl.mathworks.com/matlabcentral/answers/74770-is-there-any-way-to-disable-code-generation-in-simulink

J’essaie d’implémenter une fonction extrinsèque ou «fonction wrapper» avec une certaine difficulté. J’ai créé un nouveau script appelé myWrapper.m, contenant le même code:

 function y = myWrapper(u) sys1 = tf(0.5,[1 0 0 0 4]); sys2 = tf([3 5],[1 0 15]); sys3 = tf(1,[1 1]); y = sys1 + sys2 + sys3; 

et la fonction MATLAB modifiée pour:

 function y1 = fcn(u1) y1 = myWrapper(u1); 

L’erreur persiste.

Je veux en quelque sorte accéder myWrapper.m fichier myWrapper.m à partir du bloc de fonction MATLAB. Avez-vous des indications sur la façon de procéder? En suivant le lien précédent donné et les documents officiels, je me retrouve avec quelque chose comme ça dans mon bloc de fonction MATLAB:

 function y = fcn(u)coder.extrinsic('myWrapper') y = myWrapper(u); 

Le dernier code ci-dessus est syntaxiquement incorrect et je ne sais pas comment le faire. MATLAB corrige automatiquement le code ci-dessus pour:

 function y = fcn(u,coder,extrinsic, myWrapper ) y = myWrapper(u); 

ce n’est pas ce que je veux.

Tous les conseils et / ou suggestions sur la façon dont cela pourrait être fait seraient appréciés.

Une question similaire a été posée sur le forum MathWorks ici , il y a deux ans, sans réponse.

scotty3785

Cette question serait mieux posée sur les forums Mathworks. Réponse courte, toutes les commandes MATLAB ne sont pas prises en charge dans les blocs fonction MATLAB.

Rrz0

@ scotty3785, merci pour votre contribution. J’ai posé la question là-bas et aucune réponse. Une question similaire a été posée sur les forums Mathworks il y a quelques années, et encore une fois, aucune réponse.

Réponses


 Rrz0

J’allais aborder ce problème complètement mal. Afin de remplacer le bloc de sommation, il ne faut PAS supprimer les blocs de fonction de transfert qui alimentent le bloc de sommation et les ajouter à l’intérieur du script.

Une fonction MATLAB ne prend pas en charge la génération de code (et à juste titre) de sorte qu’une fonction de transfert peut être implémentée à l’intérieur. C’est pourquoi les blocs alimentent simplement la fonction MATLAB comme suit.

entrez la description de l'image ici

Le script serait très simplement:

 function y1 = fcn(u1, u2, u3) x = (u1 + u2 +u3); y1 = x; end 

 

«Simulink, #de, #en, #la, #pas, avec, charge, code, Generation, ne, prend, Problème

 

google

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *