引言:
LabVIEW是一种在图形化的编程语言(G语言),与以往的C程序、C++或者Java等编程语言不同的是,它用各种图标、连线和框图代替文字程序代码,使得编写的程序结构比较清晰,也能比较形象地观察数据的传输过程。目前,计算机辅助实时测量技术的发展,使得实时测量和控制更加智能化、高精度和高效率。LabVIEW基于以上的特点,已经成为国内外应用最广的数据采集和控制开发的语言环境,例如基于LabVIEW的信号处理与数据分析,进行图形获取和传输等等。其中尤其以数据的采集和处理分析为主要功能而设计出来很多种实验系统,比如虚拟示波器的设计以及如何进行信号去噪,无创脉搏血氧检测,速度测量及校正等等。
我们通过对LabVIEW的初步认识,了解并熟悉了这是怎样的一个虚拟开发环境。然后演示一些简单的实验案例,不断地加深对LabVIEW编程的了解和学习。通过演示,我们再尝试着寻找一些新的想法和思路,把几个小系统用自己的方式组合成一个结构比较完整、功能更为丰富的智能电梯系统。
1、 模拟系统的结构组成
a) 控制集成箱或者外围电路与传感器
这部分结构是实验模拟系统的核心,因为实验数据的最终来源还在于外围电路中传感器的电压信号输出,而控制信号也是需要传输给这部分电路。一个实验系统关键的结构就是这部分电路的结构,而其他要做的仅仅是信号的输入与输出。我们所做的这个智能电梯系统的电路原理,实际上是借用了演示实验的电路控制集成箱。该箱子里包含了温度测量、光强测量、红外传输、模拟电梯(步进电机)、红绿灯显示等模块。不同的功能模块是一个完整的电路区域,其中有和功能相关的传感器还有相关的复杂电路。另外整个控制集成箱有数据输入与输出的端口。
b) A/D数据采集卡
所谓A/D采集卡是指模拟量(Analog)的数字化(Digital),或者是数字量的模拟量输出。一般A/D采集卡上都设计有12-16Bit分辨率的A/D转换器和D/A转换器,并且可以进行多通道(8-16路)的数据输入和输出。我们实验中的采用的U18 A/D采集卡上设计有12Bit分辨率的A/D转换器和D/A转换器,提供了16路单端或8路双端的模拟输入通道和4路D/A输出通道,A/D转换器输入信号范围:±5V、±10V、0~10V,D/A转换器输入信号范围: 0~5V、0~10V、±5V、±10V。16路开关量输入,16路开关量输出且均能上电清零。
c) LabVIEW编程设计
有了实验原理电路,其中传感器也能实时反应得到信号,并且A/D采集卡也可以采集数据了。但是如何实现控制?就需要用LabVIEW编写控制程序。程序通过A/D卡把控制信号传输给外围电路,电路反馈回来电压信号通过A/D采集卡转换成数字信号,并返回到程序里面。假如返回的数据满足程序要求就可以显示出来、或者继续往外传输控制信号。LabVIEW程序就完全成为一个可视化、图形化的“C程序”,因为它也有类似的循环、条件等语句,只不过这里都变成了结构化的图形。而且LabVIEW还可以做出一个控制面板,可以通过操作控制面板,控制后台程序的运行。
2、 模拟智能电梯系统
我们通过对演示实验的不同功能模块的探究,构想出一个类似于真实电梯的模拟系统。这个系统包含了四个功能模块。
a) 电梯操控模块
首先红绿灯显示电梯的运行状态,绿灯表示电梯上下正常的运行,当电梯停在某一层的时候黄灯闪烁,而当电梯里面的载重超过最大限制人数(质量)的时候,红灯就会亮起作为提示警告。而且电梯也尽量智能化,假如同时选中某几层时,电梯会自动按照所选择楼层的上下顺序依次停止。
b) 光强控制模块
假定电梯内有一个电灯,电梯可以随时检测实际光强信息并显示出来。为了满足不同人的需求,可以设定想要达到的光强大小,系统就会自动调节灯泡电压以使达到目标光强值。
c) 温度测量与控制模块
这是一个类似于温控风扇的控制程序。我们假定有人使用红外装置给设定了一个目标温度,然后程序会自动与实际测量的温度比较。假如目标温度低于实际温度,那么就会自动打开风扇,以达到降温的目的,而且风扇的转速与实际温度和设定温度之间的差值成正比;如果设定的目标温度高于实际温度,那么就不采取任何动作。所以该模块只有降温的功能。
d) 质量测量模块
该模块用来校准并检测物体或者人的质量。首先放置一个标准质量的物体,然后校正得到参量,再通过参量的计算得到实际质量。该质量与设定的电梯质量上限比较,如果前者小的话,电梯继续正常运行,否则电梯就会停止工作并且显示红灯,提示电梯已经超重。
3、 遇到的问题及修正
a) 在编好这几部分模块的程序后,我们到实验室进行测试。发现不管是哪个程序,都没有达到我们预期的结果。然后换过几个控制集成箱以及A/D采集卡,结果都是如此。我们使用LabVIEW里面的“高亮”功能检查数据流的变化时,发现不管怎么样的条件输入,从仪器读出来的数据都是零,也就是说貌似仪器不能起作用。一开始我们认为是A/D采集卡驱动的问题,但是当我们打开LabVIEW的演示实验并测试后,却发现能正常运行。所以,现在只能对比我们自己的程序和演示实验的程序,找出问题在哪里。最后,发现这可能是程序中“CreatID”这个子VI程序初始化的问题。
CreatID是每个模块运行前都要有的子程序,相当于给程序创建一个内存。其中DeviceID是设备编号,默认值为0,即入股有一个U18AD模板时,编号为0,如果有第二个U18模板时,编号顺次计数为1。而我们程序中把DeviceID当作了不同模块的编号了,实际上我们应该改变的是AD采集通道编号,而DeviceID应该都初始化为0。当我们给AD卡初始化的时候给不同的模块编号,用到的子VI程序为ADINT。如下图所示:
其中pADpara就是决定了AD采集通道,不同的模块要有不同的编号。而这个编号值则按照演示程序中写的设定。
b) 在光强控制程序中,由于要是电灯的亮度和设定的光强值相等,就要从一个设定的光强,反解出达到这个光强的电压值。因为我们知道输入输出信号都会转变成电压信号。但是我们已经知道光强和电压应该成正相关,即电灯两端电压越高其发光光强越大,但这种关系未必是线性的。所以我们设计了这样的算法,电压从0与5开始取中点,把这个中点给电灯,如果发出来的光强比设定光强高,那我们就要降低电压,即下一次循环我们就取0和2.5的中点,否则就取2.5与5的中点。一直循环直到和设定的光强相差不到0.5。
但是我们发现如果按照我们给定的算法,并不能够很快地得到结果。但是通过“高亮”的运行方式,发现其实并不是我们的算法有问题,而是经常通过取两端电压中点之后,还没有找到满足条件的电压值就达到边界而跳出循环,结果显示出来的光强大小与设定值相差很大。而且,重要的是从光敏电阻两端读出的电压与给电灯附加电压并没有成为严格的“及时的”正向对应关系,也就是说光强与光敏电阻两端电压不是很严格的单向对应,而是有一定的微小浮动。但是这个很严重的影响到去两端电压中点的方法。所以,最后采取了连续读50次取平均值的做法来定读出来的光敏电阻两端电压的大小。最后结果显示,虽然程序运行比较慢,但是能够很好的实现设定的光强值。
c) 关于温度控制模块,基本上这个部分的风扇转动部分和演示实验中的程序是类似的,只是多了一个转速与实际温度和设定温度的差值成正比这个功能。我们遇到的问题是如何得到转速。一直纠结于“Getcount”这个子VI程序读出来的是什么,然后就会明白为何程序中会用“前一秒”减去“后一秒”得到转速。经过查找资料,我们了解到风扇下面有一个类似于激光计数的装置,扇叶每转过一个就计数为1,所以Getcount读出来的应该是这种计数。但是这个计数随着风扇转动是不断减小的,不是累积增加的。所以只能用前一秒的计数减去后一秒的计数并除以9得到转速(9是风扇的扇叶数量)。
另外风扇貌似有个额定电压3V,超过这个值才能驱动转起来。而且发现假如上一次风扇已经转起来,下一次给风扇输入的电压0V时,风扇却还能继续转动。说明0V以及过低的电压都不能驱动风扇,所以最后我们给设定了2.5V的电压使得在温度不满足条件时风扇停止。
4、 结论
我们从最初的演示实验得到启发,再讨论构想并开始编程,然后不断地对程序进行修改和测试,最终得到了这个还算比较完整的大作品,一套模拟真实的电梯控制系统。我们基本上达到了最初预期的结果。但是对于这个系统,有些地方需要仍然做一点改进,比如光强控制模块的算法可能不够严谨,导致严重地拖慢程序运行速度并造成结果偏差很远,假如使用线性求解的方式或许可能更快一些,即假定电灯两端电压线性对应光强大小,而且0V对应于0光强,最大电压5V对应于最大光强值15。
关于LabVIEW我觉得从最初的一点不懂到现在能尝试写一些小程序,我学到了不少东西,除了关于LabVIEW程序编写的特点,还学到了如何进行计算机实测与控制的方法。我想对以后的科研工作肯定会有很大的帮助。
上一篇:基于LabVIEW6.1的数字存储示波器设计
下一篇:基于LabVIEW的灰水模糊控制系统的设计
推荐阅读最新更新时间:2024-03-30 23:28