




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
主讲人:刘利
上海交通大学机电控制研究所交通大学控制课程系列
机械、动力、车辆专业选修课当前第1页\共有106页\编于星期五\0点第五章数据采集与仪器驱动5.1数据采集与控制系统构成5.2数据采集VI的组织结构5.3基于NI的DAQ系统的实现5.4非NI的DAQ系统的实现本章小结
6/16/2023当前第2页\共有106页\编于星期五\0点5.1数据采集、控制系统的构成
采用基于PC的数据采集(dataacquisition,DAQ)、控制系统来完成实验室研究和工业控制中的测控任务的方案配置是:
工控机+数据采集/控制卡+VB/VC/LabView编程,即:数据采集/控制卡:完成一般测试仪器的数据采集和控制功能,工控机系统:完成一般测试仪器的数据分析、计算、显示、输出等功能。6/16/2023当前第3页\共有106页\编于星期五\0点数据采集控制系统的组成6/16/2023当前第4页\共有106页\编于星期五\0点模拟信号的数字化处理数据采集的核心过程就是将连续的模拟信号转换成离散的数字信号采样点太多,会占用大量内存单元;采样点太少,会使模拟信号的某些信息被丢失,出现失真现象6/16/2023当前第5页\共有106页\编于星期五\0点数据采集卡
数据采集卡的组成:①多路开关:将各路信号轮流切换到放大器的输入端,实现多参数多路信号的分时采集。②放大器:将前一级多路开关切换进入待采集信号放大(或衰减)至采样环节的量程范围内。通常实际系统中放大器为增益可调的放大器,设计者可根据输入信号不同的幅值选择不同的增益倍数。
③采样/保持器:取出待测信号在某一瞬时的值(即实现信号的时间离散化),并在A/D转换过程中保持信号不变。如被测信号变化很缓慢可不用采样/保持器。6/16/2023当前第6页\共有106页\编于星期五\0点④A/D转换器:输入的模拟量转化为数字量输出,并完成信号幅值的量化。随着电子技术的发展,目前通常将采样/保持器同A/D转换器集成在一块芯片上。以上四个部分都处在PC计算机的前向通道,完成对信号数据的采集、放大及模/数转换任务。6/16/2023当前第7页\共有106页\编于星期五\0点需要注意的两个问题1、是否使用Buffer?2、是否使用外触发启动、停止或同步操作?缓冲(Buffers):
缓冲指的是PC内存的一个区域(不是数据采集卡上的FIFO缓冲),它用来临时存放数据。使用BufferI/O的情况:需要采集或产生许多样本,其速率超过了实际显示、存储到硬件,或实时分析的速度。需要连续采集或产生AC数据(>10样本/秒),并且要同时分析或显示某些数据。采样周期必须准确、均匀地通过数据样本。6/16/2023当前第8页\共有106页\编于星期五\0点不使用BufferI/O的情况:数据组小,如每秒只从两个通道之一采集一个数据点。需要缩减存储器的开支。触发(Triggering):触发涉及初始化、终止或同步采集事件的任何方法。软件触发:可以直接用软件,例如使用布尔面板控制去启动/停止数据采集。硬件触发:让板卡上的电路管理触发器,控制采集事件的时间分配,有很高的精确度。6/16/2023当前第9页\共有106页\编于星期五\0点下列情况使用软件触发:
用户需要对所有采集操作有明确的控制。事件定时不需要非常准确。下列情况使用硬件触发:采集事件定时需要非常准确。用户需要削减软件开支。采集事件需要与外部装置同步。6/16/2023当前第10页\共有106页\编于星期五\0点输入信号类型
不同信号的测量对采集系统的要求是不同的。输入信号的种类:信号所运载信息很广泛的,比如:状态(state)、速率(rate)、电平(level)、形状(shape)、频率成分(frequencycontent)。根据信号运载信息方式的不同,可以将信号分为模拟或数字信号。数字(二进制)信号:开关信号、脉冲信号。模拟信号:直流、时域、频域信号。6/16/2023当前第11页\共有106页\编于星期五\0点6/16/2023当前第12页\共有106页\编于星期五\0点1、数字信号开关信:信号运载的信息与信号的瞬间状态有关。脉冲信号:信号包括一系列的状态转换,信息就包含在状态转化发生的数目、转换速率、脉冲宽度。2、模拟信号模拟直流信号:静止的或变化非常缓慢的模拟信号。直流信号最重要的信息是幅度.常见的直流信号有温度、流速、压力、应变等采集系统在采集模拟直流信号时,需要有足够的精度以正确测量信号电平,由于直流信号变化缓慢,用软件计时就够了,不需要使用硬件计时。6/16/2023当前第13页\共有106页\编于星期五\0点模拟时域信号
模拟时域信号的运载信息:电平随时间的变化(波形形状的特性,如斜度、峰值等),比如心脏跳动信号、视频信号。测量时域信号的采集系统包括:一个A/D转换器:A/D的分辨率要足够高,保证采集数据的精度,带宽要足够高,用于高速率采样;一个采样时钟电路:精确的采样时钟,用于以精确的时间间隔采样;一个触发器:触发器使测量在恰当的时间开始。6/16/2023当前第14页\共有106页\编于星期五\0点模拟频域信号
模拟频域信号与时域信号类似,然而,从频域信号中提取的信息是基于信号的频域内容,而不是波形随时间变化的特性。比如声音信号、地球物理信号、传输信号等。用于测量一个频域信号的系统必须有一个A/D、一个简单时钟和一个用于精确捕捉波形的触发器。系统必须有必要的分析功能,用于从信号中提取频域信息。为了实现这样的数字信号处理,可以使用应用软件或特殊的DSP硬件来迅速而有效地分析信号。6/16/2023当前第15页\共有106页\编于星期五\0点信号连接方式
1、输入信号的参考点:接地信号、浮动信号接地信号:输入信号的一端直接接地,它的参考点是系统地(如建筑物的地或大地);最常见的接地信号是通过电源插座接入的设备。浮动信号:输入信号是不连接到建筑物地等绝对参考点的电压信号,浮动信号源常见的有:电池及其供电设备、热电偶、变压器等设备。6/16/2023当前第16页\共有106页\编于星期五\0点2、差分测量系统输入信号的正负极分别接入两个通道,所有输入信号各自有自己的参考点。6/16/2023当前第17页\共有106页\编于星期五\0点3、参考地单端测量系统(RSE)用于测试浮动输入信号。被测信号一端接模拟输入通道,另一端(信号参考点)与系统地AIGND连接。6/16/2023当前第18页\共有106页\编于星期五\0点4、无参考地单端测量系统(NRSE)
它的一端接模拟输入通道,另一端接一个公用参考端AISENSE,这个参考端电压不一定于测量系统地AIGND相等。6/16/2023当前第19页\共有106页\编于星期五\0点数据采集卡的基本性能指标
数据采集卡的主要性能指标:1、模拟信号输入部分
①
模拟输入通道数。该参数表明数据采集卡所能够采集的最多的信号路数。
②
信号的输入方式。一般待采集信号的输入方式有:l
单端输入:即信号的其中一个端子接地。l
差动输入:即信号两端均浮地。l
单极性:信号幅值范围为[0,A],A为信号最大幅值。l
双极性:信号幅值范围为[–A,A]。6/16/2023当前第20页\共有106页\编于星期五\0点③
模拟信号的输入范围(量程):
一般根据信号输入特性的不同(单极性输入还是双极性输入)有不同的输入范围。如对单极性输入,典型值为0~10V,对双极性输入,典型值为–5V~5V。④
放大器增益:⑤
模拟输入阻抗:采集卡固有参数,一般不由用户设置。6/16/2023当前第21页\共有106页\编于星期五\0点混叠干扰图中采样频率500Hz,5个正弦波的频率分别为100Hz,200Hz,300Hz,375Hz和400Hz。因为100Hz,200Hz的信号频率小于fs/2,可以由离散信号还原出原始的正弦波连续信号。而300Hz,375Hz和400Hz的信号频率都大于fs/2,故离散信号重构原信号时形成了频率不同于原信号频率的信号,即混叠干扰
采样速率:式中N为多通道数据采集系统的通道数。6/16/2023当前第22页\共有106页\编于星期五\0点位数b:
A/D转换器输出二进制数的位数。当输入电压由U=0增至满量程值U=UH时,一个八位(b=8)A/D的数字输出由八个“0”变为八个“1”,共计变化2b个状态,故A/D转换器产生一个最低有效位数字量的输出改变量,相应的输入量Umin=1LSB=q(量化值)可由下式计算:分辨率:指数据采集卡可分辨的输入信号最小变化量。
2023/6/16当前第23页\共有106页\编于星期五\0点采集卡基本参数以NI公司的PCI-6071E多功能采集卡为例,介绍采集卡的一般参数:模拟输入:64路单端/32路双端,输入范围:±10V分辨率:12位采样频率:最高1.25M模拟输出:2路,12位,1M,输出范围:±10V数字I/O:8路计数器:2路,24位,基准时钟20MHz或100KHz6/16/2023当前第24页\共有106页\编于星期五\0点数据采集卡的参数设置
要使数据采集卡正确地实现数据采集的功能,必须根据实际测量的需要对一些参数进行正确设置。待设置的参数主要有数据采集卡的设备号、地址码,此外,还有如下设置。1、模拟信号输入部分①设置信号的输入方式。单端输入还是双端输入,单极性信号还是双极性信号等。②选择增益。根据输入信号幅值范围和分辨率的要求进行增益选择。③选择量程。根据输入信号是单极性还是双极性,相应选择合适的量程。6/16/2023当前第25页\共有106页\编于星期五\0点2、A/D转换部分①设定信号输入通道号。②设定采样点数。③设定采样速率。④采样结果的输出方式。采样结果可放在一个数组中,也可放在某一缓冲区中。⑤采样触发方式。一般分外触发、定时触发、软件触发等3、D/A转换部分①模拟信号的输出通道号。②模拟信号的输出幅值。此参数应设置在标称满量程范围内。③刷新速率。该参数决定所产生的模拟信号波形的“光滑度”。最快刷新速率的倒数即为响应时间。6/16/2023当前第26页\共有106页\编于星期五\0点5.2DataAcquisitionVI的组织结构
在LabVIEW平台,用软件驱动I/O接口数据采集卡,实现数据采集分以下两种情况:
LabVIEW支持的数据采集卡:如NI公司自行生产的各类数据采集卡,可利用LabVIEW自带的驱动函数驱动。设计者只需正确设置输入参数就可实现数据采集的任务,而不需编写代码程序。LabVIEW不支持的数据采集卡:可利用LabVIEW的代码嵌入功能(CIN模块)等来实现采集卡的软件驱动。6/16/2023当前第27页\共有106页\编于星期五\0点
LabVIEW数据采集模块的分类
LabVIEW的功能模板(FunctionsPalette)提供了DataAcquisition驱动数据采集卡DAQ子模板,该子模板提供了六个子模块,如图所示。6/16/2023当前第28页\共有106页\编于星期五\0点DataAcquisition子模板上的图标及名称6/16/2023当前第29页\共有106页\编于星期五\0点A/D部分易用函数中级函数高级函数实用函数6/16/2023当前第30页\共有106页\编于星期五\0点(1)易用函数
1.波形输入AIAcquireWaveform.vi图标及端口参数(单通道单点采样)6/16/2023当前第31页\共有106页\编于星期五\0点2多波形图标及其输入、输出端口参数
6/16/2023当前第32页\共有106页\编于星期五\0点(2)中级函数
1.AIConfig.vi图标及其输入、输出端口参数
6/16/2023当前第33页\共有106页\编于星期五\0点2.AIStart.vi图标及其输入、输出端口参数
6/16/2023当前第34页\共有106页\编于星期五\0点3.AIRead.vi图标及其输入、输出端口参数
6/16/2023当前第35页\共有106页\编于星期五\0点4.AIClear.vi图标及其输入、输出端口参数
6/16/2023当前第36页\共有106页\编于星期五\0点LabVIEW中的模拟输入6/16/2023当前第37页\共有106页\编于星期五\0点连续模拟输入6/16/2023当前第38页\共有106页\编于星期五\0点连续模拟输入需要注意,程序读取数据的速度要不慢于设备往缓冲区中存放数据的速度,这样才能保证连续运行时,缓冲区中的数据不会溢出。可以通过调节以下3个参数来达到上述要求:buffersize(缓存的大小)scanrate(采样速率)numberofscanstoreadatatime(每次读取的样本数)连续采集的程序模型为:6/16/2023当前第39页\共有106页\编于星期五\0点连续模拟输入程序实例6/16/2023当前第40页\共有106页\编于星期五\0点LabVIEW中的模拟输出6/16/2023当前第41页\共有106页\编于星期五\0点连续模拟输出有两种形式的连续模拟输出:第一种就是在模拟输出之前,将数字信号写入缓冲区中,然后设备连续不断地将缓冲区中的数据通过DAC重复输出。这种连续模出执行效率很高,但是需要写入的数字信号必须是整周期的,不然输出模拟信号将会不连续,在使用上不够灵活。6/16/2023当前第42页\共有106页\编于星期五\0点第二种方式:
在设备将缓冲区中数据输出的同时,不断地将数字信号写入缓冲区中,这种方式在编程上比较复杂,但是灵活性比较高,只要保证这一次写入缓冲区的数字信号和上次是连续的就行,不需要每次写入的信号是整周期的。6/16/2023当前第43页\共有106页\编于星期五\0点LabVIEW中的数字I/O一般情况下,数字I/O按照TTL逻辑电平设计,其逻辑低电平在0到0.7V之间,高电平在3.4到5.0V之间;在硬件设备上,多路(Line)数字I/O组成一组后被称为端口(Port)。一个端口由多少个数字通路组成是依据其设备而定的,在多数情况下8个数字通路组成一个端口;在LabVIEW中对数字I/O的操作非常简单,可以对整个端口进行操作,也可以对端口中的一路或多路同时进行操作。6/16/2023当前第44页\共有106页\编于星期五\0点5.3基于的NIDAQ系统的实现
I/O接口设备Lab–PC–1200型数据采集卡的软件驱动
连续信号的采集与显示演示仪。
1.功能描述该信号的采集演示仪可以采集和显示一路信号,参数为:频率范围:0~10kHz。幅值范围:0.1~6V。采用Lab–PC–1200型卡,信号由第0通道输入。6/16/2023当前第45页\共有106页\编于星期五\0点2.设计步骤在编写VI之前,需在Measurement&Automation驱动软件下,进行相关参数的设置。设置完毕后,进入LabVIEW进行前面板和流程图的设计。
1)参数设置AI设置项:因为输入信号幅值在0.1~6V,故选模拟信号输入方式为有参考地单端输入;量程为0~10V。6/16/2023当前第46页\共有106页\编于星期五\0点(a)前面板连续信号的采集与显示演示仪6/16/2023当前第47页\共有106页\编于星期五\0点连续信号的采集与显示演示仪(b)流程图6/16/2023当前第48页\共有106页\编于星期五\0点几种简单的测试程序流程模型程序逻辑简单,容易设计和理解1、顺序测试程序的模型当前第49页\共有106页\编于星期五\0点2、数据采集和后续工作并行执行的模型数据采集的速度一般来说高于处理和存储的速度。当新数据被采集来,上次的数据可能还没处理完呢。所以可以先把每次采集到的来不及处理的数据放在缓存里。当前第50页\共有106页\编于星期五\0点3、并行执行每一任务的模型所有的任务同时运行:采集新的数据、处理上一次采到的数据,显示保存上一次处理好的数据。在这个模型下,要注意第一次循环运行时处理的数据,和循环头两次运行显示存储的数据是无效的,实际循环终止条件式也要考虑到,采集的数据再两次循环后才被保存下来。当前第51页\共有106页\编于星期五\0点5.4使用NIDAQ设备和LabVIEW构造PID控制系统
PID是根据系统误差利用比例/微分/积分计算出控制量进行控制。
1.PID控制系统结构图
6/16/2023当前第52页\共有106页\编于星期五\0点
2.PID控制算法P比例控制器:输出仅与误差成正比,即u(t)=Kpε(t),对误差的反应很快,但总是存在一个稳态误差。提高Kp值使稳态误差减小,还能够增加系统的快速性;但使系统的稳定程度变差。
I积分控制器:输出与误差信号的积分成正比,只要误差还存在,就会不断输出,直到等于零,以达到消除稳态误差的目的。但积分必将影响系统的快速动态性能,对于一些系统会出现超调过大的现象。D微分控制器:输出与误差信号的变化率成正比,能预见误差的变化趋势,产生超前的控制作用。它仅对动态过程作用,通常不单独使用。而且微分控制对噪声干扰有放大作用,过强地调节微分项对系统抗干扰能力不利。
6/16/2023当前第53页\共有106页\编于星期五\0点3.LabVIEW中使用的PID控制工具包
安装LabVIEWPIDControlTookit,即可在FunctionsPalette上选择ControlDesign&Simulation,该工具包由10个VI组成。6/16/2023当前第54页\共有106页\编于星期五\0点PID.vi
利用PID.vi即可搭建一个简单的PID控制器,在该vi的输入端给入PID的3个参数值(PIDgains),系统反馈值(processvariable),实际期望值(setpoint)以及微分时间(dt),便能得到需要的输出值(output)。该vi还能控制输出值的范围。6/16/2023当前第55页\共有106页\编于星期五\0点PIDAdvanced.vi:为专家PID设计的vi,增加了一些高级的功能,如可以设定期望值的范围(setpointrange),手动控制(manualcontrol),线性化(linearity)等功能。PIDAutotuning.vi:为需要自整定的PID系统设计的,在给出一些基本要求后,具有自整定的功能PIDLead/Lag.vi:可以对PID控制器前端由系统反馈来的输入信号做动态补偿。PIDSetpointProfile.vi:可以在期望值间断性变化时使其变得平滑。6/16/2023当前第56页\共有106页\编于星期五\0点PIDControlInputFilter.vi:一个五阶的低通滤波器,放在PID控制器的processvariable前端,可以滤去小于采样率十分之一的输入值。PIDGainSchedule.vi:写入几组增益参数,并给出条件,执行时当输入信号达到条件,便使用对应的一组参数给入到PID控制器的PIDGains上。PIDOutputLimiter.vi:对PID控制器输出信号的变化速率进行控制,以保证外部接受控制信号部件的安全。PIDEGUto%.vi和PID%toEGU.vi:对实际数值和其在设定工程单元范围内占的百分比进行转换。6/16/2023当前第57页\共有106页\编于星期五\0点6/16/2023当前第58页\共有106页\编于星期五\0点5.5非NI公司的DAQ系统的实现1、直接调用LabVIEW驱动操作图标
2、直接调用LabVIEW的端口操作图标;
3、调用动态连接库;
4、利用CIN图标调用C语言驱动程序;6/16/2023当前第59页\共有106页\编于星期五\0点直接调用LabVIEW驱动操作图标(研华)
6/16/2023当前第60页\共有106页\编于星期五\0点6/16/2023当前第61页\共有106页\编于星期五\0点直接调用LabVIEW的端口InPort/OutPort.Vi
LabVIEW中有两个可直接访问底层设备的图标,即InPort.vi和OutPort.vi。分别完成从设备的物理地址直接读取和输出数据的功能。6/16/2023当前第62页\共有106页\编于星期五\0点InPort.vi、OutPort.vi图标端口参数设置
1.InPort.vi图标及其端口参数设置6/16/2023当前第63页\共有106页\编于星期五\0点该函数完成从指定地址读取一个字节或一个字的操作,其输入、输出口参数及其含义为:输入端口:
registeraddress:U32型。数据读入端口的物理地址。readabyteoraword:Boolean型。当该值为True时,读取一个字;当该值为False时,读取一个字节。默认值为False。
输出端口:value:U16型。该值是从指定端口读取的字(或字节)。6/16/2023当前第64页\共有106页\编于星期五\0点OutPort.vi图标及其端口参数设置
该函数完成向指定地址写入一个字或字节的操作。其输入端口参数及其含义为:6/16/2023当前第65页\共有106页\编于星期五\0点
CLF(CallLibraryFunctionNode)
调用库函数节点
Labview可以与多种类的编程语言进行混合开发,通过Labview中两类外部接口节点调用外部代码.调用库函数节点:调用外部动态链接库DLL文件中的函数;代码接口节点:调用外部c语言代码,CLF节点最为常用,配合其他C语言编译器基本上可以取代CIN节点6/16/2023当前第66页\共有106页\编于星期五\0点动态链接库DLL可以理解为一种存储函数、变量或类的仓库,供调用者使用。它具有这样的特点:动态链接库不用被包含在调用程序体内,而是在执行时根据需要动态地加载或卸载,这样不仅可以减少调用程序文件的体积,还可以增强调用的灵活性,并节省内存占用量。DLL文件的创建与具体编程语言和编译器无关,可以便用VC、VB也可以使用Labview编写DLL文件,只要遵守统一的DLL接口和调用规范,就可正常使用。动态链接库DLL的特点6/16/2023当前第67页\共有106页\编于星期五\0点使用CLF节点调用windowsAPI函数实例
设计步骤:(1)新建一个空.vi并保存为“CLPAPI函数.vi”,向框图内拖入一个CLF节点,在其右键菜单中选择“配置.”项,弹出配置对话框;6/16/2023当前第68页\共有106页\编于星期五\0点(2)单击对话框“函数”页面中“库名或路径”框右侧的打开文件按钮,选挥“C:\WINDOWS\system32\user32d11”文件,LabVIEW会自动搜出该DLL中所包含的所有函数,只需在“函数名”下拉列表今选择即可。本例中选择名为“MessageBoxA,的函数,用于弹出一个标标准的Windows消息框。右侧的“线程”单选框选为“在UI线程中运行’,“调用规范”单选框选为”stdcall(WINAPI)”。6/16/2023当前第69页\共有106页\编于星期五\0点(3)对话框“参数”页面用于配置函数参数,需根据所调用函数的原型来进行配置,由MSDN可知:MessageBoxA函数的原型:
IntMessageBoxA(HWNDhwnd,LpcTSTRlptext,LpcTsTRlpcaption,Uintwtype)其各个参数具体含义为
hwnd:创建消息框的父窗口的句柄,若为NuLL则没有父窗口1pText:消息框牛的字符串.1pcaPtton:消息框标题Mtype:用于指定消息框所显示图标和按钮的控制参数。(6/16/2023当前第70页\共有106页\编于星期五\0点使用该页面中的右侧下拉列表和左侧的各个按钮,将返回值和各个参数类型设置为:
Returetype:类型=数值,数据类型=无符号32位整型
hwnd:类型=数值,数据类型=无符号32拉整型,传递=值
1PText:类型=字符串,数据类型=C字符串指针
1pcaption:类型=字符串,数据类型=字符串指针
uType:类型=数值,数据类型=无符号32位整型,传递=值其他选项均使用默认值。(4)对话框“回调”页面用于指定调用方式,在此使用默认配置即可。全部配置好之后单击‘确定”按钮进行确认,可以看到CLF节点增添了一些连接端子表示新添的参数,添加适当的常量或变量连接至各个参数。6/16/2023当前第71页\共有106页\编于星期五\0点5.5.4CIN(CodeInterfaceNode)CIN的设计步骤:(1)确定CIN图标的输入、输出参数个数和数据类型。(2)生成C源代码编辑格式文件。(3)在编辑格式文件中的规定位置(/*EnterYourCodeHere*/)填写实现某种测量功能的C源代码,生成最终的C源代码文件。(4)在LabVIEW指定的环境下编译步骤(3)中生成的C源代码文件,并生成可执行文件。(5)调用CIN的功能菜单将生成的可执行文件载入CIN图标。这样就基本形成了一个具备某种功能的CIN图标。6/16/2023当前第72页\共有106页\编于星期五\0点CIN图标的调用及参数设置初始化时的CIN图标如图所示。CIN图标中表格状图案的每一行代表一个参数,左侧为参数的输入值,右侧为CIN运行后该参数的返回值。参数1输入口参数1返回值的输出口有些情况下,有的参数只能作为输出值,而没有对应的输入。如实现c=a+b运算时,c是CIN的运行结果,它只能是输出值,没有对应的输入值,这时应当将其对应的输入口置为无效。方法是,把鼠标放在相应的输入口,用鼠标右击CIN图标,弹出快捷菜单,从中选择OnlyOutput项,则该输入口变暗,表明其无效无效a返回值b返回值CIN输出b输入值a输入值6/16/2023当前第73页\共有106页\编于星期五\0点生成C源代码编辑格式文件(*.C文件)代码框架
CIN图标的快捷菜单中选择Create.CFile…项,会弹出一个文件存储对话框,键入文件名
则生成LabVIEW的C语言代码框架;然后用任意一种文本编辑器将它打开。该C文件的代码框架为*CINsourcefile*/注释#include"extcode.h"CINMgErrCINRun(float64*a,float64*b,float64*c);函数声明CINMgErrCINRun(float64*a,float64*b,float64*c) 函数体{
/*ENTERYOURCODEHERE*/填入C语言源代码
returnnoErr; }6/16/2023当前第74页\共有106页\编于星期五\0点*.C文件源代码的编译
下面介绍在VC++集成环境下编译*.C源代码的具体步骤。(1)新建一个DLL工程文件,命名为Add。打开VC++开发平台,执行File>>New操作。①进行选项:win32DynamicLinkLibrary。②添加工程文件名:Add。③location:填写工程文件的存放路径。也可以采用其默认路径D:\MicrosoftVisualStudio\MyProjects\。最后形成工程文件add.cpp。6/16/2023当前第75页\共有106页\编于星期五\0点(2)向工程文件中添加cin.obj、labview.lib、lvsb.lib、lvsbmain.def四个文件。执行Project>>AddtoProject>>Files…操作,向工程文件添加上述四个文件。这四个文件在LabVIEW安装路径下的cintools文件夹下的win32子文件夹中。(3)向工程文件中添加上面的*.C源代码文件add.c。添加方法同(2)。(4)*.C源代码文件编译前的设置。由菜单项Project>>Setting…打开设置对话框,逐项设置。①
Settingfor选项设置。AllConfiguration。②
C/C++标签页设置。用鼠标左击C/C++标签页按钮,逐项设置。6/16/2023当前第76页\共有106页\编于星期五\0点l
Category:由下拉菜单选择为Preprocessor。Additionalincludedirectories:添加LabVIEW的cintools文件夹的路径。假设LabVIEW安装路径为d:\LabVIEW,则在Additionalincludedirectories处添加路径d:\LabVIEW\cintools\。l
Category:由下拉菜单另选为CodeGeneration。Strictmemberalignment:设置为1Byte。Userun-timelibrary:设置为MultithreadedDLL。6/16/2023当前第77页\共有106页\编于星期五\0点③CustomBuild标签页设置。用鼠标左击CustomBuild标签页,逐项设置。l
Commands:输入命令行如下:d:\labview\cintools\win32\lvsbutil$(TargetName)–d“$(WkspDir)\$(OurDir)”(假设LabVIEW的安装路径为:d:\labview。)l
Outputs:输入命令行如下:$(OutDir)$(TargetName).lsb6/16/2023当前第78页\共有106页\编于星期五\0点(5)添加C源代码程序。可在Workspacewizard窗口中双击add.c,打开源文件添加C源代码。如果已经添加过,则继续下一步。(6)编译*.C源代码文件。在主菜单Build下选择Compileadd.c选项,则进行add.c程序的编译,如有语法等错误,则给出错误提示,按提示修改程序,重新编译。重复这一过程,直至没有错误。(7)生成可执行文件。在主菜单Build下选择BuildAdd.dll选项,即生成可执行文件Add.lsb,同时生成如Add.dll等所需的全部文件6/16/2023当前第79页\共有106页\编于星期五\0点1.装载可执行文件到CIN图标回到LabVIEW流程图窗口,窗口中CIN图标的快捷菜单如左图所示。从中选择LoadCodeResource…项,即弹出一个Chooseacoderesourcefile对话框,如右图所示。按照Add.工程文件存入的路径寻找Debug目录下的Add.lsb文件,然后点击“打开”按钮,于是Add.lsb文件就装入CIN图标中。至此,就完成了CIN的全部设计过程,可运行程序。6/16/2023当前第80页\共有106页\编于星期五\0点5.5.3应用举例
用CIN图标实现对HY–1232数据采集卡的驱动5.3.1HY–1232数据采集卡简介
HY–1232是一种IBM–PCXT/AT总线兼容的数据采集卡,其主要性能指标如下:
32路单端模拟输入通道;
A/D分辨率为12bit;1路模拟输出通道;D/A分辨率为12bit;D/A输出上电清零;模拟输入电压范围:5V;模拟输出电压范围:5V或0~+5V;软件触发方式;数据传输方式采用软件查询方式和中断方式。6/16/2023当前第81页\共有106页\编于星期五\0点HY–1232数据采集卡工作原理
对于HY–1232数据采集卡,在选通某模拟信号输入通道的同时即启动了该路的A/D转换。当A/D转换完成时,采集卡上的转换完成位寄存器的最高位(D7)被置为“1”。用软件查询方式查询该寄存器的D7位,当查询到该位为“1”时,即表明采样已结束,可将12bit的数据读入计算机内存中。如果采用中断方式,则在A/D转换完成后,采集卡会自动向计算机发出中断请求信号。在中断服务程序内,将12bit数据读入计算机内存。6/16/2023当前第82页\共有106页\编于星期五\0点HY–1232数据采集卡中采用的是12位A/D转换器,转换完毕的12位二进制数中的低八位AD7、AD6…AD1、AD0存放在低八位缓冲寄存器中,其高四位AD11、AD10、AD9、AD8存放在高四位缓冲寄存器中。
HY–1232数据采集卡有32路单端模拟输入通道,由八位输入通道选择寄存器低六位(C4、C3、C2、C1、C0)的二进制状态字选择被测信号的输入通道。例如,选择第4通道输入信号的二进制状态字为00100。表5-1列入了各寄存器的读/写操作功能与占用地址。6/16/2023当前第83页\共有106页\编于星期五\0点表5–1HY–1232数据采集卡板基地址分配与寄存器读/写操作功能6/16/2023当前第84页\共有106页\编于星期五\0点采集卡参数设置
(1)确定采集卡的板基地址。板基地址是CPU分配给采集卡内存空间的首地址。首地址后面的内存空间供采集卡内部寄存器分配使用。
HY–1232数据采集卡板基地址的可选范围为:200H~3FFH(512~1023)。通常选0x280,即280H(640)。
(2)确定信号的输入方式。选择设置信号是单端输入还是双端输入,单极性信号还是双极性信号。HY–1232数据采集卡只有32路单端输入一种方式,故不需要用户来设置。6/16/2023当前第85页\共有106页\编于星期五\0点(3)设置信号的输入范围。根据输入信号幅值范围和分辨率的要求进行选择。HY–1232数据采集卡信号输入范围不可选,只能为–5V~+5V,且内部的放大器增益固定为1。
(4)确定采样触发方式。一般分外触发、定时触发、软件触发等几种方式。但对于HY–1232采集卡,只有软件触发一种方式,即在往输入通道寄存器写入所选通道号的同时即触发了A/D转换。6/16/2023当前第86页\共有106页\编于星期五\0点(5)A/D转换结束的判断。对于HY–1232采集卡分查询方式和中断方式两种。
(6)采样速率的设置。对于有些数据采集卡(如Lab–PC–1200卡),用户可在其最大采样速率范围内进行选择设置,以满足实际的需要。但HY–1232数据采集卡的采样速率是固定的,用户不可选。
(7)设置信号输入通道。在0~31可选范围内选择。
(8)设置一次采集点数。6/16/2023当前第87页\共有106页\编于星期五\0点图2HY–1232数采卡单点数据采集程序流程图采集程序流程图与编程要点1.流程图HY–1232数采卡单点数据采集程序流程图如图2所示。6/16/2023当前第88页\共有106页\编于星期五\0点2.数据采集程序HY–1232数据采集卡采集一个点的C源程序如下:#include<dos.h>#include<conio.h>#include<stdio.h>voidmain(void){intbasea,channel;floatvalue,IO,hi;6/16/2023当前第89页\共有106页\编于星期五\0点basea=0x280;/*板基地址设为640*/printf(“Inputchannelnumber:”); /*设置采集通道号*/scanf(“%d”,&channel);outp(base,channel); /*往输入通道寄存器写入所选通道号,并触发A/D转换*/do/*查询A/D转换完成寄存器的最高位,若为1,则表明A/D换结束,否则继续查询*/while(!(inp(basea+5)&0x80));lo=inp(base+1); /*读入A/D结果的低八位*/hi=inp(base+2)/*读入A/D结果的高四位value=((lo+hi&0xf)*256)-2047)*10.0/4096;/*合并后,再将A/D转换的二进制结果转换成对应的模拟量值*/getch();}6/16/2023当前第90页\共有106页\编于星期五\0点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转换完毕。
6/16/2023当前第91页\共有106页\编于星期五\0点
3)A/D转换结果的合并及工程运算
hi&oxf是将A/D结果高四位(二进制数)转化为十六进制数,(hi&oxf)*256则将十六进制数转化为十进制数,lo+(hi&0xf)*256将数据合并为一个十进制数。这里,被测信号的输入范围设置为-5V~+5V,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=(27+26+24+21+20+11*256=3027,则采集卡的模拟输入电压为
value=(3027-2047)*10.0/4096=2.3926V6/16/2023当前第92页\共有106页\编于星期五\0点3具体设计方法
1.模拟信号采集系统功能描述使用CIN实现非LabVIEW支持的HY–1232数据采集卡的驱动。要求在LabVIEW下利用HY–1232采集卡实现一个模拟信号(200Hz的正弦波)的采集和波形显示。要求采样点数、板基地址和通道号可设。
2.设计提示
1)前面板设计数字控件1:用来设置HY–1232数据采集卡的板基地址。基地址basea的数据类型选为U16(因为HY–1232的基地址最大为3FFH),默认值设为640(即0x280)。数字控件2:用来设置信号的输入通道。通道号channel的数据类型选为U8(因为HY–1232的模拟输入通道为0~31),默认值为0,数据范围为0~31。数字控件3:用来设置采样点数。总采样点数samples的数据类型为32,默认值设为100。6/16/2023当前第93页\共有106页\编于星期五\0点模拟信号采集程序前面板6/16/2023当前第94页\共有106页\编于星期五\0点2)流程图设计
(1)放置CIN图标,并设置图标的输入、输出参数个数及数据类型。①
调用路径。由Functions>>Advanced>>CodeInterfaceNode路径调入CodeInterfaceNode。②
参数设置。本例中,CIN图标有三个输入参数——basea、channel、samples和一个输出参数Waveform。Waveform是一个double型数组,用于存放采集结果。参数数据类型的选择与前面板一致。6/16/2023当前第95页\共有106页\编于星期五\0点CIN图标属性对话框(2) C源代码文件的生成选择如图4所示的CIN图标快捷菜单选项中的Create.cFile选项,生成C源代码格式文件(*.C文件)。6/16/2023当前第96页\共有106页\编于星期五\0点本例生成的格式文件内容如下:/**CINsourcefile*/ #include"extcode.h"/**typedefs*/typedefstruct{ int32dimSize; float64arg1[1];6/16/2023当前第97页\共有106页\编于星期五\0点 }TD1;typedefTD1**TD1Hdl;
CINMgErrCINRun(uInt16*basea,uInt8*channel,int32*samples,TD1HdlWaveform);
CINMgErrCINRun(uInt16*basea,uInt8*channel,int32*samples,TD1HdlWaveform){
/*ENTERYOURCODEHERE*/
returnnoErr; }6/16/2023当前第98页\共有106页\编于星期五\0点从上面生成的代码可以看到,因为定义的CIN图标输出参数是数组型的,而LabVIEW向CIN传递数组类数据时,用的是句柄handle。传递数组的句柄结构是这样定义的:typedefstruct{ int32dimSize;/*数组尺寸*/ float64arg1[1];/*数组首地址指针*/ }TD1;typedefTD1**TD1Hdl;对于一个有n个元素的一维数组,用dimsize函数表示为dimsize=n。对于一个m×n的二维数组a[m][n],
用dimSize函数表示为dimSize[0]=m,dimSize[1]=n。6/16/2023当前第99页\共有106页\编于星期五\0点(3)填写C源代码将HY–1232的C语言采集程序填入到上面的C源代码框架中。最终完成的C源代码文件(sampdata.c文件)如下:
(注:设计者自行添加的语句为黑斜体,其余为自动生成的语句)/**CINsourcefile*/#include"extcode.h" /*自动生成*/#include"hosttype.h"
/*调用了系统及功能函数,因此添加此头文件*/#include"dos.h" /*调用了C语言中的inp()
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 宾馆公寓转让合同范本
- 2025年护栏清洗车合作协议书
- 代表企业签合同范例
- 代转店铺合同范本
- 农村新建楼房承包合同范本
- 北京装饰工程合同范本
- 合作厂家合同范本
- 合同范本 解释权
- 主体劳务简易合同范本
- 劳务派遣合同范本封面
- 模板安装三检记录表
- 高考语言运用题之标点符号的表达效果专题训练
- 安全费用提取、使用台账
- 部编版六年级语文下册全册课件PPT
- 北京市历年中考语文现代文之记叙文阅读25篇(2003-2021)
- 新教科版六年级下册科学全册重点题型练习课件(含答案)
- 钢筋平法识图与钢筋算量经典课件
- 现代汉语课件 副词
- 中国古典文献学(全套)
- 如何撰写课程故事94
- 年处理量48万吨重整装置芳烃精馏的工艺设计-二甲苯塔
评论
0/150
提交评论