Cómo Ejecutar Comandos Shell y Aplicaciones Personalizadas en Linux Real-Time desde LabVIEW



Software Primario: LabVIEW Modules>>LabVIEW Real-Time Module
Versión de Software Primario: 2009 SP1
Versión de Software Primario Corregido: N/A
Software Secundario: N/A

Problema:
Tengo un dispositivo de National Instruments con soporte para Linux Real-Time como los cRIO-306x o los myRIO 1900/1950, y quisiera llamar comandos Shell (Línea de Comandos) desde LabVIEW o ejecutar código personalizado compilado en C o C++.


Solución:
Existen dos maneras de ejecutar código personalizado en C o C++ en un dispositivo con LinuxRT desde un VI de LabVIEW. El usuario puede compilar el código en un ejecutable y llamarlo desde LabVIEW utilizando el System Exec VI, o una biblioteca compartida puede ser llamada desde un Call Library Function Node. Este artículo explicará el primer método, que involucra el System Exec VI en una interface similar al Interprete de comandos.

Llamando código C/C++ desde el System Exec VI en LabVIEW

Utilizando este método usted puede ejecutar ambos, instrucciones de la línea de comandos o aplicaciones que sean compilados en ejecutables. Esto puede hacerse utilizando el SystemExec.vi.

Pasos sugeridos para hacer funcionar el System Exec VI desde LabVIEW con código personalizado C/C++:

1. Instale el compilador GNU C apropiado
El compilador sugerido es el gcc 4.4.1. Mentor Graphics provee una versión (ligera) libre de este compilador llamado Mentor Graphics Sourcery G++ Lite 2010.09-50 for ARM GNU/Linux.
Note que, al ser este un producto de un tercero con sus propias limitaciones, National Instruments no podrá brindar soporte directo.

2. Escriba su programa en C o C++ para ser ejecutado desde la línea de comandos.
El siguiente bloque de código es un ejemplo escrito en C, que puede ser utilizado como referencia.

#include <stdio.h>
int main(int argc, char *argv[])
                int sum, num1, num2 = 0;
               
              if(argc == 1)
printf("no arguments specified");
                else if(argc == 3){
                sscanf(argv[1], "%d", &num1);
                sscanf(argv[2], "%d", &num2);
                sum = num1+num2;
                printf("%d", sum);          
                }
                else
printf("incorrect number of arguments specified");
               
                return 0;
}


3. Compilarlo en la línea de comandos de Windows
Por ejemplo:

cd "path to the C file"\  
arm-none-linux-gnueabi-gcc -o test main.c

En este caso, el archivo en código C es llamado main.c y el archivo compilado será llamado test.

4. Copiar el archivo al dispositivo RT.
El método más sencillo para realizar esto es utilizando una unidad asignada con protocolo WebDAV en Windows 7 al directorio home/lvuser en el dispositivo LinuxRT. Para más información, refiérase al documento de soporte en las Ligas Relacionadas llamado Using WebDAV to Transfer Files to Your Real-Time Target (en inglés).

5. Configure los permisos del archivo para lectura y ejecución.
SSH dentro del dispositivo RT y establezca los permisos apropiados al archivo test al escribir en la línea de comandos 777. (Argumentos 777 cambian los permisos en el archivo a escribir, leer y ejecutar para todos).

Ej:
Chmod 777 /home/lvuser/test

Para SSH al dispositivo, cualquier programa de terminal (Ej PuTTY) puede ser utilizado. Utilice la dirección IP regular del dispositivo y el puerto 22.

6. Acceda y ejecute el archivo desde LabVIEW.
Escriba una aplicación sencilla en LabVIEW que concatene el archivo test y los argumentos en una instrucción y utilice el System Exec.vi para llamar el código compilado C. Ver ejemplo.



Ligas Relacionadas:
Tutorial: Comenzar a Trabajar con Eclipse para un Dispositivo NI CompactRIO basado en NI Linux Real-Time
Documento de Soporte 69EEMIR4: Utilizando WebDAV para transferir archivos al Controlador en Tiempo Real

Archivos Adjuntos:





Día del Reporte: 06/07/2017
Última Actualización: 08/22/2017
Identificación del Documento: 6HN97DU6