Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Gráficos (https://www.clubdelphi.com/foros/forumdisplay.php?f=8)
-   -   Matlab en delphi (https://www.clubdelphi.com/foros/showthread.php?t=63915)

ronald_tro 09-03-2009 04:41:35

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.

Crandel 09-03-2009 14:28:08

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 09-03-2009 14:37:51

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 09-03-2009 15:22:23

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 :D

rounin 09-03-2009 18:26:29

1 Archivos Adjunto(s)
Hola,
Eso es un ejemplo de usar Matlab en Delphi segun COM.

ronald_tro 10-03-2009 07:29:54

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.

Crandel 10-03-2009 09:34:42

Cita:

Empezado por rounin (Mensaje 340712)
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.

rounin 10-03-2009 19:16:36

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

ronald_tro 10-03-2009 20:31:17

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.

Crandel 11-03-2009 08:42:56

Cita:

Empezado por ronald_tro (Mensaje 340882)
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 :D. 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.

rounin 11-03-2009 16:40:14

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;

rounin 11-03-2009 16:44:06

Oops, duplicado

ronald_tro 12-03-2009 06:35:58

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.

Crandel 12-03-2009 14:00:10

Cita:

Empezado por ronald_tro (Mensaje 341132)
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.


La franja horaria es GMT +2. Ahora son las 21:18:28.

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