duchow@watnxt1.ucr.edu (John Duchowski) (05/08/91)
Hi,
This is probably a long shot, but I'm desperate, so here it goes. For
the last week I have been trying to get our HP9000 series 300 to talk to
a Varian DMS 100 Spectrophotometer. The connection is over HPIB where the
DMS 100 becomes the system controller. There appear to be several problems
invloved which are:
1. The DMS does not respond correctly to the commands issued from the
300. I have artificially shut down the error response which seems
to work, but I am not happy about this idea.
2. As a consequence of (1), I seem to be loosing one data point on
transfer. The DMS 100 transfer photometric data for a given wavelength
interval; if the interval is < 150 nm the points are at every 0.05 nm,
for larger intervals, the points are at every 0.2 nm. At the moment
I am trying to smear that one point over the entire interval which
is a better solution from sceintific point of view but worse compu-
tationally as the array indeces "sometimes" are out of sync.
3. The main problem is that not all data appears to get transferred. At
shorter intervals, things seem OK, but at larger ones what appears to
be a totally arbitrary cut off seems to be taking place. The reason
for this is that the DMS is supposed send a signal indicating the end
of data transfer and is not doing that, so the collection ends once
the array is filled - ON ERROR goto NO ERROR solution again :-( and
the size of the array is determined by looking at the starting and
ending wavelengths.
Finally, I must confess that my knowledge of HP BASIC and IEEE interfacing
at the moment is rudimentary at best. I was therefore wondering if anyone
out there might be able to spot the problem or come up with a better way of
doing things. Any hints and/or comments will be greatly appreciated. Thank
you !
- John
==============================================================================
1 !RE-STORE "DMS100_310"
10 !This is program DMS100_310
20 !It transfers data directly from the Varian DMS100 UV/VIS
30 !absorption spectrophotometer to an HP310 microcmputer
40 !via an HPIB interface
41 !**********************************************************
42 !
43 ! CAUTION
44 !When using this program make sure the IEEE cable between the
45 !spctrophotometer and the computer is not connected until after
46 !this program is running.
47 !
48 !
50 ABORT 7
51 RESET 7
57 STATUS 7,3;Old_address
58 CONTROL 7,3;5
59 STATUS 7,3;Address
69 OPTION BASE 1
70 DEG
71 DIM M$[88],Tr$[88],Array(4000,2),Dat$(4000)[4],Pp$[4],C(19),A(19)
72 DIM Y(4000),Stat$[88],H1$[80],H2$[80]
76 INTEGER Npts,Stopts,Mcol
77 Mcol=2
78 PASS CONTROL 709 !Control of the bus has been passed to the DMS100
79 BEEP
80 PRINT "Ready to capture trace buffer from DMS100"
81 PRINT "Connect IEEE cable and then press [CONT]."
82 PAUSE
83 N$="ECD" !E=Talker identity, in this case computer at 705
84 !C=Command follows
85 !D=tells DMS to report current opperating parameters
86 CALL Cksum(N$,Cs$)
87 M$=N$&Cs$
88 STATUS 7,7;X
89 PRINT "Status 7 before request is";IVAL$(X,2)
90 STATUS 7,6;X
91 PRINT "Status 6 before request is";IVAL$(X,2)
99 REQUEST 7;73 !Set SRQ line high (64) to tell DMS that computer wants
100 !to talk and say it wants to talk to DMS (address 9).
101 STATUS 7,7;X
102 PRINT "Status 7 after request is ";IVAL$(X,2)
103 STATUS 7,6;X
104 PRINT "Status 6 after request is ";IVAL$(X,2)
105 OUTPUT 7;"ECD"&Cs$ END
108 ON ERROR GOTO 111
109 OUTPUT 7;"1"
110 GOTO 113
111 OFF ERROR
113 STATUS 7,7;X
114 PRINT "Status 7 after output is ";IVAL$(X,2)
115 STATUS 7,6;X
116 PRINT "Status 6 after output is ";IVAL$(X,2)
119 ENTER 7;Stat$ !Get response from DMS100
120 STATUS 7,7;X
121 PRINT "status 7 after enter is ";IVAL$(X,2)
122 STATUS 7,6;X
123 PRINT "status 6 after enter is ";IVAL$(X,2)
125 DISP Stat$
127 W2=(NUM(Stat$[20,20])+256*NUM(Stat$[21,21]))/20 !Starting Wavelength
128 W1=(NUM(Stat$[22,22])+256*NUM(Stat$[23,23]))/20 !Ending Wavelength
129 Tau=NUM(Stat$[25,26])
130 IF Tau=0 THEN Tau=.3 !Time Constant
131 IF Tau=2 THEN Tau=5
132 Speed=6/(.00375*(NUM(Stat$[18,18])+NUM(Stat$[19,19])*256))
133 !Scan Speed
134 Slit=NUM(Stat$[26,26])/20 !Slit width
135 PRINT "Lower wavelength =";W1;"nm and upper wavelength =";W2
136 PRINT "Time constant =";Tau;" Scan speed =";Speed
137 PRINT "Spectral slit width =";Slit
140 !
141 !Get data from DMS100
142 !
143 N$="ECH" !E= computer's address (705)
144 !C= Command follows
145 !H= Send trace buffer
146 CALL Cksum(N$,Cs$)
147 M$=N$&Cs$
148 REQUEST 7;73
149 OUTPUT 7;M$;END
150 ON ERROR GOTO Skip
151 OUTPUT 7;"1"
152 GOTO 155
154 Skip: OFF ERROR
155 J=0
156 ON ERROR GOTO Last_one
157 Dat_in: ENTER 7;Tr$
158 ! PRINT Tr$
160 An$=Tr$[1,3]
162 IF An$="INH" THEN
163 BEEP
164 PRINT An$
165 GOTO Last_one
166 END IF
167 FOR I=1 TO 16
168 J=J+1
169 Dat$(J)=Tr$[4*I,4*I+3]
171 NEXT I
172 GOTO Dat_in
173 Last_one: OFF ERROR
174 PRINT J-1;" data transferred"
175 Npts=J-2
176 Stp=(W2-W1)/(Npts-1)
177 !Add1=0
178 !IF Stp<.1 AND Stp<>.05 THEN
179 !Stp=.05
180 !Npts=(W2-W1)/Stp+1
181 !Add1=1
182 !END IF
183 !IF Stp>.1 AND Stp<>.2 THEN
184 !Stp=.2
185 !Npts=(W2-W1)/Stp+1
186 !END IF
187 PRINT Npts
188 PAUSE
190 REDIM Array(Npts,2),Y(Npts)
191 FOR I=1 TO Npts!-Add1
192 Pp$=Dat$(I)
193 CALL Sttofp(Pp$,X,I)
194 Array(I,2)=X
195 Array(I,1)=W2-(I-1)*Stp
197 NEXT I
198 FOR I=1 TO Npts
199 Array(I,2)=-LGT(Array(I,2))
200 NEXT I
202 PRINT "UNPLUG IEEE CABLE THEN PRESS CONTINUE"
203 PAUSE
204 RESET 7
205 INPUT "NAME TO STORE THE DATE",Name$
206 CREATE BDAT Name$,(160+Npts*Mcol*16)/256+1
207 ASSIGN @Out TO Name$
209 H2$=VAL$(W1)&VAL$(W2)&VAL$(Tau)&VAL$(Speed)
210 INPUT "HEADER",H1$
211 OUTPUT @Out;H1$,H2$,Npts,Mcol,Array(*)
212 ASSIGN @Out TO *
213 CALL Plot_it(Array(*))
214 END
215 !***********************************************************
216 !***********************************************************
217 !***********************************************************
218 Cksum: SUB Cksum(N$,Cs$) !Compute checksum for data to be sent to DMS100
219 Total=0
220 FOR J=1 TO LEN(N$)
221 Total=Total+NUM(N$[J])
222 NEXT J
230 Totla=Total-INT(Total/256)*256
240 Total=256-Total
250 Cs$=CHR$(Total)
260 SUBEND
270 !************************************************************
280 !************************************************************
290 !************************************************************
300 Sttofp: SUB Sttofp(Pp$,X,I) !Coverts floating point numbers to
310 !to its decimal equivalent.
311 ON ERROR GOTO Fudge
320 Rr=(NUM(Pp$[1,1])/256+NUM(Pp$[2,2]))/256 !this bombs unless
330 Ee=NUM(Pp$[4,4]) ! Npts = J-2 ?!
340 IF Ee>127 THEN Ee=Ee-256
350 Sn=1
360 IF BIT(NUM(Pp$[3,3]),7) THEN Sn=-1
370 X=Sn*Rr*2^Ee
371 GOTO 380
373 Fudge: BEEP
374 PRINT "WHAT IS GOING ON?!"
376 PRINT I,Pp$
377 PAUSE
380 SUBEND
390!
400! Plotting subroutine deleted for brevity