VC++和基于LabWindowsCVI的DLL在测控技术中的应用

合集下载

基于LabWindows-CVI的激光跟踪测量系统校准软件设计

基于LabWindows-CVI的激光跟踪测量系统校准软件设计

基于LabWindows/CVI的激光跟踪测量系统校准软件设计自主研制的激光跟踪测量系统通过激光测距和精密测角实现对空间目标的坐标测量。

作为一个精密测角测距仪器,激光跟踪测量系统在出厂之前需要进行相应的校准,以获得仪器内部光学系统、机械结构、伺服系统的相关参数,并对仪器测量精度进行评估。

为了使仪器校准过程简捷有效,开发通用型的校准软件很有必要。

LabWindows/CVI 是由美国NI 公司推出的一种虚拟仪器软件开发工具,为熟悉C 语言的技术开发人员在测控领域建立计算机仪器系统-虚拟仪器,提供了一个理想的软件开发环境。

该软件的应用领域极其广泛,涵盖了军工、电讯、工业生产和航天等各种行业[1-2]。

本文应用虚拟仪器技术,为自主研制的激光跟踪测量系统开发了基于LabWindows/CVI 的校准软件。

1 系统组成与校准内容激光跟踪测量系统的硬件主要包括跟踪测量单元(包括跟踪头、支架等)、电控单元(包括电控箱、环境传感器等)、主控计算机和测量附件(包括角反射器、标准杆、磁性基座等),如图1 所示。

其中,跟踪头是激光跟踪测量系统的核心单元,其集激光测距仪(干涉测距与绝对测距)和光电经纬仪于一体,可同时实现测距、测角和跟踪功能。

激光跟踪测量系统校准的目的是对影响系统测距、测角精度的误差项进行辨识,以便进行软件修正。

按照系统内部参数周期内变化程度大小可将分为实验室校准和现场自校准。

其中实验室校准主要是对IFM 激光器、大气参数传感装置、测角光栅码盘进行校准;现场自校准主要是对Home 基准距离、几何误差、ADM 测距进行校准。

由于上述某些校准项目对实验环境要求较高,故校准软件中只涉及Home 基准距离、几何误差、ADM 测距、测角光栅码盘等项目的校准,另测角精度检查和系统精度检测。

《2024年基于LabWindows-CVI的便携式热车试验台测控系统设计与开发》范文

《2024年基于LabWindows-CVI的便携式热车试验台测控系统设计与开发》范文

《基于LabWindows-CVI的便携式热车试验台测控系统设计与开发》篇一基于LabWindows-CVI的便携式热车试验台测控系统设计与开发一、引言随着汽车工业的快速发展,热车试验作为汽车研发和质量控制的重要环节,其测控系统的设计与开发显得尤为重要。

LabWindows/CVI作为一种功能强大的软件开发工具,被广泛应用于各种测控系统的设计与开发中。

本文将介绍基于LabWindows/CVI的便携式热车试验台测控系统的设计与开发,以提高热车试验的准确性和效率。

二、系统需求分析1. 性能需求:系统需要具备高精度、高稳定性的测量与控制功能,以满足热车试验的需求。

2. 便携性需求:系统应具备轻便、易携带的特点,方便现场使用。

3. 用户界面需求:系统应提供友好的用户界面,方便用户操作与使用。

4. 数据处理与存储需求:系统应具备数据处理、分析与存储功能,以便于后续的数据分析与应用。

三、系统设计1. 硬件设计:系统硬件包括传感器、执行器、控制器等部分。

传感器用于采集热车试验过程中的各种数据,执行器用于控制试验过程,控制器则负责数据的处理与传输。

2. 软件设计:软件设计采用LabWindows/CVI开发平台,实现数据的采集、处理、显示、存储与控制等功能。

软件设计应遵循模块化、结构化的设计思想,便于后续的维护与升级。

四、系统实现1. 数据采集与处理:通过传感器采集热车试验过程中的各种数据,如温度、压力、转速等。

数据经过处理后,可实时显示在用户界面上。

2. 控制算法实现:根据试验需求,实现相应的控制算法,如PID控制、模糊控制等,以实现对试验过程的精确控制。

3. 用户界面设计:设计友好的用户界面,包括数据显示、控制按钮、报警提示等功能,方便用户操作与使用。

4. 数据存储与处理:将采集的数据进行存储,并提供数据处理与分析功能,以便于后续的数据应用。

五、系统测试与优化1. 系统测试:对系统进行全面的测试,包括硬件测试、软件测试、联调测试等,以确保系统的稳定性与可靠性。

LabWindows_CVI多线程技术在多功能显示器测试软件中的应用

LabWindows_CVI多线程技术在多功能显示器测试软件中的应用

LabWindows/CVI多线程技术在多功能显示器测试软件中的应用发布时间:2023-03-07T02:22:58.947Z 来源:《科学与技术》2022年21期作者:杨柳暄陈涛沈晓雪[导读] 多功能显示器测试软件模拟任务管理计算机与显示器进行422通讯,实时接收显示器发送的按键杨柳暄陈涛沈晓雪(苏州长风航空电子有限公司江苏苏州215151)[摘要]多功能显示器测试软件模拟任务管理计算机与显示器进行422通讯,实时接收显示器发送的按键信息,并且向显示器发送画面信息完成画面显示。

本文针对LabWindows/CVI的多线程机制进行了详细的介绍,并给出了其在多功能显示器测试中的应用。

测试结果表明,利用多线程技术能够更好地开发并行任务,加快系统的响应速度,提高执行效率。

关键词:多线程;多功能显示器测试;LabWindows/CVI;Application of LabWindows/CVI multi-threadtechnology in multi-function display test softwareYang Liuxuan Chen Tao Shen Xiaoxue(Suzhou Changfeng Avionics co.,LTD., Suzhou Jiangsu 215151,China)Abstract: The multi-function display test software simulates the task management computer to perform 422 communication with the display, receives the key information sent by the display in real time, and sends the screen information to the display to complete the screen display. This paper introduces the multi-thread mechanism of LabWindows/CVI in detail, and gives its application in the multi-function display test. The test results show that using multi-threading technology can better develop parallel tasks, speed up the response speed of the system, and improve execution efficiency.Key words: Multithread;Multifunction Display Test;LabWindows/CVI;1.引言在多功能显示器测试过程中,需要设计相应的测试软件。

DLL在LabWindows/CVI的虚拟仪器中的应用

DLL在LabWindows/CVI的虚拟仪器中的应用

DLL在LabWindows/CVI的虚拟仪器中的应用
耿娟;原亮;吴彩华
【期刊名称】《微计算机信息》
【年(卷),期】2006(000)08S
【摘要】介绍了动态链接库的概念,并根据一个具体实现的TMR虚拟仪器系统来对VC编写动态链接库和它与LabWindows/CVI的集成方法加以说明。

【总页数】2页(P115-116)
【作者】耿娟;原亮;吴彩华
【作者单位】石家庄军械工程学院计算机工程系,050003
【正文语种】中文
【中图分类】TP206
【相关文献】
1.多线程技术在虚拟仪器开发软件LabWindows/CVI中的实现 [J], 杨东升;王高峰
bwindows/CVI虚拟仪器软件在测试领域中的应用 [J], 仇志平;李树军
3.DLL在LabWindows/CVI的虚拟仪器中的应用 [J], 耿娟;原亮;吴彩华
bWindows/CVI在开发测试软件中的应用 [J], 徐春梅; 牛斌
bWindows/CVI中的多线程及在液压伺服控制系统中的应用 [J], 吴志刚;刘福华;李新民
因版权原因,仅展示原文概要,查看原文内容请购买。

