El ejecutable de inicio no se inicia en el destino en tiempo real (RT)

Actualizado el Dec 27, 2019

Reportado en

Hardware

  • Industrial Controller
  • CompactRIO Chassis
  • PXI Controller

Software

  • LabVIEW Real-Time Module

Sistema Operativo

  • NI Linux Real-Time
  • PharLap
  • VxWorks

Detalles del problema

Estoy experimentando uno de los siguientes problemas:
  • Tengo un sistema en tiempo real con un ejecutable de inicio (.exe) incrustado al controlador. Cuando reinicio el controlador, parece que el .exe no se está ejecutando en absoluto o se está ejecutando incorrectamente.
  • Parece que mi ejecutable en tiempo real falla y cuando reviso los registros de errores veo lo siguiente:


Funciona en tethered mode (modo atado), ya sea utilizando herramientas de depuración remota o simplemente presionando el botón Ejecutar en su computadora de desarrollo.

Solución

Hay una serie de problemas que pueden provocar que un ejecutable no se ejecute al inicio. Siga los siguientes pasos para las configuraciones que son aplicables en sus sistema.
  • Asegúrese de que la aplicación en tiempo real esté configurada como la aplicación de inicio.
    • Haga clic derecho en la aplicación dentro del proyecto LabVIEW y seleccione Set as startup como se muestra en la Figura 1 a continuación.
      • Una vez que un ejecutable se ha configurado para ejecutarse en el inicio, notará que la compilación especificada está encerrada en un cuadro verde.
    • Si elige Run as startup  , LabVIEW le preguntará si desea reiniciar el dispositivo. Cuando se reinicia el controlador, su aplicación debería cargarse al inicio.

Figura 1: Establecer la Aplicación como Inicio en el Proyecto LabVIEW
  • Consulte los manuales de su producto  para determinar si tiene un interruptor DIP NOAPP y, de ser así, asegúrese de que el interruptor DIP NOAPP físico esté configurado en 'OFF'.
    • Si corresponde, ubique el interruptor DIP de hardware, cámbielo a la posición 'apagado' y reinicie el controlador.
      • Algunos controladores en tiempo real tienen un interruptor DIP físico que controla una función que generalmente se conoce como "NOAPP"(no application mode), o sin modo de aplicación. Si este interruptor está en la posición "ON", LabVIEW Real-Time no ejecutará el EXE automáticamente.
  • Asegúrese de que la aplicación  Disable RT Startup App no esté seleccionada en NI MAX en System Settings,
    • Algunos dispositivos usan interruptores DIP de hardware, mientras que otros usan la configuración establecida en System Settings para el dispositivo en NI MAX. Consulte el manual de su dispositivo para determinar el método que utiliza.
  • Verifique la configuración de IP de su dispositivo. Si el dispositivo en cuestión no está conectado a una red, no debe configurarse para obtener una dirección IP del servidor DHCP.
    • Nota: Esto solo es relevante para los controladores Phar Lap ETS y VxWorks.
    • Para establecer una dirección IP estática para su controlador:
      • Detecte el dispositivo en Remote Systems en National Instruments Measurement & Automation Explorer (MAX).
      • Abra System Settings y desactive Halt on IP failure.
      • Abra Network Settings y asigne una dirección IP estática.
    • Nota: Si su controlador está configurado para obtener su dirección IP de un servidor DHCP, el EXE solo se iniciará cuando el controlador pueda obtener una dirección IP válida. Si el sistema debe iniciarse en el arranque sin una conexión de red, puede configurar una IP estática. El EXE de inicio debería iniciarse cuando se reinicie el controlador, independientemente de la disponibilidad de una conexión de red.

 

  • Elimine todos los property nodes que hacen referencia a objetos o propiedades del front panel del VI. En la mayoría de los casos, los property nodes que hacen referencia a objetos y propiedades del front panel (como la posición de la ventana), si se usan, evitarán que se ejecute una aplicación en tiempo real porque el front panel de un VI se elimina cuando se compila un ejecutable en tiempo real.
    • Para algunos objetivos admitidos , es posible usar property nodes que hagan referencia a objetos del panel frontal si  se selecciona Enable Embedded UI.
    • Si no es posible eliminar los property nodes que hacen referencia a objetos del front panel y no puede habilitar la Embedded UI, puede habilitar la depuración para incluir el front panel en la compilación.
      • Abra Build Specifications.
      • Navega a la pestaña Advanced .
      • Marque Enable debugging como se muestra en la Figura 2 a continuación.
      • Nota: Esto aumentará la utilización de los recursos del sistema en su controlador en tiempo real debido al procesamiento adicional requerido para incluir y ejecutar el panel frontal de la aplicación.

