控制器重置时,启动项可执行文件(Startup EXE)无法在实时(RT)终端上启动

更新 Jul 17, 2019

适用于

Hardware

  • Industrial Controller
  • CompactRIO Chassis
  • PXI Controller

Software

  • LabVIEW Real-Time Module

Operating System

  • NI Linux Real-Time
  • PharLap
  • VxWorks

问题详述

我遇到以下问题之一:
  • 我有一个实时(RT)终端,在控制器上嵌入了一个启动项可执行文件(.exe)。当控制器重新启动时,.exe似乎根本没有运行或运行不正常。
  • 我的RT终端可执行文件好像崩溃了,当检查错误日志(Error Log)时,我看到以下内容:


可能导致此现象的原因是什么?

解决方案

有许多问题可能导致可执行文件在RT终端启动时无法运行。请按照下面的故障排除步骤进行适用于您系统的设置。
  • 确保将RT应用程序设置为启动项。
    • 右键单击LabVIEW项目中的应用程序,然后选择设置为启动项(Set as startup),如下面的图1所示。
      • 一旦将可执行文件设置为启动项,您会看到指定的应用程序图标被包含在绿色框中。
    • 如果选择作为启动项运行(Run as startup) ,LabVIEW将询问您是否要重启设备。重新启动控制器后,应用程序应在启动时加载。

图1:在LabVIEW项目中将应用程序设置为启动项
  • 检查设备手册以确定是否有NOAPP DIP开关,如果有,请确保在物理上将NOAPP DIP开关设置为“关闭(OFF)”。
    • 如果是这种情况,找到硬件DIP开关,将其更改为“关闭”位置,然后重新启动控制器。
      • 一些实时控制器具有物理DIP开关,用来实现“NOAPP”功能或者无应用模式。如果此开关处于“开启(ON)”位置,LabVIEW Real-Time将不会自动运行EXE。
  • 确保在NI MAX中,终端系统设置(System Settings)下未选择禁用RT启动项(Disable RT Startup App)
    • 某些设备使用硬件DIP开关,而其他设备使用NI MAX中设备系统设置中的配置。查看设备的手册以确定设备使用的方法。
  • 检查设备的IP设置,如果设备未连接到网络,则不应将设备设置为从DHCP服务器获取IP地址。
    • 注意:这仅适用于Phar Lap ETS和VxWorks控制器
    • 您需要为控制器设置静态IP地址:
      • 在NI MAX中的远程系统(Remote Systems)下检测设备。
      • 打开系统设置 ,并禁用停止IP故障(Halt on IP failure)。
      • 打开 网络设置(Network Settings),为设备分配静态IP地址。
    • 注意:如果您的控制器设置为从DHCP服务器获取IP地址,则EXE将仅在控制器能够获取有效IP地址时启动。如果系统必须在没有网络连接的情况下启动,则可以设置为静态IP,此时无论网络连接是否可用,控制器重启后都应运行启动项EXE。
  • 检查您的NI-RT.ini(配置/初始化文件)是否设置正确。NI-RT.ini中的RTTarget.LaunchAppAtBoot必须设置为真(true)。
    • 如果使用WebDAV或SFTP部署应用程序,请确保遵循这些说明

 

  • 从VI中删除引用前面板对象或属性的所有属性节点。在大多数情况下,引用前面板对象和属性(例如窗口位置)的属性节点将阻止RT应用程序执行,因为在编译RT可执行文件时会删除VI的前面板。
    • 对于某些受支持的目标 ,如果启用嵌入式UI ,则可以引用前面板对象的属性节点。
    • 如果无法删除引用前面板对象的属性节点,并且无法启用嵌入式UI,那么可以启用调试以在应用程序生成时包含前面板。
      • 打开生成程序规范(Build Specifications)。
      • 导航到高级(Advanced)选项卡。
      • 选中启用调试(Enable debugging),如下面的图2所示。
      • 注意:由于包含和运行应用程序前面板需要进行额外处理,这将增加RT控制器的系统资源占用。

图2:在生成EXE时启用调试以包含应用程序的前面板

 

  • 确保RT系统能够在尝试执行启动项应用程序之前,启动所有必需的服务。方法是在应用程序的启动顺序中加入30-60秒的等待函数,如下面的图3所示。

图3:在执行RT代码之前添加等待顺序结构
  • 注意:这个问题也会发生在执行开始之前需要加载多个后台进程的大型应用程序中。在这些情况下,RT系统可能无法在应用程序尝试执行(通常第一部分是打开FPGA VI引用)之前启动所有必需的服务,导致系统挂起或崩溃。在混合模式下使用RIO,并在扫描接口完成加载之前调用FPGA时,通常也会出现这种情况。这种情况的解决方案是在应用程序的启动顺序中加入一个等待函数,该函数应该允许控制器完成加载,同时不会使CPU过载。
  • 如果您使用的是Linux RT目标,请删除终端上运行的元素(如VI,库,共享变量等)名称中的所有特殊字符。这是因为Linux RT无法处理特殊字符。
  • 从RT应用程序中删除自定义类型。
    • 通过右键单击LabVIEW项目中的EXE打开应用程序属性
    • 导航到附加排除项(Additional Information)选项卡,然后选中断开连接自定义类型(Disconnect type definitions),如下面的图4所示。
    • 注意:自定义类型用于保留源代码,但是,在生成或运行可执行文件时,这不是高优先级的操作。在这种情况下,可以断开自定义类型以保留内存。当LabVIEW感知到不同自定义类型之间的冲突时,断开连接选项也用作故障排除的步骤之一。

图4:生成EXE时在应用程序属性中断开连接自定义类型
 
  • 如果您在应用程序中使用SSE2优化,请确保您的终端支持SSE2指令。
    • 如果终端不支持SSE2优化,请在应用程序属性中禁用此选项
    • 导航到高级类别下,取消选中启用SSE2优化(Enable SSE2 Optimization),如图5所示。
    • 注意:LabVIEW 2017开始无法再禁用SSE2优化。您无法在LabVIEW 2017及更高版本中将RT EXE部署到不支持SSE2的终端上。

图5:在应用程序属性中禁用SSE2优化

本文是否有帮助?

无帮助