我之前没有接触过GPIB方面的编程 ,手上也没有相关的资料,希望哪位大侠给点GPIB控制口编程的学习资料

解决方案 »

  1.   

    公司里有这些检测设备,现在手上还没有相关资料,所有问问有没有写过控制GPIB控制口的程序。
      

  2.   

    GPIB:通用接口總線
    本站就有下載:
    http://download.csdn.net/source/916846
      

  3.   

    GPIB通用接口總線一般都使用VB或LABVIEW、VC開發比較直觀,DELPHI也比較簡單,一般都是使用API或內部程序指令執行:利用GPIB接口编程技术,将计算机与数字存储示波器进行连接來實現具體的需求
    以下是部分代碼,供LZ參考:unit ClearTriggerForm; 
    interface 
    uses 
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, 
      StdCtrls, ExtCtrls; type 
      TClearTrigger = class(TForm) 
        GroupBox1: TGroupBox; 
        TriggerCmd: TButton; 
        QuitCmd: TButton; 
        ReadingsList: TListBox; 
        Timer1: TTimer; 
        procedure TriggerCmdClick(Sender: TObject); 
        procedure FormCreate(Sender: TObject); 
        procedure Timer1Timer(Sender: TObject); 
        procedure QuitCmdClick(Sender: TObject); 
      private 
      public 
      end; const 
      ERR    = $8000;          
      TIMO    = $4000;          
      ENDgpib = $2000;          
      SRQI    = $1000;          
      RQS    =  $800;          
      SPOLL  =  $400;          
      EVENT  =  $200;          
      CMPL    =  $100;          
      LOK    =  $80;          
      REM    =  $40;          
      CIC    =  $20;          
      ATN    =  $10;          
      TACS    =    $8;          
      LACS    =    $4;          
      DTAS    =    $2;          
      DCAS    =    $1;  
      EDVR =  0;                
      ECIC =  1;                
      ENOL =  2;                
      EADR =  3;                
      EARG =  4;                
      ESAC =  5;                
      EABO =  6;                
      ENEB =  7;                
      EDMA =  8;                
      EOIP = 10;  
      ECAP = 11;                
      EFSO = 12;                
      EBUS = 14;                
      ESTB = 15;                
      ESRQ = 16;                
      ETAB = 20;                  T10s                = 13;   BDINDEX            = 0;    
      PRIMARY_ADDR_OF_DMM = 1;    
      NO_SECONDARY_ADDR  = 0;    
      TIMEOUT            = T10s; 
      EOTMODE            = 1;    
      EOSMODE            = 0; 
      ARRAYSIZE          = 1024; 
    type 
      Tibsta  = function : integer; stdcall; 
      Tiberr  = function : integer; stdcall; 
      Tibcntl = function : Longint; stdcall; 
      Tibclr = function (ud : integer) : integer; stdcall; 
      Tibdev = function(ud:  integer; 
                        pad: integer; 
                        sad: integer; 
                        tmo: integer; 
                        eot: integer; 
                        eos: integer) : integer; stdcall; 
      Tibonl = function(ud: integer; 
                        v:  integer) : integer; stdcall; 
      Tibrd  = function (ud:  integer; 
                        var  rdbuf; 
                        cnt: Longint) : integer; stdcall; 
      Tibtrg = function (ud : integer) : integer; stdcall; 
      Tibwrt = function (ud:  integer; 
                        var  wrtbuf; 
                        cnt: longint) : integer; stdcall; var 
      ClearTrigger: TClearTrigger; 
      Gpib32Lib: THandle; 
      AddrIbsta  : Tibsta; 
      AddrIberr  : Tiberr; 
      AddrIbcntl : Tibcntl; 
      Pibsta  : ^integer; 
      Piberr  : ^integer; 
      Pibcntl : ^Longint; 
      ibclr  : Tibclr; 
      ibdev  : Tibdev; 
      ibonl  : Tibonl; 
      ibrd  : Tibrd; 
      ibtrg  : Tibtrg; 
      ibwrt  : Tibwrt; 
      ValueStr : packed array[0..2049] of char; 
      Dev      : integer; 
      buf      : packed array[0..100] of char; implementation procedure loadDLL; 
    var 
      str : string;   begin     If Gpib32Lib = 0 Then 
          Begin 
            str := 'LoadLibrary FAILED!'; 
            MessageDlg(str, mtError, [mbOK], 0); 
            halt; 
          End; 
        @AddrIbsta  := GetProcAddress(Gpib32Lib, 'user_ibsta'); 
        @AddrIberr  := GetProcAddress(Gpib32Lib, 'user_iberr'); 
        @AddrIbcntl := GetProcAddress(Gpib32Lib, 'user_ibcnt'); 
        @ibclr  := GetProcAddress(Gpib32Lib, 'ibclr'); 
        @ibdev  := GetProcAddress(Gpib32Lib, 'ibdev'); 
        @ibonl  := GetProcAddress(Gpib32Lib, 'ibonl'); 
        @ibrd  := GetProcAddress(Gpib32Lib, 'ibrd'); 
        @ibtrg  := GetProcAddress(Gpib32Lib, 'ibtrg'); 
        @ibwrt  := GetProcAddress(Gpib32Lib, 'ibwrt'); 
        if (@AddrIbsta  = NIL) Or 
          (@AddrIberr  = NIL) Or 
          (@AddrIbcntl = NIL) Or 
          (@ibclr      = NIL) Or 
          (@ibdev      = NIL) Or 
          (@ibonl      = NIL) Or 
          (@ibrd      = NIL) Or 
          (@ibtrg      = NIL) Or 
          (@ibwrt      = NIL) Then 
          Begin 
            str := 'GetProcAddress FAILED!'; 
            MessageDlg(str, mtError, [mbOK], 0); 
            FreeLibrary(Gpib32Lib); 
            halt; 
          End; 
            Pibsta  := @AddrIbsta; 
          Piberr  := @AddrIberr; 
          Pibcntl := @AddrIbcntl; 
      end; 
    procedure GPIBCleanup(msg: string); 
      var 
        str      : string;      
        ibstaStr  : string;      
        iberrStr  : string;      
        ibcntlStr : string;  
      begin 
        ibstaStr := IntToHex(Pibsta^, 4); 
        iberrStr := IntToStr(Piberr^); 
        str := msg; 
        str := Concat(str, #13);  
        str := Concat(str, 'ibsta = $' + ibstaStr); 
        str := Concat(str, '  <'); 
        if (Pibsta^ and ERR) <> 0 Then 
          str := Concat(str, ' ERR '); 
        if (Pibsta^ and TIMO) <> 0 Then 
          str := Concat(str, ' TMO '); 
        if (Pibsta^ and ENDgpib) <> 0 Then 
          str := Concat(str, ' END '); 
        if (Pibsta^ and SRQI) <> 0 Then 
          str := Concat(str, ' SRQI '); 
        if (Pibsta^ and RQS) <> 0 Then 
          str := Concat(str, ' RQS '); 
        if (Pibsta^ and SPOLL) <> 0 Then 
          str := Concat(str, ' SPOLL '); 
        if (Pibsta^ and EVENT) <> 0 Then 
          str := Concat(str, ' EVENT '); 
        if (Pibsta^ and CMPL) <> 0 Then 
          str := Concat(str, ' CMPL '); 
        if (Pibsta^ and LOK) <> 0 Then 
          str := Concat(str, ' LOK '); 
        if (Pibsta^ and REM) <> 0 Then 
          str := Concat(str, ' REM '); 
        if (Pibsta^ and CIC) <> 0 Then 
          str := Concat(str, ' CIC '); 
        if (Pibsta^ and ATN) <> 0 Then 
          str := Concat(str, ' ATN '); 
        if (Pibsta^ and TACS) <> 0 Then 
          str := Concat(str, ' TACS '); 
        if (Pibsta^ and LACS) <> 0 Then 
          str := Concat(str, ' LACS '); 
        if (Pibsta^ and DTAS) <> 0 Then 
          str := Concat(str, ' DTAS '); 
        if (Pibsta^ and DCAS) <> 0 Then 
          str := Concat(str, ' DCAS '); 
        str := Concat(str, '>'); 
        str := Concat(str, #13);     str := Concat(str, 'iberr = ' + iberrStr); 
        str := Concat(str, '  <'); 
        if Piberr^ = EDVR Then 
          str := Concat(str, ' EDVR '); 
        if Piberr^ = ECIC Then 
          str := Concat(str, ' ECIC '); 
        if Piberr^ = ENOL Then 
          str := Concat(str, ' ENOL '); 
        if Piberr^ = EADR Then 
          str := Concat(str, ' EADR '); 
        if Piberr^ = EARG Then 
          str := Concat(str, ' EARG '); 
        if Piberr^ = ESAC Then 
          str := Concat(str, ' ESAC '); 
        if Piberr^ = EABO Then 
          str := Concat(str, ' EABO '); 
        if Piberr^ = ENEB Then 
          str := Concat(str, ' ENEB '); 
        if Piberr^ = EDMA Then 
          str := Concat(str, ' EDMA '); 
        if Piberr^ = EOIP Then 
          str := Concat(str, ' EOIP '); 
        if Piberr^ = ECAP Then 
          str := Concat(str, ' ECAP '); 
        if Piberr^ = EFSO Then 
          str := Concat(str, ' EFSO '); 
        if Piberr^ = EBUS Then 
          str := Concat(str, ' EBUS '); 
        if Piberr^ = ESTB Then 
          str := Concat(str, ' ESTB '); 
        if Piberr^ = ESRQ Then 
          str := Concat(str, ' ESRQ '); 
        if Piberr^ = ETAB Then 
          str := Concat(str, ' ETAB '); 
        str := Concat(str, '>'); 
        str := Concat(str, #13);  
        ibcntlStr := IntToStr(Pibcntl^); 
        str := Concat( str, 'ibcntl = ' + ibcntlStr); 
        MessageDlg(str, mtError, [mbOK], 0); 
        ibonl(Dev, 0); 
        FreeLibrary(Gpib32Lib); 
        halt; 
    end; procedure TClearTrigger.TriggerCmdClick(Sender: TObject); 
    begin     TriggerCmd.Enabled := False; 
        Dev := ibdev(BDINDEX, PRIMARY_ADDR_OF_DMM, 
                      NO_SECONDARY_ADDR, TIMEOUT, EOTMODE, EOSMODE); 
        if (Pibsta^ AND ERR) <> 0 Then 
            GPIBCleanup('Unable to open device'); 
        ibclr(Dev); 
        if (Pibsta^ AND ERR) <> 0 Then 
            GPIBCleanup('Unable to clear device'); 
        buf := 'TRIGGER 5'; 
        ibwrt(Dev, buf, 9); 
        if (Pibsta^ AND ERR) <> 0 Then 
            GPIBCleanup('Unable to set trigger type'); 
        Timer1.Enabled := True; end; procedure TClearTrigger.QuitCmdClick(Sender: TObject); 
    begin 
        ibonl(Dev, 0); 
        FreeLibrary(Gpib32Lib); 
        Close; 
    end; end. 
      

  4.   

    注意:當使用GPIB進行編程時;提示以下幾點,以免走彎路...1,让计算机找到GPIB卡
    2,让GPIB卡找到被控制仪器(好像现在AGELENT的82350最多支持64台仪器)
    3,送命令。至于编程方法,看看例子就可以的。VC,DELPHI,VB,都没有问题。
    如何编程看GPIB卡的 PROGRAMMING 手册。
    特定的仪器,看仪器本身的命令手册。