Figura 2: Habilite la depuración para incluir el front panel de la aplicación en la compilación EXE

 

  • Si su dispositivo funciona cuando las herramientas de depuración están habilitadas, vea si hay un código de error configurando los paneles frontales remotos en un Target en Real Time Para. Para verificar las fuentes de errores, asegúrese de conectar los errores de los puntos de interés a los bucles, de lo contrario podrían eliminarse.

Figura 3: Manejo de errores con el panel frontal remoto
  • Asegúrese de que el sistema operativo RT pueda iniciar todos los servicios necesarios antes de que la aplicación de inicio intente ejecutarse incluyendo una función de espera de 30-60 segundos en la secuencia de inicio de la aplicación, ejemplo en la Figura 3 a continuación. Este es un buen paso cuando se utilizan tarjetas de la serie R con controladores PXI más antiguos, ya que algunos de sus procesos tardan en iniciarse.

Figura 4: Agregar estructura de secuencia de espera antes de ejecutar código RT
  • Nota: Este comportamiento también puede ocurrir en aplicaciones grandes que requieren la carga de múltiples procesos en segundo plano antes de que pueda comenzar la ejecución. En estas situaciones, es posible que el sistema operativo RT no pueda iniciar todos los servicios requeridos antes de que la aplicación intente ejecutarse (generalmente la primera parte es la Referencia abierta de FPGA VI), lo que hace que un sistema se bloquee o bloquee. Esto se ve comúnmente cuando se utiliza un RIO en modo híbrido y se realiza una llamada al FPGA cuando antes de que la interfaz de escaneo haya terminado de cargarse. Una solución en esta situación es incluir una función de espera en la secuencia de inicio de la aplicación, lo que debería permitir que el controlador termine de cargar sin sobrecargar la CPU.
  • Si está utilizando un objetivo RT de Linux, elimine todos los caracteres especiales en el nombre de los elementos que se ejecutan en el objetivo (como VI, bibliotecas, variables compartidas, etc.). Esto se debe a que Linux RT no puede manejar caracteres especiales.
  • Eliminar las definiciones de tipo de la aplicación RT.
    • Abra Application Properties haciendo clic derecho en el EXE en el proyecto LabVIEW.
    • Vaya a la pestaña Additional Information y verifique  Disconnect type definitions como se ve en la Figura 4 a continuación.
    • Nota: Las definiciones de tipo se usan para preservar el código fuente; sin embargo, al crear / ejecutar un ejecutable, esto no es una prioridad. En este caso, las definiciones de tipo se pueden desconectar para preservar el uso de la memoria. La opción de desconexión también se usa como un paso de solución de problemas cuando LabVIEW percibe conflictos entre diferentes definiciones de tipos.

Figura 5: Desconecte las definiciones de tipo en la compilación EXE en las propiedades de la aplicación
 
  • Si está utilizando la optimización SSE2 en su cumplimiento, asegúrese de que su objetivo sea compatible con las instrucciones SSE2 .
    • Si su objetivo no admite la optimización SSE2, desactive esta opción en  Application Properties. 
    • Navegue a la categoría Advanced y desactive Enable SSE2 Optimization como se ve en la Figura 5.
    • Nota: A partir de LabVIEW 2017 , la optimización SSE2 ya no se puede deshabilitar. Ya no puede implementar RT EXEs en objetivos que no admiten SSE2 en LabVIEW 2017 y versiones posteriores.

Figura 6: Deshabilite la optimización SSE2 en las propiedades de la aplicación