张 朋,张振东
(上海理工大学 机械工程学院,上海 200090)
在工业迅速发展的今天,计算机技术的发展也越来越快速,其中一个重要的方面就是在工业生产过程中需要对生产数据进行采集、分析和保存。现在的计算机中一般都预留有一个或者几个PCI插槽,这样就为PCI总线设备的快速发展提供了良好的基础。本文介绍的PCI-1718数据采集卡就是这样一款基于PCI总线的设备,当然它也兼容其他总线。它是由世界工业电脑和自动化市场开发的领军企业——研华公司开发的一款高效能、多功能数据采集卡。现在,VB开发已经进入了一个相对成熟的时期,采用PCI-1718采集卡在VB编程环境下可以较容易的进行数据采集系统的开发。
本文介绍的研华PCI-1718数据采集卡不但具有测量功能,还具有控制功能。通过数据采集卡可以将外围器件的电信号转换成数字信号,并能将计算机输出的数字信号转换成模拟信号送给外围器件。它的数据流程如图1所示。
图1 数据流程图
生产工程中测量的信号有时候也不是电压信号,这时候就需要用到变送器这些标准化的设备将非电信号变成电信号,然后输入到PCI-1718中,比如压力信号和温度信号,然后板卡将模拟信号变成计算机能识别的数字信号,计算机收到这些信号后就能对这些数据进行分析或者保存。如果计算机要对外围的设备输出指令时,PCI-1718也可以将指令输出给外围设备,比如继电器或者步进电机。PCI-1718的特点主要如下:16路单端或者8路差分模拟量信号输入,12位A/D转换器,自动通道扫描,用于AI的板载FIFO,1路12位模拟量输出,16路数字量输入及输出,PCI总线数据传输,还具有定时、计数器功能。
在Active DAQ技术(研华公司)没有出现之前,在VB环境下用户访问数据采集卡一般来说有两种途径:1)用VB直接编写访问PCI设备的函数;2)调用其他语言编写的底层驱动模块来实现,比如用c或者c++编写的动态链接库函数。但这两种途径都很困难,特别是对于非计算机专业的人员来说,编写这些函数非常地困难。研华公司提供的Active DAQ控件是一套高效的数据采集控件,它可以方便的应用于一些支持ActiveX控件的软件中,比如VB、VC、Delphi等。在VB中可以通过设置Active DAQ控件的属性、事件及方法等来方便的进行编程,从而进行数据采集,主要包括模拟量的输入输出,数字量的输入输出及脉冲输入输出等。
本部分的硬件设置主要是PCI-1718数据采集卡的安装、设置,Active DAQ控件的安装。
首先运行研华公司PCI-1718驱动光盘里的DevMgr.exe程序,然后运行PCI-1718.exe程序,按照步骤安装程序。随后关闭电脑,将PCI-1718插在计算机的一个插槽里,这时计算机就会自动安装板卡。注意,在安装板卡前,要将板卡的SW1开关设置为全部是ON,将SW2开关设置为S/E,这是将板卡的Device Number设置为0,将模拟量信号的输入模式定为16路的单端输入模式(这些设置主要是在以后的数据采集过程中程序能认识板卡,且能正确地采集到需要的数据)。完成这些设置后,就可以在Advantech Device Manager中对板卡的性能进行测试了,主要包括模拟量输入功能测试、模拟量输出功能测试、数字量输入功能测试、数字量输出功能测试和计数器功能测试。
接着运行ActiveDAQ.exe,然后指定Active DAQ的安装路径,将Active DAQ安装在计算机硬盘中。安装完成该文件后,就会在VB的部件控件选项卡中出现Active DAQ控件集,主要包括 Advantech Active DAQ AI control、Advantech Active DAQ DI control、Advantech Active DAQ AO control、Advantech ActiveDAQ DO control等。 下面的数据采集软件主要是用到的Advantech Active DAQ AI control和Advantech Active DAQ DO control,两者的作用分别是采集模拟量(压力值和电压值)和输出数字量(控制继电器的闭合)。
在VB的部件选项卡中将Advantech Active DAQ AI control、Advantech Active DAQ DO control添加到工具箱中,然后放到程序中。首先在右边的属性栏中将这两个控件的DeviceNumber属性设置为1,这时程序就会自动识别板卡。因为本次数据采集的信号为压力信号和电信号,所以主要的程序代码如下。
在form_load中写入以下程序:
DAQAI1.CyclicMode = True '采用循环方式采集数据
DAQAI1.SampleRate = 100000 '设置采样频率
DAQAI1.DataType = adReal '模拟量输入返回值为实型
DAQAI1.StartChannel = 0 '打开通道号0,用来采集压力信号
DAQAI1.StartChannel = 1 '打开通道号1,用来采集电压信号
DAQAI1.OpenDevice '打开模拟量输入端口
DAQDO1.OpenDevice '打开数字量输出端口
因为需要不停的采集数据,所以需要添加一个timer控件,然后在timer控件的timer属性中写入以下程序:
u = DAQAI1.RealInput(0) '获 取AI0通道数据(电压值)
stapre = (Val(u) - c) * diff '标度变换(变成压力值)
press1 = Format(stapre, "0.0000")
press(num) = press1
m1 = DAQAI1.RealInput(1) '获取AI1(1)通道数据(电压值)
其中u为数据采集卡采集到的电压值,此电压值为压力值经压力变送器转变而来(压力变送器的接法在此就不介绍了,关键是输入输出端得正确连接及如何正确连入数据采集卡);c和diff分别为压力变送器的参数:压力下限值和输出线性比,比如:一个压力变送器的输入压力为0—4MPa,输出为4-20mA,在输出上串联一个250Ω的电阻,输出变为1—5V,则此时电压值P和压力值U的关系为:
Stapre是压力的中间值,是为了后面将保留了四位小数的压力值能保存在DataGrid中。press(num)的作用是想保留许多压力值,然后从中选出需要的压力值。m1是指采集到的被测件的电压值,如果被采集件数量多,则可以用m2、m3等,原则上PCI-1718可以采集16路的电压值。
这时候就可以将采集到的数据放到电脑里了,为了能显示这些数据,在它的初始化中写入[1,3]:
1)如果测试的物理量有两种类型(压力和电压),为了显示的有规律且对比正常,可以将他们用下面的方法显示在计算机上:
在窗体中添加一个DataGrid控件,在其初始化中写入[2,4]:
Grid(1).ColWidth(0) = 600
Grid(1).ColWidth(1) = 1000
Grid(1).ColWidth(2) = 1000
Grid(1).Col = 0
For i = 1 To 10
Grid(1).row = i
Grid(1).Text = Str$(i)
Next i
Grid(1).row = 0
Grid(1).Col = 0: Grid(1).Text = "序号 "
Grid(1).Col = 1: Grid(1).Text = "压力值 "
Grid(1).Col = 2: Grid(1).Text = "电压值
以上的程序主要是设置数据表格的列宽和表头名称。为了将数据放入DataGrid中,写以下程序:
Grid(1).Col = 1: Grid(1).row = 1
Grid(1).Text = press1
Grid(1).Col = 1: Grid(1).row = 2
Grid(1).Text = m1
2)如果测试的物理量只有一种类型,则可以用下面的方法显示数据:
加入两个text控件,然后将其text属性设置为press1。测量到物理量则加几个text控件。
图2 程序上位机界面
程序到此为止就已经可以将测量值显示在电脑上了,利用VB和PCI-1718数据采集卡以及压力传感器,笔者成功的为上海天惠汽车零部件有限公司开发了一套汽车空调压力开关实验测试软件,并起到了良好的效果。程序的上位机界面如图2所示。
剩下的就是调用Adodc控件来将这些数据存到计算机里面,这里没有用PCI-1718方面的知识,所以在此不介绍了。
PCI-1718在VB中利用的优势之处是ActiveDAQ控件的利用,它可以省去许多编程中的麻烦的代码编写,取而代之的是方便的控件引用和属性的设置。利用它来控制继电器等也很方便。VB的优势是容易上手,开发快。利用VB和PCI-1718数据采集卡,可以方便的进行数据的采集。
[1] 李江全, 等. Visual Basic数据采集与串口通信测控应用实战[M]. 北京:人民邮电出版社. 2010.
[2] 胡小江, 等. 21天学通visual basic[M]. 北京: 电子工业出版社. 2009.
[3] 李长林. Visual Basic串口通信技术与典型实例[M]. 北京: 清华大学出版社. 2006.
[4] 高春燕, 等. Visual Basic 控件参考大全[M]. 北京: 人民邮电出版社. 2006.