LabVIEW调用.so文件的方法

  • (一)为什么需要用LabVIEW调用.so文件
    • (1.1)背景
    • (1.2)使用.so文件的优势
    • (1.3)调用.so文件示例
  • (二).so文件是什么
  • (三).so文件生成
    • (3.1)add.c文件
    • (3.2)add.h文件
    • (3.3)makefile文件
    • (3.3)编译生成.so文件
  • (四).so文件如何在linux中常规调用?
    • (4.1)将.so、.h文件拷贝到目标文件夹
    • (4.2)编写main.c文件
    • (4.3)编写makefile
    • (4.4)运行
    • (4.5)可能存在的问题
      • (4.5.1)找不到GCC等软件
      • (4.5.2)找不到动态库.so文件
  • (五).so文件如何在RT Linux中常规调用?
  • (六).so文件如何通过LabVIEW RealTime模块在RT linux中调用?
    • (6.1)在RT linux中放置.so文件的位置
    • (6.2)重新启动RT Linux来使能.so文件
  • (七)在RT_linux labview_host界面及so文件调用
    • (7.1)使用MoveBlock函数
      • (7.1.1)输入、输出使用值传递的简单函数的.so调用
      • (7.1.2)输入、输出使用结构体指针传递的复杂函数的.so
        • (a).so函数原型
        • (b)CLN函数调用.so文件配置
        • (c)MoveBlock函数配置
        • (d)调用效果
    • (7.2)使用GetValueByPointer.xnode函数
  • (八)总结与展望

(一)为什么需要用LabVIEW调用.so文件

(1.1)背景

  • NI的CompactRIO平台(硬件由运行 RT Linux的终端 + FPGA背板 + C系列I/O插件)具有良好的软件和硬件支持,利用LabVIEW软件及其LabVIEW Real Time 和LabVIEW FPGA软件模块,可以方便的编写在硬件上运行的实时程序,利用LabVIEW可以直接将程序下载到运行RT Linux的终端上,并且利用背板FPGA可以方便与C系列IO进行快速交互,总体上而言十分适合利用CompactRIO平台建立自定义硬件在环仿真平台。
  • 基于以上认识,在RT Linux上运行的VI程序将是其中的重要的一环。考虑如果能够将simulink的模型文件转化为.so文件,然后在VI程序中调用,然后下载到RT Linux终端运行,那么simulink模型将在RT Linux中运行,实时性得到了保证,同时利用背板FPGA对C系列IO的交互,同时实现了与外界的物理交互,硬件在环平台即可实现。

(1.2)使用.so文件的优势

  • Simulink能够建立的模型十分丰富,其模型是.mdl或者.slx格式,RT Linux和LabVIEW 并不能调用。可利用Embeded Coder模块将Simulink模型转化为.c和.h文件,然后编译为.so文件,则可以被RT Linux和LabVIEW调用。结合Simulink建立模型的优势以及CompactRIO平台物理交互的优势的关键点在于在.so文件的生成和调用。

(1.3)调用.so文件示例

  • 需要运行的程序VI在主机host上编写,VI放置在工程文件的终端下(如图中的NI-VMware7-1-74、NI-cRIO-9040)。

  • 点击VI运行按钮可以直接下载到终端运行。如图是在simulink中搭建了储能电站模型,编译为.so文件后在RT Linux上调用运行,时间周期为10us级别,极大的保证了运行的实时性。

(二).so文件是什么

  • .so文件是Linux环境下的动态链接库,需要在Linux环境下编译生成。
  • .dll文件是Windows环境下的动态链接库,需要在Windows环境下编译生成。
  • Windows下的LabVIEW可以调用.dll在Windows环境下运行。也可以在Windows下编写终端VI程序,终端VI程序调用.so文件,然后将终端VI下载到RT Linux 终端上运行。
  • LabVIEW调用.dll文件和调用.so文件采用不同的方式。

(三).so文件生成

  • 以下举例说明在Linux下如何生成.so文件。需要的文件为:add.c 、 add.h 、makefile。

(3.1)add.c文件

#include "add.h"int add(int x ,int y){return x+y ;
}

(3.2)add.h文件

int add(int x, int y);

(3.3)makefile文件

