Tengo algo similar a este siguiente diagrama de bloques simplificado en Simulink. Se ve bastante desordenado.
Quiero reemplazar un bloque de suma de 3 puntos con un bloque de función, manteniendo la misma salida.
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.m
al 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.
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.
El script sería muy simple:
function y1 = fcn(u1, u2, u3)
x = (u1 + u2 +u3);
y1 = x;
end
escocés3785
rrz0