1、第6章 Advanced子模板及LabVIEW与C语言的接口方法,6.1 概述 6.2 Advanced子模板 6.3 CIN(代码接口节点)图标及其与C语言接口技术 6.4 CIN图标的调用及参数设置 6.5 CIN设计步骤 6.6 应用举例: 用CIN图标实现对HY-1232数据采集卡的驱动 6.7 端口操作图标In Port.vi、Out Port.vi及其应用 本章小结,6.1 概 述,用前五章介绍的知识完全可以完成一个完整的虚拟仪器测试系统的基本编程,但是LabVIEW并不是万能的,它所提供的图标功能是有限的,实际系统中仍然有某些功能是LabVIEW无法或难以实现的。针对这个问题,L
2、abVIEW在Advanced子模板上提供了和C语言的接口,还提供了调用Windows动态链接库DLL函数以及实现多线程编程等高级功能。,6.2 Advanced子模板,1. 调用路径 FunctionsAdvanced Advanced子模板如图61所示。,图61 Advanced子模板,6.3 CIN(代码接口节点)图标及其与 C语言接口技术,CIN是Code Interface Node的简称。Advanced子模板上提供了CIN图标,可以实现在LabVIEW中引入C语言源代码,因此它是LabVIEW图形化编程语言环境与C语言的接口。C语言是功能非常强大的文本式编程语言,当遇到某些Lab
3、VIEW图标难以实现的功能时,就可以通过CIN图标在LabVIEW中引入C语言源代码来实现,从而大大提高了LabVIEW数据处理的整体功能。,作为LabVIEW与C编程语言的接口图标,CIN是通过输入、输出端口实现两种语言之间的数据传递的。输入、输出端口的个数可由设计者根据实际需要确定。当LabVIEW的程序运行到CIN节点时,数据由CIN的输入端口传递给C源代码图标,程序转去执行C源代码,代码执行完后,得到的数据结果由CIN的输出端口返回给LabVIEW。,CIN的设计方法大致包括以下几个步骤:(1) 确定CIN图标的输入、输出参数个数和数据类型。(2) 生成C源代码编辑格式文件。(3) 在
4、编辑格式文件中的规定位置(/*Enter Your Code Here*/)填写实现某种测量功能的C源代码,生成最终的C源代码文件。,(4) 在LabVIEW指定的环境下编译步骤(3)中生成的C源代码文件,并生成可执行文件。(5) 调用CIN的功能菜单将生成的可执行文件载入CIN图标。这样就基本形成了一个具备某种功能的CIN图标。,本章以实现c=a+b为例,介绍CIN图标的使用方法,同时着重介绍它在驱动数据采集卡方面的应用。LabVIEW支持的数据采集卡(当然NI公司生产的数据采集卡在其中之列),是Measurement & Automation软件检验时可识别的,从而是可以进行参数设置的数采
5、卡。这种数采卡可以调用第4章介绍的Data Acquisition子模板上的数据采集图标进行各种方式的数据采集。,LabVIEW不支持的数据采集卡,Measurement & Automation软件检验时是不可识别的,当然非NI公司生产的数据采集卡通常都属此列,则一般需要设计者自己开发驱动程序。通常驱动程序是采用C语言编写的,用CIN接口图标驱动数据采集卡的实质与关键步骤是,将C语言编写的驱动程序添入规定的位置/*Enter Your Code Here*/。,6.4 CIN图标的调用及参数设置,6.4.1 CIN图标的调用路径 FunctionsAdvancedCode Interface
6、 Node Code Interface Node子模板如图62所示。,图62 Code Interface Node子模板,6.4.2 CIN 图标及其端口参数设置初始化时的CIN图标如图63所示。CIN图标中表格状图案的每一行代表一个参数,左侧为参数的输入值,右侧为CIN运行后该参数的返回值。,图63 初始时的CIN图标,6.4.2.1 设置CIN图标的输入、输出参数个数这里以实现ca+b运算为例来说明CIN图标参数的添加方法。初始时,CIN只有一个参数的输入、输出口。欲增添新的参数输入、输出口,可以利用工具模板上的选择工具拖放CIN图标来实现,也可以从CIN图标的快捷菜单中选择Add P
7、arameter选项来添加。,有些情况下,有的参数只能作为输出值,而没有对应的输入。当欲实现ca+b运算时,则c参数只能是输出值,它是CIN的运行结果,没有对应的输入值,这时应当将其对应的输入口置为无效。方法是,把鼠标放在相应的输入口,用鼠标右击CIN图标,弹出快捷菜单,从中选择Only Output项,则该输入口变暗,表明其无效。图64为本例的CIN图标输入、输出口的设置情况。,图64 添加参数后的CIN图标,6.4.2.2 设置参数的数据类型CIN输入 (输出) 口参数的数据类型由连接在该输入 (输出) 口上的控件的数据类型决定。例如,如果某参数的输入 (输出) 端口连接在一个数据类型为i
8、nt32的数字控件上,则该参数的数据类型为int32型。有些时候,设计者并不希望将CIN的运行结果显示到面板上,而只是作为整个程序的一个中间运行结果传递下去。这时可以在流程图上,用鼠标右击该控件对应的终端,从弹出的快捷菜单中选择Hide Control项将该控件从前面板上隐藏掉。,6.5 CIN设计步骤,6.5.1 生成C源代码编辑格式文件(*.C文件)代码框架从CIN图标的快捷菜单中选择Create.C File项,会弹出一个文件存储对话框,键入文件名 (本例中文件名设为add.c),则生成LabVIEW的C语言代码框架;然后用任意一种文本编辑器将它打开。该C文件的代码框架为,/* CIN
9、source file */ 注释 #include “extcode.h“ CIN MgErr CINRun(float64 *a, float64 *b, float64 *c); 函数声明 CIN MgErr CINRun(float64 *a, float64 *b, float64 *c) 函数体 /* ENTER YOUR CODE HERE */ 填入C语言源代码return noErr;,6.5.2 添加C源代码在/*ENTER YOUR CODE HERE*/处填入设计者所编写的C源代码。对于本例,填写后的C源代码文件为,/* CIN source file */ #incl
10、ude “extcode.h“ CIN MgErr CINRun(float64 *a, float64 *b, float64 *c); CIN MgErr CINRun(float64 *a, float64 *b, float64 *c) *c=*a+*b; /*添加的代码*/return noErr;,注:在C源代码的编写过程中,除可直接调用C语言的基本库函数外,LabVIEW提供有专门支持CIN设计的库函数,如存储空间(Memory)的动态分配(后面的采样举例中会用到)、文件的操作等,供设计者使用,详细内容可查看LabVIEW的在线帮助(Online Help)。,6.5.3 *.C
11、文件源代码的编译*.C文件源代码的编译主要是在以C语言为主的开发系统中进行。编译完毕形成一个可以和CIN图标进行动态连接的工程文件*.lsb。下面介绍在VC+集成环境下编译*.C源代码的具体步骤。,(1) 新建一个DLL工程文件,命名为Add。 打开VC+开发平台,执行FileNew 操作。 进行选项:win32 Dynamic Link Library。 添加工程文件名:Add。 location:填写工程文件的存放路径。也可以采用其默认路径D:Microsoft Visual StudioMyProjects。 最后形成工程文件add.cpp。,(2) 向工程文件中添加cin.obj、la
12、bview.lib、lvsb.lib、lvsbmain.def四个文件。 执行ProjectAdd to ProjectFiles操作,向工程文件添加上述四个文件。这四个文件在LabVIEW安装路径下的cintools文件夹下的win32子文件夹中。,(3) 向工程文件中添加上面的*.C源代码文件add.c。添加方法同(2)。(4) *.C源代码文件编译前的设置。由菜单项ProjectSetting打开设置对话框,逐项设置。 Setting for选项设置。All Configuration。 C/C+标签页设置。用鼠标左击C/C+标签页按钮,逐项设置。,l Category:由下拉菜单选择为
13、Preprocessor。 Additional include directories:添加LabVIEW的cintools文件夹的路径。假设LabVIEW安装路径为d:LabVIEW,则在Additional include directories处添加路径d:LabVIEWcintools。 l Category:由下拉菜单另选为Code Generation。 Strict member alignment:设置为1 Byte。 Use run-time library:设置为Multithreaded DLL。, Custom Build标签页设置。用鼠标左击Custom Build
14、标签页,逐项设置。 l Commands:输入命令行如下: d:labviewcintoolswin32lvsbutil $(TargetName) d “$(WkspDir)$(OurDir)” (假设LabVIEW的安装路径为:d:labview。) l Outputs:输入命令行如下: $(OutDir)$(TargetName).lsb,(5) 添加C源代码程序。可在Workspace wizard窗口中双击add.c,打开源文件添加C源代码。如果已经添加过,则继续下一步。(6) 编译*.C源代码文件。在主菜单Build下选择Compile add.c选项,则进行add.c程序的编译,
15、如有语法等错误, 则给出错误提示,按提示修改程序,重新编译。重复这一过程,直至没有错误。,(7) 生成可执行文件。在主菜单Build下选择Build Add.dll选项,即生成可执行文件Add.lsb,同时生成如Add.dll等所需的全部文件。,图65 CIN图标主菜单,1. 装载可执行文件到CIN图标回到LabVIEW流程图窗口,窗口中CIN图标的快捷菜单如图65所示。从中选择Load Code Resource项,即弹出一个Choose a code resource file对话框,如图66所示。按照Add.工程文件存入的路径寻找Debug目录下的Add.lsb文件,然后点击“打开”按钮
16、,于是Add.lsb文件就装入CIN图标中。,图66 Choose a code resource file对话框,2. 可执行文件的重新装载及错误文件的清除如果在装载完可执行文件后,你对源代码又进行了修改,则必须重新编译,重新装载。在重新装载的时候,CIN图标在再次装载时,它的快捷菜单发生了相应的改变,如图67所示。利用其中的Reload Code Resource (对同一可执行文件)或Reload Code Resource From (如果是其它可执行文件) 选项,可实现可执行文件的重新装载。,图67 Reload Code Resource菜单,6.5.5 运行程序至此,就完成了CI
17、N的全部设计过程,可运行该程序, 改变a、b的值,察看c的输出显示。 关于数据采集卡的驱动程序,LabVIEW提供的开发方式有两个: 利用端口操作图标In Port.vi和Out Port.vi 开发数据采集卡驱动程序。这种方法实现起来比较简单,适于采集精度要求不高的情况, 但对于精度要求高且较复杂的采集系统, 如包含对物理内存大量操作的情况,这种方法是远远不能满足设计需要的。, 采用LabVIEW提供的CIN (Code Interface Node)图标开发数据采集卡驱动程序。这种方法适用于精度要求高且功能复杂的采集系统的设计,是一种理想的设计方法。本章我们以非NI公司生产的HY1232型
18、数据采集卡的驱动为例,重点介绍利用CIN (代码接口)子模板驱动数据采集卡的方法。最后简单介绍利用In Port.vi和Out Port.vi两个端口的操作图标实现数据采集卡驱动的方法。,CIN子模板是LabVIEW与C语言之间的一种接口图标。设计者可以将那些在LabVIEW下难以实现和无法实现的功能,利用C语言来完成,然后再将结果通过CIN传递回LabVIEW。在实际设计应用中,经常会遇到某些想实现的功能,利用LabVIEW中现成的图标无法实现,而利用其它编程语言则很容易实现的情况,这时就需要利用LabVIEW中的接口图标以实现LabVIEW和其它编程语言之间的连接。CIN图标就是其中的一种
19、。,6.6 应用举例: 用CIN图标实现对 HY1232数据采集卡的驱动,6.6.1 HY1232数据采集卡简介HY1232是一种IBMPC XT / AT总线兼容的数据采集卡,其主要性能指标如下:32路单端模拟输入通道;A/D分辨率为12 bit;1路模拟输出通道;D/A分辨率为12 bit;,D/A输出上电清零; 模拟输入电压范围:5 V; 模拟输出电压范围:5 V或0+5 V; 软件触发方式; 数据传输方式采用软件查询方式和中断方式。,6.6.1.1 HY1232数据采集卡工作原理将HY1232数据采集卡插入PC机的PCI插槽中,待采集的多路模拟信号通过一个40芯的输入输出插座分别接到采
20、集卡内部的32选1的模拟输入多路开关上。通过软件设置,选通某模拟输入通道。对于HY1232数据采集卡,在选通某模拟信号输入通道的同时即启动了该路的A/D转换。当A/D转换完成时,采集卡上的转换完成位寄存器的最高位(D7)被置为“1”。用软件查询方式查询该寄存器的D7位,当查询到该位为“1”时,即表明采样已结束,可将12 bit的数据读入计算机内存中。如果采用中断方式,则在A/D转换完成后,采集卡会自动向计算机发出中断请求信号。在中断服务程序内,将12 bit数据读入计算机内存。,HY1232数据采集卡中采用的是12位A/D转换器,转换完毕的12位二进制数中的低八位AD7、AD6AD1、AD0存
21、放在低八位缓冲寄存器中,其高四位AD11、AD10、AD9、AD8存放在高四位缓冲寄存器中。HY1232数据采集卡有32路单端模拟输入通道,由八位输入通道选择寄存器低六位(C4、C3、C2、C1、C0)的二进制状态字选择被测信号的输入通道。例如,选择第4通道输入信号的二进制状态字为00100。表61列入了各寄存器的读/写操作功能与占用地址。,表61 HY1232数据采集卡板基地址分配与寄存器读/写操作功能,6.6.1.2 对采集卡进行参数设置(1) 确定采集卡的板基地址。板基地址是CPU分配给采集卡内存空间的首地址。首地址后面的内存空间供采集卡内部寄存器分配使用。HY1232数据采集卡板基地址
22、的可选范围为:200H3FFH (5121023)。通常选0x280,即280H (640)。(2) 确定信号的输入方式。选择设置信号是单端输入还是双端输入,单极性信号还是双极性信号。HY1232数据采集卡只有32路单端输入一种方式,故不需要用户来设置。,(3) 设置信号的输入范围。根据输入信号幅值范围和分辨率的要求进行选择。HY1232数据采集卡信号输入范围不可选,只能为5 V+5 V,且内部的放大器增益固定为1。(4) 确定采样触发方式。一般分外触发、定时触发、软件触发等几种方式。但对于HY1232采集卡,只有软件触发一种方式,即在往输入通道寄存器写入所选通道号的同时即触发了A/D转换。,
23、(5) A/D转换结束的判断。对于HY1232采集卡分查询方式和中断方式两种。(6) 采样速率的设置。对于有些数据采集卡(如LabPC1200卡),用户可在其最大采样速率范围内进行选择设置,以满足实际的需要。但HY1232数据采集卡的采样速率是固定的,用户不可选。(7) 设置信号输入通道。在031可选范围内选择。 (8) 设置一次采集点数。,6.6.1.3 采集程序流程图与编程要点 1流程图 HY1232数采卡单点数据采集程序流程图如图68所示。,图68 HY1232数采卡单点数据采集程序流程图,2. 数据采集程序 HY1232数据采集卡采集一个点的C源程序如下: #include #incl
24、ude #include void main(void) int basea, channel;float value,lo,hi;,basea=0x280; /*板基地址设为640*/printf(“Input channel number:”); /*设置采集通道号*/scanf(“%d”, /*往输入通道寄存器写入所选通道号,并触发A/D转换*/ do /*查询A/D转换完成寄存器的最高位,若为1,则表明A/D ; 换结束,否则继续查询*/,while(! (inp(basea+5) ,3. 编程要点说明1) outp(x,y)和inp(x)函数 C语言接口函数 outp(x,y)函数的
25、功能是把函数y送入端口地址为x的寄存器中。 outp(base,channel) 是把通道号channel (程序中是由前面板控件设置)送入地址为base的输入通道选择寄存器,并启动该通道的A/D转换。, inp(x)函数的功能是从端口地址为x的寄存器中读取二进制数据。inp(base+1) 从地址为base1的低八位寄存器读取A/D转换结果。inp(base+2)从地址为base+2的高四位寄存器读取A/D转换结果二进制数的高四位,并清除A/D完成位寄存器和中断请求信号。inp(base+5)从地址为base+5的完成位寄存器读取完成标志位I/O显示值,当IO=0时,表示A/D转换未完成;当
26、IO=1时,表示A/D转换完毕。,2) A/D转换完成的判别 采用Do while循环语句如下: Dowhile(! (inp(basea+5) 句中0x80的十进制数为128,相应二进制数为10000000,故inp(base+5)&0x80屏蔽了低七位,保留了第八位结果IO,则:,IO=0 (A/D转换未完毕) 时,条件! (inp(basea+6) & 0x80)为真,Dowhile循环继续; IO=1 (A/D转换完毕) 时,条件! (inp(basea+6) & 0x80)为假,Dowhile循环停止。,3) A/D转换结果的合并及工程运算 hi&oxf是将A/D结果高四位 (二进制
27、数) 转化为十六进制数, (hi&oxf) *256则将十六进制数转化为十进制数,lo+ (hi&0xf) *256将数据合并为一个十进制数。这里,被测信号的输入范围设置为5 V5 V,HY1232卡的分辨率为12位,则量化值Q为10.0/4096 (V) ,而十进制数也需减去满量程的一半:4096/22048,由于十进制数从0开始,故满量程的一半是2047。因此,用value=(lo+hi&oxf)*256)-2047)*10.0/4096就可以将A/D输出的二进制数转换为与模拟输入电压相对应的电压值。,例如,若hi=1011、lo=11010011,那么hi&oxf=0xb, (hi&ox
28、f) *256=11*266,lo+ (hi&oxf)*256=(27+26+24+21+20+11*256=3027,则采集卡的模拟输入电压为value=(3027-2047)*10.0/4096=2.3926V,6.6.2 具体设计方法1. 模拟信号采集系统功能描述使用CIN实现非LabVIEW支持的HY1232数据采集卡的驱动。要求在LabVIEW下利用HY1232采集卡实现一个模拟信号(200 Hz的正弦波)的采集和波形显示。要求采样点数、板基地址和通道号可设。,2. 设计提示1) 前面板设计放置三个输入控制型数字控件和一个图形控件。数字控件1:用来设置HY1232数据采集卡的板基地址
29、。基地址basea的数据类型选为U16 (因为HY1232的基地址最大为3FFH),默认值设为640 (即0x280)。,数字控件2:用来设置信号的输入通道。通道号channel的数据类型选为U8 (因为HY1232的模拟输入通道为031),默认值为0,数据范围为031。 数字控件3:用来设置采样点数。 总采样点数samples的数据类型为32,默认值设为100。 图形控件:用来显示采集的波形。 设计好的前面板如图69所示。,图69 模拟信号采集程序前面板,2) 流程图设计(1) 放置CIN图标,并设置图标的输入、输出参数个数及数据类型。 调用路径。由FunctionsAdvancedCode
30、 Interface Node路径调入Code Interface Node。 参数设置。本例中,CIN图标有三个输入参数basea、channel、samples和一个输出参数Waveform。Waveform是一个double型数组,用于存放采集结果。参数数据类型的选择与前面板一致。,(2) C源代码文件的生成。选择如图610所示的CIN图标快捷菜单选项中的Create.c File选项,生成C源代码格式文件(*.C文件)。,图610 CIN图标属性对话框,本例生成的格式文件内容如下: /* * CIN source file */#include “extcode.h“ /* typed
31、efs*/ typedef struct int32 dimSize;float64 arg11;, TD1; typedef TD1 *TD1Hdl;CIN MgErr CINRun(uInt16 *basea, uInt8 *channel, int32 *samples, TD1Hdl Waveform);CIN MgErr CINRun(uInt16 *basea, uInt8 *channel, int32 *samples, TD1Hdl Waveform) /* ENTER YOUR CODE HERE */return noErr;,从上面生成的代码可以看到,因为定义的CIN图
32、标输出参数是数组型的,而LabVIEW向CIN传递数组类数据时,用的是句柄handle。传递数组的句柄结构是这样定义的: typedef struct int32 dimSize; /*数组尺寸*/float64 arg11; /*数组首地址指针*/ TD1;,typedef TD1 *TD1Hdl; 对于一个有n个元素的一维数组,用dimsize函数表示为dimsizen。 对于一个mn的二维数组amn, 用dimSize函数表示为 dimSize0=m, dimSize1=n。,(3) 填写C源代码。将6.6.1.3节中的HY1232的C语言采集程序填入到上面的C源代码框架中。最终完成的C
33、源代码文件(sampdata.c文件)如下: (注:设计者自行添加的语句为黑斜体,其余为自动生成的语句),/* CIN source file */ #include “extcode.h“ /*自动生成*/ #include “hosttype.h“ /*调用了系统及功能函数,因此添加此头文件*/ #include “dos.h“ /*调用了C语言中的inp ( ) 、outp ( ) 函数,因此添加此头文件*/ /*,* typedefs*/ typedef struct int32 dimSize; /*数组尺寸*/float64 arg11; /*数组首地址指针*/ TD1; type
34、def TD1 *TD1Hdl;,CIN MgErr CINRun(uInt16 *basea, uInt8 *channel, int32 samples, TD1Hdl Waveform);/*函数声明*/ CIN MgErr CINRun(uInt16 *basea, uInt8 *channel, int32 *samples, TD1Hdl Waveform) /*函数体*/ /* ENTER YOUR CODE HERE */,int16 dbyte; /*定义16位字 (A/D转换结果) */float64 value; /*定义变量,存放单点的A/D转换结果对应的模拟量*/fl
35、oat64 array; /*定义数组, 存放所有点的A/D转换结果对应的模拟量*/int32 i; /*定义变量,存放循环采样次数*/ MgErr err=noErr;,/*动态设定数组Waveform的大小*/if (err = SetCINArraySize(UHandle)Waveform, 3, *samples)goto out; (*Waveform)dimSize=*samples; /* 取数组Waveform的参数:dimSize,将其置为samples */array=(*Waveform)arg1; /* 取数组Waveform的参数:arg1e,置给array */,
36、/*软件查询式采集程序*/ for(i=0;i*samples;i+) /*重复采样,采样点数由samples确定*/ outp(*basea, channel); /*向板基地址写入所选模拟信号通道号并启动A/D转换*/ dbyte=0; do /*以查询方式循环采样。采样结果送入dbyte (12位) */;,while(! (inp(*basea+6) ,说明:这里需要对Waveform数组的大小进行动态设置,因此要用到LabVIEW的内存动态设置函数,最方便的是使用SetCINArraySize ( ) 函数。该函数的说明如下:原型:MgErr SetCINArraySize (Uha
37、ndle dataH, int32 paramNum, int32 newNumElmts),参数: dataH:Uhandle类型。需设置大小的数组的句柄。 ParamNum:int32类型。该句柄在所属CIN的参数中排列序号 (从0开始计) newNumElmts:int32类型。需设置的大小。该函数的返回值为错误代码Err。 例如,在上面添加的语句SetCINArraySize(UHandle)Waveform, 3, *samples) 中: 参数(UHandle)Waveform 为需设置大小的数组Waveform的句柄;,参数3指Waveform在CIN参数中的排列序号为3; 参数
38、*samples为需设置的大小,samples为CIN的输入参数。 另外,对于数组的句柄结构中的尺寸元素(dimSize),还需要通过*Waveform dim-Size=*samples; 语句进行设置。,3) 在VC+的集成开发环境中编译sampdata.c文件源代码 方法同6.3节。生成可执行文件sampdata.lsb。 4) 装载编译好的可执行文件,并调试采集程序 方法同6.3节。 设计好的流程图如图611所示。5) 运行程序,图611 模拟信号采集流程图,6.7 端口操作图标In Port.vi、 Out Port.vi及其应用,LabVIEW中有两个可直接访问底层设备的图标,即I
39、n Port.vi和Out Port.vi。这两个函数存放在功能模板的Advanced子模板的下一级模板Memory模板中,分别完成从设备的物理地址直接读取和输出数据的功能,通过直接读写寄存器可以提高数据的传输速率。本节着重介绍用这两个图标来驱动非NI公司的采集卡。,非NI公司的采集卡是Measurement & Automation软件不可识别的,在这种情况中,通过访问采集卡的寄存器,是实现对它驱动的一种可行方式。本节举例介绍具体实现方法。以下首先介绍这两个图标的输入、输出端口参数及其含义。,6.7.1 In Port.vi、Out Port.vi图标的调用In Port.vi、Out Po
40、rt.vi图标存放在Memory子模板上,如图612所示。这两个图标的调用路径分别如下: FunctionsAdvancedMemoryIn Port.vi FunctionsAdvancedMemoryOut Port.vi,图612 Memory子模板,6.7.2 In Port.vi、Out Port.vi图标端口参数设置 1. In Port.vi图标及其端口参数设置 In Port.vi图标及其端口参数设置如图613所示。,图613 In Port.vi图标及其输入、输出参数设置,该函数完成从指定地址读取一个字节或一个字的操作,其输入、输出口参数及其含义为:输入端口:register
41、 address:U32型。数据读入端口的物理地址。 read a byte or a word:Boolean型。当该值为True时,读取一个字;当该值为False时,读取一个字节。默认值为False。输出端口: value:U16型。该值是从指定端口读取的字(或字节)。,2Out Port.vi图标及其端口参数设置Out Port.vi图标及其端口参数设置如图614所示。该函数完成向指定地址写入一个字或字节的操作。其输入端口参数及其含义为:,图614 Out Port.vi图标及其端口参数设置,输入端口: register address:U32型。该值为待写入寄存器的物理地址。write
42、 a byte or a word:Boolean型。当该值为True时,向待写入寄存器写一个字;当该值为False时,向待写入寄存器写一个字节。默认值为Flase。value:U16型。向待写入寄存器写入的字(或字节)。,6.7.3 应用举例:用In Port.vi和Out Port.vi图标驱动数据采集卡1数据采集系统功能描述利用In Port.vi和Out Port.vi图标实现HY-1232数据采集卡的驱动。采集卡的工作方式为:软件启动、查询方式读取采样结果,采样结果存放在一个一维数组中。要求在LabVIEW下利用HY1232采集卡实现一个模拟信号(200 Hz的正弦波)的采集和波形显
43、示。并且采样点数、板基地址和通道号可设。,2前面板设计放置三个输入控制型数字控件和一个图形控件。数字控件1:用来设置HY1232数据采集卡的板基地址。基地址basea的数据类型选为U16(因为HY1232的基地址最大为3FFH),默认值设为640 (即0x280)。数字控件2:用来设置信号的输入通道。通道号channel的数据类型选为U8(因为HY1232的模拟输入通道为031),默认值为0,数据范围为031。,数字控件3:用来设置采样点数。 总采样点数samples的数据类型为I32,默认值设为100。 图形控件:用来显示采集的波形。 设计好的前面板如图615所示。,图615 数据采集系统前
44、面板,3流程图的设计 执行FunctionsAdvancedMemoryIn Port操作,调入In Port.vi图标。 执行FunctionsStructure Sequence操作,调入Sequence图标。, 执行FunctionsStructure While操作,调入While图标。流程图中用顺序控制结构(Sequence)来控制读写端口的前后次序,用While循环结构的转移寄存器(Shift Register)来记录每一次的采样值,在循环终了,以一维数组的形式输出,波形显示在Graph控件上。 设计好的流程图如图616所示。,图616 数据采集系统流程图,本 章 小 结,本章主要介绍了如下内容: Advanced子模板。 用CIN.vi图标驱动非NI卡的方法。 用In Port.vi和Out Port.vi图标驱动非NI卡的方法。,