为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

GPIB卡说明书

2017-09-23 43页 doc 335KB 31阅读

用户头像

is_668482

暂无简介

举报
GPIB卡说明书GPIB接口卡使用说明 简介 我所早在80年代初就自行研制各种GPIB接口产品,经过20年不断发 展,该产品开发已形成系列,是目前国内唯一能够与国外产品相媲美的GPIB接口。可广泛应用于各种仪器自动测量与控制系统。 ISA GPIB接口卡 该接口卡主要用于各种GPIB仪器的计算机控制以及仪器自动化测试系统的组建。该接口卡完全符合 IEEE-488国际标准,并提供与VISA(虚拟仪器软件设计结构)国际规范兼容的标准化GPIB控制函数包。 性能及特点: ● 具有DOS和Windows两种不同操作系统下使用的产品。 ● ISA总线...
GPIB卡说明书
GPIB接口卡使用说明 简介 我所早在80年代初就自行研制各种GPIB接口产品,经过20年不断发 展,该产品开发已形成系列,是目前国内唯一能够与国外产品相媲美的GPIB接口。可广泛应用于各种仪器自动测量与控制系统。 ISA GPIB接口卡 该接口卡主要用于各种GPIB仪器的计算机控制以及仪器自动化测试系统的组建。该接口卡完全符合 IEEE-488国际,并提供与VISA(虚拟仪器软件结构)国际兼容的标准化GPIB控制函数包。 性能及特点: ● 具有DOS和Windows两种不同操作系统下使用的产品。 ● ISA总线 GPIB接口卡 提供Windows操作系统软件开发工具包,可支持32位各种编程语言,如:VC++、 VB、Delphi、LabView、VEE和LabWindows/CVI。 ● 提供VISA驱动函数和GPIB驱动函数,在LabVIEW编程语言中可替换原仪器驱动软件中VISA函数,而不影响原程序的使用。 ● 提供快速的硬件诊断工具,以及快速仪器控制的交互式GPIB测试工具。 ● 提供VisaulBASIC编程应用举例。 新产品PCI GPIB接口卡 随着微型计算机CPU速度、计算能力的迅速提高,与之相适应的计算机总线 技术也在不断发展,总线形式也在不断变换,当今PCI总线已成为微机产品中的主流总线,为适应总线技术的发展,我们新近开发出了基于PCI总线的GPIB接口卡,以满足新一代计算机产品在用于仪器测量控制方面的使用要求。 性能及特点: 接口板硬件总线与PCI 协议 V2.1版兼容。 适用于Win98/2000/NT/Windows XP操作系统。 具有即插即用功能。 标准的VISA和GPIB 驱动程序,与NI公司 提供的驱动函数兼容。 适用于 WINDOWS下各种32位编程语言。 如:VC++、 VB、Delphi、LabView、VEE和LabWindows/CVI等。 提供VB、CVI、VC++、 Delphi、LabView编程应用举例。 注意 有些仪器由于其内部gpib接口速度较慢,请在使用过程中发现个别数据读取不当的时候,适当修改以下函数: kk = setDelayTime(5, 0) ' 0,0为最小延时时间 第一个为延时的毫秒数,第二个为循环的次数。 主要是修改第一个参数。参数值应为比4大的整数。 接口卡的安装 一. win98安装     把接口卡插入计算机,启动计算机,在提示发现PCI桥设备后,在光盘 \Win98\drivers下可以找到.inf文件,安装完接口卡后,找到光盘上的..\Win98\disk1文件夹中的setup.exe程序,进行软件安装。 二. win2000安装 在win2000下安装时,要先进行软件的安装,找到光盘上..\Win2000\Express\SingleImage\DiskImages\DISK1中的setup.exe安装程序运行。软件安装完成后,关机。把接口卡插入计算机,重新启动计算机,再进行接口卡的硬件安装。 硬件安装一:启动计算机,在提示发现PCI桥设备后在安装路径下的drivers文件夹中可以找到.inf文件!确定,安装完毕。省缺路径为 ..\ProgramFiles\HT203\PciIEEE488。 硬件安装方法二:在控制面板中选择添加新硬件,在安装路径下的drivers文件夹中可以找到.inf文件!确定,安装完毕。 三.注意 安装完程序后,要重新启动计算机,才能使用程序。在“开始”菜单pci 488中有本接口的例程,(在win2000操作系统下,在“开始”菜单的Programs中)在要使用例程须将仪器地址设为5,程控命令框中输入相应程控命令!接口程序安装的缺省路径为C:\Program Files\HT203\PciIEEE488,GPIB、VISA文件夹下为接口的动态链接库,Sample文件夹下为各种开发语言的例程,Help文件夹下为帮助文件。 VISA函数和GPIB函数 函数名称: Visa Resource Template ViOpena01 viCloseb02 viOpenDefaultRMc03 Visa Instrument Control ViWrited04 viReade05 viClearf06 viReadSTBg07 viAssertTriggerh08 Visa Resource Template viLocki09 viUnlockj10 GPIB Function Sendk11 Receivel12 ReceBlockr18 ReceEOI t19 DevClearm13 Triggern14 WaitSRQp15 ReadStatusByteq16 SendIFC s17 VISA函数详细说明: 1、viOpen (Sesn1 ,rsrcName,acessMode,timeout,Sesn2) 用途:  打开与指定仪器的通话。 参数说明 Sesn1        输入  资源管理器通话(总应是由viOpenDefaultRM( )返回的VISA默资源理器)。 rsrcName    输入  资源的唯一符号名称 acessMode    输入    指定资源的访问模式。不用,应置0。 timeout        输入    定时时间。默认值为10秒。 Sesn2        输出    通话的唯一逻辑标识符。 返回值:     0示成功,其余值均表示失败。 注意:  rsrcName的格式为:GPIB::Address::INSTR 其中:GPIB:表示GPIB设备。 address:表示GPIB设备地址。 INSTR表示是VISA资源。例如“GPIB::5::INSTR” 各种语言调用说明: Delph: Function viOpen(sesn1:Longint;rsrcName:PChar;acessMode:Longint timeout:Longint;sesn2:PLongint):Longint; C:        Long viOpen (long sesn1,char *rsrcName, long acessMode, long timeout,long *sesn2) VB:     Function viOpen (ByVal sesn1 As Long, ByVal rsrcName As String, ByVal acessMode As Long, ByVal timeout As Long, sesn2 As Long) As Long 2、viClose(sesn) 用途:          关闭指定的通话。 参数说明         Sesn      输入    通话的唯一逻辑标识符。 返回值:         0表示成功,其余值均表示失败。 各种语言调用说明: Delphi:    Function viClose(sesn:Longint):Longint; C:        Long viClose (long sesn); VB:      Function viClose (ByVal sesn As Long) As Long 3、viOpenDefaultRM (sesn) 用途:          返回与默认资源管理器的通话。 参数说明: Sesn    输出    与默认资源管理器通话的唯一逻辑标识符。 返回值:         0表示成功,其余值均表示失败。 各种语言调用说明: a00 Delphi:  Function viOpenDefaultRM(sesn1:PLongint):Longint; C:        Long viOpenDefaultRM (long *sesn1); VB:      Function viOpenDefaultRM (sesn1 As Long) As Long 4、viWrite(Sesn    ,CommStr    ,Count    ,retCount    ) 用途:  向仪器写数据 参数说明: Sesn    输入    通话的唯一逻辑标识符。 CommStr    输入    表示向仪器传送数据块的存储单元 Count    输入    指定被写的字节数。 retCount    输出    表示设置实际传输的整数字节数存储单元。 返回值:0表示成功,其余值均表示失败。 各种语言调用说明:a00 Delphi:    Function viWrite(sesn:Longint;CommStr:PChar;Count:Longint; retCount:PLongint):Longint; C:          Long viWrite (long sesn, char *CommStr, long Count, long *retCount) VB:        Function viWrite (ByVal sesn As Long, ByVal CommStr As String, ByVal Count As Long, lretCount As Long) As Long         5、viRead(Sesn    , CommStr    , Count    , retCount) 用途:  从仪器读数据。 参数说明: Sesn    输入    通话的唯一逻辑标识符。 CommStr    输入    表示将接收数据的仪器缓冲区的存储单元。 Count    输入    将读取的字节数。 retCount    输出    表示一整数的存储地址,该整数表示实际传输的字节数。 返回值:         0表示成功,其余值均表示失败。 各种语言调用说明:a00 a00 Delphi:       Function viRead(sesn:Longint;ReadData:PChar;Count:Longint; retCount:PLongint):Longint; C:           Long viRead (long sesn, char *ReadData, long Count, long *retCount) VB:           Function viRead (ByVal sesn As Long, ByVal ReadData As String, ByVal Count As Long, lretCount As Long) As Long           a00 6、viClear(Sesn)    用途:  使一个仪器清零。 参数说明: Sesn      输入    通话的唯一逻辑标识符。 返回值: 0表示成功,其余值均表示失败。 各种语言调用说明:a00 a00 Delphi:           Function viClear(sesn:Longint):Longint; C:           Long viClear (long sesn) VB:           Function viClear (ByVal sesn As Long) As Long 7、viReadSTB(Sesn)      用途:  读服务请求的状态字节。 参数说明 Sesn      输入    通话的唯一逻辑标识符。 Status    输出     服务请求的状态字节。 返回值:         0表示成功,其余值均表示失败。 各种语言调用说明: a00 Delphi:           Function ReadSTB(sesn:Longint;status:PSmallint):Longint C:           Long viReadSTB (long sesn, short *status) VB:           Function viReadSTB (ByVal sesn As Long,status As Integer) As Long           8、a00 viAssertTrigger(Sesn) 用途:  设置群触发。 参数说明: Sesn        输入    通话的唯一逻辑标识符。 protocal    输入     断定所用触发协议。不用置0。 返回值:         0表示成功,其余值均表示失败。 各种语言调用说明: a00 a00 Delphi:        Function viAssertTrigger(sesn:Longint;protocal:Integer):Longint; C:      Long viAssertTrigger (long sesn, int protocal) VB:  Function vAssertTrigger (ByVal sesn As Long,ByVal protocal As Integer) As Long           9、viLock(Sesn) 用途:  建立对指定资源的访问模式,本函数是本地封锁。 参数说明: Sesn        输入    通话的唯一逻辑标识符。 lockType    输入    表示请求得锁定类型。不用,置0。 timeout        输入    定时时间,默认识是10秒。 requestedKey 输入    不用,置0。 accessKey    输入    不用,置0。 返回值:         0表示成功,其余值均表示失败。 各种语言调用说明: a00 Delphi:               Function viLock(sesn,lockType,timeout:Longint;requestedKey, accessKey:PChar):Longint; C:        Long viLock (long sesn, long lockType, long timeout, char *requestedKey, char *accessKey) VB:          Function viLock (ByVal sesn As Long, ByVal lockType As Long, ByVal timeout As Long, ByVal requestedKey As String,ByVal accessKey As String) As Long           10、viUnlock (Sesn) 用途:  取消对指定资源的封锁,返回本地。 参数说明:  Sesn    输入    通话的唯一逻辑标识符。 返回值:         0表示成功,其余值均表示失败。 各种语言调用说明: a00 Delphi:          Function viUnlock(sesn:Longint):Longint; C:                Long viUnlock (long sesn) VB:              Function viUnlock (ByVal sesn As Long) As Long           GPIB函数详细说明: 1、Send(Board_Index,evice_Address,Data_Buffer,Byte_Count,EOT_Mode) 用途:          向仪器写数据。 参数说明: Board_Index        输入    不用,置0。 Device_Address    输入    仪器地址。 Data_Buffer        输入    向仪器传送数据块的存储单元。 Byte_Count        输入    指定被写的字节数。 EOT_Mode            输入    0表示没有数据传输结束标志; 1表示数据串用回车换行结束; 2表示数据用最后一个字符结束。 各种语言调用说明: Delphi:          Procedure Send(Board_Index:Longint; Device_Address:SmallInt; Data_Buffer:Pchar;Byte_Count:Longint; EOT_Mode:Longint); C:          Void Send(long int Board_Index, short Device_Address, char *Data_Buffer,long int Byte_Count, long int EOT_Mode); VB:          Sub Send(ByVal Board_Index As Long, ByVal Device_Address As Short, ByVal Data_Buffer As String,ByVal Byte_Count As Long, ByVal EOT_Mode As Long); 2、Receive(Board_Index,_Address,Buffer,Byte_Count,Terminatin    ) 用途:          从仪器读数据。 参数说明: Board_Index        输入    不用,置0。 Device_Address    输入    仪器地址。 Data_Buffer        输出    将接收数据的仪器缓冲区的存储单元 Byte_Count        输入    将读取的字节数。 Termination        输入    不用,置0。 各种语言调用说明:a00 Delphi:          ProcedureReceive(Board_Index:Longint; Device_Address:SmallInt;Data_Buffer:Pchar; Byte_Count:Longint; Termination:Longint); C:          Void Receive(long int Board_Index, short Device_Address, char *Data_Buffer,long int Byte_Count, long int Termination); VB:          Sub Receive(ByVal Board_Index As Long, ByVal Device_Address As Short,ByVal Data_Buffer As String,ByVal Byte_Count As Long, ByVal Termination As Long);         3、DevClear(Board_Index, Device_Address) 用途:          使一个仪器清零。 参数说明: Board_Index      输入    不用,置0。 Device_Address  输入     仪器地址。 各种语言调用说明: Delphi:          ProcedureDevClear(Board_Index:Longint;Device_Address:SmallInt); C:          Void DevClear(long int Board_Index, short Device_Address); VB:          Sub DevClear(ByVal Board_Index As Long, ByVal Device_Address As Short); 4、Trigger (Board_Index, Device_Address) 用途:          设置群触发。 参数说明: Board_Index      输入    不用,置0。 Device_Address  输入    仪器地址。 各种语言调用说明: Delphi:          Procedure Trigger(Board_Index:Longint;Device_Address:SmallInt); C:          Void Trigger(long int Board_Index, short Device_Address); VB:          Sub Trigger(ByVal Board_Index As Long, ByVal Device_Address As Short);           5、WaitSRQ (Board_Index, SRQ_Occurred) 用途:          等待服务请求。 参数说明: Board_Index      输入    不用,置0。 SRQ_Occurred  输出  0系统默认的timeout时间内无服务请求, 1系统默认的timeout时间有服务请求。 各种语言调用说明: Delphi:          Procedure WaitSRQ(Board_Index:Longint; SRQ_Occurred:PSmallInt); C:          Void WaitSRQ(long int Board_Index, short *SRQ_Occurred); VB:          Sub WaitSRQ(ByVal Board_Index As Long, SRQ_Occurred As Short);           6、ReadStatusByte(Board_Index, Address, Status_Byte    ) 用途:          读服务请求的状态字节。 参数说明 Board_Index        输入    不用,置0。 Device_Address    输入    仪器地址。 Status_Byte        输出    服务请求的状态字节。 各种语言调用说明: a00 Delphi:          ProcedureReadStatusByte(Board_Index:Longint; Device_Address:SmallInt; Status_Byte:PSmallInt); C:         Void ReadStatusByte(long int Board_Index, short Device_Address, short *Status_Byte); VB:          Sub ReadStatusByte(ByVal Board_Index As Long, ByVal Device_Address As Short, Status_Byte As Short);           7、SendIFC (Board_Index) 用途:          接口清除。 参数说明: Board_Index    输入    不用,置0。 各种语言调用说明:a00 Delphi:  Procedure SendIFC(Board_Index:Longint); C:        Void SendIFC(long int Board_Index); VB:        Sub SendIFC(ByVal Board_Index As Long); 8、ReceBlock(Board_Index,_Address,Data_Buffer,Byte_Count,Termination) 用途:          从仪器读数据块。 参数:  名 称          方 向      说 明 Board_Index      输入    不用,置0。 Device_Address输入    仪器地址。 Data_Buffer      输出    表示将接收数据的仪器缓冲区的存储单元 Byte_Count      输入    将读取的字节数。 返回值: 0表示成功,- 1表示失败。 各种语言调用说明: Delphi:  Function ReceBlock(Board_Index:Longint; Device_Address:SmallInt; Block_Size:Longint;Data_Buffer:PChar); C:      int ReceBlock(long int Board_Index, short Device_Address, int Block_Size, char *Data_Buffer); VB:    Function ReceBlock(ByVal Board_Index As Integer, ByVal  evice_Address As Integer,ByVal Byte_Count As Integer, ByVal Data_Buffer As String);           9、ReceEOI (Board_Index, _Address, Data_Buffer, Byte_Count, Termination) 用途:    以EOI结束方式读仪器数据块。 参数:  名 称      方 向      说 明 Board_Index    输入    不用,置0。 Device_Address输入    仪器地址。 Data_Buffer    输出    表示将接收数据的仪器缓冲区的存储单元 Byte_Count    输入    将读取的字节数。 Termination    输入    不用,置0。 返回值: 0表示成功,- 1表示失败。 各种语言调用说明: a00 Delphi:    Function ReceEOI(Board_Index:Longint; Device_Address:SmallInt; Data_Buffer:PChar;Byte_Count:PLongint;Termination:Longint C:    int ReceEOI(long int Board_Index, short Device_Address, char *Data_Buffer,long int *Byte_Count,lng int Termination); VB:      Function ReceEOI(ByVal Board_Index As Integer, ByVal Device_Address As Integer,ByVal Data_Buffer As String, ByRef Byte_Count As Integer,ByVal Termination As Integer); VISA函数的VB应用示例: 声明: Declare Function viOpenDefaultRM& Lib "visa32.dll" (sesn1&) Declare Function viOpen& Lib "visa32.dll" (ByVal sesn1&, ByVal rsrcName$, ByVal acessMode&, ByVal timeout&, sesn2&) Declare Function viWrite& Lib "visa32.dll" (ByVal sesn&, ByVal CommStr$, ByVal Count&, retCount&) Declare Function viClose& Lib "visa32.dll" (ByVal sesn&) Declare Function viRead& Lib "visa32.dll" (ByVal sesn&, ByVal ReadData$, ByVal Count&, retCount&) Declare Function viClear& Lib "visa32.dll" (ByVal x1&) Declare Function viLock& Lib "visa32.dll" (ByVal x1&, ByVal x2&, ByVal x3&, ByVal x4$, ByVal x5$) Declare Function viUnlock& Lib "visa32.dll" (ByVal x1&) Declare Function viAssertTrigger& Lib "visa32.dll" (ByVal x1&, ByVal x2&) Declare Function viReadSTB& Lib "visa32.dll" (ByVal x1&, x2%) 程序: Option Explicit Public res As String Public ErrCode As Long Public visah As Long Public visah2 As Long Public datas As String Public cms As String Public cmslen  As Long Private Sub Command1_Click() '写数据 Dim i As Long Dim j As Integer cms = Text2.Text cmslen = Len(cms) ErrCode = viWrite(visah, cms, 10, cmslen) For i = 1 To 5000 Next i End Sub Private Sub Command2_Click() ErrCode = viClose(visah) End End Sub Private Sub Command3_Click() '读数据 Dim i As Long Dim j As Integer datas = String(100, 0) ErrCode = viRead(visah, datas, 10, cmslen) Text1.Text = datas For i = 1 To 10000 Next i End Sub Private Sub Command4_Click() '初始化 Dim i As Long Dim j As Integer ErrCode = viOpenDefaultRM(visah2) For i = 1 To 10000 Next i Command4.Enabled = False Command1.Enabled = True Command2.Enabled = True Command3.Enabled = True Command5.Enabled = True End Sub 'Private Sub Command3_Click() 'Dim kk, gg As Integer 'Dim str As String 'str = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" 'kk = gpib_send(5, Text2.Text) 'gg = gpib_receive(5, str) 'Text1.Text = str 'Text3.Text = kk 'End Sub 'Private Sub Command4_Click() 'Dim dd As Integer 'Text1.Text = fnBB(1, 2) 'Text1.Text = fnCccDll(1, 8) 'End Sub Private Sub Command5_Click() Dim i, j As Integer res = Text3.Text ErrCode = viOpen(visah2, res, 0, 10, visah) For i = 1 To 10000 Next i End Sub VISA函数的VC应用示例 // DubugIsaDll.cpp : Defines the entry point for the console application. #include "stdafx.h" #include "stdio.h" #include "windows.h" #include "string.h" //int gpib_receive(int iAddrDevice,char *receive_buffer); //__declspec(dllimport) int __stdcall gpib_send(int iAddrDevice,char * sending,int); //__declspec(dllimport) int __stdcall gpib_receive(int iAddrDevice,char *receive_buffer); //__declspec(dllimport) void __stdcall gpib_local(); //__declspec(dllimport) void __stdcall gpib_device_clear(); int main(int argc, char* argv[]) { //    int rs; //    char data_buf[3000]; //    char aa[5000]; int ErrCode; int visah; int visah2; char datas[5000]; int  cmslen; char * cms = "F0R0X"; char * res = "GPIB::5"; int i,j; //    rs=fnMy111(2,3); //    printf("rs=%d",rs); //    int (*send)(int,char *,int); //    typedef int (__stdcall SEND) (int,int,char *,int,int); //    typedef int (__stdcall RECEIVE) (int,int,char *,int,int);     typedef int (__stdcall OPENDEFAULT) (int *);     typedef int (__stdcall OPEN) (int,char *,int,int,int *);     typedef int (__stdcall WRITE) (int,char *,int,int *);     typedef int (__stdcall CLOSE) (int);     typedef int (__stdcall READ) (int,char *,int,int *);         //    SEND * send; //    RECEIVE * receive;     OPENDEFAULT * opendefault;     OPEN * open;     WRITE * write;     READ * read;     CLOSE * close; //    HINSTANCE dllHandle=LoadLibrary("C:\\Program Files\\HT203\\PciIEEE488\\GPIB\\gpib32.dll");     HINSTANCE dllHandle=LoadLibrary("C:\\Program Files\\HT203\\PciIEEE488\\VISA\\visa32.dll"); //    HINSTANCE dllHandle=LoadLibrary("D:\\Pcicard\\VISA\\visa32.dll"); //    send=(SEND *)GetProcAddress(dllHandle,"Send"); //    receive=(RECEIVE *)GetProcAddress(dllHandle,"Receive");     opendefault=(OPENDEFAULT *)GetProcAddress(dllHandle,"viOpenDefaultRM");     open=(OPEN *)GetProcAddress(dllHandle,"viOpen");     write=(WRITE *)GetProcAddress(dllHandle,"viWrite");     read=(READ *)GetProcAddress(dllHandle,"viRead");     close=(CLOSE *)GetProcAddress(dllHandle,"viClose");     cmslen = strlen(cms);     ErrCode = opendefault(&visah2);     for(i=0;i<100000;i++)         for(j=0;j<20;j++)         {}     ErrCode = open(visah2, "GPIB::5", 0, 10, &visah);     for(i=0;i<100000;i++)         for(j=0;j<20;j++)         {} //在测量中当应用opendefault打开卡资源,open建立连接后, //可重复使用write 和read 函数完成测量。     ErrCode = write(visah, "F0R0X", 10, &cmslen);     ErrCode = read(visah, datas, 10, &cmslen);     printf("rs is:%s\n",datas);     ErrCode = write(visah, "F1R0X", 10, &cmslen);     ErrCode = read(visah, datas, 10, &cmslen);     printf("rs is:%s\n",datas);     ErrCode = close(visah); //    write(0,5,"F0R0X",0,0); //    receive(0,5,aa,0,0); //    printf("rs is:%s",aa);     FreeLibrary(dllHandle); //    gpib_receive(5,data_buf); //    gpib_local(); //    gpib_device_clear();     return 0; VISA函数的Delphi应用示例 unit loadDll; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type   TForm1 = class(TForm)     OkBtn: TButton;     CancelBtn: TButton;     Edit1: TEdit;     Edit2: TEdit;     Label1: TLabel;     Label2: TLabel;     procedure OkBtnClick(Sender: TObject);     procedure CancelBtnClick(Sender: TObject);   private     { Private declarations }   public     { Public declarations }   end; var   Form1: TForm1; implementation {$R *.DFM} Function viOpenDefaultRM(sesn1:PLongint):Longint;stdcall external 'visa32.dll'; function viOpen(sesn1:Longint;rsrcName:PChar;acessMode:Longint; timeout:Longint;sesn2:PLongint):Longint;stdcall external 'visa32.dll'; function viWrite(sesn:Longint;CommStr:PChar;Count:Longint; retCount:PLongint):Longint;stdcall external 'visa32.dll'; function viClose(sesn:Longint):Longint;stdcall external 'visa32.dll'; function viRead(sesn:Longint;ReadData:PChar;Count:Longint;       retCount:PLongint):Longint;stdcall external 'visa32.dll'; procedure TForm1.OkBtnClick(Sender: TObject); var   myHandle,temHandle:PLongint;   P1,P2:PChar;   retCount:PLongint;   ReadData:PChar;   i:Integer; begin   New(myHandle);   New(temHandle);   New(retCount);   P1:=StrAlloc(100*Sizeof(Char));   StrCopy(P1,'GPIB::5::INSTR');   P2:=StrAlloc(100*Sizeof(Char));   StrCopy(P2,PChar(Edit1.Text));   viOpenDefaultRM(myHandle);   viOpen(myHandle^,P1,1,10,temHandle);   viWrite(temHandle^,P2,10,retCount);   ReadData:=StrAlloc(200*Sizeof(Char));   For i:=0 to 200000 do   begin   end;   viRead(temHandle^,ReadData,100,retCount);   Edit2.Text :=ReadData;   viClose(myHandle^);   StrDispose(P1);   StrDispose(P2);   StrDispose(ReadData);   Dispose(retCount);   Dispose(temHandle);   Dispose(myHandle); end; VISA函数的LabWindows/CVI应用示例 #include #include #include         #include #include "visa.h" #include "visa_cvi.h" #include "stdio.h" static int panelHandle; int main (int argc, char *argv[]) {     if (InitCVIRTE (0, argv, 0) == 0)         return -1;    /* out of memory */     if ((panelHandle = LoadPanel (0, "visa_cvi.uir", PANEL)) < 0)         return -1;     DisplayPanel (panelHandle);     RunUserInterface ();     DiscardPanel (panelHandle);     return 0; } int CVICALLBACK ExampleBtn (int panel, int control, int event,         void *callbackData, int eventData1, int eventData2) {   long int myHandle,temHandle;   char P1[100],P2[100];   long int retCount;   char ReadData[200];   char CmdStr[200];     switch (event)         {        case EVENT_COMMIT:             //printf("test");             strcpy(P1,"GPIB::5::INSTR");             GetCtrlVal (panelHandle, PANEL_CmdStr,CmdStr);   strcpy(P2,CmdStr);           viOpenDefaultRM(&myHandle); viOpen(myHandle,P1,1,10,&temHandle);           viWrite(temHandle,P2,10,&retCount);           viReceBlock(temHandle,17,ReadData);           //viRead(temHandle,ReadData,100,&retCount);             SetCtrlVal (panelHandle, PANEL_STRING, ReadData);             viClose(myHandle);             break;        }     return 0;} GPIB函数的VB应用示例 Private Sub Command1_Click() Dim kk, gg As Integer Dim str As String Dim count As Integer 'str = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" str = String(50000, 0) '一般发送和接收的例子 '*************************************** Init Send 0, 18, "id?;", 0, 0 '“5”是设备地址,"*idn?"是指令串 Receive 0, 18, str, 0, 0  ' str为接收数据缓冲区 Text1.Text = str '**************************************** '块接收的例子(频谱仪8561系列) '****************************************** 'Init 'Send 0, 18, "FA 100 MHZ;FB 200 MHZ;", 0, 0 'Send 0, 18, "TDF P;TRA?;", 0, 0 'For kk = 0 To 1000 '延时 'Next kk 'gg = ReceBlock(0, 18, 4207, str) "18"是地址,"4207"是接收的字节数,"str"为接收数据缓冲区 'gg = ReceEOI(0, 18, str, count, 0) '"count"是返回的字节数,ReceBlock和ReceEOI两者选一 '返回值gg为零时接收数据完整,-1为错误返回 GPIB函数的VC应用示例 // DynDllDialog.cpp : implementation file #include "stdafx.h" #include "Isa2MFCExa.h" #include "DynDllDialog.h" #include "windows.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif // CDynDllDialog dialog CDynDllDialog::CDynDllDialog(CWnd* pParent /*=NULL*/)     : CDialog(CDynDllDialog::IDD, pParent) {     //{{AFX_DATA_INIT(CDynDllDialog)     m_iAddr = 5;     m_strCommand = _T("F0R1X");     m_strResult = _T("");     //}}AFX_DATA_INIT } void CDynDllDialog::DoDataExchange(CDataExchange* pDX) {     CDialog::DoDataExchange(pDX);     //{{AFX_DATA_MAP(CDynDllDialog)     DDX_Text(pDX, IDC_ADDR, m_iAddr);     DDX_Text(pDX, IDC_CMD, m_strCommand);     DDX_Text(pDX, IDC_RESULT, m_strResult);     //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CDynDllDialog, CDialog)     //{{AFX_MSG_MAP(CDynDllDialog)     //}}AFX_MSG_MAP END_MESSAGE_MAP() // CDynDllDialog message handlers void CDynDllDialog::OnOK() {     // TODO: Add extra validation here         int rs;     char data_buf[3000];     char  aa[3000];     CString strCommand;     int iAddr; //    typedef int (__stdcall SEND) (int,char *,int); //    typedef int (__stdcall RECEIVE) (int,char *);     typedef int (__stdcall SEND) (int,int,char *,int,int);     typedef int (__stdcall RECEIVE) (int,int,char *,int,int);     SEND * send;     RECEIVE * receive;     HINSTANCE dllHandle=LoadLibrary("Gpib32.dll");     send=(SEND *)GetProcAddress(dllHandle,"Send");     receive=(RECEIVE *)GetProcAddress(dllHandle,"Receive");         UpdateData(TRUE);     iAddr=m_iAddr;     strCommand=m_strCommand;     strcpy(data_buf,(const char *)m_strCommand);     rs=send(0,iAddr,data_buf,0,0);     rs=receive(0,iAddr,aa,0,0);     m_strResult=_T(aa);     m_strCommand=strCommand;     m_iAddr=iAddr;     FreeLibrary(dllHandle);     UpdateData(FALSE);     UpdateWindow(); //      CDialog::OnOK(); } GPIB函数的Delphi应用示例 unit loadDll; interface uses   Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,   StdCtrls; type   TForm1 = class(TForm)     Button1: TButton;     Button2: TButton;     Edit1: TEdit;     Edit2: TEdit;     Label1: TLabel;     Label2: TLabel;     procedure Button1Click(Sender: TObject);     procedure Button2Click(Sender: TObject);     private     public     end; var   Form1: TForm1; Implementation procedure Send(Board_Index:Longint;Device_Address:SmallInt;Data_Buffer:PChar;             Byte_Count:Longint;EOT_Mode:Longint);stdcall external 'gpib32.dll'; procedure Receive(Board_Index:Longint;Device_Address:SmallInt;Data_Buffer:PChar;Byte_Count:Longint;Termination:Longint);stdcall external 'gpib32.dll'; procedure TForm1.Button1Click(Sender: TObject); var  P2,readstr:PChar;   i:integer; begin   P2:=StrAlloc(100*Sizeof(Char));   readstr:=StrAlloc(200*Sizeof(Char));   StrCopy(P2,PChar(Edit2.Text));   Send(0,5,P2,20,0);   sleep(5);   Receive(0,5,readstr,20,0);   Edit1.Text :=readstr;   StrDispose(P2);   StrDispose(readstr); end; GPIB函数的LabWindows/CVI应用示例 #include #include #include #include         #include #include "Gpib_Cvi.h" #include "stdio.h" static int panelHandle; int main (int argc, char *argv[]) {    if (InitCVIRTE (0, argv, 0) == 0)         return -1;    /* out of memory */     if ((panelHandle = LoadPanel (0, "Gpib_Cvi.uir", PANEL)) < 0)         return -1;     DisplayPanel (panelHandle);     RunUserInterface ();     DiscardPanel (panelHandle);     return 0; } int CVICALLBACK ExampleBtn (int panel, int control, int event,         void *callbackData, int eventData1, int eventData2) {  long int myHandle,temHandle;   char P2[100],char ReadData[200];   long int retCount;     switch (event)         {case EVENT_COMMIT:             GetCtrlVal (panelHandle, PANEL_CmdStr,P2);              Send(0,5,P2,20,2);             ReceBlock(0,5,17,ReadData);             SetCtrlVal (panelHandle, PANEL_STRING, ReadData);             strcpy(P2,"");             strcpy(ReadData,"");             break;         }     return 0;} VB:           Function viRead (ByVal sesn As Long, ByVal ReadData As String, ByVal Count As Long, lretCount As Long) As Long           a00 6、viClear(Sesn)    用途:  使一个仪器清零。 参数说明: Sesn      输入    通话的唯一逻辑标识符。 返回值: 0表示成功,其余值均表示失败。 各种语言调用说明:a00 a00 Delphi:           Function viClear(sesn:Longint):Longint; C:           Long viClear (long sesn) VB:           Function viClear (ByVal sesn As Long) As Long 7、viReadSTB(Sesn)      用途:  读服务请求的状态字节。 参数说明 Sesn      输入    通话的唯一逻辑标识符。 Status    输出     服务请求的状态字节。 返回值:         0表示成功,其余值均表示失败。 各种语言调用说明: a00 Delphi:           Function ReadSTB(sesn:Longint;status:PSmallint):Longint C:           Long viReadSTB (long sesn, short *status) VB:           Function viReadSTB (ByVal sesn As Long,status As Integer) As Long           8、a00 viAssertTrigger(Sesn) 用途:  设置群触发。 参数说明: Sesn        输入    通话的唯一逻辑标识符。 protocal    输入     断定所用触发协议。不用置0。 返回值:         0表示成功,其余值均表示失败。 各种语言调用说明: a00 a00 Delphi:        Function viAssertTrigger(sesn:Longint;protocal:Integer):Longint; C:      Long viAssertTrigger (long sesn, int protocal) VB:  Function vAssertTrigger (ByVal sesn As Long,ByVal protocal As Integer) As Long           9、viLock(Sesn) 用途:  建立对指定资源的访问模式,本函数是本地封锁。 参数说明: Sesn        输入    通话的唯一逻辑标识符。 lockType    输入    表示请求得锁定类型。不用,置0。 timeout        输入    定时时间,默认识是10秒。 requestedKey 输入    不用,置0。 accessKey    输入    不用,置0。 返回值:         0表示成功,其余值均表示失败。 各种语言调用说明: a00 Delphi:               Function viLock(sesn,lockType,timeout:Longint;requestedKey, accessKey:PChar):Longint; C:        Long viLock (long sesn, long lockType, long timeout, char *requestedKey, char *accessKey) VB:          Function viLock (ByVal sesn As Long, ByVal lockType As Long, ByVal timeout As Long, ByVal requestedKey As String,ByVal accessKey As String) As Long           10、viUnlock (Sesn) 用途:  取消对指定资源的封锁,返回本地。 参数说明:  Sesn    输入    通话的唯一逻辑标识符。 返回值:         0表示成功,其余值均表示失败。 各种语言调用说明: a00 Delphi:          Function viUnlock(sesn:Longint):Longint; C:                Long viUnlock (long sesn) VB:              Function viUnlock (ByVal sesn As Long) As Long           GPIB函数详细说明: 1、Send(Board_Index,evice_Address,Data_Buffer,Byte_Count,EOT_Mode) 用途:          向仪器写数据。 参数说明: Board_Index        输入    不用,置0。 Device_Address    输入    仪器地址。 Data_Buffer        输入    向仪器传送数据块的存储单元。 Byte_Count        输入    指定被写的字节数。 EOT_Mode            输入    0表示没有数据传输结束标志; 1表示数据串用回车换行结束; 2表示数据用最后一个字符结束。 各种语言调用说明: Delphi:          Procedure Send(Board_Index:Longint; Device_Address:SmallInt; Data_Buffer:Pchar;Byte_Count:Longint; EOT_Mode:Longint); C:          Void Send(long int Board_Index, short Device_Address, char *Data_Buffer,long int Byte_Count, long int EOT_Mode); VB:          Sub Send(ByVal Board_Index As Long, ByVal Device_Address As Short, ByVal Data_Buffer As String,ByVal Byte_Count As Long, ByVal EOT_Mode As Long); 2、Receive(Board_Index,_Address,Buffer,Byte_Count,Terminatin    ) 用途:          从仪器读数据。 参数说明: Board_Index        输入    不用,置0。 Device_Address    输入    仪器地址。 Data_Buffer        输出    将接收数据的仪器缓冲区的存储单元 Byte_Count        输入    将读取的字节数。 Termination        输入    不用,置0。 各种语言调用说明:a00 Delphi:          ProcedureReceive(Board_Index:Longint; Device_Address:SmallInt;Data_Buffer:Pchar; Byte_Count:Longint; Termination:Longint); C:          Void Receive(long int Board_Index, short Device_Address, char *Data_Buffer,long int Byte_Count, long int Termination); VB:          Sub Receive(ByVal Board_Index As Long, ByVal Device_Address As Short,ByVal Data_Buffer As String,ByVal Byte_Count As Long, ByVal Termination As Long);         3、DevClear(Board_Index, Device_Address) 用途:          使一个仪器清零。 参数说明: Board_Index      输入    不用,置0。 Device_Address  输入     仪器地址。 各种语言调用说明: Delphi:          ProcedureDevClear(Board_Index:Longint;Device_Address:SmallInt); C:          Void DevClear(long int Board_Index, short Device_Address); VB:          Sub DevClear(ByVal Board_Index As Long, ByVal Device_Address As Short); 4、Trigger (Board_Index, Device_Address) 用途:          设置群触发。 参数说明: Board_Index      输入    不用,置0。 Device_Address  输入    仪器地址。 各种语言调用说明: Delphi:          Procedure Trigger(Board_Index:Longint;Device_Address:SmallInt); C:          Void Trigger(long int Board_Index, short Device_Address); VB:          Sub Trigger(ByVal Board_Index As Long, ByVal Device_Address As Short);           5、WaitSRQ (Board_Index, SRQ_Occurred) 用途:          等待服务请求。 参数说明: Board_Index      输入    不用,置0。 SRQ_Occurred  输出  0系统默认的timeout时间内无服务请求, 1系统默认的timeout时间有服务请求。 各种语言调用说明: Delphi:          Procedure WaitSRQ(Board_Index:Longint; SRQ_Occurred:PSmallInt); C:          Void WaitSRQ(long int Board_Index, short *SRQ_Occurred); VB:          Sub WaitSRQ(ByVal Board_Index As Long, SRQ_Occurred As Short);           6、ReadStatusByte(Board_Index, Address, Status_Byte    ) 用途:          读服务请求的状态字节。 参数说明 Board_Index        输入    不用,置0。 Device_Address    输入    仪器地址。 Status_Byte        输出    服务请求的状态字节。 各种语言调用说明: a00 Delphi:          ProcedureReadStatusByte(Board_Index:Longint; Device_Address:SmallInt; Status_Byte:PSmallInt); C:         Void ReadStatusByte(long int Board_Index, short Device_Address, short *Status_Byte); VB:          Sub ReadStatusByte(ByVal Board_Index As Long, ByVal Device_Address As Short, Status_Byte As Short);           7、SendIFC (Board_Index) 用途:          接口清除。 参数说明: Board_Index    输入    不用,置0。 各种语言调用说明:a00 Delphi:  Procedure SendIFC(Board_Index:Longint); C:        Void SendIFC(long int Board_Index); VB:        Sub SendIFC(ByVal Board_Index As Long); 8、ReceBlock(Board_Index,_Address,Data_Buffer,Byte_Count,Termination) 用途:          从仪器读数据块。 参数:  名 称          方 向      说 明 Board_Index      输入    不用,置0。 Device_Address输入    仪器地址。 Data_Buffer      输出    表示将接收数据的仪器缓冲区的存储单元 Byte_Count      输入    将读取的字节数。 返回值: 0表示成功,- 1表示失败。 各种语言调用说明: Delphi:  Function ReceBlock(Board_Index:Longint; Device_Address:SmallInt; Block_Size:Longint;Data_Buffer:PChar); C:      int ReceBlock(long int Board_Index, short Device_Address, int Block_Size, char *Data_Buffer); VB:    Function ReceBlock(ByVal Board_Index As Integer, ByVal  evice_Address As Integer,ByVal Byte_Count As Integer, ByVal Data_Buffer As String);           9、ReceEOI (Board_Index, _Address, Data_Buffer, Byte_Count, Termination) 用途:    以EOI结束方式读仪器数据块。 参数:  名 称      方 向      说 明 Board_Index    输入    不用,置0。 Device_Address输入    仪器地址。 Data_Buffer    输出    表示将接收数据的仪器缓冲区的存储单元 Byte_Count    输入    将读取的字节数。 Termination    输入    不用,置0。 返回值: 0表示成功,- 1表示失败。 各种语言调用说明: a00 Delphi:    Function ReceEOI(Board_Index:Longint; Device_Address:SmallInt; Data_Buffer:PChar;Byte_Count:PLongint;Termination:Longint C:    int ReceEOI(long int Board_Index, short Device_Address, char *Data_Buffer,long int *Byte_Count,lng int Termination); VB:      Function ReceEOI(ByVal Board_Index As Integer, ByVal Device_Address As Integer,ByVal Data_Buffer As String, ByRef Byte_Count As Integer,ByVal Termination As Integer); VISA函数的VB应用示例: 声明: Declare Function viOpenDefaultRM& Lib "visa32.dll" (sesn1&) Declare Function viOpen& Lib "visa32.dll" (ByVal sesn1&, ByVal rsrcName$, ByVal acessMode&, ByVal timeout&, sesn2&) Declare Function viWrite& Lib "visa32.dll" (ByVal sesn&, ByVal CommStr$, ByVal Count&, retCount&) Declare Function viClose& Lib "visa32.dll" (ByVal sesn&) Declare Function viRead& Lib "visa32.dll" (ByVal sesn&, ByVal ReadData$, ByVal Count&, retCount&) Declare Function viClear& Lib "visa32.dll" (ByVal x1&) Declare Function viLock& Lib "visa32.dll" (ByVal x1&, ByVal x2&, ByVal x3&, ByVal x4$, ByVal x5$) Declare Function viUnlock& Lib "visa32.dll" (ByVal x1&) Declare Function viAssertTrigger& Lib "visa32.dll" (ByVal x1&, ByVal x2&) Declare Function viReadSTB& Lib "visa32.dll" (ByVal x1&, x2%) 程序: Option Explicit Public res As String Public ErrCode As Long Public visah As Long Public visah2 As Long Public datas As String Public cms As String Public cmslen  As Long Private Sub Command1_Click() '写数据 Dim i As Long Dim j As Integer cms = Text2.Text cmslen = Len(cms) ErrCode = viWrite(visah, cms, 10, cmslen) For i = 1 To 5000 Next i End Sub Private Sub Command2_Click() ErrCode = viClose(visah) End End Sub Private Sub Command3_Click() '读数据 Dim i As Long Dim j As Integer datas = String(100, 0) ErrCode = viRead(visah, datas, 10, cmslen) Text1.Text = datas For i = 1 To 10000 Next i End Sub Private Sub Command4_Click() '初始化 Dim i As Long Dim j As Integer ErrCode = viOpenDefaultRM(visah2) For i = 1 To 10000 Next i Command4.Enabled = False Command1.Enabled = True Command2.Enabled = True Command3.Enabled = True Command5.Enabled = True End Sub 'Private Sub Command3_Click() 'Dim kk, gg As Integer 'Dim str As String 'str = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" 'kk = gpib_send(5, Text2.Text) 'gg = gpib_receive(5, str) 'Text1.Text = str 'Text3.Text = kk 'End Sub 'Private Sub Command4_Click() 'Dim dd As Integer 'Text1.Text = fnBB(1, 2) 'Text1.Text = fnCccDll(1, 8) 'End Sub Private Sub Command5_Click() Dim i, j As Integer res = Text3.Text ErrCode = viOpen(visah2, res, 0, 10, visah) For i = 1 To 10000 Next i End Sub VISA函数的VC应用示例 // DubugIsaDll.cpp : Defines the entry point for the console application. #include "stdafx.h" #include "stdio.h" #include "windows.h" #include "string.h" //int gpib_receive(int iAddrDevice,char *receive_buffer); //__declspec(dllimport) int __stdcall gpib_send(int iAddrDevice,char * sending,int); //__declspec(dllimport) int __stdcall gpib_receive(int iAddrDevice,char *receive_buffer); //__declspec(dllimport) void __stdcall gpib_local(); //__declspec(dllimport) void __stdcall gpib_device_clear(); int main(int argc, char* argv[]) { //    int rs; //    char data_buf[3000]; //    char aa[5000]; int ErrCode; int visah; int visah2; char datas[5000]; int  cmslen; char * cms = "F0R0X"; char * res = "GPIB::5"; int i,j; //    rs=fnMy111(2,3); //    printf("rs=%d",rs); //    int (*send)(int,char *,int); //    typedef int (__stdcall SEND) (int,int,char *,int,int); //    typedef int (__stdcall RECEIVE) (int,int,char *,int,int);     typedef int (__stdcall OPENDEFAULT) (int *);     typedef int (__stdcall OPEN) (int,char *,int,int,int *);     typedef int (__stdcall WRITE) (int,char *,int,int *);     typedef int (__stdcall CLOSE) (int);     typedef int (__stdcall READ) (int,char *,int,int *);         //    SEND * send; //    RECEIVE * receive;     OPENDEFAULT * opendefault;     OPEN * open;     WRITE * write;     READ * read;     CLOSE * close; //    HINSTANCE dllHandle=LoadLibrary("C:\\Program Files\\HT203\\PciIEEE488\\GPIB\\gpib32.dll");     HINSTANCE dllHandle=LoadLibrary("C:\\Program Files\\HT203\\PciIEEE488\\VISA\\visa32.dll"); //    HINSTANCE dllHandle=LoadLibrary("D:\\Pcicard\\VISA\\visa32.dll"); //    send=(SEND *)GetProcAddress(dllHandle,"Send"); //    receive=(RECEIVE *)GetProcAddress(dllHandle,"Receive");     opendefault=(OPENDEFAULT *)GetProcAddress(dllHandle,"viOpenDefaultRM");     open=(OPEN *)GetProcAddress(dllHandle,"viOpen");     write=(WRITE *)GetProcAddress(dllHandle,"viWrite");     read=(READ *)GetProcAddress(dllHandle,"viRead");     close=(CLOSE *)GetProcAddress(dllHandle,"viClose");     cmslen = strlen(cms);     ErrCode = opendefault(&visah2);     for(i=0;i<100000;i++)         for(j=0;j<20;j++)         {}     ErrCode = open(visah2, "GPIB::5", 0, 10, &visah);     for(i=0;i<100000;i++)         for(j=0;j<20;j++)         {} //在测量中当应用opendefault打开卡资源,open建立连接后, //可重复使用write 和read 函数完成测量。     ErrCode = write(visah, "F0R0X", 10, &cmslen);     ErrCode = read(visah, datas, 10, &cmslen);     printf("rs is:%s\n",datas);     ErrCode = write(visah, "F1R0X", 10, &cmslen);     ErrCode = read(visah, datas, 10, &cmslen);     printf("rs is:%s\n",datas);     ErrCode = close(visah); //    write(0,5,"F0R0X",0,0); //    receive(0,5,aa,0,0); //    printf("rs is:%s",aa);     FreeLibrary(dllHandle); //    gpib_receive(5,data_buf); //    gpib_local(); //    gpib_device_clear();     return 0; VISA函数的Delphi应用示例 unit loadDll; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type   TForm1 = class(TForm)     OkBtn: TButton;     CancelBtn: TButton;     Edit1: TEdit;     Edit2: TEdit;     Label1: TLabel;     Label2: TLabel;     procedure OkBtnClick(Sender: TObject);     procedure CancelBtnClick(Sender: TObject);   private     { Private declarations }   public     { Public declarations }   end; var   Form1: TForm1; implementation {$R *.DFM} Function viOpenDefaultRM(sesn1:PLongint):Longint;stdcall external 'visa32.dll'; function viOpen(sesn1:Longint;rsrcName:PChar;acessMode:Longint; timeout:Longint;sesn2:PLongint):Longint;stdcall external 'visa32.dll'; function viWrite(sesn:Longint;CommStr:PChar;Count:Longint; retCount:PLongint):Longint;stdcall external 'visa32.dll'; function viClose(sesn:Longint):Longint;stdcall external 'visa32.dll'; function viRead(sesn:Longint;ReadData:PChar;Count:Longint;       retCount:PLongint):Longint;stdcall external 'visa32.dll'; procedure TForm1.OkBtnClick(Sender: TObject); var   myHandle,temHandle:PLongint;   P1,P2:PChar;   retCount:PLongint;   ReadData:PChar;   i:Integer; begin   New(myHandle);   New(temHandle);   New(retCount);   P1:=StrAlloc(100*Sizeof(Char));   StrCopy(P1,'GPIB::5::INSTR');   P2:=StrAlloc(100*Sizeof(Char));   StrCopy(P2,PChar(Edit1.Text));   viOpenDefaultRM(myHandle);   viOpen(myHandle^,P1,1,10,temHandle);   viWrite(temHandle^,P2,10,retCount);   ReadData:=StrAlloc(200*Sizeof(Char));   For i:=0 to 200000 do   begin   end;   viRead(temHandle^,ReadData,100,retCount);   Edit2.Text :=ReadData;   viClose(myHandle^);   StrDispose(P1);   StrDispose(P2);   StrDispose(ReadData);   Dispose(retCount);   Dispose(temHandle);   Dispose(myHandle); end; VISA函数的LabWindows/CVI应用示例 #include #include #include         #include #include "visa.h" #include "visa_cvi.h" #include "stdio.h" static int panelHandle; int main (int argc, char *argv[]) {     if (InitCVIRTE (0, argv, 0) == 0)         return -1;    /* out of memory */     if ((panelHandle = LoadPanel (0, "visa_cvi.uir", PANEL)) < 0)         return -1;     DisplayPanel (panelHandle);     RunUserInterface ();     DiscardPanel (panelHandle);     return 0; } int CVICALLBACK ExampleBtn (int panel, int control, int event,         void *callbackData, int eventData1, int eventData2) {   long int myHandle,temHandle;   char P1[100],P2[100];   long int retCount;   char ReadData[200];   char CmdStr[200];     switch (event)         {        case EVENT_COMMIT:             //printf("test");             strcpy(P1,"GPIB::5::INSTR");             GetCtrlVal (panelHandle, PANEL_CmdStr,CmdStr);   strcpy(P2,CmdStr);           viOpenDefaultRM(&myHandle); viOpen(myHandle,P1,1,10,&temHandle);           viWrite(temHandle,P2,10,&retCount);           viReceBlock(temHandle,17,ReadData);           //viRead(temHandle,ReadData,100,&retCount);             SetCtrlVal (panelHandle, PANEL_STRING, ReadData);             viClose(myHandle);             break;        }     return 0;} GPIB函数的VB应用示例 Private Sub Command1_Click() Dim kk, gg As Integer Dim str As String Dim count As Integer 'str = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" str = String(50000, 0) '一般发送和接收的例子 '*************************************** Init Send 0, 18, "id?;", 0, 0 '“5”是设备地址,"*idn?"是指令串 Receive 0, 18, str, 0, 0  ' str为接收数据缓冲区 Text1.Text = str '**************************************** '块接收的例子(频谱仪8561系列) '****************************************** 'Init 'Send 0, 18, "FA 100 MHZ;FB 200 MHZ;", 0, 0 'Send 0, 18, "TDF P;TRA?;", 0, 0 'For kk = 0 To 1000 '延时 'Next kk 'gg = ReceBlock(0, 18, 4207, str) "18"是地址,"4207"是接收的字节数,"str"为接收数据缓冲区 'gg = ReceEOI(0, 18, str, count, 0) '"count"是返回的字节数,ReceBlock和ReceEOI两者选一 '返回值gg为零时接收数据完整,-1为错误返回 GPIB函数的VC应用示例 // DynDllDialog.cpp : implementation file #include "stdafx.h" #include "Isa2MFCExa.h" #include "DynDllDialog.h" #include "windows.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif // CDynDllDialog dialog CDynDllDialog::CDynDllDialog(CWnd* pParent /*=NULL*/)     : CDialog(CDynDllDialog::IDD, pParent) {     //{{AFX_DATA_INIT(CDynDllDialog)     m_iAddr = 5;     m_strCommand = _T("F0R1X");     m_strResult = _T("");     //}}AFX_DATA_INIT } void CDynDllDialog::DoDataExchange(CDataExchange* pDX) {     CDialog::DoDataExchange(pDX);     //{{AFX_DATA_MAP(CDynDllDialog)     DDX_Text(pDX, IDC_ADDR, m_iAddr);     DDX_Text(pDX, IDC_CMD, m_strCommand);     DDX_Text(pDX, IDC_RESULT, m_strResult);     //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CDynDllDialog, CDialog)     //{{AFX_MSG_MAP(CDynDllDialog)     //}}AFX_MSG_MAP END_MESSAGE_MAP() // CDynDllDialog message handlers void CDynDllDialog::OnOK() {     // TODO: Add extra validation here         int rs;     char data_buf[3000];     char  aa[3000];     CString strCommand;     int iAddr; //    typedef int (__stdcall SEND) (int,char *,int); //    typedef int (__stdcall RECEIVE) (int,char *);     typedef int (__stdcall SEND) (int,int,char *,int,int);     typedef int (__stdcall RECEIVE) (int,int,char *,int,int);     SEND * send;     RECEIVE * receive;     HINSTANCE dllHandle=LoadLibrary("Gpib32.dll");     send=(SEND *)GetProcAddress(dllHandle,"Send");     receive=(RECEIVE *)GetProcAddress(dllHandle,"Receive");         UpdateData(TRUE);     iAddr=m_iAddr;     strCommand=m_strCommand;     strcpy(data_buf,(const char *)m_strCommand);     rs=send(0,iAddr,data_buf,0,0);     rs=receive(0,iAddr,aa,0,0);     m_strResult=_T(aa);     m_strCommand=strCommand;     m_iAddr=iAddr;     FreeLibrary(dllHandle);     UpdateData(FALSE);     UpdateWindow(); //      CDialog::OnOK(); } GPIB函数的Delphi应用示例 unit loadDll; interface uses   Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,   StdCtrls; type   TForm1 = class(TForm)     Button1: TButton;     Button2: TButton;     Edit1: TEdit;     Edit2: TEdit;     Label1: TLabel;     Label2: TLabel;     procedure Button1Click(Sender: TObject);     procedure Button2Click(Sender: TObject);     private     public     end; var   Form1: TForm1; Implementation procedure Send(Board_Index:Longint;Device_Address:SmallInt;Data_Buffer:PChar;             Byte_Count:Longint;EOT_Mode:Longint);stdcall external 'gpib32.dll'; procedure Receive(Board_Index:Longint;Device_Address:SmallInt;Data_Buffer:PChar;Byte_Count:Longint;Termination:Longint);stdcall external 'gpib32.dll'; procedure TForm1.Button1Click(Sender: TObject); var  P2,readstr:PChar;   i:integer; begin   P2:=StrAlloc(100*Sizeof(Char));   readstr:=StrAlloc(200*Sizeof(Char));   StrCopy(P2,PChar(Edit2.Text));   Send(0,5,P2,20,0);   sleep(5);   Receive(0,5,readstr,20,0);   Edit1.Text :=readstr;   StrDispose(P2);   StrDispose(readstr); end; GPIB函数的LabWindows/CVI应用示例 #include #include #include #include         #include #include "Gpib_Cvi.h" #include "stdio.h" static int panelHandle; int main (int argc, char *argv[]) {    if (InitCVIRTE (0, argv, 0) == 0)         return -1;    /* out of memory */     if ((panelHandle = LoadPanel (0, "Gpib_Cvi.uir", PANEL)) < 0)         return -1;     DisplayPanel (panelHandle);     RunUserInterface ();     DiscardPanel (panelHandle);     return 0; } int CVICALLBACK ExampleBtn (int panel, int control, int event,         void *callbackData, int eventData1, int eventData2) {  long int myHandle,temHandle;   char P2[100],char ReadData[200];   long int retCount;     switch (event)         {case EVENT_COMMIT:             GetCtrlVal (panelHandle, PANEL_CmdStr,P2);              Send(0,5,P2,20,2);             ReceBlock(0,5,17,ReadData);             SetCtrlVal (panelHandle, PANEL_STRING, ReadData);             strcpy(P2,"");             strcpy(ReadData,"");             break;         }     return 0;}
/
本文档为【GPIB卡说明书】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索