cpubbs论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

LabVIEW+单片机学习套件全套教程资料下载[免费]LabVIEW论坛精华列表贴USB0816数据采集卡《LabVIEW宝典》
LabWindows/CVI论坛精华贴NET0816以太网数据采集卡RC0210远程设备授权系统 关闭关停锁定打开设备 户外分布式数据采集
NET1624低速高精度以太网数据采集卡WIFI0824SD无线WIFI网络数据采集卡脱机运行 SD存储 小尺寸微型 串口采集远程采集 安卓 手持移动采集 纪录仪
查看: 17525|回复: 21

已经完成的《虚拟示波器》毕业设计之一步一步教你怎么做 [转贴]

[复制链接]
发表于 2004-11-7 03:00:19 | 显示全部楼层 |阅读模式
已经完成的《虚拟示波器》毕业设计之一步一步教你怎么做我将就我们的毕业设计(虚拟示波器)向大家介绍一下我们是怎么做的。有许多地方作的不太
好,请大家指点一下。
第一步:采样。
用数据采集卡将外界的模拟信号采集到计算机中来。
NI公司对其全部的DAQ产品提供了专门的驱动程序库,因此,在LabVIEW下应用NI公司的DAQ产品无
须专门考虑驱动程序的问题。其他数据采集卡,需要有针对它的驱动程序。
一般我们所买的数据采集卡,都带有驱动程序(.SYS,.DLL),可以在生产商的网站下载。
如果没有驱动程序也不要紧,只要知道卡的寄存器在计算机中的地址、各位的意义等。我们可以
用LabVIEW的CIN来编驱动,也可以用DLL来写。DLL一般用VC来做(_inp,_outp等)。
前面所说的是在WIN9X下的,对于WINNT/2000就一定要驱动程序.SYS,或.VXD,这是因为
WINNT/2000对系统的保护所引起的,即WINNT/2000不允许一般的应用程序和DLL访问硬件I/O,它
们是运行在Rin3级的。只有运行在Ring0级的.SYS和.VXD才可以访问硬件I/O。然后有DLL来和.SYS
通信,DLL提供函数接口。在LabVIEW中调用DLL就可以了。
 楼主| 发表于 2004-11-7 03:00:39 | 显示全部楼层
关于如何创建DLL和在LabVIEW中调用DLL,可以看一看LabVIEW中的手册,
LabVIEW6.1/manuals/lvexcode.pdf,英文的。我翻译了一点,大家可以看一看。

创建一个动态连接库
这一节用一个简单的共享库的例子来说明创建LabVIEW所调用的外部代码的三个基本任务。
任务1:在LabVIEW中建立一个函数原形
任务2:编译这个.C文件
任务3:在外部集成开发环境(IDE)建立一个库工程
在例1中:调用在这节中创建的共享库,你将在这里调用所创建的动态连接库。

任务1:在LabVIEW中建立一个函数原形
为你的共享库建立一个函数原形,你必须在LabVIEW中建立函数原形,然后填充你的代码的所有细
节。当你允许LabVIEW来产生这个C语言源代码文件时,你要确信代码的基本语法在你的共享库中
都是合法的。
执行下面几步来建立你的函数原形源文件myshared.c。
1.在LabVIEW中创建一个求数组平均值的VI,然后在框图程序中选择
Functions»Advanced»Call Library Function,把这个对象放到框图程序中。
2.在Call Library Function的图标上右键单击,在弹出菜单中选择Configure将会出现
一个Call Library Function对话框,让Library Name or Path空着。
3.输入下面的详细说明
a.在Function Name域中输入avg_num
b.在Calling Conventions控制中选择C
4.定义返回值
a.在Parameter 控制中用一个有更多描叙意义的名字来改变缺省名字和返回类型,如
error。
b.在Type控制中选择Numeric。
c.在Data Type中选择Signed 32-bit Integer。
5.定义参数
a.单击Add Parameter After按钮。
b.在Parameter控制中用一个准确的名称,a,代替缺省的名称,arg1。
c.在Type控制中选择Array。
d.在Data Type控制中选择4-byte Single.
e.在Array Format控制中选择Array Data Pointer。
说明:数组和字符串选项章节描述了数组和字符串变量的设置在Call Library Function图标中。
6.定义数组的大小(size)
a.单击Add Parameter After按钮
b.在Parameter控制中用名字size代替缺省的名称,arg2。
c.在Type控制中选择Numeric。
d.在Data Type控制中选择Signed 32-bit Integer.
e.在Pass控制中选择Value.
7.定义平均值
a.单击Add Parameter After按钮
b.在Parameter控制中用一个准确的名称,avg,代替缺省的名称,arg3.
c.在Type控制中选择Numeric。
d.在Data Type控制中选择4-byte Single.
e.在Pass控制中选择Pointer to Value.
8.  检查Function Prototype指示,显示了返回值和三个参数的正确顺序如下:
long avg_num(float *a, long size, float *avg)
说明:你在Function Prototype指示中看见的语法技术上是正确的。然而下一节中LabVIEW产生
的.C文件是非常准确的,因为第一个参数出现如float a[]。
9.单击OK来保存你的设置,并且关闭对话框。
10.观察Call Library Function图标,它根据你的设置来更新。
11.右键单击Call Library Function图标,在快捷菜单中选择Create .c file,以myshared.c.
来保存文件。
说明:在这个例子中,你使用.C源文件,当你使用C++库时,把文件扩展名改为.CPP。
任务2:完成.c文件
Call Library Function在myshared.c中产生如下的源代码概略符号:
/* Call Library Source File */
#include "extcode.h"
long avg_num(float a[], long size, float *avg);
long avg_num(float a[], long size, float *avg)
{
/* Insert Code Here */
}