LABWINDOWS

LABWINDOWS
1远程控制的框架结构
本文采用的是客户端/服务器的网络模式,如图1所示.客户端放置于远端,主要提出控制申请、递交控制参数和观测分析实验结果等.服务器(本地机)放置于最接近现场或对象的地方,实现对现场或对象的数据采集与控制、返回现场的实时录像等.服务器的另一个重要任务是,认证来自客户端的控制申请,根据具体控制项目的不同,服务端可采用灵活的控制方式,有的在计算机PCI或ISA槽插上数据采集卡对对象实行UDC测控C3),有的则通过串_口通讯(如RS232,RS485)操纵专门的仪器设备或微控制器对对象实行监督型测控。2关键技术的研究和开发
LabWindows/CVl实现远程虚拟测控技术
LabWindows/CVI为美国NI公司的虚拟测控软件,具有超强的实时数据采集和处理能力,以及丰富的图形界面GUI设计功能.它主要的直接支持硬件设备为NI公司的AD/DA板卡和远程的FieldPaints等产品,价格昂贵.这些硬件设备对工业控制中常用的设备,如PLC、变频器及自我开发的微控制ห้องสมุดไป่ตู้、采集器等设备缺乏有效的兼容,无法满足国内工业控制仪表和测试的现实需要,故其优越的性能还没有在这一领域得到充分发挥.本文通过实践,研讨了基于LabWindows/CVl实现一般设备网络远程虚拟测控方法.从系统性和实用性的角度,较好解决了CVI应用存在问题,丰富了虚拟测控的形式和内容.

《2024年基于LabWindows-CVI的便携式热车试验台测控系统设计与开发》范文

《2024年基于LabWindows-CVI的便携式热车试验台测控系统设计与开发》范文

《基于LabWindows-CVI的便携式热车试验台测控系统设计与开发》篇一基于LabWindows-CVI的便携式热车试验台测控系统设计与开发一、引言随着汽车工业的快速发展,汽车零部件的测试与研发变得越来越重要。

其中,热车试验是汽车零部件研发过程中的重要环节。

为了满足高效、精确的测试需求,本文提出了一种基于LabWindows/CVI的便携式热车试验台测控系统设计与开发方案。

该系统可实现对汽车零部件在高温环境下的性能测试,具有便携、高效、精确的特点。

二、系统设计1. 硬件设计本系统硬件部分主要包括试验台主体、传感器、数据采集卡等。

试验台主体采用高强度铝合金材料,具有轻便、耐用的特点。

传感器部分包括温度传感器、压力传感器等,用于实时监测汽车零部件的工作状态。

数据采集卡采用高性能芯片,可实现高速、高精度的数据采集与传输。

2. 软件设计软件部分采用LabWindows/CVI开发环境,通过编写程序实现对试验台的控制与数据的处理。

主要功能包括数据采集、数据处理、结果输出等。

在数据采集方面,通过与数据采集卡通信,实时获取传感器数据。

在数据处理方面,通过编写算法对数据进行处理与分析,得出汽车零部件的性能参数。

在结果输出方面,可将测试结果以图表或报告的形式输出,方便用户查看与分析。

三、系统功能1. 试验台控制本系统可实现对试验台的控制,包括加热、冷却、风速控制等。

通过编写程序,可实现自动控制,提高测试效率。

2. 数据采集与处理本系统可实时采集传感器数据,通过编写算法对数据进行处理与分析,得出汽车零部件的性能参数。

同时,可对数据进行存储与查询,方便用户对历史数据进行查看与分析。

3. 结果输出本系统可将测试结果以图表或报告的形式输出,方便用户查看与分析。

同时,可通过USB接口将测试结果导出至计算机或其他设备中。

四、系统实现1. 编程语言与开发环境本系统采用C语言进行编程,使用LabWindows/CVI开发环境进行开发。

LabWindows/CVI在某测试系统软件开发中的应用技术

LabWindows/CVI在某测试系统软件开发中的应用技术
( o p tr ntu , otw s r o t h i l nvri , ia 0 2 C ia C m ue s tt N r et nPl e nc i sy X’l7 7 , hn) I ie h e yc aU e t l1 0
Ab t a t A ts y tm sn i u lisr me t e h oo y i rs ne . h to f o s u t g a t s s se b s d o i u l sr c : e ts s e u ig vr a n tu n c n lg sp e e td T e meh d o n t ci e t y t m a e n vr a t t c r n t
isr me ttc n l ge r m t e h r wae s u t r n ot a e s s m s ito u e . h t o s o e d ie e in t e r a・ nt u n e h oo i sfo h a d r t cu e a d s f r y t i n r d c d T e me h d ft r rd sg , h e l r w e h v
理, 与采集到 的试验数据共 同构成产 品的试验结果 。
程技术 中建立 检测 系统 、 自动测试环境 、 数据采集 系统等首选 的
软件开发工具 。
笔者重点讨论 了 L b n o sC I aWidw/ V 环境 下驱 动程序 开发方 法、 测试数据的实时处理技 术及事 后数据处理 中曲线 的无极 缩
得 Lb n o sC I自身功能更加强 大 , aWi w/ V d 应用 更加 方便 , 成为 工
模 拟量信号、 离散 量信 号 、2 4 9信 号、 53 15 B信号及 R 2 2信号 S3 的测试 任务 ; 信号调理模块 主要完成 对对输 入的信号进 行放大 缩小 、 线性化 、 滤波 、 同步采样保 持 、 隔离 、 消除静态信号 、 扩展等 处理等 ; 试验后 , 试验控制计算机可 以通过局域 网收集仿真计算 机、 设备计算机及 控制 台计算 机 的试验 数据 , 行综 合分 析处 进

基于LabWindowsCVI技术的引信自动测试系统设计

基于LabWindowsCVI技术的引信自动测试系统设计

