基于DLL用VB控制研华PCL-818HG板卡 点击:2777 | 回复:3



如火

    
  • 精华:172帖
  • 求助:0帖
  • 帖子:803帖 | 5249回
  • 年度积分:0
  • 历史总积分:0
  • 注册:1900年1月01日
发表于:2006-02-27 13:42:00
楼主
    动态链接库DLL是一种基于Windows的程序模块,它是在运行时刻被装入和连接的。动态链接库中只包含供应用程序运行时装入该DLL的有关信息,并非是源代码的复制,因此使用动态链接库可以使多个应用程序之间共享代码和资源从而提高运行速率。

    研华公司的“Advantech DLL Driver”软件支持PCL-818HG等多种型号板卡的设备驱动,它提供了“adsapi32.dll”动态链接库,其中包含有一系列能对硬件设备进行底层I/O操作的函数。从VB调用这些DLL函数时,先在全局模块或窗体的说明部分,用Declare声明所要使用的DLL函数,然后象使用VB自己的函数(或过程)一样调用这些函数。例如:Declare Function DRV_DeviceOpen Lib“adsapi32.dll”(By Val DeviceNum As Long,DriverHandle As Long)As Long

    其中“DRV_DeviceOpen”是将在VB使用的函数名,“adsapi32.dll”是提供该DLL函数的动态链接库。为方便用户,“Advantech DLL Driver”的软件开发商制作了“Driver.bas”文件,其中声明了有关DLL函数及相应的结构,只需把“Driver.bas”导入VB工程的模块中,用户就可省去声明DLL函数的麻烦。下面对几个关键的DLL函数进行简单的说明。

    ①DRV_DeviceOpen():该函数必须最先被调用。它加载一个设备驱动程序到内存,并确定设备的类型,完成对设备的初始化,使设备做好I/O的准备工作;同时返回一个函数值,若设备驱动成功返回非“0”的设备句柄,若设备驱动失败则返回“0”。

    ②DRV_DeviceClose():该函数是关闭由DRV_DeviceOpen()函数打开的设备,它的函数参数是由DRV_DeviceOpen()函数返回的设备句柄,若设备关闭成功返回非“0”值,否则返回“0”。
    ③DRV_DeviceGetFeatures():该函数从由DRV_DeviceOpen()函数打开的设备中获取相关的硬件信息;同时返回一个函数值,操作成功则返回非“0”值,否则返回“0”。

    ④DRV_GetAddress():该函数仅在VB中适用,它把变量作为函数参数,返回值是该变量的指针或地址。在VC++或Delphi中,用户能获得一个变量的指针或地址,但在VB中却没有相应标准函数来获取变量的内存地址。因此,特为VB开发环境制作了该函数。

    ⑤DRV_MAIVoltageIn():该函数的参数是由DRV-DeviceOpen()函数返回的设备句柄,它每被调用一次就对通道的设置完成一次I/O操作,操作成功则返回“0”值。在实际的数据采集中,是通过调用这个函数得到与模拟量相对应的电压值。按照所要求采样频率,在VB的Timer()事件中定时调用该函数。


详细的过程在这里就不一一举例了,有兴趣的朋友可以试试。



笑笑风

  • 精华:0帖
  • 求助:0帖
  • 帖子:6帖 | 183回
  • 年度积分:0
  • 历史总积分:412
  • 注册:2005年2月19日
发表于:2007-09-01 22:06:00
1楼
收藏了,谢谢

笑笑风

  • 精华:0帖
  • 求助:0帖
  • 帖子:6帖 | 183回
  • 年度积分:0
  • 历史总积分:412
  • 注册:2005年2月19日
发表于:2007-09-01 22:06:00
2楼
收藏了,谢谢

a-jack

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 3回
  • 年度积分:0
  • 历史总积分:65
  • 注册:2007年2月27日
发表于:2009-05-11 14:56:24
3楼

我想问下:研华USB4711A,连续采集6个通道(differential方式)该如何才调用函数?那个MAD_INT里不是连续采集的?


热门招聘
相关主题

官方公众号

智造工程师