用下面的函数代码代替/* Insert Code Here */的地方,保证所放置的代码在一个括号内:
int i;
float sum=0;
if(a != NULL)
{
for(i=0;i < size; i++)
sum = sum + a<I>;
}
else
return (1);
*avg = sum / size;
return (0);
在这一部分将建立一个工程和编译myshared.c和创建myshared.dll.
动态连接库的导出关键词
你必须明确你的动态连接库的每个导出函数使LabVIEW.成为可行的。例如,你必须用_declspec
(dllexport)关键词来导出平均数函数。声明动态连接库的导出关键词时,你要去掉对模块定义文
件的要求,这一点将在模块定义文件部分里描述。
1.打开文件myshared.c,将关键词_declspec(dllexport)插入avg_num代码之前。函数
也有一个声明语句,你也必须把关键词插入到声明语句之前。下面的摘录显示了用关键词
_declspec(dllexport)替换了两处的myshared.c
_declspec(dllexport) long avg_num(float *a,long size,
                                        float *avg);
_declspec(dllexport) long avg_num(float *a,long size,
                                        float *avg)
{
}
建立工程
在Visual C++开发环境中实现下面几步来为myshared.c.建立一个工程
2.选择File》New ,并且在Projects Tab项的列表框中选择Win32 Dynamic Link Library
(DLL),单击OK继续。
3.用程序提示你所创建的DLL的类型,选择An empty DLL project.。
4.单击Finish来完成创建工程并返回到Visual C++工作间。
5.在Project 菜单中选择Add to Project&raquo;Files加入myshared.c源文件。
说明:当你在Windows DLL中想使用LabVIEW的管理函数时,你必须把labview.lib加到工程中,
LabVIEW的安装盘中的cintools文件夹中包含这个.LIB文件。
6.选择Project&raquo;Settings到Project Settings对话框的C++ Tab页,完成下面几步。
a.在Category下拉菜单中选择Code Generation。
b.在这个例子中,所有的配置,设置Struct member alignment 控制 1 Byte.
   c.在Use run-time library控制中选择Debug Multithreaded DLL 应用与Win32 Debug配置。
   如果你选择的是Win32 Release配置,在这里就选择Multithreaded DLL。
7.选择Build&raquo;Build myshared.dll在输出文件夹中将输出动态连接库。

模块定义文件
在创建共享库(DLL)这一节中,通过配置LabVIEW使用C调用规范来为LabVIEW的Call Library
Function所建.C源文件。当你使用WIN32 API时,用-stdcall 调用规范。当你用_stdcall建立共
享库时,你要用模块定义文件(.DEF)来导出DLL中的函数。如果没有模块定义文件,_stdcall或
许会用一个不可预知的样式截断文件名。因此实际的名字在调用DLL时,将不能应用。
你可以联合模块定义文件和DLL,模块定义文件包含DLL的描述。如DLL的名字和导出函数,如下所
示:
LIBRARY myshared
EXPORTS
avg_num
前面的代码例子显示了模块定义文件的关键部分。
模块定义文件中的强制性只有LIBRARY和EXPORTS语句。
LIBRARY语句必须为文件中的第一个语句。
</I>
 楼主| 发表于 2004-11-7 03:01:28 | 显示全部楼层