统能根据引信需要检测的参数和功能, 环境信息的各种信号 ;
图1 引信自动测试系统组成框图
图2 引信专用测试台组成框图
www.ecnchina.com
2006.5
85
应 用 指 南
F i e l d Ap p l i c a t i o n s
央处理器,负责控制和调度专用测试 设备中其他各部分的协调运作;CPLD 实现逻辑控制, 在DSP命令控制下完成 引信控制和状态监测等任务;通讯接 口单元负责与主控计算机交换控制命 令和测试数据;存储器模块负责保存 监测过程中的重要数据;开关阵列负 责在引信接口各引脚对地电阻测量状 态和其他功能测试状态之间切换引信 引脚, 保证两种测试的正常实现 ; 在引 信测试过程中出现工作异常现象时, 可通过异常断电电路将一次电源电压 断掉, 以保证引信安全 ; 电压采集电路 和数据采集电路分别对引信各种指令 信号衰减信息的目标回波信号从模拟 器输出端输出。
这些设备构成了引信自动测试系 统的硬件部分, 在系统软件的控制下, 各设备协调工作,共同完成引信综合 测试的任务。
系统软件设计
如今市场上可选择的软件开发平 台比较多,如 V E E ,L a b V I E W , LabWindows/CVI, Visual C 等。 通过分 析和比较, 我们选择NI公司开发的、 面 向仪器的交互式 C 语言软件平台
应 用 指 南
LabWindows/CVI 作为软面板开发工 具。 LabWindows/CVI 的编程方式简单 直观, 能将功能强大、 使用灵活的C 语 言平台与用于数据获取、分析和显示 的测控专业工具有机地结合起来,它 的集成开发平台、 交互式编程方法、 功 能面板和丰富的库函数大大增强了 C 语言的功能, 为熟悉C语言的开发人员 建立检测系统、 自动测量环境、 数据采 集系统、过程监控系统等提供了一个 理想的软件开发环境。 本系统的设计中采用了一个自动 测试系统通用软件框架,如图 5 所示。 该通用软件框架的基本思想是利用数 据库技术使测试程序与测试流程相互 独立。主程序根据测试界面命令从测 试流程库中读取测试流程并执行,通 过仪器接口获得测试结果后保存到测 试结果库中, 以备查询。 按照该软件框架进行的测试系统 软件可以分为两部分:一部分是用户 界面, 这部分是按用户要求, 根据测试 对象编写的,主要是完成人机对话和 显示测试结果;另一部分是测试程序, 完成对测试单元的操作,并取得测试 结果。 虽然对于不同的测试任务, 测试 程序所执行的功能不同,但所有测试 任务又都有一些共同之处。可以这样 认为,每一个测试任务都分为若干个

LabWindows/CVI在温控系统中的应用

LabWindows/CVI在温控系统中的应用

4 在 异 步 定 时 器 回 调 函数 A y c i r B 中发 出温 度 采 集 ) s n TmeC 命令 , 实现 2 以 s间 隔实 时 采 集 。
3 曲线 采集 和 分 析 利 用 L b id ws CVl 供 的 gr h控 件 和 sr c a aWno / 提 ap ti h  ̄控 p
Ab ta t s rc
T s hi pap br f itodu es sn te ab ido / s t r t d i t m p atr co tol y t an d c ies er i l n r ey c u ig h L W n ws CVl of wa e o esgn e er u e n r s sem, d es rb
pa e, or r St age a r serf n i s. nd tan f u ct on Ke wors:a y d L bW ido / n ws CVl , lct n & An y e. r al n tu e t Col i e o als Viu Isr m n t
te s a y ch o ou i h u e of s n r n s tmerf r e —t t m p a u e at a o r al i me e ert r d a cqusiona t i t ,nd empert r cuve oft e e or an y e.o — i aue r h r c d, alz c m
针 对 温 控 系 统 的 控制 方法 多种 多 样 , 如传 统 的 PD控 制 、 糊控 I 模
制 、 控 制 等 ,但 其 各 种 控 制 效 果 最 终 都 要 靠 分 析 和 比较 控 温 AI 曲线 来 加 以 确认 。本 文 采 用 虚 拟 仪 器 软 件 L b n o s C l a Wi w / V 设 d

通过动态链接库实现VC和LabWindows/CVI的混合编程

通过动态链接库实现VC和LabWindows/CVI的混合编程

通过动态链接库实现VC和LabWindows/CVI的混合编程宁娅姗【期刊名称】《重庆第二师范学院学报》【年(卷),期】2011(024)006【摘要】The interface editing function of LabWindows/CVI is very powerful, but the hardware-control is inefficient. Howev- er, Visual c++, which has the function and feature of editing language and advanced language, can control hardware directly. Therefore, it is convenient to edit and the efficiency is high. Using vc++ to write a dynamic link library, which contains a hardware control function, and controling action through calling the DLL function in the LabWindows/CVI program, the user can operate the instruments better and faster.%由于LabWindows/CVI有强大的界面编辑功能,但控制硬件效率较低。

而VisualC++同时具有汇编语言和高级语言的功能和特点,能够直接控制硬件,不仅编写方便,且执行效率高。

使用VC ++编写一个动态链接库,库中包含有关对硬件控制的函数,然后在hbWindows /CVI程序中通过调用动态链接库中的函数来完成控制行为,使两个软件的优势很好地结合起来,使用户能更好更快地操作仪器。

【总页数】3页(P76-78)【作者】宁娅姗【作者单位】电子科技大学自动化学院,四川成都611731【正文语种】中文【中图分类】TP31【相关文献】bWindows/CVI和Matlab的混合编程及实现 [J], 杨帮华;袁玲;张永怀;郑晓明bWindows/CVI调用动态链接库与PLC实现以太网通信 [J], 孔令刚;范多旺;夏荣斌3.基于LabWindows/CVI动态链接库的VC接口实现 [J], 刘立月;谢昕;刘觉夫4.基于LabWindows/CVI动态链接库的VC接口实现 [J], 刘立月;谢昕;刘觉夫5.使用动态链接库技术实现LabWindows/CVI中Word报表生成功能 [J], 李炜怿;成洋;韩征因版权原因,仅展示原文概要,查看原文内容请购买。

通过动态链接库实现VC和LabWindows_CVI的混合编程

通过动态链接库实现VC和LabWindows_CVI的混合编程

第 24 卷 第 6 期 2011 年 11 月重 庆 教 育 学 院 学 报Journa l of Chongqing Education CollegeVol.24 No.6 November ,2011通过动态链接库实现 和 VC 的混合编程LabWindows / CVI宁娅姗(电子科技大学 自动化学院, 四川成都 611731)摘要:由于 L a bW i ndows / C V I 有强大的界面编辑功能,但控制硬件效率较低。

而 V i sua l C ++同时具有汇编语言 和高级语言的功能和特点,能够直接控制硬件,不仅编写方便,且执行效率高。

使用 V C ++编写一个动态链接库,库中 包含有关对硬件控制的函数, 然后在 L a bW i ndows / C V I 程序中通过调用动态链接库中的函数来完成控制行为,使 两个软件的优势很好地结合起来,使用户能更好更快地操作仪器。

关键词:L ab W i ndows / C V I ,动态链接库,V i sua l C ++文章编号:1008-6390(2011)06-0076-03 中图分类号:TP31 文献标识码:A1.1 动态链接库的使用动态链接库(Dynamic Link Lib rary , 简称 DLL )0 引言Lab Wind ows / CVI 是一款具有可视化、 交互式是基于 Windows 程序设计的重要部分, DLL 是一 个包含了若干函数的可执行模块, 其实质是应用程 序在执行期间才被链接的函数集。

的开发工具, 标准 Windows 风格的操作界面的软 件, 包含大部分基于 Windows 风格软件技术, 强大的界面设计功能和丰富的控件种类;程序自动生成 的能力,减轻软件开发过程中代码编写的工作量。

Visual C ++是 Windows 环境下最主要的应用开 发系统。

它不仅是 C ++语言的集成开发环境,而且与 图 1.1 动态库文件说明Win32 紧密相连。

LabWindows_CVI在电机测控系统中的应用

LabWindows_CVI在电机测控系统中的应用

SetCTSMode (port, 0); / 觹 设置硬件握手 觹 /
SetComTime (port, 5.0); / 觹 设置等待数据时间 觹 / 妖

