在 cRIO-9010 系列控制器上调用外部代码
主要软件:
主要软件版本: 8.2
主要软件修正版本: N/A
次要软件: N/A
问题: 我有外部代码(比如共享库),并且希望在 cRIO-9010 系列控制器上从我的 LabVIEW 实时应用中进行调用。我应该如何做?
解答: 您可以利用 Wind River VxWorks 提供的 GNU 工具链为 cRIO-9010 控制器创建共享库,并在 LabVIEW 中使用 Call Library Function 进行调用。在开发您的代码时您要留意以下内容:
- LabVIEW 只能调用 C 函数:Windows 主机不能查找由 VxWorks 编译的共享库中的符号。所有从 LabVIEW 调用的函数都必须带有外部 "C" 链接。
- Win32 API 不可用:VxWorks 不支持 Windows API 调用。利用 ISO C 或者 C++ 调用进行代替。
- 不支持自动下载:如果共享库由 VI 引用并且没有在目标中的话,LabVIEW 不能将其下载到 VxWorks 目标中模块必须利用 FTP 传输到 ni-rt/system 目标目录中。
共享库可以在 VxWorks 中利用与其他 LabVIEW 实时(PharLap)目标类似的调用方式进行调用。但是,这是有限制的:VxWorks 目标使用 *.out 文件,而不是 *.dll 文件。因此,LabVIEW 开发环境不能在 VxWorks 的共享库中读取库信息,并且 Call Library Function 的配置必须利用一个终端 DLL。遵循下列步骤配置您的外部代码:
- 编译并将您的 *.out 共享库上传到实时目标。
- 编译一个 终端 DLL,该 DLL 与输出的 *.out 共享库使用相同的函数原型。终端 DLL 只包含函数原型而没有实现(比如,空的函数)。这个终端 DLL 只使用在 Windows 主机中,而且必须与原始的 *.out 共享库有 相同名字 -- 比如:
foo.dll
以及 foo.out
。
- 放置 Call Library Function Node 在您的程序框图中并指定
foo.*
做为 库名或路径。在主机中,LabVIEW 将查找 foo.dll
,但是在实时目标中可执行代码/VI 将查找 foo.out
。
- 注意:Calling Convention 配置参数被忽略。
- 终端 DLL 与主机开发环境中 VI 的相对路径必须与实时目标上可执行程序/VI 的相对路径保持一致。
关于调用共享库代码的更多信息,请参考
在 LabVIEW 中使用外部代码 以及
从 LabVIEW 访问 DLL 或者共享库概览。
相关链接: Product Manuals: Using External Code in LabVIEWDeveloper Zone: An Overview of Accessing DLLs or Shared Libraries from LabVIEWProduct Page: NI cRIO-9012
附件:
报告日期: 12/05/2006
最近更新: 12/06/2006
文档编号: 43QD6TS9
Other Support Options
Ask the NI Community
Collaborate with other users in our discussion forums
Request Support from an Engineer
A valid service agreement may be required, and support options vary by country.