参数说明:
  触发方式有内触发和外触发。内触发主要有预触发、后触发和边沿触发,外触发由PCI2003数
据采集卡的引脚TR来决定,TR为外部触发信号,当TR有一由低至高的变化(上升沿)时,PCI2003
A/D卡将按预先设定的采集通道总数进行采集,直至采集结束。
  首通道与末通道决定了采集的通道总数。在设置末通道号时,末通道号应大于或等于首通道
号。当末通道号等于首通道号时,数据采集将固定在首通道号上;当末通道号大于首通道号时,
数据采集顺序将由首通道号开始,每启动一次A/D转换,就自动切换到下一通道,直到末通道号,
然后再回到首通道号重复进行。
  采样频率在硬件上的实现是通过PCI2003数据采集卡上的8254定时器来实现的。在驱动程序中
通过控制8254定时器定时输出触发A/D转换来实现固定的采样周期,可选的频率范围为488Hz~
100KHz。采样频率的选择要依据信号频率,当信号频率很高时,采样频率应更高。香农定理,采
样频率应大于或等于信号频率的两倍。实时采样中采样频率应是信号频率的8倍或更高才能重现原
信号。利用插值运算时,采样频率为信号频率的4、5倍时也能很好的重现原模拟信号。
  采样点数是一次采样共采集的点数,采样点数的选择主要与信号的频率有关。当信号的频率很
高时,一个波形能够采集的点数较少,这时,采样点数小一点,也可以捕获多个波形。例如,当
信号频率为10KHz,采样频率为100KS/s时,一个波形大约能采10个点,采样点数为1000就可以采
集100个波形了。当信号的频率很低时,需要的采样点数就很多。例如,当信号频率为1Hz,采样
频率为100KS/s时,一个波形大约能采100000个点。需要注意的是,采样点数越多,系统的显示刷
新速度越慢。
  硬件增益,PCI2003数据采集卡有一个程控增益放大器PGA2003,其放大倍数可选为1、2、4、8
倍。模拟信号首先经过PGA2003然后进入A/D采样器,当放大倍数选8时,最小分辨率为
(5000/4096)/8=0.1526mV,即一个LSB值为0.1526mV。
  Waveform为采样波形数组。数组的大小即为采样点数。当采样通道为多通道时,每一通道的采
样点数=采样点数/通道数,这时需要注意的是,采样点数应设置为通道数的整数倍。
发表于 2005-3-3 18:50:41 | 显示全部楼层
<>呵呵   我正做这个啊    大哥能再讲得详细一点吗?  </P>
<>不过我不用编驱动,学校好像有配套的采集卡了。</P>
<>万分感激啊!!!</P>
[此贴子已经被作者于2005-3-3 10:52:06编辑过]

发表于 2005-3-3 23:19:14 | 显示全部楼层
<>我也要做毕业设计,虚拟网络实验室</P><>大哥你加我QQ好不啊</P><>34033438</P>
 楼主| 发表于 2005-3-4 00:13:23 | 显示全部楼层
上边的那个是转贴的!不过对于网络来说不是太难,我们网站上有同个有关网络的例子,我自己编了几个放在上边了,大家可以找来看一下,虽然比较简单,但还是有一点点用处的!希望能帮到大家!
发表于 2005-3-24 18:31:12 | 显示全部楼层
<>三楼关于采样率的说法,应该是奈奎斯特定理吧</P><>香弄定理是关于信息量的。</P>
发表于 2007-5-13 21:28:47 | 显示全部楼层
太长了
呵呵
不过还是谢谢
发表于 2007-7-4 22:29:17 | 显示全部楼层
发表于 2007-7-8 21:47:44 | 显示全部楼层
发表于 2007-7-12 11:48:43 | 显示全部楼层
发表于 2007-7-12 15:10:17 | 显示全部楼层
很详细,学到不少东西,谢谢
发表于 2007-11-16 22:00:35 | 显示全部楼层
发表于 2008-1-24 00:58:17 | 显示全部楼层
先下了,等有时间好好看,谢谢版主
发表于 2008-2-12 16:54:23 | 显示全部楼层
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|cpubbs论坛. ( 粤ICP备09171248号 )

GMT+8, 2025-4-3 06:49 , Processed in 0.599819 second(s), 9 queries , Gzip On, File On.

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表