如果初始化串行端口成功,则表示与总线的通讯建立,再进
行与工控模块的通讯状态检测。 为此编制函数 testmodule 来实
现这项检测功能。 列出部分原程序如下:
要实现计算机与工控模块间的数据通讯, 首先要打开通讯
接口并对其进行初始化, 即要先完成对串行口打开及初始化的
工作。 这些初始化包括数据波特率设置、数据字节长度、奇偶校
验、串口输入 / 输出数据队列的长度、硬件握手方式、数据等待时
间等。 函数的源程序如下:
void Initial(int port) / 觹 初始化通讯端口 觹 /
一 个 完 整 的 工 程 文 件 觹project。 使 用 该 应 用 软 件 的 过 程 就 是 调
用并运行已建立的工程文件VI 应用软件开发过程中一个完整的工程
文件至少包括以下三部分:用户界面资源文件(.uir 文件);用户界
面资源中的所有资源定义的头文件(.h 文件);包含主程序与用户
参考文献 [1]LabWindows / CVI User Manual.National Instruments,1998 [2]LabWindows / CVI Getting Started with LabWindows / CVI.Na-
tional Instruments,1998 [3]孙传友.测控系统原理与设计 [M].北 京 :北 京 航 空 航 天 大 学 出 版 社 ,
64
LabWindows / CVI 在电机测控系统中的应用
LabWindows / CVI 在电机测控系统中的应用

《2024年基于LabWindows-CVI的便携式热车试验台测控系统设计与开发》范文

《2024年基于LabWindows-CVI的便携式热车试验台测控系统设计与开发》范文

《基于LabWindows-CVI的便携式热车试验台测控系统设计与开发》篇一基于LabWindows-CVI的便携式热车试验台测控系统设计与开发一、引言随着汽车行业的迅猛发展,汽车发动机热车试验的准确性、稳定性和便携性成为重要关注点。

本设计主要探讨基于LabWindows/CVI(一款图形化开发平台)的便携式热车试验台测控系统的设计与开发,该系统具备智能化控制、精确的数据测量与记录以及灵活的携带特性,适用于汽车零部件制造企业以及各类实验室使用。

二、系统设计概述(一)系统需求分析设计一套针对热车试验台的测控系统,需求包含精确控制测试条件、高效收集实验数据、即时进行结果反馈及报警等功能。

系统需要支持数据的自动存储、实时监测与反馈控制。

同时,要满足设备的便携性,能够满足在各类场地及实验室中的快速安装和运行。

(二)设计原则系统设计应遵循以下原则:稳定可靠、功能完善、操作简便、可扩展性强和高度集成。

同时,应注重系统的实时性、可维护性和可移植性。

三、硬件设计(一)硬件组成硬件部分主要包括传感器模块、控制模块、执行模块和电源模块等。

传感器模块负责实时监测发动机的各项参数;控制模块是整个系统的核心,负责处理数据并控制执行模块;执行模块则负责根据控制模块的指令执行操作;电源模块为整个系统提供稳定的电力支持。

(二)硬件接口设计系统采用模块化设计,各模块之间通过标准接口进行连接,方便后期的维护和升级。

此外,为确保数据传输的稳定性和实时性,所有传感器均采用高速数据线进行连接。

四、软件设计(一)软件架构设计软件采用LabWindows/CVI作为开发平台,使用其强大的图形化界面开发功能,使操作更加直观便捷。

软件架构分为用户界面层、数据处理层和控制执行层。

用户界面层负责与用户进行交互;数据处理层负责数据的处理和存储;控制执行层则负责根据处理后的数据发送控制指令。

(二)软件开发流程软件开发流程包括需求分析、系统设计、编码实现、测试与调试等环节。

@+labwindows+cvi测试技术及工程应用

@+labwindows+cvi测试技术及工程应用

@+labwindows+cvi测试技术及工程应用第一篇基础篇本篇主要介绍虚拟仪器的基本概念、虚拟仪器开发语言LabWindows/CVI的编程环境和程序结构以及基本控件的使用方法,并通过讲解简单实例,使初学者可以迅速掌握利用LabWindows/ CVI开发平台构建一般应用程序的基本思想、方法和步骤.本书使用的是LabWindows/CVI 8.0版本。

