基于VB的数据采集卡的应用

来源:本站
导读:目前正在解读《基于VB的数据采集卡的应用》的相关信息,《基于VB的数据采集卡的应用》是由用户自行发布的知识型内容!下面请观看由(电工技术网 - www.9ddd.net)用户发布《基于VB的数据采集卡的应用》的详细说明。
简介:本文介绍了研华813B数据采集卡及其工作原理,VB在计算机测控系统中对硬件I/O端口访问的方法,并给出了用VB开发数据采集软件的实例,具有一定的实用性。

-PCL-813B(简称813B)是研华公司推出的高性能、多功能数据采集卡。VB是一种高效、易学易用的开发工具。在一些工业测控系统中,需要计算机从现场获取实际数据或发出控制命令,这就需要计算机实现对I/O端口的控制与访问,但是VB不具备直接对硬件地址进行访问的功能,可以利用VC++编写访问I/O接口地址的程序,创建动态链接库(DLL),利用DLL进行调用来实现端口访问与控制。本文以此卡为例,详细介绍了在VB环境下的应用。

813B数据采集卡简介

---813B是基于ISA结构的,采用了12位分辨率A/D转换器AD574,转换时间为25μs,数据传送速率达25kbps,输入范围为双极性±5V、±2.5V、±1.25V和±0.625V,单极性为0~10V、0~5V、0~2.5V和0~1.25V,A/D转换触发方式为软件触发,支持32路单端隔离模拟量输入,最大连续过压为±30V。卡上的一个DIP开关(SW1)和1个跳线器(JP100)可由用户自行设置,以满足不同的需要。

I/O基地址设置

---813B使用16个连续的I/O地址,其I/O基地址由开关SW1选择,有效地址从000到3F0(十六进制)。SW1开关共有6个微型拨码开关,其拨码组合与对应的基地址有关系。

---如使用单极性输入,把开关置在“U”位置,此时允许0~10V、0~5V、0~1.25V模拟量输入。如放大倍数是1,允许输入0~10V;放大倍数是2,允许输入0~5V;放大倍数8,允许输入0~1.25V。放大倍数由软件控制。

DLL的编写

---在VB中要利用DLL进行调用来实现板卡的访问与控制,首先要编写DLL。在工业控制中对计算机的底层硬件进行访问,以及利用各种控制接口板进行数据采集和控制时间,仅靠VB是无法解决的,需要使用动态链接库来实现。

---创建一个DLL应包括三个基本成分,分别是入口函数Libmain、出口函数WEP和用户自己的功能函数。

---C++5.0开发的DLL的完整的程序清单如下。

∥DLL源文件IO.CPP

#include <windows.h>

#include<conio.h>

int FAR PASCAL outport(unsigned)

short port;

int FAR PASCAL outport(unsigned short port,int databyte);

∥D11EntryPoint函数

BOOL WINAPI D11EntryPoint

(HINSTANCE hD11,

DWORDdwReason,

LPVOID Reserved)

switch(dwReason)

case DLL_PROCESS_ATTACH:

break;

case DLL_PROCESS_DETACH:

break;

return TRUE;

∥两个功能函数

int FAR PASCAL inport(unsigned short port)

reture(_inp(port);

)

int FAR PASCAL outport(unsigned short port,int databyte)

int a;

a=_outp(port,databyte);

return a;

∥模块定义文件IO.DEF

CODE PRELOAD MOVEABLE DISCARDABLE

DATA PRELOAD SINGLE

EXPORTS

inport

outport

VB中的DLL调用

---DLL函数或过程必须在全局模块(*.BAS)中正确说明才有效。VB是用Declare语句把一个DLL函数引入VB中的,它告诉VB在哪里找到DLL函数,并且让VB知道DLL需要哪种类型的参数,同时返回哪种类型的值。当某个DLL函数用Declare语句正确声明以后,就可以像使用其他函数一样使用这个DLL函数。

---在VB应用程序的全局模块中声明IO.DLL并将其放入Windowssystem目录下,这样就可以像使用Windows API一样使用其中的inport和outport函数了。

---Declare Function inport Lib"io.d11" (ByVal port As Integer)As Long

---Declare Function outport Lib"io.d11" (ByVal port As Integer,ByVal databyte As Long)As Long

应用实例

---813B采集卡的初始化(采集卡基地址220H)。

● 选通道,向22AH写入相应的控制字选择通道,写入0表示0通道,写入1代表1通道,依次类推;

● 启动AD转换,向22CH写入任意值,触发AD转换;

● 读入数据,把12位数据的低8位读入224H,把高4位读入225H中。

VB的编程实例

---利用定时器实现定时采集在VB中,可利用定时器的Interval属性设置每秒钟采集的次数,把采集段程序放在定时器的Timer事件中来实现数据采集。对于一般计算机来讲,由于受系统硬件能力的限制,定时器每秒钟最多只能产生18个事件,若时间间隔设置得过小,将达不到预期效果。

---应用实例下面给出数据采集软件程序中部分主要源代码,以采集某0~100℃的温度信号(经温度变送器转换为0~5V)为例。设定A/D板为单极性输入方式,I/O端口基地址为220H,放大倍率为1。

---在module1中声明:

:Declare function outport Lib "io.dll" (ByVal port As Integer, By Valdata As Integer)

Declare Function inport Lib "io.dll"(ByVal port As Integer)

---采集程序部分:

Private Sub TimerWD-Timer()

chwd=1 '设定温度通道号为1'

x=outport(&H22a,chwd) '输入通道号'

y=outport(&H2C,0) '启动A/D转换'

J=1

DoWhileJ<>0 '判断A/D转换是否结束'

J=inport&H22A And 1

Loop

adwl=inport(&H224) 'A/D结果低8位送入变量adwl'

adwh=inport (&H225) 'A/D结果高4位送入变量adwh'

adwdata=VAL(adwh-224)*256+VAL(adwl) '12位A/D转换结果'

vWD=adwdata*10/4095 '对应的电压'

WD=100*vWD/5 '标度变换为实际温度'

EndSub

---数据采集值是12位,放在两个地址里,其中224H放数据的低8位(数据7~数据0),225H放数据的高4位(数据11~数据8),225H的其他位自动变为1 1 1 0。

---则12位AD转换的结果为adwdata=VAL(adwh-224)*256+VAL(adwl),其中224表示无采集数据时的自然值(即11100000)。

---12位AD经AD转换的最大值是212=4096

结束语

---上述采用VB调用DLL实现数据采集的方法有一定的通用性,上述程序全部经过测试通过,可作为类似控制的参考。

提醒:《基于VB的数据采集卡的应用》最后刷新时间 2024-03-14 01:17:56,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《基于VB的数据采集卡的应用》该内容的真实性请自行鉴别。