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

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

ingrese la descripción de la imagen aquí

Quiero reemplazar un bloque de suma de 3 puntos con un bloque de función, manteniendo la misma salida.

ingrese la descripción de la imagen aquí

Primero comencé colocando el código dentro del bloque de funciones:

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;

Sin embargo, recibí un error que decía que Simulink no admite la generación de código.

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

Luego encontré un problema similar aquí: https://nl.mathworks.com/matlabcentral/answers/74770-is-there-any-way-to-disable-code-generation-in-simulink

Estoy tratando de implementar una función extrínseca o 'función contenedora' con cierta 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 para:

function y1 = fcn(u1)

y1 = myWrapper(u1);

El error persiste.

De alguna manera quiero acceder myWrapper.mal archivo desde el bloque de funciones de MATLAB. ¿Algún consejo sobre cómo se debe hacer esto? Siguiendo el enlace anterior proporcionado y los documentos oficiales, estoy terminando con algo como esto en mi bloque de funciones de 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.

Cualquier consejo y/o sugerencia sobre cómo se podría hacer esto sería apreciado.

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

Esta pregunta se haría mejor en los foros de Mathworks. Respuesta corta, no todos los comandos de MATLAB son compatibles con los bloques de funciones de MATLAB.
@ scotty3785, gracias por tu contribución. Hice la pregunta de allí y no hubo respuesta. Se hizo una pregunta similar en los foros de Mathworks hace algunos años y, una vez más, no hubo respuesta.

Respuestas (1)

Estaba tratando de abordar este problema completamente mal. Para reemplazar el bloque de suma, NO se deben eliminar los bloques de función de transferencia que alimentan el bloque de suma y agregarlos dentro del script.

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

ingrese la descripción de la imagen aquí

El script sería muy simple:

function y1 = fcn(u1, u2, u3)

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

end