奢侈品保养虚拟仪器虚拟仪器(virtual instrument,简称“vi")是计算机技术、仪器技术和通信技术相结合的产物奢侈品维护.虚拟仪器的目的是利用计算机强大资源使硬件技术软件化,分立元件模块化,降低程序开发的复杂程度,增强系统的功能和灵活性。

奢侈品清洗1.1.1虚拟仪器的基本概念虚拟仪器基于计算机的软硬件测试平台,它可代替传统的测量仪器,如示波器、逻辑分析仪、信号发生器、频谱分析仪等:可集成自动控制、工业控制系统:可自由构建专有仪器系统。

它由计算机、奢侈品保养应用软件和仪器硬件组成。

虚拟仪器系统是将仪器硬件搭载到计算机平台,并辅以相应软件而构成的.奢侈品护理加盟虚拟仪器通过软件将计算机硬件资源与仪器硬件有机地融合为一体,从而把计算机强大的计算处理能力和仪器硬件的测量、控制能力结合在一起,大大降低了仪器硬件的成本,并通过软件实现对数据的显示、奢侈品维护存储以及分析处理功能。

从发展史看,电子测量仪器经历了由模拟仪器、智能仪器到虚拟仪器三个阶段。

奢侈品清洗如果在计算机中插入数据采集卡,利用计算机高速计算能力完成仪器信号的分析与处理、结果的输出,就可以把传统仪器的所有功能模块集成在一台计算机上,软件成为仪器系统的关键.在此基础上,美国国家仪器公司(National Instrument,简称“NI")提出了“软件就是仪器”的观点。

奢侈品保养奢侈品护理加盟虚拟仪器技术的优势在于可由用户自己定义通用仪器系统,且功能灵活,很容易构建,所以应用面极为广泛,尤其在科研、开发、.测量、检测、计量、控制等领域,更是不可多得的优秀开发工具。

基于LabWindows/CVI的一种仪器控制的实现方法

基于LabWindows/CVI的一种仪器控制的实现方法

和应 用上都 很 成 熟 , 并 且 硬件 价 格 低 廉 。 目前 国 内 外 的程 控 仪 器 大 都 带 有 R S一2 3 2串行 通 讯 接 口。
R S一 2 3 2串 口又 是 计 算 机 上 最 常 见 的 一 种 总 线 形 式, 因此 R S一2 3 2串行 通 讯 接 口在测 试 和 仪器 控 制 的过程 中得 到 了广泛 的应 用 。
关键 词 : 仪 器控 制 ; R S一 2 3 2串 口 ; 二 次仪 表 ; 通 信
中图分类号 : T N 9 1 文献标志码 : A 文 章编 号 : 1 0 0 8 . 8 6 5 2 ( 2 0 1 3 ) 0 2 - 0 7 9 - 4
An App r o a c h o f I mp l e me nt i ng Co nt r o l Appa r a t u s Ba s e d o n La b W i n do ws /CV l
Zh e n g Yu a n y u a n, Ga o Ya n f a ng, Da n g Ya n n a
( X I ’ a n E l e c t r o n i c E n g i n e e r i n g R e s e a r c h I n s t i t u t e , X I ’ a n 7 1 0 1 0 0 )
Abs t r a c t :An a pp r o a c h o f c o n t r o l a p p a r a t u s b a s e d o n La b Wi n d o ws /CVI e n v i r o n me n t i s s t u d i e d . RS 一2 3 2 s e r i a l

基于Labwindows CVI的仪器测试系统

基于Labwindows CVI的仪器测试系统
【 摘 要】 为降低 测 井仪 器的研 发和 测试 成本 , 实现仪 器 的控制 和数据 采集 , 该设 计是 基 于 L a b wi n d O W S / C V I 的数据 采 集 系统 。通 过
L a b wi n d O W s / C V I 的交互式 C语言开发平 台. 设计 了上位机的测试界面, 实现上位机与仪器 间的通讯控制 和数据采 集 实验结果表明 . 该界面完 成 采 集仪 器数 据 的 功 能 . 很 好 地 满足 了仪 器调 试 的 需 要 . 可 广 泛 应 用 于测 井领 域 。
a c qu i s i t i o n . Ba s e d o n t h e i n t e r a c t i v e C l a n g u a g e d e v e l o pme n t p l a t f o r m o f La b Wi n d o ws / C VI . t h e t e s t i n t e r f a c e o f u pp e r c o mp u t e r i s d e s i g n e d . wh i c h c a n r e a l i z e t he c o mmu n i c a t i o n c o n t r o l a n d d a t a a c q u i s i t i o n b e t we e n P C a n d i n s t r u me n t . T h e e x p e r i me n t a l r e s u l t s s h o w t h a t t h e i n t e r f a c e c a n a c h i e v e t h e f u n c t i o n o f d a t a a c q u i s i t i o n , a n d i t c a n me e t t h e n e e d o f i n s t r ume n t d e b u g g i n g .

基于LabWindowsCVI的摄像头控制技术--实现屏幕截图、录像功能

基于LabWindowsCVI的摄像头控制技术--实现屏幕截图、录像功能

基于LabWindowsCVI的摄像头控制技术--实现屏幕截图、录像功能 我们都知道,LabWindows/CVI的强⼤功能实际上不只是在测控领域,在其它⽅⾯,也显⽰着⽆与伦⽐的优势。

你的电脑有没有摄像头?看到别⼈⽤QQ玩视屏你会不会去想怎么实现的?⼀般来说,所有的摄像头都会包括⼀个AVICAP32.DLL动态链接库⽂件,⽽动态库⾥⾯必有capCreateCaptureWindow和capCreateCaptureWindowA这两个函数,我们就是利⽤这些函数实现图像采集的! 这⾥介绍使⽤AVICAP32.DLL就可轻松的实现对摄像头编程,如果再加上你的⽹络编程⽔平,实现⼀个视屏聊天就不成什么问题了。

如果电脑没有摄像头,但⼜想看看程序的效果,可以么?呵呵,当然可以,找个虚拟摄像头就可以搞定了,⼤家可以试试“SoftCam”这个软件,它是⼀个名副其实的软件摄像机,能模拟成为“真实的”摄像机,提醒⼀下各位,⼤家可不要⽤这个东东⽤在QQ,MSN等聊天软件上欺骗MM或GG啊。

本例能实现图⽚的保存,浏览以及录像功能,在界⾯上都能显⽰出来,⼤家仔细瞧瞧吧! 界⾯如下: 图中的景像就是我的实验室,情况有点糟糕,哈哈,还能凑合着过! 代码如下:#include "windows.h"#include "avicap32.h"#include#include#include "cam.h"//设置所需要摄像头的常量#define WM_CAP_START WM_USER //开始#define WM_CAP_STOP WM_CAP_START + 68 //停⽌#define WM_CAP_DRIVER_CONNECT WM_CAP_START + 10 //连接#define WM_CAP_DRIVER_DISCONNECT WM_CAP_START + 11 //断开#define WM_CAP_SAVEDIB WM_CAP_START + 25#define WM_CAP_GRAB_FRAME WM_CAP_START + 60#define WM_CAP_SEQUENCE WM_CAP_START + 62#define WM_CAP_FILE_SET_CAPTURE_FILEA WM_CAP_START + 20 //保存⾄⽂件#define WM_CAP_SEQUENCE_NOFILE WM_CAP_START + 63#define WM_CAP_SET_OVERLAY WM_CAP_START + 51#define WM_CAP_SET_PREVIEW WM_CAP_START + 50#define WM_CAP_SET_CALLBACK_VIDEOSTREAM WM_CAP_START +6#define WM_CAP_SET_CALLBACK_ERROR WM_CAP_START +2#define WM_CAP_SET_CALLBACK_STATUSA WM_CAP_START +3#define WM_CAP_SET_CALLBACK_FRAME WM_CAP_START +5#define WM_CAP_SET_SCALE WM_CAP_START+ 53#define WM_CAP_SET_PREVIEWRATE WM_CAP_START+ 52#define WM_CAP_COPYDIB WM_CAP_START + 30 //复制图⽚//定义⾯板句柄static int handle;//定义摄像头句柄static int result;static int panelHandle;int main (int argc, char *argv[]){if (InitCVIRTE (0, argv, 0) == 0)return -1; /* out of memory */if ((panelHandle = LoadPanel (0, "cam.uir", PANEL)) < 0)return -1;DiscardPanel (panelHandle);return 0;}//退出按钮int CVICALLBACK QuitCallback (int panel, int control, int event,void *callbackData, int eventData1, int eventData2){switch (event){case EVENT_COMMIT:QuitUserInterface (0);break;}return 0;}//开始按钮int CVICALLBACK startCB (int panel, int control, int event,void *callbackData, int eventData1, int eventData2){int width;int height;int top;int left;switch (event){case EVENT_COMMIT://获得⾯板句柄GetPanelAttribute (panelHandle, ATTR_SYSTEM_WINDOW_HANDLE, &handle);//获得屏幕中图像要显⽰的位置GetCtrlAttribute (panelHandle, PANEL_CANVAS_TV, ATTR_LEFT, &left);GetCtrlAttribute (panelHandle, PANEL_CANVAS_TV, ATTR_TOP, &top);GetCtrlAttribute (panelHandle, PANEL_CANVAS_TV, ATTR_HEIGHT, &height);GetCtrlAttribute (panelHandle, PANEL_CANVAS_TV, ATTR_WIDTH, &width);//打开摄像头result = capCreateCaptureWindowA("",WS_CHILD | WS_VISIBLE ,left,top,width,height,handle,0); //设置摄像头函数SendMessage((HWND)result, WM_CAP_SET_CALLBACK_VIDEOSTREAM, 0, 0);SendMessage((HWND)result, WM_CAP_SET_CALLBACK_ERROR, 0, 0);SendMessage((HWND)result, WM_CAP_SET_CALLBACK_STATUSA, 0, 0);SendMessage((HWND)result, WM_CAP_DRIVER_CONNECT, 0, 0);SendMessage((HWND)result, WM_CAP_SET_SCALE, 1, 0);SendMessage((HWND)result, WM_CAP_SET_PREVIEWRATE, 66, 0);SendMessage((HWND)result, WM_CAP_SET_OVERLAY, 1, 0);SendMessage((HWND)result, WM_CAP_SET_PREVIEW, 1, 0);break;}return 0;}//停⽌按钮int CVICALLBACK stopCB (int panel, int control, int event,void *callbackData, int eventData1, int eventData2){switch (event){case EVENT_COMMIT:if (result != 0)SendMessage((HWND)result, WM_CAP_DRIVER_DISCONNECT, 0, 0);}break;}return 0;}//保存BMP按钮int CVICALLBACK recordbmp (int panel, int control, int event,void *callbackData, int eventData1, int eventData2){// int available;//定义BMP位图ID号int bitmapID;//定义⽂件存储路径char path[MAX_PATHNAME_LEN];//定义静态变量,设置循环次数static int i;switch (event){case EVENT_COMMIT:/* 此代码为将图⽚存⼊剪切板if (result != 0){SendMessage((HWND)result, WM_CAP_GRAB_FRAME, 0, 0);SendMessage((HWND)result, WM_CAP_COPYDIB, 0, 0);ClipboardGetBitmap (&bitmapID, &available);if (available ==1){CanvasClear (panelHandle, PANEL_CANVAS, VAL_ENTIRE_OBJECT);CanvasDrawBitmap (panelHandle, PANEL_CANVAS, bitmapID, VAL_ENTIRE_OBJECT, VAL_ENTIRE_OBJECT); }DiscardBitmap (bitmapID);}*///保存位图if (FileSelectPopup ("", "*.bmp", "*.bmp", "保存", VAL_SAVE_BUTTON, 0, 0, 1, 1, path) > 0){SendMessage((HWND)result,WM_CAP_SAVEDIB,0,(LPARAM)path);//获得BMP位图IDGetBitmapFromFile (path, &bitmapID);switch (i){//设置三个位图浏览器case 0:CanvasDrawBitmap (panelHandle, PANEL_CANVAS_SNAP0, bitmapID, VAL_ENTIRE_OBJECT,VAL_ENTIRE_OBJECT);break;case 1:CanvasDrawBitmap (panelHandle, PANEL_CANVAS_SNAP1, bitmapID, VAL_ENTIRE_OBJECT,VAL_ENTIRE_OBJECT);break;case 2:CanvasDrawBitmap (panelHandle, PANEL_CANVAS_SNAP2, bitmapID, VAL_ENTIRE_OBJECT,VAL_ENTIRE_OBJECT);break;//删除BMP位图IDDiscardBitmap (bitmapID);//循环累加,共三次,三次之后回零i++;if (i == 3){i = 0;}}break;}return 0;}//开始录像按钮int CVICALLBACK recordstream (int panel, int control, int event,void *callbackData, int eventData1, int eventData2){char path[MAX_PATHNAME_LEN];switch (event){case EVENT_COMMIT://保存录像if (FileSelectPopup ("", "*.avi", "*.avi", "保存", VAL_SAVE_BUTTON, 0, 0, 1, 1, path) > 0){SendMessage((HWND)result,WM_CAP_FILE_SET_CAPTURE_FILEA,0,(LPARAM)path); SendMessage((HWND)result, WM_CAP_SEQUENCE, 0, 0);}break;}return 0;}//停⽌录像按钮int CVICALLBACK stopstream (int panel, int control, int event,void *callbackData, int eventData1, int eventData2){switch (event){case EVENT_COMMIT:SendMessage((HWND)result, WM_CAP_STOP, 0, 0);break;}return 0;}//显⽰制式设置int CVICALLBACK method (int panel, int control, int event,void *callbackData, int eventData1, int eventData2){int kind;int width;int height;int top;int left;switch (event){case EVENT_COMMIT://获得制式种类GetCtrlVal (panelHandle, PANEL_RING, &kind);case 0://160*120制式SetCtrlAttribute (panelHandle, PANEL_CANVAS_TV, ATTR_WIDTH, 160);SetCtrlAttribute (panelHandle, PANEL_CANVAS_TV, ATTR_HEIGHT, 120);break;case 1://1176*144制式SetCtrlAttribute (panelHandle, PANEL_CANVAS_TV, ATTR_WIDTH, 176);SetCtrlAttribute (panelHandle, PANEL_CANVAS_TV, ATTR_HEIGHT, 144);break;case 2://320*240制式SetCtrlAttribute (panelHandle, PANEL_CANVAS_TV, ATTR_WIDTH, 320);SetCtrlAttribute (panelHandle, PANEL_CANVAS_TV, ATTR_HEIGHT, 240);break;case 3://352*288制式SetCtrlAttribute (panelHandle, PANEL_CANVAS_TV, ATTR_WIDTH, 352);SetCtrlAttribute (panelHandle, PANEL_CANVAS_TV, ATTR_HEIGHT, 288);break;case 4://1默认制式SetCtrlAttribute (panelHandle, PANEL_CANVAS_TV, ATTR_WIDTH, 592);SetCtrlAttribute (panelHandle, PANEL_CANVAS_TV, ATTR_HEIGHT, 333);break;}//获得屏幕中图像要显⽰的位置GetCtrlAttribute (panelHandle, PANEL_CANVAS_TV, ATTR_LEFT, &left);GetCtrlAttribute (panelHandle, PANEL_CANVAS_TV, ATTR_TOP, &top);GetCtrlAttribute (panelHandle, PANEL_CANVAS_TV, ATTR_HEIGHT, &height);GetCtrlAttribute (panelHandle, PANEL_CANVAS_TV, ATTR_WIDTH, &width);//重新定位SetCtrlAttribute (panelHandle, PANEL_CANVAS_TV, ATTR_TOP, (333-height)/2+55); SetCtrlAttribute (panelHandle, PANEL_CANVAS_TV, ATTR_LEFT, (592-width)/2+53); //断开连接SendMessage((HWND)result, WM_CAP_DRIVER_DISCONNECT, 0, 0);//调⽤开始按钮事件startCB(panel, PANEL_CANVAS_TV, EVENT_COMMIT, NULL, 0, 0);break;}return 0;}。

LabWindows/CVI多线程技术的应用研究

LabWindows/CVI多线程技术的应用研究

LabWindows/CVI多线程技术的应用研究单体强;陈雷;张万发【摘要】分析了线程与进程的关系,研究了LabWindoWs/CVI多线程技术运行机制及其数据保护机制,对利用异步定时器实现的多线程软件与传统单线程软件进行效能差异分析。

在某武器系统测控软件的开发中采用了LabWindows/CVI多线程技术,实现了系统的安全性和实时性设计。

研究表明多线程技术能够更好地执行并行性任务.提高测控系统性能,在避免阻塞,减少运行时间,增强系统可靠性等方面具有显著优势。

%The relation between threading and course is analyzed, the circulate mechanism of the muhithreading technology based on LabWindows/CVI and its data protection mechanism are researched, The efficiency differences between the muhithreading software which makes use of the asynchronous timers and the traditional single threading software are analyzed. Using LabWindows/CVI multithreading technology developed a measurement and control software for one weapon system, the design of the system's security and real time character is realized. This research shows that the application of multithreading technology can develop better parallel particular task and improve the performance of the measurement and control system. It has an obvious advantages in avoiding barrage,reducing running time, swelling system reliability and so on.【期刊名称】《电子设计工程》【年(卷),期】2012(020)015【总页数】4页(P52-54,58)【关键词】多线程技术;LabWindows/CVI;数据保护;应用研究【作者】单体强;陈雷;张万发【作者单位】军械工程学院弹药工程系,河北石家庄050003;军械工程学院弹药工程系,河北石家庄050003;军械工程学院弹药工程系,河北石家庄050003【正文语种】中文【中图分类】TP316.7随着现代测控系统自动化水平的不断提高,在大型测控系统的软件设计过程中,经常会遇到需要多个任务同时工作的情况。

基于DLL的LabVIEW与VC_Matlab混合编程

基于DLL的LabVIEW与VC_Matlab混合编程

现代计算机(总第二三三期)MODERNCOMPUTER2006.4实践与经验引言随着计算机技术和微电子技术的迅速发展,虚拟仪器应运而生。

美国NI公司开发的LabVIEW软件是一种高性能的图形化虚拟仪器编程软件,它主要用于开发数据检测、数据测量采集系统、工业自动控制系统和数据分析系统等领域,是虚拟仪器系统的主要开发工具之一。

但是其本身也存在不足,如不能完全提供用户所需要的驱动程序和调用系统程序实现底层操作,不擅长于完成大量数据处理的任务。

而VisualC++可方便、高效地与系统及底层硬件直接交换数据,Matlab提供了多种功能强大的工具箱,在信号和图像处理等领域具有无可比拟的优势。

因此,借助VisualC++和Matlab,可以充分发挥它们的优势来弥补LabVIEW的不足,无疑将增强LabVIEW对硬件I/O地址进行访问的能力和数据处理能力,将其不擅长或不易实现的任务完成,即制作动态链接库(DynamicLinkLibrary,简称DLL)是解决问题的一个重要技术。

DLL是一个可执行的模块,但不接受任何消息,所以并不可直接运行。

它只提供一群函数供Windows应用程序或其他的动态链接函数库调用[1],只有当应用程序被装入内存并开始运行时,才与相应的DLL建立链接关系;当执行到DLL中的函数时,根据链接产生重定位信息,Windows转去执行DLL中相应的函数代码。

多个程序使用相同的DLL时,内存只需要装载一次,可以高效经济地使用内存。

1LabVIEW对VisualC++和Matlab开发的DLL的调用(1)VisualC++开发DLL[2]利用VisualC++提供的向导功能可以很容易地建立一个不完成任何实质任务的DLL,主要的任务是如何给DLL添加功能。

①创建项目以在VisualC++6.0开发环境下为例,点击File→New并在随后出现的对话框中选择Win32DynamicLinkLibrary和AsimpleDLLProject。

基于LabWindows-CVI的便携式热车试验台测控系统设计与开发

基于LabWindows-CVI的便携式热车试验台测控系统设计与开发

基于LabWindows-CVI的便携式热车试验台测控系统设计与开发基于LabWindows/CVI的便携式热车试验台测控系统设计与开发摘要:本文通过对基于LabWindows/CVI的便携式热车试验台测控系统的设计与开发进行详细阐述,介绍了系统的硬件结构和软件设计,详细描述了测控系统的主要功能以及在实际试验中的应用效果。

设计出的系统具有实时监测车辆各项参数、高精度的数据采集能力和可靠的数据传输功能,能够为热车试验提供准确、有效的数据支撑,为相关研究提供可靠的技术支持。

关键词:LabWindows/CVI;测控系统;便携式热车试验台;数据采集;数据传输1. 引言随着汽车行业的快速发展,车辆的热车试验日益受到重视。

热车试验是汽车生产过程中不可或缺的一项关键环节,它通过模拟真实使用条件下的各种工况,检测和评估车辆的性能和可靠性。

在热车试验中,数据采集和传输是非常重要的环节,对热车试验结果的准确性和可靠性起着至关重要的作用。

因此,设计一个高效、稳定的测控系统对于热车试验的开展具有重要意义。

2. 系统硬件结构设计本系统采用便携式热车试验台作为硬件平台,通过多种传感器实时监测车辆的各项参数,包括发动机转速、水温、油温、气缸压力等。

系统硬件结构主要由传感器、数据采集模块和数据传输模块组成。

传感器负责采集车辆各项参数的数据,数据采集模块将传感器采集到的数据进行处理和存储,数据传输模块将处理后的数据通过网络传输到远程计算机。

3. 系统软件设计系统软件采用LabWindows/CVI作为开发平台,利用其强大的图形界面设计能力和丰富的功能库,实现系统的数据处理、数据显示和数据传输等功能。

软件设计分为前端设计和后台设计两部分。

前端设计主要负责与用户交互,包括参数选择、数据显示和实时控制等功能。

后台设计主要负责数据处理和传输,包括数据采集、数据存储和数据传输等功能。

4. 系统主要功能及其实现方法4.1 实时监测车辆各项参数通过传感器采集车辆的各项参数,如发动机转速、水温、油温、气缸压力等。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

VC++和基于LabWindows/CVI的DLL在测控技术中的应用发布:2011-09-03 | 作者: | 来源: dengzhiyu | 查看:468次 | 用户关注:摘要:介绍了动态链接库(DLL)的运行机制,阐述了基于LabWindows/CVI的DLL的开发以及它和VC++程序的集成方法,对于两种程序之间的通讯,给出了一种基于内存映射的实现方法。

文章最后给出了一个技术上具体实现的例子加以说明。

关键词:虚拟仪器;LabWindows/CVI;DLL;内存映射1、引言大型测控系统的软件系统通常采用高级语言结合专用测控软件来开发。

如何将不同的软件程序加以集成,以及如何在它们之间进行通讯是必须解决的问题。

虚摘要:介绍了动态链接库(DLL)的运行机制,阐述了基于Lab Windows/CVI的DLL的开发以及它和VC++程序的集成方法,对于两种程序之间的通讯,给出了一种基于内存映射的实现方法。

文章最后给出了一个技术上具体实现的例子加以说明。

关键词:虚拟仪器;Lab Windows/CVI;DLL;内存映射1、引言大型测控系统的软件系统通常采用高级语言结合专用测控软件来开发。

如何将不同的软件程序加以集成,以及如何在它们之间进行通讯是必须解决的问题。

虚拟仪器测控系统中关键工作就是对数据的采集、分析、处理并模拟真实仪器面板的功能。

由于VC++等高级语言的非针对性,采用其实现起来不仅复杂(如创建仪器面板,数据分析等),而且有些功能无法实现,源代码效率也较低;若采用Lab Windows/CVI,不仅开发方便,而且直观,有些开发工作只需几行代码即可完成,可以大大提高系统开发的效率,节约时间。

在笔者所参与的测控系统的开发中,采用的是用VC++开发系统软件主干程序,负责系统软件各方面的调度、管理,采用Lab Windows/CVI开发具体的测控功能,以具有不同功能的DLL形式组成测试功能模块库,集成到主干程序中实现各种不同的测控功能,采用内存映射实现两种程序间通讯和数据传输。

2、Lab Windows/CVI中DLL的开发2.1 Lab Windows/CVI中DLL的开发方式及其运行机制在CVI环境下,开发用于测控领域的动态链接库,需将编译目标文件类型设置为DLL,并设置DLL名称、存储路径、DLL函数/变量导出方式等,才能通过Create Debuggable Dynamic Link Lib rary生成DLL工程。

DLL不是可执行文件,它需要由应用程和另外的DLL调用执行。

一个程序使用DLL,它只能通过这个DLL的导出函数/变量访问其内部。

在Lab Windows/CVI下创建DLL,有两种方式导出函数/变量:头文件法和导出关键字法。

头文件法使用头文件确定要输出的标号,头文件中必须包含要导出标号的声明;导出关键字法把每一个要导出的函数和变量都标记一个关键字,如__cdecl、__stdcall等,根据不同的编译器使用不同的导出关键字。

在DLL中只有被导出的函数/变量才能被外界所使用,所以只有指定DLL的导出函数/变量,该DLL才具有实际的使用意义。

DLL被调用时,它有自己的运行机制:每一个DLL都有一个DLLMain主函数,在进入和退出DLL时,应用程序分别调用这个函数,它常常被用来执行进程的初始化和清理工作。

因为在该函数中定义了两个事件句柄——DLL_PROCESS_ATTACH和DLL_PROCESS_DETACH。

当一个DLL被调用,即它被首次映射到进程的地址空间时,系统触发DLL_PROCESS_ATTACH事件,一般在这部分执行特定进程的DLL初始化工作,如调用I ni tCVIRTE()函数初始化引擎等;当应用程序结束DLL的调用时,系统触发DLL_PROCESS_DETACH事件,一般在这部分进行退出DLL时前的资源清理工作,如调用CloseCVIRTE ()释放被DLL所占用的内存。

另外,CVI还提供了一个RunStateCallback()函数来对程序的执行情况进行记录,使用时通过该函数也可以控制程序的执行及系统资源分配。

2.2工程中DLL的开发笔者所参与的测控系统的开发中, DLL开发采用的是另外一种方式,由于DLL本身的不可执行性,调试上没有可执行文件方便,而且工程上需要在导出的DLL中包含虚拟仪器软面板,且保持软面板对虚拟仪器的控制性,因此,在实际的开发中,先编写CVI用于实现具体测控功能的可执行文件,调试成功后,把该可执行文件改成具有相同功能的DLL。

改编时,仅仅对源文件(.c文件)的main函数做一些改变,并在头文件(.h文件)中输出,而无需做多的改变即可导出仪器软面板,这样在VC++主干程序调用该DLL时就可以方便的进行测控工作。

具体操作上:(1)首先编写满足测控要求的CVI的可执行文件并调试成功;(2)在工程文件中打开包含工程主函数main()的.c文件,向文件中插入DLL所必须的DLLMain函数。

(3)改写.c文件中的main函数。

修改其函数名及参数,将其参数改为Windows的实例句柄HINSTANCE,它指向DLL被调用时DLL被映射到的进程的地址空间。

另外由于调用时要使用仪器软面板,就必须导出相应的.uir函数,因此main中的编译环境默认的Loadpanel函数要用LoadpanelEx替代,因为使用Loadpanel函数时,用户界面库无法找到在.uir文件中定义的但没有被DLL输出的那些回调函数,从而使DLL在被调用时出错。

对于LoadpanelEx,因为使用CVI编写DLL时,CVI自动在工程中生成一个.uir中的回调函数列表,DLL被调用时,LoadpanelEx首先在此列表中进行查找,它可以实现回调函数的导出,从而保证在DLL中软面板对虚拟仪器的正常控制。

(4)将修改后的main函数的声明加入到原工程的头文件。

(5)选择头文件导出法,编译成DLL文件。

经过改编后原工程就变成了可以由VC++主干程序调用的DLL,而它的所有测试功能都没有变。

事实证明,因为这种创建DLL的方法不需要增加额外的程序进行代码调试,它比一般的直接创建方法要有效的多。

3 VC++应用程序对DLL的调用3.1 VC程序调用DLL的两种方式VC中链接DLL到应用程序中有两种方式:隐式链接和显式链接。

隐式链接时,使用DLL的可执行程序链接到DLL导入库(.lib文件)中,导入库中包含了DLL中的每个导出符合和序号。

当加载使用DLL的可执行程序时,操作系统同时加载DLL。

为了隐式链接DLL,可执行程序需要从DLL提供者获取以下内容:包含导出函数声明的头文件(.h),导入库(.lib)文件和实际的DLL(.dll)文件。

显示链接时,使用DLL的可执行程序在运行时通过函数调用来显式加载或卸载DLL,并通过函数指针来调用DLL的导出函数,应用程序通过Loadlibrary函数来加载DLL并获取模块句柄;通过GetProcessAddress 来获取应用程序要调用的导出函数的指针。

工程中笔者采用的是显式链接方式调用DLL,与隐式链接相比,显示链接较灵活,在这种方式下,我们可以决定什么时候装载和卸去DLL,以及决定加载哪个DLL,可以节约系统资源,代码执行效率高。

3.2 VC程序与测试模块间的通信在用VC++调用CVI的DLL时,存在着在不同软件程序间的数据传递问题,工程中VC++程序是主干,它调用DLL,因此它的变量对DLL来说都是透明的、可用的;但是由Lab Windows/CVI开发的DLL文件生成的导出库文件(.lib)不包含导出变量,因此DLL 中的变量值,VC++不能直接获得。

工程中采用创建内存映射文件的方法来实现二者之间的数据传递。

所谓内存映射文件是指在内存中申请一块内存空间,将一个文件与这块空间相联系,再进行内存映射,这样操作文件就有和操作内存一样的效率,数据可以通过该映射文件进行中转(写入和读出),几个进程可通过操作该映射文件,实现进程间在内存一级的高速数据交互。

具体方法为:首先在DLL中通过API函数CreateFileMapping及MapViewOfFile在内存中建立一个文件映射对象并产生它的一个视,然后通过CopyMemory将测控数据存入该视中,然后应用程序就可使用OpenFileMapping打开该映射文件并对其进行读写操作,从而实现二者间通信。

4 代码实例限于篇幅,文中只给出部分重要的程序代码。

4.1 CVI中程序代码1)对源文件的main函数进行改写:int main1 (HINSTANCE CVIUserHInst)// 修改函数名以及参数{if ((panelHandle = LoadPanelEx (0, "get.uir", PANEL,__CVIUserHInst)) &lt; 0)//使用loadPanelEx函数可导出回调函数return -1;……return 0;}(2)创建内存映射文件并拷入数据hValue=CreateFileMapping((HANDLE)0xFFFFFFFF,NULL,PAGE_READWRITE,0,0x300,"MapFile");//建立文件映射对象,MapFile为映射文件名……ip mid=(mid*)MapViewOfFile(hValue,FILE_MAP_ALL_ACCESS,0,0,0);//创建映射对象的一个视,mid为测控数据类型……CopyMemory(ipmid,&data,sizeof(mid));//将数据拷贝到共享的内存中(3)在.h文件中加入修改后的main函数的导出声明int main1 (HINSTANCE CVIUserHInst);4.2 VC中程序代码typedef int(*main1)(HINSTANCE); HINSTANCE USEInst;USEInst=LoadLibrary("sousuoleidafashe_dbg.dll"); //加载DLLmain1 main; main=(main1)GetProcAddress(USEInst,"main1");//得到DLL中导出函数main1的地址main(USEInst);//执行main1,调出仪器软面板进行测试,测控数据写入”MapFile”中FreeLibrary(USEInst);HValue=OpenFileMapping(…);//打开映射文件”MapFile”ipmid=(mid*)MapViewOfFile(hValue;FILE_MAP_ALL_ACCESS,0,0,0); //得到测试数据至此,就完成了LabWindows/CVI中的DLL开发和VC++主干程序对它的调用工作以及数据传送工作。

相关文档
最新文档