InicioCiencia EducacionMatlab 2010 y visual c++ 2008
En primer lugar utilizando visual c++2008 express edition no se puede ejecutar en tiempo real, para hacerlo hay que tener visual c++ 2010 professional. La ejecución del programa es en tiempo normal.

Tienen que tener, desde luego, Matlan 2010 y visual c++ 2008. Voy a poner los accesos directos en el escritorio para que los vean.



Primero hay que abrir visual c++ 2008 y hacer un archivo nuevo como muestro a continuación.



Eligen "Aplicación de Consola Win32" y escriben el nombre del archivo. El mio lo llamo "visual_y_matlab".



Cuando aparece el asistente colocan "siguiente" y les aparece la ventana "Configuración de la Aplicación" donde seleccionan la "Biblioteca de Vínculos", que corresponde a los archivos (.dll)



A continuación hay que crear un archivo ".def" y eso se hace en la carpeta "Archivo de Encabezados" con un click en el botón derecho y seleccionan un nuevo elemento.



En la ventana que aparece eligen "Archivo de encabezado(.h)" y cuando escriben el nombre del archivo literalmente hay que tipearlo con el punto def, es decir escriben explícitamente "visual_y_matlab.def".
Si no escriben el nombre del archivo con el ".def" visual c++ lo guarda como si fuera un ".h", lo cual no sirve.





Dentro del archivo ".def" hay que escribir;

LIBRARY visual_y_matlab
EXPORTS mexFunction


Después de LIBRARY va el nombre del archivo. Y eso sería todo.



Ahora hay que agregar un nuevo elemento, un archivo código fuente. El procedimiento es igual a lo anterior nada más que ahora el archivo es ".cpp", lo cual se muestra en las dos imágenes siguientes.





Una vez que crearon los dos archivos recien se puede ir a las propiedades del archivo y es como lo muestra la imagen que sigue.



En la ventana que surge se elige "Propiedades de configuración" y se despliega la columna que aparece en la segunda imagen. Es importante destacar que no aparece la fila "C/C++" si no está el archivo de código fuente ".cpp".





Dentro de la fila "C/C++" hay que elegir "general--->Directorios de inclusión adicionales" y hacer un click en el cuadrito con los tres puntos.



Aparece una ventana donde se crea una carpeta, hay que hacer click en la carpetita, y precionar el cuadrito con los tres puntos.
Luego se busca la carpeta "include" que se encuentra en;

C/Archivos de programa/MATLAB/R2010a/extern

Una vez que la encuentrar solo hay que aceptar y aceptar.



Dentro de "C/C++" ahora se selecciona "Procesador" para llegar a "Definiciones del procesador"



En la ventana que surge se escribe "MATLAB_MEX_FUNCTION". Después solo hay que aceptar.



Después vamos a "Vinculador" y en su interior seleccionamos "General" para llegar a "Archivo de resultados". Hacemos click en la fila que indica $(OutDir)/$(ProjectName).dll
Borramos la parte que dice (ProjectName).dll y escribimos el nombre de nuestro archivo con ".mexw32" como se muestra en la imagen.



Dentro de "Vinculador" y "General", en el mismo lugar, ahora elegimos la fila que dice "Directorios de Bibliotecas Adicionales" y hacemos click en el cuadrito con los tres puntos.



En la ventana que surge buscamos la carpeta "microsoft" dentro de matlab su ubicación es;

C/Archivos de programa/MATLAB/R2010a/extern/lib/win32



Después solo queda aceptar.
Debajo de "General" seleccionamos la opción que dice "Entrada" y vamos a "Dependencias Adicionales". Luego hacemos click en el cuadrito con los tres puntos.



En la ventana que surge escribimos las tres librerías necesarias, las cuales son;
libmat.lib
libmex.lib
libmx.lib


Y solo queda aceptar.



Ahora vamos a "Archivos de definición de módulos" con el objeto de indicar que se incluya el archivo de definición, ".def".



Siempre es lo mismo, hacer click en el cuadrito con los tres puntos. En la ventana que aparece escribimos el nombre del archivo de definición que habíamos llamado "visual_y_matlab.def". después aceptamos.



Es momento de entrar en Matlab. Hay que indicarle la ubicación del archivo hecho en visual C++ 2008. Su ubicación es;

Documentos/Visual Studio 2008/Projects/visual_y_matlab/visual_y_matlab

La carpeta visual_y_matlab va dos veces.



Seleccionamos el compilador Visual C++ 2008 de la siguiente manera.

>>mex -setup

Y elegimos el número dos.



Creamos un archivo para simulink como sigue.



También falta compilar el archivo "visual_y_matlab.cpp" donde se escribe en Matlab mex seguido del nombre del archivo hecho en visual C++ 2008 con la extensión ".cpp" y se hace como sigue;

>>mex visual_y_matlab.cpp
>>


Colocamos una s-function y dos generadores de valor constante. En la s-function hacemos doble click y escribimos el nombre del archivo de visual C++ 2008 no es necesario el ".cpp"



Hay que ajustar el tiempo de simulación, el cual puse 200ms. En Matlab se escribe en segundos, es decir 0,2.



Hasta el momento no coloqué el contenido del archivo de visual C++ 2008 porque el objetivo de este post es explicar como simular archivos del Visual en Matlab.

Lo que está escrito en el archivo de visual C++ es lo siguente;

# define S_FUNCTION_NAME visual_y_matlab
# define S_FUNCTION_LEVEL 2
# include "simstruc.h"
# include "conio.h"
# define MDL_INITIALIZE_CONDITIONS
# define MDL_UPDATE


# define U(element) (*uPtrs[element])



static void mdlInitializeSizes(SimStruct *S)
{
ssSetNumSFcnParams(S, 0); /* Sin parámetros. */

ssSetNumContStates (S, 0); /* Sin estados contínuos. */
ssSetNumDiscStates (S, 1); /* Un estado discreto. */

ssSetNumInputPorts (S, 1); /* Con puerto de entrada.*/
ssSetInputPortWidth (S, 0, 2); /* Ancho del puerto 2.*/
ssSetInputPortDirectFeedThrough (S, 0, 1);
ssSetInputPortDirectFeedThrough (S, 0, 2);

ssSetNumOutputPorts (S, 1); /* Un puerto de salida.*/
ssSetOutputPortWidth (S, 0, 1); /* Ancho del puerto 1.*/

ssSetNumSampleTimes(S, 1);

ssSetNumRWork (S, 0);
ssSetNumIWork (S, 0);
ssSetNumPWork (S, 0);
ssSetNumModes (S, 0);
ssSetNumNonsampledZCs (S, 0);

ssSetOptions(S, SS_OPTION_EXCEPTION_FREE_CODE);
}
static void mdlInitializeSampleTimes(SimStruct *S)
{
ssSetSampleTime(S, 0, 0.2);
ssSetOffsetTime(S, 0, 0.0);
}
static void mdlInitializeConditions(SimStruct *S)
{
real_T *x0 = ssGetRealDiscStates(S);
*x0 = 0.0;
}
static void mdlUpdate(SimStruct *S, int_T tid)
{
real_T w=0;
real_T *x = ssGetRealDiscStates (S);
InputRealPtrsType uPtrs = ssGetInputPortRealSignalPtrs (S, 0);

int_T g = 1;

w = x[0] + 0.01 * g*(U(0) - U(1));
x[0] = w;
}

static void mdlOutputs(SimStruct *S, int_T tid)
{
real_T *y0 = ssGetOutputPortRealSignal (S, 0);
/* Puntero para la salida.*/
InputRealPtrsType uPtrs = ssGetInputPortRealSignalPtrs (S, 0);
/* Puntero para la entrada.*/
real_T *x = ssGetRealDiscStates (S);
/* Acceso a la variable de estado. */
int_T kp = 1;
y0[0] = x[0]+ kp*(U(0)-U(1));
}
static void mdlTerminate(SimStruct *S)
{
}

#ifdef MATLAB_MEX_FILE
#include "simulink.c"
#else
#include "cg_sfun.h"
#endif


Seguramente se dieron cuenta que copié el archivo del post donde explicaba como simular archivos en tiempo real en lenguaje c. Que puedo decir fui seducido por el copiar y pegar.
La explicación de lo que está en el archivo de visual C++ está en otro post que había hecho. No hice muchos así no les va costará encontrarlo.

Para mantener la costumbre.



Saludos.
Datos archivados del Taringa! original
0puntos
2,509visitas
0comentarios
Actividad nueva en Posteamelo
0puntos
4visitas
0comentarios
Dar puntos:

Dejá tu comentario

0/2000

Autor del Post

c
cmorris🇦🇷
Usuario
Puntos0
Posts9
Ver perfil →
PosteameloArchivo Histórico de Taringa! (2004-2017). Preservando la inteligencia colectiva de la internet hispanohablante.

CONTACTO

18 de Septiembre 455, Casilla 52

Chillán, Región de Ñuble, Chile

Solo correo postal

© 2026 Posteamelo.com. No afiliado con Taringa! ni sus sucesores.

Contenido preservado con fines históricos y culturales.