TARGET = libadd.so
SRC =  $(wildcard  ./*.c )
OBJS = $(patsubst %.c,%.o, $(SRC))
CC = gcc
CFLAGS += -c -g -Wall -fPIC
INC = -I.
LIB = -L.   -shared $(TARGET):$(OBJS)$(CC)   $^  -o   $@   $(LIB) %.o:%.c$(CC)   $^  -o  $@   $(INC)   $(CFLAGS)clean:rm  $(OBJS)  $(TARGET) -rf

(3.3)编译生成.so文件

  • 生成了 libadd.so 文件

(四).so文件如何在linux中常规调用?

  • Linux选用Ubuntu 2004。

(4.1)将.so、.h文件拷贝到目标文件夹

(4.2)编写main.c文件

#include "add.h"
#include <stdio.h>
#include <stdlib.h>int main(void)
{for (int i = 0; i < 5; i++){printf("add(test0,test1)=%d\n", add(i, i + 1));}return 0;
}

(4.3)编写makefile

TARGET = app
SRC =  $(wildcard  ./*.c )
OBJS = $(patsubst %.c,%.o, $(SRC))
CC = gcc
CFLAGS += -c -g -Wall
INC = -I. -fPIC
LIB = -L./  -ladd $(TARGET):$(OBJS)$(CC)   $^  -o   $@   $(LIB) %.o:%.c$(CC)   $^  -o  $@   $(INC)   $(CFLAGS)clean:rm  $(OBJS)  $(TARGET) -rf

(4.4)运行

(4.5)可能存在的问题

(4.5.1)找不到GCC等软件

sudo apt update
sudo apt upgrade

(4.5.2)找不到动态库.so文件

参考文献: Ubuntu linux设置从当前目录下加载动态库so文件

1、利用 ldd libadd.so //查看依赖的动态库
通过设置环境变量LD_LIBRARY_PATH,可加载当前目录的动态库。
2、临时修改,Log Out之后失效。在terminal中执行:

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:./

3、让当前帐号以后都优先加载当前目录的动态库,修改~/.bash_profile,在文件末尾加上两行:

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:./

然后在terminal中运行

source .bashrc

4、让所有帐号从此都优先加载当前目录的动态库,修改/etc/profile在文件末尾如2中同样修改 。
5、修改ld.so.conf不能达到目的,因为ld.so.conf只支持绝对路径。

(五).so文件如何在RT Linux中常规调用?

  • 在RT Linux调用.so文件和在常规Linux下调用.so一致。

(六).so文件如何通过LabVIEW RealTime模块在RT linux中调用?

  • 通过LabVIEW RealTime模块在RT linux中调用.so与在RT Linux上常规调用不同,按照NI的说明文档需要做相关配置。

(6.1)在RT linux中放置.so文件的位置

  • 按照官方文档,应放在/usr/local/lib 里面

(6.2)重新启动RT Linux来使能.so文件

 sudo reboot

(七)在RT_linux labview_host界面及so文件调用

(7.1)使用MoveBlock函数

(7.1.1)输入、输出使用值传递的简单函数的.so调用

(7.1.2)输入、输出使用结构体指针传递的复杂函数的.so

(a).so函数原型

typedef struct {real_T P_set;                      real_T Q_set;
} ExtU;typedef struct {real_T PQ_meas[2];
} ExtY;ExtY *my_rt_OneStep(ExtU *Input_Pointer);

(b)CLN函数调用.so文件配置

(c)MoveBlock函数配置


(d)调用效果

(7.2)使用GetValueByPointer.xnode函数

  • 暂未尝试,先留空。

(八)总结与展望

  • 将simulink模型转化为.so文件,然后在LabVIEW中调用可以实现实时仿真系统的运行,结合CompactRIO平台的FPGA和C系列IO,可以实现与外接交互,实现硬件在环平台。其中的难点在于.so文件的调用与生成,尤其是在LabVIEW中的CLN中配置.so文件的调用格式以及MoveBlock模块的调用格式需要特别注意。
  • 后续博文将结合目前的工作与实际硬件实现物理交互,真实建立硬件在环平台。

LabVIEW调用.so文件的方法相关推荐

  1. LabVIEW播放视频文件的方法与例程

    LabVIEW播放视频文件的方法与例程 用LabVIEW播放视频,有不同的方法. 比如,可以用Vision工具包里的vi来实现,这里播放只是基本的功能,更多用途是用来做视频图像分析处理的.这里仅以视频 ...

  2. html 动态调用php文件,html静态页面调用php文件的方法

    html静态页面调用php文件的方法 本文实例讲述了html静态页面调用php文件的方法.分享给大家供大家参考.具体方法如下: 静态页面中看上去好像是不能直接调用php文件的,但是却可以使用js调用方 ...

  3. java linux 调用so文件,linux下java jni调用.so文件的方法

    刚刚试过一个这样的例子,省事起见,略改并记录如下: //package net.wangliping; 2 public class Hello 3 { 4     static 5     { 6 ...

  4. 使用js设置ul标签的显示或隐藏和超链接调用js文件的方法

    <ul class="nav" id="rm" style='display:none'> <li>   <a href='#' ...

  5. labview如何加载库_LabVIEW如何方便地调用DLL文件

    转自:http://bbs.elecfans.com/jishu_469502_1_1.html LabVIEW调用DLL文件 LabVIEW支持通过调用DLL文件的方式与其它编程语言混合使用.比如, ...

  6. labview调用DLL

    <link href="https://csdnimg.cn/public/favicon.ico" rel="SHORTCUT ICON"> &l ...

  7. java 对第三方的异常_Java第三方API调用打开文件方法时抛出异常

    想用Java写一个音乐播放器,使用了Javazoom里的第三方API,调用打开文件的方法open(File file)时,抛出了IOException:Resetting to invalid mar ...

  8. 让Visual Studio (VS)链接静态库(lib)及动态库(dll)文件的方法汇总

    本文为原创+转载,旨在总结一下VS链接动态链接库(dll)和静态链接库(lib)的方法. 在调试 Visual Studio 程序时,经常有一些动态链接库(即 dll 文件)需要加载到工程里,这样才能 ...

  9. Nginx+lua 实现调用.so文件方法

    本文给大家分享的是Nginx结合lua 实现调用.so动态链接库文件的方法和示例,有需要的小伙伴可以参考下 最近在和智能硬件部门一起,做一个室内定位的服务,该服务根据手机端传过来的beacon设备列表 ...

最新文章

  1. 【springmvc+mybatis项目实战】杰信商贸-16.新增从表货物信息
  2. 【Android 逆向】代码调试器开发 ( 代码调试器功能简介 | 设置断点 | 读写内存 | 读写寄存器 | 恢复运行 | Attach 进程 )
  3. Android改变字体方法——Typeface
  4. mysql5.5怎么删除字段_Linux 上 Mysql5.5 只能新建表中的字段不能删除表,权限root...
  5. jsp+js实现二级级联
  6. 实时监控后台数据 vue_实时数据监控,快速掌握B站爆款视频热度走向
  7. extjs中store获取后台数据_Excel实战技巧64: 从工作簿中获取数据(不使用VBA)
  8. java中几种基本数据类型之间的转换
  9. python判断进程是否存在
  10. php 密码过滤,PHP实践教程之过滤、验证、转义与密码详解
  11. 不满公司与反移民政府机构合作,开发人员删库抗议
  12. matplotlib数据可视化实战——饼状图+雷达图+三维图
  13. python如何运行一个python程序_python如何运行?第一个python小程序示范
  14. ISODrive使Ubuntu Touch手机变身电脑系统启动盘(UBports之“DriveDroid”)
  15. 迅雷 iOS 版终于复活,不限速,完美支持BT磁力下载
  16. c语言日历程序实验报告,万年历实验报告.doc
  17. linux下virtualbox安装win7虚拟机无法调整分辨率
  18. window 下载安装minio
  19. VBA多条EXCEL记录写入到WORD文档中
  20. 双目立体视觉几何框架详解

热门文章

  1. 查看linux文件工具,Linux基础命令-文本文件查看工具
  2. 机器学习及Matlab实现-从基础到实战
  3. Qt5 编译错误找不到头文件的解决方法
  4. App Store 中国区已支持人民币支付
  5. 谁是中国的制造业超级城市?中国城市制造业辐射力排名:深圳、苏州、东莞、上海、宁波位居前五 | 美通社头条...
  6. 【数学】方差/标准差的各种估计辨析
  7. 视频 | EMBOSS软件包安装和使用(序列提取、引物设计)
  8. 在Linux上安装TimesTen
  9. 最好的OCR识别软件:ABBYY FineReader中文绿色版
  10. 小技巧大用处!这些渠道让你的群发邮件更省心