主题:[讨论]关于用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 了,哪里想到有这么多问题啊
请各位帮忙,谢谢!
我这里有个QB的程序范例:用QB实现万用表的测量,由于没有接触过QB,特来此地拜师学艺。
===============
程序如下:
---------------
REM $INCLUDE: 'qbdecl.bas'
DECLARE SUB gpiberr (msg$)
DECLARE SUB dvmerr (msg$, spr%)
CLS
PRINT "Read 10 measurements from the meter..."
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 了,哪里想到有这么多问题啊
请各位帮忙,谢谢!