FTN4,L SUBROUTINE GFMRD(IUNIT,IMODE,IREF,ITRIG,FREQ,RETL,RETR), +09580-16012 REV.2001 791023 C C**************************************** C C RELOCATABLE 09580-16012 C SOURCE 09580-18012 C C V.POVIO 10-4-76 C BOB RICHARDS 4-27-79 C BOB RICHARDS 791023 C C********************************************************************* C C HP 92425B TEST SYSTEM SOFTWARE IS THE PROPRIETARY C MATERIAL OF THE HEWLETT-PACKARD COMPANY. USE AND C DISCLOSURE THEREOF ARE RESTRICTED BY WRITTEN AGREEMENT. C C (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1979. C ALL RIGHTS RESERVED. NO PART OF THIS PROGRAM C MAY BE PHOTOCOPIED, REPRODUCED OR TRANSLATED C TO ANOTHER PROGRAM LANGUAGE WITHOUT THE PRIOR C WRITTEN CONSENT OF THE HEWLETT-PACKARD COMPANY. C C********************************************************************* C C C**************************************** C C HP 3575 GAIN PHASE METER C ------------------------ C C GENERAL: C ------- C C THE FOLLOWING DEVICE SUBROUTINE PROGRAMS C ANY FUNCTION OF THE HP 3575 GAIN PHASE METER C (OPT 002) AND RETURNS THE MEASUREMENT DATA, C APPEARING ON THE LEFT AND RIGHT FRONT PANEL C DISPLAYS, TO THE CALLING PROGRAM AS A FLOATING C POINT VALUE. C C HARDWARE ENVIRONMENT: C -------------------- C C HP 21MX SERIES COMPUTER C C HP 3575 GAIN PHASE METER WITH OPT 002 C C 2 HP 12566-60024 MICROCIRCUIT CARDS C WITH JUMPERS SET AS FOLLOWS C C W1 - A C W2 - A C W3 - B C W4 - B C W5 THRU W8 - REMOVED C W9 - A C C HP 09500-60281 INTERFACE CABLE C C INPUT AND OUTPUT WORD FORMAT: C ---------------------------- C C PROGRAM WORD FROM MICROCIRCUIT CARD #1 C C 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 C ------------------------------------------------- C !RL!TM!PR!CF! ! !F1!F2! ! !AF!BF! ! !BA!AA! C ------------------------------------------------- C C REMOTE/LOCAL C RL=1 REMOTE C =0 LOCAL C C TRIGGER MODE C TM=1 NON DELAYED C =0 DELAYED C C PHASE REFERENCE C PR=1 -A C =0 A C C RIGHT DISPLAY C CF=1 PHASE C =0 B C C FREQUENCY RANGE C F1&F2 00=1-1K C 01=10-10K C 10=100-1M C 11=1K-13M C C AMPLITUDE FUNCTION C AF&BF 00=B/A C 01=A C 10=B C C VOLTAGE RANGE C BA OR AA 0=HIGH RANGE C 1=LOW RANGE C C C LEFT DISPLAY DATA TO MICROCIRCUIT CARD #1 C C 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 C ------------------------------------------------- C !BO!AO!S !H ! TENS ! UNITS ! TENTHS ! C ------------------------------------------------- C C OVERLOAD C BO=1 OVERLOAD B C AO=1 OVERLOAD A C C SIGN C 1=+ C 0=- C C H=HUNDEEDS C C BITS 0-11 ARE IN BCD C C C RIGHT DISPLAY DATA TO MICROCIRCUIT CARD #2 C C SAME AS ABOVE EXCEPT BIT 15 =1 OVERLOAD ON C A OR B AND BIT 14 IS NOT USED C C BRANCH AND MNEMONIC TABLE ENTRIES C --------------------------------- C C GFMRD(I,I,I,I,R,RV,RV), OV=X, ENT=GFMRD, FIL=%GFMRD C C**************************************** C C NOTE: C C THE WELCOM FILE REQUIRES TWO ENTRIES FOR EACH HP3575 BECAUSE C TWO I/O SLOTS (I.E. LU'S) ARE REQUIRED TO INTERFACE THE HP3575. C THEREFORE, THE UNIT 1 'UNIT' ENTRIES WOULD BE 1 AND 2, THE UNIT C 2 ENTRIES WOULD BE 3 AND 4, ETC. BASIC CALLS WOULD BE TO UNITS C 1, 3, ETC. C C C C ERRORS: C C 1 = PARAMETER INPUT ERROR C C 2 = HP-3575 OVERLOAD/TIMEOUT ERROR C C 9 = EXEC CALL ERROR C C C DIMENSION IERMS(5) DATA IERMS/10,5,2HGF,2HMR,2HD / DATA IDTN/40/ C C FIND STATION # AND LU # C IERMS=10 ISTN=ISN(DUMMY) ILU1=LUDV(ISTN,IDTN,IUNIT) ILU2=LUDV(ISTN,IDTN,IUNIT+1) IF(ILU1 .EQ. 0 .OR. ILU2 .EQ. 0)GOTO 800 C C JUMP TO DEVICE SUBROUTINE C CALL XFMRD(ILU1,ILU2,IERMS,IMODE,IREF,ITRIG,FREQ,RETL,RETR) IF(IERMS)800,20,800 20 RETURN C C ERROR EXIT C 800 CALL ERROR(IERMS,IERMS(2)) RETURN END C C**************************************** C C GFMRD(IUNIT,IMODE,IREF,ITRIG,FREQ,RETL,RETR) C C WHERE C C IUNIT=UNIT NUMBER (1,3,5, ETC.) C C IMODE=MODE C C 1=RETURN B/A DB INTO RETL C 2=RETURN A DBV INTO RETL C 3=RETURN B DBV INTO RETL C C IREF=PHASE REFERENCE OR RIGHT HAND DISPLAY SELECTION C C 0=RIGHT HAND DISPLAY IS B SIGNAL LEVEL IN DBV C 1=RIGHT HAND DISPLAY IS PHASE ANGLE USING 'A' C SIGNAL AS THE REFERENCE. C -1=RIGHT HAND DISPLAY IS PHASE ANGLE USING '-A' C SIGNAL AS THE REFERENCE. C C ITRIG=TRIGGER MODE C C 0=NON DELAYED C 1=DELAYED C C FREQ=FREQUENCY C C -1=1HZ TO 1KHZ RANGE C -2=10HZ TO 100KHZ RANGE C -3=100HZ TO 1MHZ RANGE C -4=1KHZ TO 13MHZ RANGE C OR C FREQUENCY OF INPUT SIGNAL IN KHZ (.001 TO 13000) C C RETL=RETURNED LEFT PANEL READING. C C RETR=RETURNED RIGHT PANEL READING C C *THIS CALL INITIATES AND COMPLETES A MEASUREMENT. C THE MOST ACCURATE MEASUREMENTS ARE MADE IF ITRIG=1 C C WITH THE FREQUENCY MODE SET TO THE LOWEST RANGE ("-1") IN- C STRUMENT TIMEOUT IS SET TO 60 SECONDS AS OPPOSED TO 10 C SECONDS FOR OTHER MODES. C C***************************************** C SUBROUTINE XFMRD(ILU1,ILU2,IERMS,IMODE,IREF,ITRIG,FREQ,RETL,RETR), +09580-16012 REV.2001 791023 DIMENSION IBUF(2),IDATA(5),IREG(2),ITIME(4),IERMS(5) EQUIVALENCE (REG,IREG,IA),(IREG(2),IB) C C INITILIZE C ICNT=0 IERMS=1 ITIME(1)=1000 IF(FREQ .EQ. -1.0) ITIME(1) = 6000 C C CHECK PARAMETERS C IF((IMODE .LT. 1) .OR. (IMODE .GT. 3))GOTO 8001 IF((IREF .LT. -1) .OR. (IREF .GT. 1))GOTO 8001 IF((ITRIG .LT. 0) .OR. (ITRIG .GT. 1))GOTO 8001 IF((FREQ .LT. -4.0) .OR. (FREQ .GT. 13000.0))GOTO 8001 IERMS=2 C C SET IREF AND ITRIG C ITRIA = 0 IF(IREF .EQ. 1)IREF=10000B IF(IREF .EQ. -1)IREF=30000B IF(ITRIG .EQ. 0)ITRIA=40000B C C SET AMP WORD C IF(IMODE .EQ. 1)IMODE=0 IF(IMODE .EQ. 2)IMODE=20B IF(IMODE .EQ. 3)IMODE=40B C C SET FREQUENCY C IF(FREQ .LT. 0.0)GOTO 300 IF(IREF .NE. 0)GOTO 200 C C AMPLITUDE MEASUREMENT SET HIGHEST RANGE C IRNGE=0 IF(FREQ .GT. 0.01)IRNGE=400B IF(FREQ .GT. 0.1)IRNGE=1000B IF(FREQ .GT.1.0)IRNGE=1400B GOTO 400 C C PHASE MEASUREMENT SET LOWEST RANGE C 200 IRNGE=1400B IF(FREQ .LT. 1.0)IRNGE=1000B IF(FREQ .LT. 0.1)IRNGE=400B IF(FREQ .LT. 0.01)IRNGE=0 GOTO 400 C C SET RANGE C 300 IF(FREQ .EQ. -1.0)IRNGE=0 IF(FREQ .EQ. -2.0)IRNGE=400B IF(FREQ .EQ. -3.0)IRNGE=1000B IF(FREQ .EQ. -4.0)IRNGE=1400B 400 IBUF(1)=IMODE+IREF+ITRIA+IRNGE+100003B C C IF OVERLOAD RETRY UP TO 10 TIMES C 110 IF(ICNT .GT. 10)GOTO 8001 C C TRY ATTENUATOR SETTING C IDATA(1)=IOR(IBUF(1),40000B) ICNWD=300B+ILU1 CALL EXEC(100002B,ICNWD,IDATA(1),1,IDUMY,0) GOTO 8002 8900 CALL ABREG(IA,IB) IF(IAND(IREG(1),177B) .NE. 0)GOTO 8001 C C WAIT TO SETTLE C CALL EXEC(12+100000B,0,1,0,-1) GOTO 8002 450 IF(ICNT .LE. 0) GOTO 8901 CALL EXEC(12+100000B,0,1,0,-300) GOTO 8002 C C CHECK FOR OVERLOADS C 8901 ICNWD=300B+ILU1 CALL EXEC(100001B,ICNWD,IDATA(1),1,IDUMY,0) GOTO 8002 8910 CALL ABREG(IA,IB) IF(IAND(IREG(1),177B) .NE. 0)GOTO 8001 IF((IAND(IDATA(1),140000B)) .EQ. 0)GOTO 700 C C OVERLOADED , WHICH CHANNEL C ITEMP=1 ITEMQ=2 IF(IAND(IDATA(1),40000B) .NE. 0)ITEMP=0 IF(IAND(IDATA(1),100000B) .NE. 0)ITEMQ=0 IBUF(1)=(IAND(IBUF(1),177774B))+ITEMP+ITEMQ ICNT=ICNT+1 GOTO 110 C C PROGRAM 3575 C 700 IDATA(1)=IBUF(1) ICNWD=300B+ILU1 CALL EXEC(100002B,ICNWD,IDATA(1),1,IDUMY,0) GOTO 8002 8902 CALL ABREG(IA,IB) IF(IAND(IREG(1),177B) .NE. 0)GOTO 8001 C C WAIT TO SETTLE C CALL EXEC(12+100000B,0,1,0,-15) GOTO 8002 C C ENCODE 3575 C 500 IDATA(1)=12 IDATA(2)=3 IDATA(3)=11 IDATA(4)=4 IDATA(5)=5 C ICNWD=11100B+ILU2 CALL EXEC(100003B,ICNWD,IDATA(3),1,IDATA(4),2) GOTO 8002 8903 CALL ABREG(IA,IB) IF(IAND(IREG(1),177B) .NE. 0)GOTO 8001 C C SET TIME OUT VALUE C CALL EXEC(100003B,100B+ILU1,ITIME(1)) GOTO 8002 8904 CALL ABREG(IA,IB) IF(IAND(IREG(1),177B) .NE. 0)GOTO 8001 C ICNWD=13100B+ILU1 CALL EXEC(100002B,ICNWD,IDATA(1),1,IDATA(2),1) GOTO 8002 8905 CALL ABREG(IA,IB) IF(IAND(IREG(1),177B) .NE. 0)GOTO 8001 C C EVERYTHING OK NOW TAKE READING C 210 CALL EXEC(12+100000B,0,1,0,-3) GOTO 8002 C 212 ICNWD=300B+ILU1 CALL EXEC(100001B,ICNWD,IDATA(1),1,IDUMY,0) GOTO 8002 8906 CALL ABREG(IA,IB) IF(IAND(IREG(1),177B) .NE. 0)GOTO 8001 C ICNWD=300B+ILU2 CALL EXEC(100001B,ICNWD,IDATA(2),1,IDUMY,0) GOTO 8002 8907 CALL ABREG(IA,IB) IF(IAND(IREG(1),177B) .NE. 0)GOTO 8001 230 CONTINUE C C CONVERT DATA C RETL=(IAND(IDATA(1),17B))*.1 RETL=RETL+((IAND(IDATA(1),360B))/2**4) RETL=RETL+(((IAND(IDATA(1),7400B))/2**8)*10.0) RETL=RETL+(((IAND(IDATA(1),10000B))/2**12)*100.0) IF((IAND(IDATA(1),20000B)) .EQ. 0)RETL=RETL*(-1.0) C 330 RETR=(IAND(IDATA(2),17B))*.1 RETR=RETR+((IAND(IDATA(2),360B))/2**4) RETR=RETR+(((IAND(IDATA(2),7400B))/2**8)*10.0) RETR=RETR+(((IAND(IDATA(2),10000B))/2**12)*100.0) IF((IAND(IDATA(2),20000B)) .EQ. 0)RETR=RETR*(-1.0) C C EXIT C 340 IERMS=0 RETURN C C ERROR EXIT C 8002 IERMS=9 8001 IERMS(2) = 5 IERMS(3)=2HGF IERMS(4)=2HMR IERMS(5)=2HD RETURN END END$