Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Gráficos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 09-03-2009
ronald_tro ronald_tro is offline
Miembro
 
Registrado: feb 2009
Posts: 53
Poder: 16
ronald_tro Va por buen camino
Matlab en delphi

Hola amigos, aqui con una pregunta, como puedo usar Matlab en Delphi, es decir temer un .m de matlab y que arroje resultados en Delphi, gracias.
Responder Con Cita
  #2  
Antiguo 09-03-2009
Avatar de Crandel
[Crandel] Crandel is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Parana, Argentina
Posts: 1.475
Poder: 22
Crandel Va por buen camino
No lo hice pero mas o menos te doy una idea de como lo haria.

1. Crea un archivo .m que escriba los resultados que te interesen en un archivo de texto.
2. Al final del archivo asegurate de tener el comando "quit"
3 .Luego llama a Matlab pasando el parametro "-r NombreArchivo.m".
4. Espera a que el proceso termine
5. Lee el archivo que escribiste.

Posiblemente existan otras soluciones que desconozco, pero puedes empezar con esto.
__________________
[Crandel]
Responder Con Cita
  #3  
Antiguo 09-03-2009
Avatar de Crandel
[Crandel] Crandel is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Parana, Argentina
Posts: 1.475
Poder: 22
Crandel Va por buen camino
Puedes aparte pasarle otros parametros para que sea mas rapido el asunto como:

-nojvm para que no cargue toda la interface de java
-nosplash para que no muestre la ventana splash
-minimize para que inicie minimizado
__________________
[Crandel]
Responder Con Cita
  #4  
Antiguo 09-03-2009
Avatar de Crandel
[Crandel] Crandel is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Parana, Argentina
Posts: 1.475
Poder: 22
Crandel Va por buen camino
Comentandolo con un compañero de trabajo me comento que existe otra forma, que es utilizando componentes COM atraves del archivo mlapp.tlb.

Mas info google
__________________
[Crandel]
Responder Con Cita
  #5  
Antiguo 09-03-2009
rounin rounin is offline
Miembro
 
Registrado: sep 2005
Posts: 43
Poder: 0
rounin Va por buen camino
Hola,
Eso es un ejemplo de usar Matlab en Delphi segun COM.
Archivos Adjuntos
Tipo de Archivo: zip matlab_demo.zip (6,4 KB, 70 visitas)
Responder Con Cita
  #6  
Antiguo 10-03-2009
ronald_tro ronald_tro is offline
Miembro
 
Registrado: feb 2009
Posts: 53
Poder: 16
ronald_tro Va por buen camino
Gracias amigos por sus respuestas, osea que lo unico que hace el ejemplo es mandar llamar el programa hecho en Matlab de esta forma:
// Set Current Directory
MatlabServer.Execute('cd( ''C:\Program Files\MATLAB\R2007\work'' );');

// Execute test.m
MatlabServer.Execute('test;');

???

Y en si lo que ocupo amigos es por ejemplo vi que en Matlab puedo crear un .exe del programa que se ha realizado en Matlab entonces, con una aplicacion en Delphi mandarla llamar y se este ejecutando sin tener que llamar el .m de matlab ya que se llamara el .exe, gracias.
Responder Con Cita
  #7  
Antiguo 10-03-2009
Avatar de Crandel
[Crandel] Crandel is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Parana, Argentina
Posts: 1.475
Poder: 22
Crandel Va por buen camino
Cita:
Empezado por rounin Ver Mensaje
Hola,
Eso es un ejemplo de usar Matlab en Delphi segun COM.
Exelente ejemplo !!!

Cita:
Empezado por ronald_tro
Y en si lo que ocupo amigos es por ejemplo vi que en Matlab puedo crear un .exe del programa que se ha realizado en Matlab entonces, con una aplicacion en Delphi mandarla llamar y se este ejecutando sin tener que llamar el .m de matlab ya que se llamara el .exe, gracias.
Tienes la posibilidad tambien de usar el compilador MCR para distribuir codigo matlab junto con el programa.
__________________
[Crandel]

Última edición por Crandel fecha: 10-03-2009 a las 09:41:33.
Responder Con Cita
  #8  
