Problema con "Simulink no admite la generación de código"

1

Tengo algo similar a este diagrama de bloques siguiente simplificado en Simulink. Se ve bastante desordenado.

Quieroreemplazarunbloquedesumade3puntosporunbloquedefunción,manteniendolamismasalida.

Primerocomencécolocandoelcódigodentrodelbloquedefunciones:

functiony=fcn(u)sys1=tf(0.5,[1004]);sys2=tf([30.5],[1015]);sys3=tf(1,[11]);y=sys1+sys2+sys3;

Sinembargo,recibíunerrorquedecíaqueSimulinknoadmitelageneracióndecódigo.

  

"La clase 'tf' no admite la generación de código".

Entonces encontré un problema similar aquí: enlace

Estoy intentando implementar una función extrínseca o 'función de envoltura' con alguna dificultad. Creé un nuevo script llamado myWrapper.m, que contiene el mismo código:

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;

y la función MATLAB editada en:

function y1 = fcn(u1)

y1 = myWrapper(u1);

El error persiste.

De alguna manera quiero acceder al archivo myWrapper.m desde el bloque de funciones de MATLAB. ¿Algún indicador sobre cómo debería hacerse esto? Siguiendo el enlace anterior y los documentos oficiales estoy terminando con algo como esto en mi bloque de función MATLAB:

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

y = myWrapper(u);

El último código anterior es sintácticamente incorrecto y no sé cómo se debe hacer. MATLAB corrige automáticamente el código anterior para:

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

y = myWrapper(u);

que no es lo que quiero.

Se agradecería cualquier consejo o sugerencia sobre cómo se podría hacer esto.

Se hizo una pregunta similar en el foro de MathWorks aquí , hace dos años, sin respuesta.

    
pregunta Rrz0

1 respuesta

2

Estaba tratando de resolver este problema completamente mal. Para reemplazar el bloque de suma, uno debe NO eliminar los bloques de función de transferencia que ingresan en el bloque de suma y agregarlos dentro del script.

Una función MATLAB no admite la generación de código (y con razón) de modo que se pueda implementar una función de transferencia dentro de ella. Es por eso que los bloques simplemente se incorporan a la función MATLAB de la siguiente manera.

El script sería muy simple:

function y1 = fcn(u1, u2, u3)

   x = (u1 + u2 +u3);
   y1 = x;

end
    
respondido por el Rrz0

Lea otras preguntas en las etiquetas