第6章 Advanced子模板及LabVIEW与C语言的接口方法

上传人:gu****n 文档编号:243120630 上传时间:2024-09-16 格式:PPT 页数:99 大小:1,017.50KB
返回 下载 相关 举报
第6章 Advanced子模板及LabVIEW与C语言的接口方法_第1页
第1页 / 共99页
第6章 Advanced子模板及LabVIEW与C语言的接口方法_第2页
第2页 / 共99页
第6章 Advanced子模板及LabVIEW与C语言的接口方法_第3页
第3页 / 共99页
点击查看更多>>
资源描述
,第二级,第三级,第四级,第五级,第,6,章,Advanced,子模板及,LabVIEW,与,C,语言的接口方法,第,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,无法或难以实现的。针对这个问题,,LabVIEW,在,Advanced,子模板上提供了和,C,语言的接口,还提供了调用,Windows,动态链接库,DLL,函数以及实现多线程编程等高级功能。,6.2,Advanced,子模板,1.,调用路径,FunctionsAdvanced,Advanced,子模板如图,6,1,所示。,图,6,1,Advanced,子模板,6.3,CIN(,代码接口节点,),图标及其与,C,语言接口技术,CIN,是,Code Interface Node,的简称。,Advanced,子模板上提供了,CIN,图标,可以实现在,LabVIEW,中引入,C,语言源代码,因此它是,LabVIEW,图形化编程语言环境与,C,语言的接口。,C,语言是功能非常强大的文本式编程语言,当遇到某些,LabVIEW,图标难以实现的功能时,就可以通过,CIN,图标在,LabVIEW,中引入,C,语言源代码来实现,从而大大提高了,LabVIEW,数据处理的整体功能。,作为,LabVIEW,与,C,编程语言的接口图标,,CIN,是通过输入、输出端口实现两种语言之间的数据传递的。输入、输出端口的个数可由设计者根据实际需要确定。当,LabVIEW,的程序运行到,CIN,节点时,数据由,CIN,的输入端口传递给,C,源代码图标,程序转去执行,C,源代码,代码执行完后,得到的数据结果由,CIN,的输出端口返回给,LabVIEW,。,CIN,的设计方法大致包括以下几个步骤:,(1),确定,CIN,图标的输入、输出参数个数和数据类型。,(2),生成,C,源代码编辑格式文件。,(3),在编辑格式文件中的规定位置,(/*,Enter Your Code Here*/),填写实现某种测量功能的,C,源代码,生成最终的,C,源代码文件。,(4),在,LabVIEW,指定的环境下编译步骤,(3),中生成的,C,源代码文件,并生成可执行文件。,(5),调用,CIN,的功能菜单将生成的可执行文件载入,CIN,图标。这样就基本形成了一个具备某种功能的,CIN,图标。,本章以实现,c=a+b,为例,介绍,CIN,图标的使用方法,同时着重介绍它在驱动数据采集卡方面的应用。,LabVIEW,支持的数据采集卡,(,当然,NI,公司生产的数据采集卡在其中之列,),,是,Measurement & Automation,软件检验时可识别的,从而是可以进行参数设置的数采卡。这种数采卡可以调用第,4,章介绍的,Data Acquisition,子模板上的数据采集图标进行各种方式的数据采集。,LabVIEW,不支持的数据采集卡,,Measurement & Automation,软件检验时是不可识别的,当然非,NI,公司生产的数据采集卡通常都属此列,则一般需要设计者自己开发驱动程序。通常驱动程序是采用,C,语言编写的,用,CIN,接口图标驱动数据采集卡的实质与关键步骤是,将,C,语言编写的驱动程序添入规定的位置,/*,Enter Your Code Here*/,。,6.4,CIN,图标的调用及参数设置,6.4.1,CIN,图标的调用路径,FunctionsAdvancedCode Interface Node,Code Interface Node,子模板如图,6,2,所示。,图,6,2,Code Interface Node,子模板,6.4.2,CIN,图标及其端口参数设置,初始化时的,CIN,图标如图,6,3,所示。,CIN,图标中表格状图案的每一行代表一个参数,左侧为参数的输入值,右侧为,CIN,运行后该参数的返回值。,参数,1,输入口,参数,1,返回值的输出口,图,6,3,初始时的,CIN,图标,6.4.2.1,设置,CIN,图标的输入、输出参数个数,这里以实现,c,a+b,运算为例来说明,CIN,图标参数的添加方法。,初始时,,CIN,只有一个参数的输入、输出口。欲增添新的参数输入、输出口,可以利用工具模板上的选择工具拖放,CIN,图标来实现,也可以从,CIN,图标的快捷菜单中选择,Add Parameter,选项来添加。,有些情况下,有的参数只能作为输出值,而没有对应的输入。当欲实现,c,a+b,运算时,则,c,参数只能是输出值,它是,CIN,的运行结果,没有对应的输入值,这时应当将其对应的输入口置为无效。方法是,把鼠标放在相应的输入口,用鼠标右击,CIN,图标,弹出快捷菜单,从中选择,Only Output,项,则该输入口变暗,表明其无效。图,6,4,为本例的,CIN,图标输入、输出口的设置情况。,无效,a,返回值,b,返回值,CIN,输出,b,输入值,a,输入值,图,6,4,添加参数后的,CIN,图标,6.4.2.2,设置参数的数据类型,CIN,输入,(,输出,),口参数的数据类型由连接在该输入,(,输出,),口上的控件的数据类型决定。例如,如果某参数的输入,(,输出,),端口连接在一个数据类型为,int32,的数字控件上,则该参数的数据类型为,int32,型。,有些时候,设计者并不希望将,CIN,的运行结果显示到面板上,而只是作为整个程序的一个中间运行结果传递下去。这时可以在流程图上,用鼠标右击该控件对应的终端,从弹出的快捷菜单中选择,Hide Control,项将该控件从前面板上隐藏掉。,6.5,CIN,设计步骤,6.5.1,生成,C,源代码编辑格式文件,(*.,C,文件,),代码框架,从,CIN,图标的快捷菜单中选择,Create.C File,项,会弹出一个文件存储对话框,键入文件名,(,本例中文件名设为,add.c),,,则生成,LabVIEW,的,C,语言代码框架;然后用任意一种文本编辑器将它打开。该,C,文件的代码框架为,/*,CIN 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,*/,#include ,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,文件源代码的编译,*,.,C,文件源代码的编译主要是在以,C,语言为主的开发系统中进行。编译完毕形成一个可以和,CIN,图标进行动态连接的工程文件,*,.,lsb,。,下面介绍在,VC+,集成环境下编译,*,.,C,源代码的具体步骤。,(1),新建一个,DLL,工程文件,命名为,Add,。,打开,VC+,开发平台,执行,FileNew,操作。,进行选项:,win32 Dynamic Link Library,。,添加工程文件名:,Add,。,location,:,填写工程文件的存放路径。也可以采用其默认路径,D:Microsoft Visual Studio,MyProjects,。,最后形成工程文件,add.,cpp,。,(2),向工程文件中添加,cin,.,obj,、,labview,.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,:,由下拉菜单选择为,Preprocessor,。,Additional include directories,:,添加,LabVIEW,的,cintools,文件夹的路径。,假设,LabVIEW,安装路径为,d,:,LabVIEW,,,则在,Additional include directories,处添加路径,d:,LabVIEW,cintools,。,l,Category,:,由下拉菜单另选为,Code Generation,。,Strict member alignment,:,设置为,1,Byte,。,Use run-time library,:,设置为,Multithreaded DLL,。,Custom Build,标签页设置。用鼠标左击,Custom Build,标签页,逐项设置。,l,Commands,:,输入命令行如下:,d:,labview,cintools,win32,lvsbutil,$(,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,程序的编译,如有语法等错误,则给出错误提示,按提示修改程序,重新编译。重复这一过程,直至没有错误。,(7),生成可执行文件。,在主菜单,Build,下选择,Build Add.,dll,选项,即生成可执行文件,Add.,lsb,,,同时生成如,Add.,dll,等所需的全部文件。,图,6,5,CIN,图标主菜单,1.,装载可执行文件到,CIN,图标,回到,LabVIEW,流程图窗口,窗口中,CIN,图标的快捷菜单如图,6,5,所示。从中选择,Load Code Resource,项,即弹出一个,Choose a code resource file,对话框,如图,6,6,所示。按照,Add.,工程文件存入的路径寻找,Debug,目录下的,Add.,lsb,文件,然后点击“打开”按钮,于是,Add.,lsb,文件就装入,CIN,图标中。,图,6,6,Choose a code resource file,对话框,2.,可执行文件的重新装载及错误文件的清除,如果在装载完可执行文件后,你对源代码又进行了修改,则必须重新编译,重新装载。,在重新装载的时候,,CIN,图标在再次装载时,它的快捷菜单发生了相应的改变,如图,6,7,所示。利用其中的,Reload Code Resource (,对同一可执行文件,),或,Reload Code Resource From (,如果是其它可执行文件,),选项,可实现可执行文件的重新装载。,图,6,7,Reload Code Resource,菜单,6.5.5,运行程序,至此,就完成了,CIN,的全部设计过程,可运行该程序,改变,a,、,b,的值,察看,c,的输出显示。,关于数据采集卡的驱动程序,,LabVIEW,提供的开发方式有两个:,利用端口操作图标,In Port.vi,和,Out Port.vi,开发数据采集卡驱动程序。这种方法实现起来比较简单,适于采集精度要求不高的情况,但对于精度要求高且较复杂的采集系统,如包含对物理内存大量操作的情况,这种方法是远远不能满足设计需要的。,采用,LabVIEW,提供的,CIN (Code Interface Node),图标开发数据采集卡驱动程序。这种方法适用于精度要求高且功能复杂的采集系统的设计,是一种理想的设计方法。,本章我们以非,NI,公司生产的,HY,1232,型数据采集卡的驱动为例,重点介绍利用,CIN (,代码接口,),子模板驱动数据采集卡的方法。最后简单介绍利用,In Port.vi,和,Out Port.vi,两个端口的操作图标实现数据采集卡驱动的方法。,CIN,子模板是,LabVIEW,与,C,语言之间的一种接口图标。设计者可以将那些在,LabVIEW,下难以实现和无法实现的功能,利用,C,语言来完成,然后再将结果通过,CIN,传递回,LabVIEW,。,在实际设计应用中,经常会遇到某些想实现的功能,利用,LabVIEW,中现成的图标无法实现,而利用其它编程语言则很容易实现的情况,这时就需要利用,LabVIEW,中的接口图标以实现,LabVIEW,和其它编程语言之间的连接。,CIN,图标就是其中的一种。,6.6,应用举例,:,用,CIN,图标实现对,HY,1232,数据采集卡的驱动,6.6.1,HY,1232,数据采集卡简介,HY,1232,是一种,IBM,PC 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,HY,1232,数据采集卡工作原理,将,HY1232,数据采集卡插入,PC,机的,PCI,插槽中,待采集的多路模拟信号通过一个,40,芯的输入输出插座分别接到采集卡内部的,32,选,1,的模拟输入多路开关上。通过软件设置,选通某模拟输入通道。对于,HY1232,数据采集卡,在选通某模拟信号输入通道的同时即启动了该路的,A/D,转换。当,A/D,转换完成时,采集卡上的转换完成位寄存器的最高位,(,D7),被置为“,1,”,。用软件查询方式查询该寄存器的,D7,位,当查询到该位为“,1,”,时,即表明采样已结束,可将,12,bit,的数据读入计算机内存中。如果采用中断方式,则在,A/D,转换完成后,采集卡会自动向计算机发出中断请求信号。在中断服务程序内,将,12,bit,数据读入计算机内存。,HY,1232,数据采集卡中采用的是,12,位,A/D,转换器,转换完毕的,12,位二进制数中的低八位,AD7,、,AD6,AD1,、,AD0,存放在低八位缓冲寄存器中,其高四位,AD11,、,AD10,、,AD9,、,AD8,存放在高四位缓冲寄存器中。,HY,1232,数据采集卡有,32,路单端模拟输入通道,由八位输入通道选择寄存器低六位,(,C4,、,C3,、,C2,、,C1,、,C0),的二进制状态字选择被测信号的输入通道。例如,选择第,4,通道输入信号的二进制状态字为,00100,。表,6,1,列入了各寄存器的读,/,写操作功能与占用地址。,表,6,1,HY,1232,数据采集卡板基地址分配与寄存器读,/,写操作功能,6.6.1.2,对采集卡进行参数设置,(1),确定采集卡的板基地址。板基地址是,CPU,分配给采集卡内存空间的首地址。首地址后面的内存空间供采集卡内部寄存器分配使用。,HY,1232,数据采集卡板基地址的可选范围为:,200,H,3FFH (512,1023),。,通常选,0,x280,,,即,280,H (640),。,(2),确定信号的输入方式。选择设置信号是单端输入还是双端输入,单极性信号还是双极性信号。,HY,1232,数据采集卡只有,32,路单端输入一种方式,故不需要用户来设置。,(3),设置信号的输入范围。根据输入信号幅值范围和分辨率的要求进行选择。,HY,1232,数据采集卡信号输入范围不可选,只能为,5,V,+5 V,,,且内部的放大器增益固定为,1,。,(4),确定采样触发方式。一般分外触发、定时触发、软件触发等几种方式。但对于,HY,1232,采集卡,只有软件触发一种方式,即在往输入通道寄存器写入所选通道号的同时即触发了,A/D,转换。,(5),A/D,转换结束的判断。对于,HY,1232,采集卡分查询方式和中断方式两种。,(6),采样速率的设置。对于有些数据采集卡,(,如,LabPC1200,卡,),,用户可在其最大采样速率范围内进行选择设置,以满足实际的需要。但,HY1232,数据采集卡的采样速率是固定的,用户不可选。,(7),设置信号输入通道。在,0,31,可选范围内选择。,(8),设置一次采集点数。,6.6.1.3,采集程序流程图与编程要点,1,流程图,HY,1232,数采卡单点数据采集程序流程图如图,6,8,所示。,图,6,8,HY,1232,数采卡单点数据采集程序流程图,2.,数据采集程序,HY,1232,数据采集卡采集一个点的,C,源程序如下:,#,include ,#include ,#include ,void main(void),int basea, channel;,float value,,,lo,hi;,basea,=0x280; /*,板基地址设为,640*/,printf,(“Input channel number:”); /*,设置采集通道号,*,/,scanf,(“%d”,outp,(base, channel); /*,往输入通道寄存器写入所选通道号,并触发,A/D,转换,*,/,do,/*,查询,A/D,转换完成寄存器的最高位,若为,1,,则表明,A/D,;,换结束,否则继续查询,*,/,while(! (,inp,(,basea,+5) ,lo=,inp,(base+1); /*,读入,A/D,结果的低八位,*,/,hi=,inp,(base+2); /*,读入,A/D,结果的高四位,*,/,value=(lo+hi,/*,合并后,再将,A/D,转换的二进制结果转换,成对应的模拟量值,*,/,getch,( );,3.,编程要点说明,1),outp,(x,y),和,inp,(x),函数,C,语言接口函数,outp,(x,y),函数的功能是把函数,y,送入端口地址为,x,的寄存器中。,outp,(base,channel),是把通道号,channel (,程序中是由前面板控件设置,),送入地址为,base,的输入通道选择寄存器,并启动该通道的,A/D,转换。,inp,(x),函数的功能是从端口地址为,x,的寄存器中读取二进制数据。,inp,(base+1),从地址为,base,1,的低八位寄存器读取,A/D,转换结果。,inp,(base+2),从地址为,base+2,的高四位寄存器读取,A/D,转换结果二进制数的高四位,并清除,A/D,完成位寄存器和中断请求信号。,inp,(base+5),从地址为,base+5,的完成位寄存器读取完成标志位,I/O,显示值,当,IO=0,时,表示,A/D,转换未完成;当,IO=1,时,表示,A/D,转换完毕。,2),A/D,转换完成的判别,采用,Do while,循环语句如下:,Do,while(! (,inp,(,basea,+5) ,句中,0,x80,的十进制数为,128,,相应二进制数为,10000000,,故,inp,(base+5)&0x80,屏蔽了低七位,保留了第八位结果,IO,,,则,:,IO=0 (A/D,转换未完毕,),时,条件,! (,inp,(,basea,+6) & 0x80),为真,,Do,while,循环继续;,IO=1 (A/D,转换完毕,),时,条件,! (,inp,(,basea,+6) & 0x80),为假,,Do,while,循环停止。,3),A/D,转换结果的合并及工程运算,hi&,oxf,是将,A/D,结果高四位,(,二进制数,),转化为十六进制数,,(,hi&,oxf,) *256,则将十六进制数转化为十进制数,,lo+ (hi&0xf) *256,将数据合并为一个十进制数。这里,被测信号的输入范围设置为,5,V,5 V,,,HY,1232,卡的分辨率为,12,位,则量化值,Q,为,10.0/4096 (,V),,,而十进制数也需减去满量程的一半:,4096/2,2048,,由于十进制数从,0,开始,故满量程的一半是,2047,。因此,用,value=(lo+hi&,oxf,)*256)-2047)*10.0/4096,就可以将,A/D,输出的二进制数转换为与模拟输入电压相对应的电压值。,例如,若,hi=1011,、,lo=11010011,那么,hi&,oxf,=0xb,,,(hi&,oxf,) *256=11*266,,,lo+,(hi&,oxf,)*256=(2,7,+2,6,+2,4,+2,1,+2,0,+11*256=3027,,,则采集卡的模拟输入电压为,value=(3027-2047)*10.0/4096=2.3926V,6.6.2,具体设计方法,1.,模拟信号采集系统功能描述,使用,CIN,实现非,LabVIEW,支持的,HY,1232,数据采集卡的驱动。要求在,LabVIEW,下利用,HY,1232,采集卡实现一个模拟信号,(200,Hz,的正弦波,),的采集和波形显示。要求采样点数、板基地址和通道号可设。,2.,设计提示,1),前面板设计,放置三个输入控制型数字控件和一个图形控件。,数字控件,1,:用来设置,HY,1232,数据采集卡的板基地址。,基地址,basea,的数据类型选为,U16 (,因为,HY,1232,的基地址最大为,3,FFH),,,默认值设为,640 (,即,0,x280),。,数字控件,2,:用来设置信号的输入通道。,通道号,channel,的数据类型选为,U8 (,因为,HY,1232,的模拟输入通道为,0,31),,默认值为,0,,数据范围为,0,31,。,数字控件,3,:用来设置采样点数。,总采样点数,samples,的数据类型为,32,,默认值设为,100,。,图形控件:用来显示采集的波形。,设计好的前面板如图,6,9,所示。,图,6,9,模拟信号采集程序前面板,2),流程图设计,(1),放置,CIN,图标,并设置图标的输入、输出参数个数及数据类型。,调用路径。,由,FunctionsAdvancedCode Interface Node,路径调入,Code Interface Node,。,参数设置。,本例中,,CIN,图标有三个输入参数,basea,、,channel,、,samples,和一个输出参数,Waveform,。,Waveform,是一个,double,型数组,用于存放采集结果。参数数据类型的选择与前面板一致。,(2),C,源代码文件的生成。选择如图,6,10,所示的,CIN,图标快捷菜单选项中的,Create.c File,选项,生成,C,源代码格式文件,(*.,C,文件,),。,图,6,10,CIN,图标属性对话框,本例生成的格式文件内容如下:,/*,*,CIN source file,*/,#include ,extcode,.h,/*,*,typedefs,*/,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,图标输出参数是数组型的,而,LabVIEW,向,CIN,传递数组类数据时,用的是句柄,handle,。,传递数组的句柄结构是这样定义的:,typedef struct,int32,dimSize,; /*,数组尺寸,*,/,float64 arg11; /*,数组首地址指针,*,/,TD1;,typedef,TD1 *TD1Hdl;,对于一个有,n,个元素的一维数组,用,dimsize,函数表示为,dimsize,n,。,对于一个,m,n,的二维数组,amn,,,用,dimSize,函数表示为,dimSize,0=m,,,dimSize,1=n,。,(3),填写,C,源代码。将,6.6.1.3,节中的,HY,1232,的,C,语言采集程序填入到上面的,C,源代码框架中。最终完成的,C,源代码文件,(,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;,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 */,int16,dbyte,; /*,定义,16,位字,(,A/D,转换结果,),*/,float64 value;,/*,定义变量,存放单点的,A/D,转换结果对应的模拟量,*,/,float64 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,*/,/*,软件查询式采集程序,*,/,for(i=0;iAdvancedMemoryIn Port.vi,FunctionsAdvancedMemoryOut Port.vi,图,6,12,Memory,子模板,6.7.2,In Port.vi,、,Out Port.vi,图标端口参数设置,1.,In Port.vi,图标及其端口参数设置,In Port.vi,图标及其端口参数设置如图,6,13,所示。,图,6,13,In Port.vi,图标及其输入、输出参数设置,该函数完成从指定地址读取一个字节或一个字的操作,其输入、输出口参数及其含义为:,输入端口:,register address,:,U32,型。数据读入端口的物理地址。,read a byte or a word,:,Boolean,型。当该值为,True,时,读取一个字;当该值为,False,时,读取一个字节。默认值为,False,。,输出端口:,value,:,U16,型。该值是从指定端口读取的字,(,或字节,),。,2,Out Port.vi,图标及其端口参数设置,Out Port.vi,图标及其端口参数设置如图,6,14,所示。,该函数完成向指定地址写入一个字或字节的操作。其输入端口参数及其含义为:,图,6,14,Out Port.vi,图标及其端口参数设置,输入端口:,register address,:,U32,型。该值为待写入寄存器的物理地址。,write 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,下利用,HY,1232,采集卡实现一个模拟信号,(200,Hz,的正弦波,),的采集和波形显示。并且采样点数、板基地址和通道号可设。,2,前面板设计,放置三个输入控制型数字控件和一个图形控件。,数字控件,1,:用来设置,HY,1232,数据采集卡的板基地址。,基地址,basea,的数据类型选为,U16(,因为,HY,1232,的基地址最大为,3,FFH),,,默认值设为,640 (,即,0,x280),。,数字控件,2,:用来设置信号的输入通道。,通道号,channel,的数据类型选为,U8(,因为,HY,1232,的模拟输入通道为,0,31),,默认值为,0,,数据范围为,0,31,。,数字控件,3,:用来设置采样点数。,总采样点数,samples,的数据类型为,I32,,,默认值设为,100,。,图形控件:用来显示采集的波形。,设计好的前面板如图,6,15,所示。,图,6,15,数据采集系统前面板,3,流程图的设计,执行,FunctionsAdvancedMemoryIn Port,操作,调入,In Port.vi,图标。,执行,FunctionsStructure Sequence,操作,调入,Sequence,图标。,执行,FunctionsStructure While,操作,调入,While,图标。,流程图中用顺序控制结构,(,Sequence),来控制读写端口的前后次序,用,While,循环结构的转移寄存器,(,Shift Register),来记录每一次的采样值,在循环终了,以一维数组的形式输出,波形显示在,Graph,控件上。,设计好的流程图如图,6,16,所示。,图,6,16,数据采集系统流程图,本 章 小 结,本章主要介绍了如下内容:,Advanced,子模板。,用,CIN.vi,图标驱动非,NI,卡的方法。,用,In Port.vi,和,Out Port.vi,图标驱动非,NI,卡的方法。,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 小学资料


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!