我之前没有接触过GPIB方面的编程 ,手上也没有相关的资料,希望哪位大侠给点GPIB控制口编程的学习资料
解决方案 »
- 任务管理控件怎么根据ID选择获得TcxSchedulerControlEvent对象
- 第一次试着写个控件,就遇到了大问题,一头雾水,各位老师帮忙啊!!
- 哈尔滨的网友注意:项目外包:要求有一些经验,网友与我联系,qq--361716049,
- 请问:如何打印TRichEdit的内容?
- 关于数据加密的问题 出高分高手请进
- 怎样将有相同字段的数据表合并生成新表?
- [急急急]如何将在DBGrid中显示出来的内容打印出来???
- 如果在使用CreateOleObject('Excel.Application');把dbgrid中的数据导出到excel,那么...
- 30分求WINDOWS优化大师的注册号!!!
- 如何使 form中的文字自动向上滚动??
- 大富翁论坛,目前在线人数不到10个,太可悲啦
- 不懂C++,哪位大侠帮翻译成Delphi的代码
本站就有下載:
http://download.csdn.net/source/916846
以下是部分代碼,供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.
2,让GPIB卡找到被控制仪器(好像现在AGELENT的82350最多支持64台仪器)
3,送命令。至于编程方法,看看例子就可以的。VC,DELPHI,VB,都没有问题。
如何编程看GPIB卡的 PROGRAMMING 手册。
特定的仪器,看仪器本身的命令手册。