logo资料库

Delphi编程实现PC机与GPIB设备的通讯.pdf

第1页 / 共4页
第2页 / 共4页
第3页 / 共4页
第4页 / 共4页
资料共4页,全文预览结束
No.6 V01.25 JOURNAL OF SHAANXI UNIVERSITY OF SCIENCE&TECHNOLOGY 陕西科技大学学报 Dec.2007 ·87· + 文章编号:1000--5811(2007)06--0087--04 Delphi编程实现PC机与GPIB设备的通讯 (1.陕西科技大学电气与信息工程学院,陕西西安 710021;2.西安工程大学计算机科学学院,陕西西安 710048) 李建文1,马学宗2 摘 要:介绍了GPIB设备通讯的特点和Agilent IO Libraries的Windows API函数,论述了 Agilent 10 Libraries中有关Windows API通讯函数的调用方法和在Delphi环境实现调用 Windows DLL的编程方法. ’ 关键词:GPIB;Delphi;Agilent IO Libraries;DLL调用 中图分类号:TP334;TP216 文献标识码:A 0前言 HP测量仪器,如HP万用表及频率计等由于测量精度高、性能稳定,在工业测量领域内久负盛誉. HP测量设备都配有RS-232和GPIB两套接口,有了数字接口就可以直接实现测量仪器到计算机之间的 数据传送,并将数据存进数据库,从而大大提高了工业测量仪器的工作效率.HP测量仪器的GPIB接口也 为工业测量仪器的数据通讯开辟了先河,与传统的RS-232相比不仅速度快而且可以连成更为复杂的网 络形式.HP测量仪器的GPIB接口函数使得计算机与测量仪器之间的数据传输变得更为方便,但是人们 对于GPIB的编程还不够熟悉,本文主要介绍了通过Delphi编程来实现GPIB与计算机之间的通讯. 1 GPIB的特点 GPIB通讯开始于惠普公司.1965年,惠普公司(Hewlett—Packard)设计了惠普接口总线(HP—IB),用 于连接惠普的计算机和可编程仪器.由于其高转换速率(通 常可达1 Mbytes/s),使得这种接口总线得到了普遍认可, 并被接收为IEEE标准488-1975和ANSI/IEEE标准488. 1—1987.后来,GPIB(General—Purpose Interface Bus)比 HP—IB的名称用得更广泛.ANSI/IEEE 488.2-1987加强 了原来的标准,精确定义了控制器和仪器的通讯方式.可 编程仪器的标准命令(Standard Commands for Programma一 ‘ble Instruments,SCPI)采纳了IEEE488.2定义的命令结 构,创建了一整套编程命令. (a)线型连接方式 (b)星型连接方式 在GPIB通讯模式下,计算机通过GPIB控制卡和一台 或多台仪器进行连接,如图1所示.GPIB设备之间使用专 门的通讯电缆,GPIB电缆为两端带有插头的24芯无源屏蔽导线,接头背面带有插座,最多可以连接14 台仪器,且运行中必须有不少于2/3的仪器加电.为了保证最大信息传输速率,电缆总长度不能超过20 m,各仪器间的平均距离不能超过2 m,最大间隔不超过4 m,但可利用中继器突破这一限制.仪器间的连 接方式有星型、总线型和混合型方式.GPIB电缆的24芯线包括16根信号线和8根地线.信号线包括8根 GPIB设备连接图 图1 ·收稿日期:2007—09—21 作者简介:李建文(1959一),男,陕西省西安市人。教授,研究方向:计算机及其应用软件的开发 基金项目:国家自然科学基金“声一电转换皮肤听声的进一步研究”(编号:60672001),陕西省教育厅专项基金“关于变压式皮肤听声 器的推广使用”(编号:05JC03) ˝ • ‰ ˚
·88· 陕西科技大学学报 第25卷 数据线、5根接口管理信号线和3根挂钩信号线.GPIB采用TTL负逻辑电平n’23. 在作者所设计的工程中,GPIB设备采用了HP Agilent公司的Agilent 82357A型USB/GPIB接V1 卡,但HP的GPIB接口编程方法中没有提供有关与Delphi的接口和实例.为此,作者基于自己设计的“皮 肤听声电压数据测量系统”和“石英晶振热敏电阻网络非线性补偿自动测算系统”,对于在Delphi环境下 实现Agilent GPIB接口通讯编程进行了讨论. 2 Agilent IO Libraries Agilent GPIB设备驱动程序安装成功后,便在Windows的系统文件夹内形成了Agilent IO Librar— ies,主要是形成动态连接库VISA32.DLL,这里包含了进行设备连接、状态读写和数据读写79个函数。1, 在这些函数中主要掌握表1中所列出的函数就能进行基本操作. 表1主要GPIB接口函数 函数 功能说明 viOpenDefauhRM(sesn) 默认的资源管理器。VISA32.DLL首先要用到的函 数,为调用viOpen作准备 viOpen(sesn,rsrcName,accessM。de,timeout,Vi,嚣麦芝蔓篓主娑嘉誉蒉篓萋孝罟的tim操eo作ut句柄“'同时 viPrintf(vi,writeFmt,argl,ar92,…) 通过操作句柄vi向测量仪器发送指令字符串write— Fmt viScanf(vi,readFmt,argl,ar92,…) 通过操作句柄vi由测量仪器读取数据,数据格式由 readFmt确定,等待时间由viOpen函数中的timeout 确定 viQueryf(vi,writeFmt,readFmt,argl,ar92,…) 这个函数同时具备viPrintf和viScanf的功能,但并不 实用,因为高精度的数据一般不能立刻得到,需要等 待2 S以上 viClose(vi) 断开计算机与操作句柄vi所指的测量设备之间的联 系 这些函数是操作系统一层的读写操作,类似于使用RS一232时Windows API中的Createfile()、 )、WriteFile()、 )等函数,仅仅完成计算机与测量设备之间的连接以及数据的传送.R,具ea体dFile( closeHandle( 一 的操作指令由IEEE 488协议完成.相对于RS-232操作来说,不必关心波特率、数据位大小、开始位和奇 偶校验等概:念. ’ Agilent IO Libraries在Windows文件夹Program Files\VISA\winnt\agvisa里提供了WindowsNT/ XP环境下的VC++和VB编程的实例与库函数“’5 3(Windows98/Me环境下为Program Files\VISA\ win95\agvisa文件夹),为VCH和VB编程创造了良好的环境,令人遗憾的是没有提供任何有关Delphi 环境下编程的接口库函数与实例. 3 Delphi中的DLL调用 DLL(动态连接库)是Windows操作系统的基础,所有的Windows API函数都包涵在DLL中.要使 用Delphi编程对GPIB接口函数进行调用,比较方便的方法是使用Delphi中的DLL调用. Delphi作为一种十分优秀的编程工具,与Windows 98/Me/NT/XP之间的接口十分完备,Windows 与DLL的各种调用在Delphi中都支持∞3.相比之下BV就不那么完备,也正因为如此Agilent IO Librar- ies的DLL中为VB制作了许多专用函数,当然在使用Delphi时不必理会这些为VB制作的专用函数,但 应该正确地按照DLL的调用约定去调用这些DI。L.Windows中DLL支持的调用约定如表2所示¨’83. ˝ • ‰ ˚
第6期 李建文等:Delphi编程实现PC机与GPIB设备的通讯 ·89· 通过查阅Agilent IO Libraries给C语言编程提供的 表2 DLL支持的调用约定 头文件visa.h和visatype.h得知,接口函数viOpenDe— faultRM()、viopen()、viClose()等为stdcall调用,而 viPrintf()、viScanf()、viQueryf()等为Cdecl调用.下面的 函数是作者在Delphi中Unit的interface部分为了调用 VISA32.DLL所做的接口函数: Function viOpenDefauhRM(var sesn:integer):integer;stdeall; external‘VISA32.DLL’; Function viOpen(sesn:integer;viDesc:pchar;mode:integer;timeout:integer;var vi:integer):integer; stdcall;external‘VISA32.DLL’; Function viClose(vi:integer):integer;stdcall;external‘VISA32.DLL’; Function viPrintf(vi:integer;writeFmt:pchar):integer;Cdecl;external‘VISA32.DLL’; Function viScanf(vi:integer;readFmt:pchar;var params:ppchar):integer;Cdecl;external‘VISA32.DLL’; Function viQueryf(vi:integer;writeFmt:pchar;readFmt:pchar;var params:ppchar):integer; Cdecl;external‘VISA32.DLL’; 这里的external‘VISA32.DLL’说明了要调用的Windows API函数在外部文件VISA32.DLL里. 经过这样说明以后,在Delphi中引用这些函数就像Agilent IO Libraries所提供的C语言中的例子一样调 用这些函数. 4实现过程实例 使用前连接GPIB设备: procedure TAutoTestVoh.Button5Click(Sender:TObject); begin viOpen(defrm,‘GPIB0::3::INSTR’,0,0,vi); //打开第3个GPIB设备 if vi>0 then begin //如果vi>0说明打开成功,再进行初始化 viPrintf(Vi,‘*RST’+Chr(10)); //向vi所代表的设备发送初始化指令 labell0.Caption:一‘连接正常:’+inttostr(vi); //将vi所代表数字显示在labell0里供编程参考 end; end; ‘ 对GPIB设备进行操作: procedure TAutoTestVolt.Timer5Timer(Sender:TObject); var freqchar:ppchar; cram:pchar; begin cmm:一pchar(‘CONF:FREQ’+LabeledEdit3.Text+‘HZ,’+LabeledEdit4.Text+‘HZ’+Chr(10)); viPrintf(vi,cram); viPrintf(vi,‘READ?’+Chr(10)); //设定基准频率和分辨率 //发出READ?指令 if viScanf(vi,‘%t’,freqchar)一0 then label9.Caption:一freqchar; //如果读取成功按照‘%t’格式放在字符串变量freqchar //然后再显示在label9里 end; 使用完毕GPIB设备 procedure TAutoTestVolt.FormClose(Sender:TObject;var Action:TCloseAction); ˝ • ‰ ˚
·90· begin Timer2.Enabled:一false; Timer5.Enabled:一false; viClose(vi): end; 5结束语 陕西科技大学学报 第25卷 //关闭前停止相关时钟 //使用完毕关闭vi所代表的设备 作者在使用Delphi设计“皮肤听声电压数据测量系统”和“石英晶振热敏电阻网络非线性补偿自动测 算系统”时通过Delphi编程直接对3台设备进行操作,分别是HP33401A数字万用表、Agilent E364xA 双路输出直流电源和Agilent 53131A 225MHz频率计.该系统设计成功后,在Windows98/Me/NT/Xp 等各种版本的环境下自动测控性能运行良好. 虽然Agilent IO Libraries for Windows Version M.01.01.04没有提供Delphi的编程接口,但我们只 要熟练运用Delphi中有关DLL调用方法,充分发挥Delphi强大的底层接1:3能力,就可以设计出更为理想 GPIB测控系统. 由于GPIB总线优越的接口性能,关于GPIB的编程在工业测控方面将得到越来越广泛的应用,同时 Delphi也将在GPIB编程方面发挥更为强大的作用. 参考文献 [1]赵浩,周卫东.GPIB接口标准及在测量系统中的应用实例[-j-].山东电子,2003,(4):37-39. (23陈星燎,陈金树,陈锋.GPIB接口实现及应用[J].计算机应用研究,2003。(2):133-136. (33 Agilent Technologies.Building a VISA Application in Windows[M/CD].Agilent VISA User’s Guide for Windows,2003.4 [4]荆晓莉.利用VC++6.0和GPIB接口实现电阻测试系统口].信息技术,2002,(9):69,80. (53 b云萍,李忠敏,薛冰.利用GPIB接口实现数字多用表功能扩展口].计量技术,2003,(8):23—26. (63吕伟臣.Delphi 6.0入门与提高[M].北京:清华大学出版社,2002:352—370. [73周金萍,徐丙立.Windows系统编程[J].北京:人民邮件出版社,2002:564—600. (83杨旭海,胡永辉,李志刚.基于GPIB接口的计数器数据采集与控制软件[J].陕西天文台台刊,2002,(I):43—46. CoMMUNICATION FOR DELPHI PROGRAMMING BETWEEN PC AND GPIB DEVICE (1.School of Electrical and Information Engineering,Shaanxi University of Science&Technology,Xi’an 7 1002 1,China;2.Computer Science Institute,Xi’an Polytechnic University,Xi 7 an 7 1 0048,China) LI Jian—wenl,MA Xue—zon92 Abstract:The communication characteristics of GPIB device and the Windows API about Ag— ilent 10 Libraries were introduced.The calling method of Windows API communication function on Agilent IO Libraries and programming method to call Windows DLL in Delphi were discussed. Key words:GPIB;Delphi;Agilent IO Libraries;Calling DLL ˝ • ‰ ˚
分享到:
收藏