LabVIEW调用.so文件的方法
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文件的方法相关推荐
- LabVIEW播放视频文件的方法与例程
LabVIEW播放视频文件的方法与例程 用LabVIEW播放视频,有不同的方法. 比如,可以用Vision工具包里的vi来实现,这里播放只是基本的功能,更多用途是用来做视频图像分析处理的.这里仅以视频 ...
- html 动态调用php文件,html静态页面调用php文件的方法
html静态页面调用php文件的方法 本文实例讲述了html静态页面调用php文件的方法.分享给大家供大家参考.具体方法如下: 静态页面中看上去好像是不能直接调用php文件的,但是却可以使用js调用方 ...
- java linux 调用so文件,linux下java jni调用.so文件的方法
刚刚试过一个这样的例子,省事起见,略改并记录如下: //package net.wangliping; 2 public class Hello 3 { 4 static 5 { 6 ...
- 使用js设置ul标签的显示或隐藏和超链接调用js文件的方法
<ul class="nav" id="rm" style='display:none'> <li> <a href='#' ...
- labview如何加载库_LabVIEW如何方便地调用DLL文件
转自:http://bbs.elecfans.com/jishu_469502_1_1.html LabVIEW调用DLL文件 LabVIEW支持通过调用DLL文件的方式与其它编程语言混合使用.比如, ...
- labview调用DLL
<link href="https://csdnimg.cn/public/favicon.ico" rel="SHORTCUT ICON"> &l ...
- java 对第三方的异常_Java第三方API调用打开文件方法时抛出异常
想用Java写一个音乐播放器,使用了Javazoom里的第三方API,调用打开文件的方法open(File file)时,抛出了IOException:Resetting to invalid mar ...
- 让Visual Studio (VS)链接静态库(lib)及动态库(dll)文件的方法汇总
本文为原创+转载,旨在总结一下VS链接动态链接库(dll)和静态链接库(lib)的方法. 在调试 Visual Studio 程序时,经常有一些动态链接库(即 dll 文件)需要加载到工程里,这样才能 ...
- Nginx+lua 实现调用.so文件方法
本文给大家分享的是Nginx结合lua 实现调用.so动态链接库文件的方法和示例,有需要的小伙伴可以参考下 最近在和智能硬件部门一起,做一个室内定位的服务,该服务根据手机端传过来的beacon设备列表 ...
最新文章
- 【springmvc+mybatis项目实战】杰信商贸-16.新增从表货物信息
- 【Android 逆向】代码调试器开发 ( 代码调试器功能简介 | 设置断点 | 读写内存 | 读写寄存器 | 恢复运行 | Attach 进程 )
- Android改变字体方法——Typeface
- mysql5.5怎么删除字段_Linux 上 Mysql5.5 只能新建表中的字段不能删除表,权限root...
- jsp+js实现二级级联
- 实时监控后台数据 vue_实时数据监控,快速掌握B站爆款视频热度走向
- extjs中store获取后台数据_Excel实战技巧64: 从工作簿中获取数据(不使用VBA)
- java中几种基本数据类型之间的转换
- python判断进程是否存在
- php 密码过滤,PHP实践教程之过滤、验证、转义与密码详解
- 不满公司与反移民政府机构合作,开发人员删库抗议
- matplotlib数据可视化实战——饼状图+雷达图+三维图
- python如何运行一个python程序_python如何运行?第一个python小程序示范
- ISODrive使Ubuntu Touch手机变身电脑系统启动盘(UBports之“DriveDroid”)
- 迅雷 iOS 版终于复活,不限速,完美支持BT磁力下载
- c语言日历程序实验报告,万年历实验报告.doc
- linux下virtualbox安装win7虚拟机无法调整分辨率
- window 下载安装minio
- VBA多条EXCEL记录写入到WORD文档中
- 双目立体视觉几何框架详解
热门文章
- 查看linux文件工具,Linux基础命令-文本文件查看工具
- 机器学习及Matlab实现-从基础到实战
- Qt5 编译错误找不到头文件的解决方法
- App Store 中国区已支持人民币支付
- 谁是中国的制造业超级城市?中国城市制造业辐射力排名:深圳、苏州、东莞、上海、宁波位居前五 | 美通社头条...
- 【数学】方差/标准差的各种估计辨析
- 视频 | EMBOSS软件包安装和使用(序列提取、引物设计)
- 在Linux上安装TimesTen
- 最好的OCR识别软件:ABBYY FineReader中文绿色版
- 小技巧大用处!这些渠道让你的群发邮件更省心