回 帖 发 新 帖 刷新版面

主题:[讨论]关于用QB实现仪器仪表通讯的程序

大家好!
我这里有个QB的程序范例:用QB实现万用表的测量,由于没有接触过QB,特来此地拜师学艺。
===============
程序如下:
---------------
REM $INCLUDE: 'qbdecl.bas'

DECLARE SUB gpiberr (msg$)
DECLARE SUB dvmerr (msg$, spr%)

CLS
PRINT "Read 10 measurements from the meter..."
PRINT

CALL ibdev(0, 8, 0, T30s, 1, 0, dvm%)
IF (dvm% < 0) THEN CALL gpiberr("Ibdev Error")
 
CALL ibclr(dvm%)
 IF (ibsta% AND EERR) THEN CALL gpiberr("Ibclr Error")
 
 wrt$ = "*RST"
 CALL ibwrt(dvm%, wrt$)
 IF (ibsta% AND EERR) THEN CALL gpiberr("Ibwrt Error")
 
 SLEEP 4

 wrt$ = "CONF:VOLT:DC"
 CALL ibwrt(dvm%, wrt$)
 IF (ibsta% AND EERR) THEN CALL gpiberr("Ibwrt Error")
 
 sum = 0!
 
 FOR i% = 1 TO 10
 
  wrt$ = "READ?"
  CALL ibwrt(dvm%, wrt$)
  IF (ibsta% AND EERR) THEN CALL gpiberr("Ibwrt Error")
 
  rd$ = SPACE$(11)
  CALL ibrd(dvm%, rd$)
  IF (ibsta% AND EERR) THEN CALL gpiberr("Ibrd Error")
 
  reading$ = LEFT$(rd$, ibcnt%)
  PRINT "reading: "; reading$
 
  sum = sum + VAL(reading$)

 NEXT i% ' Continue FOR loop until 10 measurements are read.
 
 PRINT "The average of the 10 readings is: ", sum / 10
 
 CALL ibonl(dvm%, 0)

END

SUB dvmerr (msg$, spr%) STATIC

  PRINT msg$

  PRINT "Status Byte = &H"; HEX$(spr%)
 
  CALL ibonl(dvm%, 0)
  STOP
END SUB

SUB gpiberr (msg$) STATIC
 
 PRINT msg$
 
 PRINT "ibsta = &H"; HEX$(ibsta%); " <";
 IF ibsta% AND EERR THEN PRINT " ERR";
 IF ibsta% AND TIMO THEN PRINT " TIMO";
 IF ibsta% AND EEND THEN PRINT " END";
 IF ibsta% AND SRQI THEN PRINT " SRQI";
 IF ibsta% AND RQS THEN PRINT " RQS";
 IF ibsta% AND SPOLL THEN PRINT " SPOLL";
 IF ibsta% AND EEVENT THEN PRINT " EVENT";
 IF ibsta% AND CMPL THEN PRINT " CMPL";
 IF ibsta% AND LOK THEN PRINT " LOK";
 IF ibsta% AND RREM THEN PRINT " REM";
 IF ibsta% AND CIC THEN PRINT " CIC";
 IF ibsta% AND AATN THEN PRINT " ATN";
 IF ibsta% AND TACS THEN PRINT " TACS";
 IF ibsta% AND LACS THEN PRINT " LACS";
 IF ibsta% AND DTAS THEN PRINT " DTAS";
 IF ibsta% AND DCAS THEN PRINT " DCAS";
 PRINT " >"
 PRINT "iberr = "; iberr%;

 IF iberr% = EDVR THEN PRINT " EDVR <DOS Error>"
 IF iberr% = ECIC THEN PRINT " ECIC <Not CIC>"
 IF iberr% = ENOL THEN PRINT " ENOL <No Listener>"
 IF iberr% = EADR THEN PRINT " EADR <Address error>"
 IF iberr% = EARG THEN PRINT " EARG <Invalid argument>"
 IF iberr% = ESAC THEN PRINT " ESAC <Not Sys Ctrlr>"
 IF iberr% = EABO THEN PRINT " EABO <Op. aborted>"
 IF iberr% = ENEB THEN PRINT " ENEB <No GPIB board>"
 IF iberr% = EOIP THEN PRINT " EOIP <Async I/O in prg>"
 IF iberr% = ECAP THEN PRINT " ECAP <No capability>"
 IF iberr% = EFSO THEN PRINT " EFSO <File sys. error>"
 IF iberr% = EBUS THEN PRINT " EBUS <Command error>"
 IF iberr% = ESTB THEN PRINT " ESTB <Status byte lost>"
 IF iberr% = ESRQ THEN PRINT " ESRQ <SRQ stuck on>"
 IF iberr% = ETAB THEN PRINT " ETAB <Table Overflow>"
 
 PRINT "ibcnt = "; ibcnt%
 
 CALL ibonl(dvm%, 0)

 STOP

END SUB


我是在WinXp SP2 系统下 Quick Basic 7.1 做的,按“F5”后提示:

提示“File not found” 

删除 REM $INCLUDE: 'qbdecl.bas' 

运行提示:“Subprogram not defined” 

应该怎么解决呢 ? 
我本来以为有了源程序后下个软件一运行就OK 了,哪里想到有这么多问题啊
请各位帮忙,谢谢!

回复列表 (共1个回复)

沙发

不知你用的什么GPIB卡
这个程序应该在MS-DOS下运行
运行时需加载QB快速库及GPIB快速库(由随卡的DISK提供)
REM $INCLUDE: 'qbdecl.bas' 这行不能干掉
你再试试

我来回复

您尚未登录,请登录后再回复。点此登录或注册