Integración de funciones compiladas de MATLAB con LabVIEW con un enfoque de ensamblaje .NET

Actualizado el Nov 27, 2020

Ambiente

Software

  • LabVIEW
  • MATLAB

Este tutorial utiliza The MathWorks, Inc. MATLAB®, MATLAB Compiler ™ y MATLAB Compiler SDK ™ para crear un ensamblaje .NET que se puede llamar en LabVIEW. Este enfoque reduce en gran medida la sobrecarga y mejora el tiempo de ejecución en comparación con otros métodos, como llamar a ejecutables o al nodo de script MATLAB®.

La integración de MATLAB® a LabVIEW permite la reutilización completa del código MATLAB®. Al final del tutorial, los científicos e ingenieros que usan ambas plataformas deberían poder integrar MATLAB® en LabVIEW sin problemas.

Requisitos de Software

  1. Sistema de desarrollo de LabVIEW

  2. MATLAB, MATLAB Compiler ™ y MATLAB Compiler SDK ™

  3. En las máquinas de implementación, debe instalar MATLAB Runtime

Nota: La versión de MATLAB Runtime debe ser la misma que la versión de MATLAB® que se utilizó para crear el código MATLAB® compilado.

Genere un ensamblado .NET desde MATLAB® con la aplicación Library Compiler

  1. Genere un ensamblado .NET desde MATLAB usando la aplicación Library Compiler. El tutorial de MathWorks, Inc. usa el archivo de ejemplo makesquare.m y da como resultado la creación de MagicSquareCompNative.dll , que es el archivo que usaremos para integrar LabVIEW en este tutorial.

  2. Verifique las carpetas y archivos generados. Se generan tres carpetas en la ubicación de la carpeta de destino:

    for_redistribution, for_redistribution_files_only y for_testing .

    Usaremos MagicSquareCompNative.dll en la carpeta for_testing para el siguiente paso.

    Nota: Usamos MagicSquareCompNative.dll en lugar de MagicSqaureComp.dll porque MagicSqaureComp.dll usa el tipo de datos de matriz M y este tipo de datos no es compatible con LabVIEW.

Llame a .NET Assembly desde LabVIEW

  1. Abra un nuevo VI desde LabVIEW >> File >> New VI.

  2. En el diagrama de bloques, agregue un Nodo Constructor de la paleta Conectivity >> .NET .

  3. Cuando suelte el Nodo Constructor en el diagrama de bloques, aparecerá la ventana de configuración Seleccionar Constructor .NET. En el menú desplegable Assembly, seleccione MagicSquareCompNative.dll de la carpeta del paquete construido >> Class1 en Objects >> OK .

  1. En la paleta Connectivity >> .NET , agregue un Invoke Node (.NET) al diagrama de bloques. Invoke Node invoca un método o acción en una referencia.

  2. Conecte la referencia de salida del nodo Constructor a la referencia de entrada del Invoke node. En el menú desplegable del nodo Invoke, seleccione la función makesquare (Int32 numArgsOut, Object x) .

  1. "NumArgsOut" es el número de argumentos de salida que se devolverán. Dado que la función makequare solo devuelve una salida, establezca esta entrada en una constante de 1.

  2. La entrada "x" es un objeto .NET. Utilice Connectivity >> .NET >> To .NET Object.vi para convertir el tipo de datos de entrada en un objeto .NET.

  3. Agregue una matriz numérica a su panel frontal. En el diagrama de bloques, conecte el control de matriz a la entrada To .NET Object .

  1. La salida "makesquare" es un objeto .NET que debe convertirse en una variante. Utilice Connectivity >> .NET >>.NET Object To Variant.vi y Cluster, Class, and Variant >>Variant >> Variant to Data.VI Configure la Variant a Data.VI para generar un resultado numérico.

  1. Cierre .NET Reference con Connectivity >>. NET >> Close Reference.VI .

Pruebe su aplicación

El panel frontal debería verse como el siguiente VI:

Pruebe esta aplicación asignando una matriz de entrada de valor 5. A continuación se muestra el resultado.

Compare este resultado con el resultado de makesquare.m de MATLAB®.

Nota sobre las pruebas comparativas: En las pruebas comparativas utilizando el método tic toc, la llamada a la biblioteca .NET de MATLAB® fue 1,783% más rápida que ejecutar el mismo código en LabVIEW MathScript Node y un 16% más rápida en comparación con empaquetar el código MATLAB® como un EXE y llamar con el LabVIEW exec.vi. El tiempo de ejecución de las pruebas depende de muchos factores, como el código que se está ejecutando y la potencia de procesamiento de la computadora. Puede comparar su propio código siguiendo los pasos de Benchmarking Sections of Code en LabVIEW .