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

2008-6-9 16:01 2640 5 5 分类: 测试测量

因为我多次都传不起附件,就只有麻烦大家去下载了


已经完成的《虚拟示波器》毕业设计之一步一步教你怎么做我将就我们的毕业设计(虚拟示波器)向大家介绍一下我们是怎么做的。有许多地方作的不太
好,请大家指点一下。
第一步:采样。
用数据采集卡将外界的模拟信号采集到计算机中来。
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就可以了。

关于如何创建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; } 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?Files加入myshared.c源文件。 说明:当你在Windows DLL中想使用LabVIEW的管理函数时,你必须把labview.lib加到工程中, LabVIEW的安装盘中的cintools文件夹中包含这个.LIB文件。 6.选择Project?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?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语句必须为文件中的第一个语句。

文章评论0条评论)

登录后参与讨论
我要评论
0
5
关闭 站长推荐上一条 /2 下一条