首页
|
新闻
|
新品
|
文库
|
方案
|
视频
|
下载
|
商城
|
开发板
|
数据中心
|
座谈新版
|
培训
|
工具
|
博客
|
论坛
|
百科
|
GEC
|
活动
|
主题月
|
电子展
注册
登录
论坛
博客
搜索
帮助
导航
默认风格
uchome
discuz6
GreenM
»
模拟电路
» LabVIEW与C接口设计
返回列表
回复
发帖
发新话题
发布投票
发布悬赏
发布辩论
发布活动
发布视频
发布商品
LabVIEW与C接口设计
发短消息
加为好友
m1_ljp
当前离线
UID
824598
帖子
2144
精华
0
积分
1072
阅读权限
150
在线时间
350 小时
注册时间
2010-10-29
最后登录
2013-8-27
超级版主
UID
824598
1
#
打印
字体大小:
t
T
m1_ljp
发表于 2010-11-25 08:59
|
只看该作者
LabVIEW与C接口设计
LabVIEW
,
接口
,
设计
LabVIEW与C接口设计
介绍一种LabVIEW与C接口的设计方法。利用此接口方法,可以根据实际应用的要求,扩展LabVIEW的功能。
Wuxi 214028, China)
LabViEW提供支持VXI总线、GPIB总线、RS232串行总线接口硬件的驱动程序库,但它对物理内存的操作受到限制,且对硬件操作的实时性不好。但它提供了CIN(Code Interface Node)节点。用户可在LabVIEW中确定CIN节点的入口与出口参数个数类型,在C编译环境下,生成.lsb文件,然后在LabVIEW中对CIN节点选择Load cin object code,最后将该节点封装成一个VI,由主程序调用。采用CIN节点,也可充分利用Win95支持多线程的功能,提高运行效率,利用主线程监控各子线程,有效地避免因硬件通信错误而导致程序被挂起的现象,同时,可充分利用Win95有效的内存管理技术,提高数据处理及运算速度。
2.1VI设计
首先在块流图(Block Diagram)上放置一个CIN VI,然后通过CIN弹出菜单中的Add Parameter增加接线端子(Terminal),通过接线端子来标识CIN的输入和输出。接线端子通常有输入输出接线端子(InputOutput Terminal)和输出接线端子(OutputOnly Terminal),在缺省情况下,接线端子是输入输出接线端子,其左边是输入,而右边是输出。在生成的代码中,与输入输出接线端子对应的是一个参数,通过该参数,数据输入CIN,CIN可以使用该参数的值或修改参数的值能够由该参数返回;如果输入输出接线端子的右边没有使用,即只有输入,则CIN只能使用该参数的值而不能修改它。对于输出接线端子,它只有输出端,没有输入端。由LabVIEW在内存中设置空间保存CIN的返回值。在定义了CIN接线端子后,将设定的数据控制器(Control,连接输入)、数据指示器(Indicator,连接输出)与对应的接线端子用线(Wire,代表数据流)连接起来,这样将确定所生成代码中的参数类型。
上面的过程只是定义了CIN的内部接口,还必须定义VI的编程接口,即肖像/连接器,通过它才能在程序中调用设计好的VI。在肖像/连接器的设计中,尽量使所画的肖像能够表达出所设计的VI的功能,采用在肖像上标识该VI名称的方法。连接器则是标明肖像的输入输出属性,数据和信息通过连接器的端点在两个VI间传递。这样就设计好了一个VI,但要给它装入目标代码后才能执行。
2.2生成.c文件
在设计好CIN VI后,可用LabVIEW生成C语言格式的.c文件。下面是我们设计的StdCMD.VI所生成的StdCMD.c文件:
在所生成的文件中,自动包含了文件extcode.h,它是定义能够被CIN使用的基本数据类型和外部子程序的头文件。如果设计的CIN代码含有系统调用,还必须包含文件hosttype.h。当CIN代码执行时,LabVIEW调用CINRun函数,通过CINRun函数的参数传递VI的输入输出值。LabVIEW定义的程序返回值是MgErr数据类型,在执行完CIN代码后,LabVIEW能够检查返回值并确定代码执行是否有错误。
2.3用户代码设计
在CINRun函数体内编写用户代码是实现所设计的CIN VI功能的关键。在我们所设计的5个VI中,这部分代码的编写主要是利用设计好的驱动程序完成多机测控系统的控制任务,将驱动程序的接口函数封装在VI内,在用LabVIEW编制测试软件时,通过调用VI来实现对多机测控系统的控制操作。
2.4编译代码生成.lsb文件
在Windows95/98下,利用Visual C+ 5.0 IDE编译设计代码,具体操作过程如下:
(1)创建一个新的DLL项目。在Visual C++ 5.0 IDE环境中选择菜单命令File
New…..在弹出的对话框中New:域中选择Project Workspace项,按OK键。在接着弹出的对话框中Type:域中选择DynamicLink Library项,在Name:域中输入StdCMD(该项目的名称),在Platforms:域中选择Win32(表示将要生成的DLL是32位的),在Location:域中输入(或按Browser…键,选择)源代码文件所在的路径(注:编译过程中生成的中间文件和可执行代码也会产生在这个路径下),按Create…键完成DLL项目的创建。
(2)把CIN的目标文件和运行库添加到项目中。选择菜单Insert
Files into Project…。把文件…\StdCMD\StdCMD.c添加到项目中;文件把存放在子目录…\LABVIEW\Cintools\Win32下的文件cin.obj,labview.lib,lvsb.lib和lvsbmain.def添加到项目中。这些文件对于创建CIN节点都是必须的;把项目包含的头文件(.h文件)添加到项目中,这些文件必须在同一目录(文件夹)中。
(3)把生成节点的工具所在子目标添加到包含路径中。选择菜单命令
…,在弹出的对话框中,选中Settings For:域中的全部内容;选中C/C++标签,将其中的Category置为Preprocessor;在Additional include directories域中输入CIN节点工具所在的子目录…\LabVIEW\Cintools。
(4)设置校准为1Byte。选择菜单命令
…。在弹出的对话框中,选出Settings For:域中的全部内容;选中C++标签,将其中的Category置为Code Generations;从Struct member alignment域中选择1Byte。
(5)选用多线程run-time函数库。选择菜单命令
…,在弹出的对话框中,选出Settings For:域中的全部内容;选中C/C++标签,将其中的Category置为Code Generations;从Use runtime library域中选择Multithreaded。
(6)建立一个定制的生成命令来运行lvsbutil程序。选择菜单命令
…在弹出的对话框中,选中Settings For:域中的全部内容;选中Custom Build标签,在Build command(s):域中输入…\LabVIEW\Cintools\Win32\lvsbutil$(TargeName)-d$(WkspDir)\$(OutDir);在Output file(s):域中输入$(OutDir)$(TargetName).lsb。
(7)执行生成动态库命令。执行菜单命令BuildBuild StdCMD.Dll。编译连接正常的情况下,Visual C++编辑器会按照定制的要求在…\StdCMD\debug目录下生成StdCMD.lsb文件。
由于编译代码的过程比较烦琐,容易出错,因此我们设计了CIN模板应用向导(CinTemp AppWizard),并给出CinTemp.awx和CinTemp.pdb文件。将其添加到Visual C++ 5.0 IDE中,可以由用户方便地自动生成编译CIN代码的项目。
2.5装载CIN目标代码
装载CIN目标代码是将生成的.lsb文件装入VI的过程。这一过程将目标代码装入内存并与VI的前面板/块流图链接起来,保存VI后,即可在程序中调用该VI实现设定的功能。这一过程的操作是在LabVIEW环境中打开StdCMD.VI程序,将光标指到框图中的CIN节点按右键。选中弹出菜单中的命令,将StdCMD.lsb文件装载到CIN节点上。在使用过程中,也可修改CIN代码以扩充其功能,只需重新装入新的.lsb文件即可。
收藏
分享
评分
回复
引用
订阅
TOP
返回列表
电商论坛
Pine A64
资料下载
方案分享
FAQ
行业应用
消费电子
便携式设备
医疗电子
汽车电子
工业控制
热门技术
智能可穿戴
3D打印
智能家居
综合设计
示波器技术
存储器
电子制造
计算机和外设
软件开发
分立器件
传感器技术
无源元件
资料共享
PCB综合技术
综合技术交流
EDA
MCU 单片机技术
ST MCU
Freescale MCU
NXP MCU
新唐 MCU
MIPS
X86
ARM
PowerPC
DSP技术
嵌入式技术
FPGA/CPLD可编程逻辑
模拟电路
数字电路
富士通半导体FRAM 铁电存储器“免费样片”使用心得
电源与功率管理
LED技术
测试测量
通信技术
3G
无线技术
微波在线
综合交流区
职场驿站
活动专区
在线座谈交流区
紧缺人才培训课程交流区
意见和建议