Antiguo 10-03-2009
rounin rounin is offline
Miembro
 
Registrado: sep 2005
Posts: 43
Poder: 0
rounin Va por buen camino
Hola,

>ronald_tro

>// Execute test.m
>MatlabServer.Execute('test;');
>???

Yo no se cual es el nombre de tu m-file y donde esta localizado.
Por ejemplo yo tomó mis directorio y file.
Necesitas cambiarlos por tus valores apropiados.

?Otras botones (magic cuadrado, calculacion de espectro)
funcionan normalmente?

>Crandel

Gracias
Responder Con Cita
  #9  
Antiguo 10-03-2009
ronald_tro ronald_tro is offline
Miembro
 
Registrado: feb 2009
Posts: 53
Poder: 16
ronald_tro Va por buen camino
Amigo Crandel estuve viendo lo que comentaste y al parecer si debe de funcionar, voy a ahcer unas pruebas y ya luego comento, amigo rounin con la instruccion que dices mando llamar el .exe. ahora, no entiendo tu pregunta, gracias.
Responder Con Cita
  #10  
Antiguo 11-03-2009
Avatar de Crandel
[Crandel] Crandel is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Parana, Argentina
Posts: 1.475
Poder: 22
Crandel Va por buen camino
Cita:
Empezado por ronald_tro Ver Mensaje
Amigo Crandel estuve viendo lo que comentaste y al parecer si debe de funcionar, voy a ahcer unas pruebas y ya luego comento, amigo rounin con la instruccion que dices mando llamar el .exe. ahora, no entiendo tu pregunta, gracias.
Por supuesto que funciona. En la empresa que trabajo estuvieron distribuyendo asi su sistema por varios años . Yo entre a trabajar en la epoca final de su uso y hemos terminado reescribiendo gran parte de su código en C++ para la nueva versión.
__________________
[Crandel]
Responder Con Cita
  #11  
Antiguo 11-03-2009
rounin rounin is offline
Miembro
 
Registrado: sep 2005
Posts: 43
Poder: 0
rounin Va por buen camino
No he entendido esencia de tu dificultad.
(Mi espanol es no muy bueno)

Sobre crear exe de m-file
Por ejemplo, tenemos test funcion en test.m.
(Matlab compiler puede compilar solo funciones)
Código:
 
%---------- test.m --------------
function test(arg1_str) 
  % puede ser sin argumentos

  k = eval(arg1_str);
  han = 128;
  N = 2048;
  rate = 1;
  for i = 1:N
      sample(i) = 3*rand() + sin(2.0*i)*sin(0.1*i);
  end;
  sample = sample .* k;
  [spectrum, freq] = psd(sample, N, rate, hanning(han), han/2, 'linear');
  dlmwrite('result.dat', [freq, spectrum], ' ');
Compilacion:
mcc -m -B sgl -I "C:\Program Files\MATLAB\R2007\toolbox\signal\signal" test.m
o simplemente
mcc -m test.m

Para posibilidad de ejecutar este exe-file en un ordernador sin Matlab,
necesitas instalar Matlab Run-Time.
(mglinstaller.exe en Matlab6.5, MCRInstaller.exe en Matlab2007R etc -
mira el Help)

De Delphi puedes ejecutar este exe-file y obtener resultados
por medio de archivo.

Código Delphi [-]
 
procedure TForm1.BExeClick(Sender: TObject);
const
  WAIT_MSEC = 60000;
var
  si: TStartupInfo;
  pi: TProcessInformation;
  Flags: Longint;
  ExitCode: DWORD;
  Ok: Boolean;
 
  procedure ReadResult;
  var f: TextFile;
      x, y: Double;
  begin
    PsdSeries.Clear;
    //AssignFile(f, 'C:\Program Files\MATLAB\R2007\work\result.dat');
    AssignFile(f, 'result.dat');
    Reset(f);
    try
      repeat
        ReadLn(f, x, y);
        PsdSeries.AddXY(x, y);
      until Eof(f);
    finally
      CloseFile(f);
    end;
  end;
 
