Matlab - Interface Matlab con otro programa

   
Vista:

Interface Matlab con otro programa

Publicado por Luis Miguel (3 intervenciones) el 13/10/2011 17:52:53
Hola tod@s. Mi problema es el siguiente:

Tengo un programa que sirve para el cálculo de la demanda térmica de un edificio. Todas las operaciones en este programa se realizan desde el mismo seleccionando materiales espesores etc. La extensión de sus archivos es *.cte. Estos archivos se pueden abrir y leer desde matlab ya que no son más que ficheros de texto con unos datos determinados en código ASCII. Utilizando las funciones de MATLAB fopen, fread, fprint puedo, a partir de uno de estos ficheros *.cte, leer la información que me interesa, realizar cambios en MATLAB y finalmente generar otro fichero de salida. El problema que me surge es que necesito ejecutar este fichero desde MATLAB y obtner los resultados del mismo. ¿Es esto posible? Yo creo que podría realizarse si matlab pudiese ejecutar estas ordenes desde el command windows o a partir de un fichero m. Antiguamente creo que esto se hacía con los comandos DDE pero ahora creo que están obsoletos y se utiliza la tecnología COM. El problema es que no estoy familiarizado con dicha tecnología y me encuentro algo perdido.

Agradecería vuestras respuestas. Un saludo.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Interface Matlab con otro programa

Publicado por Jorge (226 intervenciones) el 16/10/2011 04:44:37
Es posible que pueda lograrse.

Yo he intercambiado información entre Matlab y algunos simuladores electrónicos que permiten hacerlo. Lo he hecho con Winspice, Aplac y CST-MWS.

No todos los programas abren sus resultados para que esto sea posible, pero por lo que comentas, me parece que con el tuyo sí es posible.

Puedes ejecutar un programa desde Matlab con el operador !

Por ejemplo, un programa llamado Winspice simularía un archivo apropiado así

! wspice3 amplifier.cir

El archivo " amplifier. cir " se ejecuta y guarda los resultados en unos archivos de texto.

Luego, debes ingeniártelas para que Matlab lea los resultados producidos.
Esto se puede hacer de manera iterativa, lo que te da unas herramientas muy poderosas...

Aquí hay ejemplos completos. Naturalmente deberás hacer las adaptaciones correspondientes.

http://matrixlab-examples.com/winspice.html
http://matrixlab-examples.com/circuit-simulator.html


.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Interface Matlab con otro programa

Publicado por Luis Miguel (3 intervenciones) el 17/10/2011 16:53:07
Muchas gracias por tu respuesta Jorge. Comentarte lo siguiente. He estado viendo tus links y el primero que me muestras es algo muy parecido a lo que he realizado. Es decir, inicialmente, utilizando el programa Lider creo un archivo de la forma *.cte y lo ejecuto en dicho programa. Este programa genera unos ficheros *.res que me muestran los resultados de las demandas térmicas. A continuación con fopen, fread etc, obtendo en matlab toda la información del fichero tanto *.cte y *.res que me hace falta mediante un sistema de bucles etc. Finalmente con fwrite genero el archivo de salida. He intentado ejecutar la orden que me has comentado y que viene reflejada en los links que me has mostrado:
! Lider Ejemplo4.cte

Al principio me da el siguiente error:

"Lider" no se reconoce como un comando interno o externo,
programa o archivo por lotes ejecutable.

Seguidamente me he dado cuenta que el archivo ejecutable debe de estar en el mismo directorio que el archivo a ejecutar y también he situado el current directory donde tengo ambos archivos. Por tanto lo he incluido y vuelvo a ejecutarlo:
>> ! Lider Ejemplo4.cte

Ahora no se ha ejecutado nada (el programa Lider lo tengo cerrado) pero no me dá ningún error.
¿Qué ha podido pasar?

Por favor, agradecería tu respuesta.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Interface Matlab con otro programa

Publicado por Jorge (226 intervenciones) el 20/10/2011 03:54:44
Bueno... tienes que encontrar la expresión que haga que tu programa ejecute el archivo deseado.

! Lider Ejemplo4.cte

Por ejemplo, para simular un circuito de alta frecuencia que se ejecuta en un simulador llamado Aplac, sería así

!aplac -aq RLC.i

Naturalmente, esto no significa nada si uno no está familiarizado con los programas en cuestión. El parámetro -aq está documentado en el manual del usuario, pero no hay forma de adivinarlo si no tienes acceso a esa información. Sin embargo, ese parámetro es lo que hace que Aplac se cierre y devuelva el control a Matlab.

Equivale a que lo estuvieras escribiendo desde la ventana de comandos, digamos desde la ventana de DOS. Si eso no funciona allí, tampoco funcionará desde Matlab.

No es necesario que estén en el mismo directorio, pero sí es necesario que los archivos estén en el PATH del sistema, de otra manera Matlab no podrá encontrar los archivos o ficheros.

.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Interface Matlab con otro programa

Publicado por Luis Miguel (3 intervenciones) el 20/10/2011 16:15:48
Gracias de nuevo Jorge. He conseguido, por lo menos, abrir el archivo. He procedido de la siguiente forma:
! Ejemplo4.cte

Se carga automáticamente. Si añado el caracter "&" al final se devuelve el control a Matlab pero si no lo añado entonces hasta que no cierra el archivo no se devuelve el control. Hasta ahí, todo ok. Pero lo que realmente me interesaría es que se ejecutara la orden calcular automáticamente cuando se abra Lider. Creo que esto, en definitiva, depende del proveedor del programa. Lo que sucede es que dicho proveedor no suministra esa información y yo tampoco se cómo hallarla.

El esquema sería el siguiente: parto de un archivo inicial cuyo nombre es Ejemplo4.cte, lo abro con fopen y obtengo los parámetros necesarios los cuales son almacenados en cell arrays (ya que contienen información numérica y de cadenas de caracteres). Manipulo estos valores en el cell array con objeto de realizar mejoras y devuelvo con fprintf un archivo del tipo Ejemplo4_output.cte. Hasta ahí ok. Lo que realmente necesito es ejecutar dicho fichero es decir, abrir el archivo sin control para matlab (de esta manera detengo la ejecución del script del programa padre). Esto sería mediante
! Ejemplo4.cte
Y lo interesante sería poder hallar la manera de calcularlo directamente con matlab y una vez que termine cerrar el programa. Automatizando esto ya tendría el trabajo completado. Pero no sé si será posible. ¿Tú qué opinas?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Interface Matlab con otro programa

Publicado por Jorge (226 intervenciones) el 20/10/2011 22:44:21
La idea sería trabajar con Lider y tu Ejemplo4.cte como si fueran una función de Matlab.
Lanzas la función (como cualquier otra) y obtienes resultados. Luego procesas esos resultados.

Si puedes leer los datos con Matlab, entonces puedes hacer los cálculos correspondientes.

En esta página hay un ejemplo de cómo leer datos de archivos de texto de manera iterativa (muchos archivos con nombres similares) y luego procesarlos, pero no sé si te sea útil por las caractéristicas particulares de tu caso http://matrixlab-examples.com/data-analysis.html

No tengo idea de cuáles sean las limitaciones de Lider o de la interfaz que estás desarrollando.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar