2024年5月24日发(作者:)
维普资讯
基于VB的数据采集软件的开发
工场经验
唐昌松
(石油大学研究生院,山东东营257062)
Development of Data Collection Soft Based on VB
TANG Chang—song
(Graduate School,University of Petroleum,Dongying 257062,China)
摘要:介绍了VB在计算机测控系统中对硬件
Shell函数的语法为:Shell(pathname[,win—
I/O端口访问的两种方法,并给出了用VB开发数
dowstyle]),其中,pathname是要执行的程序名,可
据采集软件的实例。
能还包括目录或文件夹及驱动器;windowstyle表
关键词:VB;数据采集;DLL
示在程序运行时窗口的样式。
中图分类号:TP274
Shell是以异步方式执行其它程序的,即用
文献标识码:B
Shell启动的程序可能还没有完成执行过程,就已经
文章编号:lOOl一2257(2002)02—0059—02
执行到Shell语句的后续语句。为此,可通过调用
Abstract:This article introduces two methods
Windows API函数监视外部程序的运行状态来解
of using VB to visit I/O ports of hardware in com—
决这个问题。
puter measurement and control system,and pro—
1.2调用动态链接库(DLL)
vides an example of using VB to develop data col—
DLL类似运行函数库,是在运行期间被链接进
lection soft.
来的。它是一种基于Windows的应用程序模块,只
Key words:VB;data collection;DI I
包括供应用程序运行时装人DI I 的有关信息,并非
是源代码的复制。因此,在Windows下使用DI I 可
以使多个应用程序之间共享代码和资源,从而提高
0 引言
运行效率。
VB(visual basic)是基于Windows环境下的一
目前常用的DI L开发工具为Visual C++。
种可视化,面向对象,采用事件驱动的编程工具,它
用户可自己创建满足需要的DI I ,也可直接利用第
具有高效、简单易学及功能强大的特点。但是,VB
三方提供的DI I 。在VB程序中,只要对DI I 进行
不具备直接对硬件I/O端口进行访问的能力。而在
正确的声明,便可象使用VB本身的函数一样使用
一
些工业测控系统中,需要计算机从现场获取实际
DLI 中的函数。
数据或发出控制命令,这就需要计算机实现对I/O
2数据采集软件的开发
端口的控制与访问。因此对VB的数据采集软件进
行了开发,很好地解决了这一问题。
在此,采用调用动态链接库的方法,并利用
AC1057数据采集卡提供的DI I 来进行数据采集
1 VB访问硬件I/O端口的两种方法
软件的开发。
1.1调用外部应用程序
2.1数据采集卡简介
VB中提供有调用外部应用程序的函数
AC1057是一款通用12位A/D板,具有16路
“Shell”,用来执行一个可执行性文件。可先用汇编
多种量程输入,24路可编程数字I/O(8255),可方
或其它语言编写出对端口访问的可执行文件,然后
便地构成模拟信号采集系统。AC1057可提供双极
由Shell函数调用。
性输入(输入幅度:一5V~+5V)和单极性输入(输
入幅度O~10V),并可分别通过跳线器选择1、2、1O
收稿日期:2001…11 13
倍3种放大倍率和I/O地址。
《机械与电子92002(2)
・59。
维普资讯
2.2 VB调用DLL技术
AC1057专为VB提供了实现1/O端口操作的
动态链接库adoS2.dU。包括如下函数:
a.data=vbinp(adr):8位数据读入操作。
b.data=vbinpw(adr):16位数据读人操作。
c.、bout adr,data:8位数据写入操作。
d.vboutw adr,data:16位数据写入操作。
其中,adr:I/O端口地址,data:I/O数据。
在VB中调用DI I 时,DI L文件必须拷贝到
Windows的System目录下,或在声明文件中加入
DI I 所在文件的路径全名。而且,应在全局模块或
窗体层的说明部分中,用Declare语句声明所要使
用的DI I 中的函数。例如:
Declare Function vbinp Lib acio32.dll (By—
Val port As Integer)As Integer
其中,vbinp是从I/O端口完成数据读人的函
数名,acio32.dll是所调用的动态联接库名。对于
DI L中无返回值的函数,应用Sub代替Function。
同时,声明语句中的参数、返回值的类型必须与
DI I 中相应的参数、返回值的类型一致。
2.3利用定时器实现定时采集
在VB.中,可利用定时器的Interval属性设置
每秒钟采集的次数,把采集段程序放在定时器的
Timer事件中来实现数据采集。对于一般计算机来
讲,由于受系统硬件能力的限制,定时器每秒钟最多
只能产生18个事件,若时间间隔设置得过小,将达
不到预期效果。
在实时性要求较高,需要精确定时的场合,可采
用的方法有:
a.对Timer控件的定时进行校准。
b.利用Windows内部函数CreateSys—
temTimer()与KillSystemTimer()。
c.调用Window API函数timeSetEVent()和
timeKillEvent()。
2.4应用实例
下面给出数据采集软件程序中部分主要源代码
(以采集某0 ̄500 C的温度信号为例)。设定A/D
板为单极性输入方式,I/O端口基地址为240H,放
大器放大倍率为1。
mOdu e1中声日月.
D
ec1are Sub Vbout Lib”aci
。
o32・dll (ByVa1
・6O・
port As Integer。ByVal data As Integer)
Declare Function vbinp I ib”acio32.dll”(By—
Val port As Integer)As Integer
、DI I 文件已拷贝到Windows的System目录
下
采集程序部分: ’
Private Sub TimetWD Timer()
chwd一1、设定温度通道号为1
vbout&H240,chwd、输入通道号
vbout&H244,0、启动A/D转换
J一1
Do whi1e J<>0、判断A/D转换是否结束
J—vbinp( ̄H240)And 1
Loop
adwh—vbinp(&H244)、A/D结果高8位送
人变量adwh
adwl—vbinp( ̄H245)、A/D结果低4位送
人变量adwl
adwdata—adwh 16+adwl/16、12位A/D
转换结果
vWD=adwdata。10/4095、对应的电压
WD---500 vWD/5、标度变换为实际温度
Open”wd.dat”For Append As#1
write#1,WD、将温度写入数据文件以便
后续处理
Close#1
End Sub
3 结束语
笔者将上述方法应用于某试验机数据采集系统
中,为数据处理及试验结果分析提供了原始数据。其
人机交互界面友好,程序运行稳定可靠,系统功能组
态方便,取得了良好的效果。
参考文献:
[1]邵钟武,等.数据采集系统[M].山东:石油大学出版
社,1 998.
[2]Thayer Rob.Visual Basic 6揭密EM].曾湘宁,译.北
京:电子工业出版社,1999.
生
作者简介:唐昌松 (1
二 化
977 男'
.
研 机
~一……… …~
四川省仪陇县人'硕士研究
《机械与电子}2002(2)
发布者:admin,转转请注明出处:http://www.yc00.com/web/1716524334a2728163.html
评论列表(0条)