begin
  FillChar(si, SizeOf(si), 0);
  si.cb := SizeOf(si);
  si.dwFlags := STARTF_USESTDHANDLES or STARTF_USESHOWWINDOW;
  si.wShowWindow := SW_HIDE; // SW_SHOW
  Flags := CREATE_DEFAULT_ERROR_MODE or NORMAL_PRIORITY_CLASS or CREATE_NEW_CONSOLE;
 
  // string argumento = '12' 
  if CreateProcess(nil, '"C:\Program Files\MATLAB\R2007\work\test.exe" "12"', nil, nil, True, Flags, nil, nil, si, pi) then
  begin
    CloseHandle(pi.hThread);
    try
      if WaitForSingleObject(pi.hProcess, WAIT_MSEC)= WAIT_OBJECT_0 then
      begin
        //GetExitCodeProcess(pi.hProcess, ExitCode);
        ReadResult;
      end;
    finally
      CloseHandle(pi.hProcess);
    end;
  end;
end;
Responder Con Cita
  #12  
Antiguo 11-03-2009
rounin rounin is offline
Miembro
 
Registrado: sep 2005
Posts: 43
Poder: 0
rounin Va por buen camino
Oops, duplicado

Última edición por rounin fecha: 11-03-2009 a las 16:49:16.
Responder Con Cita
  #13  
Antiguo 12-03-2009
ronald_tro ronald_tro is offline
Miembro
 
Registrado: feb 2009
Posts: 53
Poder: 16
ronald_tro Va por buen camino
Ok amigo rounin, entonces asi como lo pones el ejemplo le asignas el resultado a un .dat? o en delphi creas la funcion que se hizo en matlab y se ejecuta el programa (en Delphi) con el MatlabCompiler?,
Amigo Crandel es asi como lo dices tu?, porque en el enlace que pusiste me llava MatlabCompiler 4.10, entonces hablando en general instalo MatlabCompiler y al llamar el archivo de matlab ejecutable lo debe de ejecutar que no?, o me equivoco?, gracias.

Última edición por ronald_tro fecha: 12-03-2009 a las 06:41:18.
Responder Con Cita
  #14  
Antiguo 12-03-2009
Avatar de Crandel
[Crandel] Crandel is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Parana, Argentina
Posts: 1.475
Poder: 22
Crandel Va por buen camino
Cita:
Empezado por ronald_tro Ver Mensaje
Amigo Crandel es asi como lo dices tu?, porque en el enlace que pusiste me llava MatlabCompiler 4.10, entonces hablando en general instalo MatlabCompiler y al llamar el archivo de matlab ejecutable lo debe de ejecutar que no?, o me equivoco?, gracias.
Creo que no te hace falta instalar nada. Ya lo debes tener incluido en tu Matlab. Solo debes instalar el paquete de distribucion que te especifico rounin, pero en la maquina de tus clientes. Esto reemplaza Matlab y no es necesario pagar licencia.

En realidad yo no me encargaba de esta parte, ya habia un grupo que armo todo antes que yo entre.

Pero la idea es esa, puedes hacer la compilación por linea de comando como escribio rounin o puedes hacerlo con una pequeña interfase que trae matlab, que se ejecuta con la sentencia
Código:
deploytool
Esta herramienta simplifica cuando son muchos archivos dado que te permite crear un proyecto y especificar los archivos que utilizas, tanto los que contienen las funciones exportadas como los archivos auxiliares.
__________________
[Crandel]

Última edición por Crandel fecha: 12-03-2009 a las 15:23:36.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Cómo me comunico con Matlab mediante COM felipin007 Providers 2 21-04-2010 07:49:34
Estructura del fichero MATLAB bustio Varios 6 24-10-2007 20:12:16
Consulta Delphi 6, Delphi 2005 y Delphi 2006 Leviatan Varios 6 18-08-2007 16:02:08
problemas con DLL de MatLab emeceuy Varios 6 01-08-2007 23:02:39
Combinar Matlab-Builder Amago C++ Builder 0 10-06-2004 13:03:37


La franja horaria es GMT +2. Ahora son las 08:05:42.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi