FTN4,L
      SUBROUTINE ACPS1(IUNIT,FREQ,VOLTS),09580-16430 REV.2001 
     +791023
C 
C-------------------------------------
C 
C  ELGAR DAP-SERIES PROGRAMMABLE A-C POWER SUPPLY 
C 
C  RELOCATABLE 09580-16430
C  SOURCE      09580-18430
C 
C  ALAN SANDERSON  790502 
C  BOB RICHARDS    791023 
C 
C------------------------------------ 
C 
C  !=================================================!
C  !                                                 !
C  ! (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1979      !
C  !                ALL RIGHTS RESERVED              !
C  !                                                 !
C  ! NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED,     !
C  ! REPRODUCED OR TRANSLATED INTO ANOTHER PROGRAM   !
C  ! LANGUAGE WITHOUT THE PRIOR WRITTEN CONSENT OF   !
C  ! THE HEWLETT-PACKARD COMPANY.                    !
C  !                                                 !
C  !-------------------------------------------------!
C  !                                                 !
C  ! TEST SYSTEM SOURCE SOFTWARE IS THE PROPRIETARY  !
C  ! MATERIAL OF THE HEWLETT-PACKARD COMPANY.        !
C  !                                                 !
C  ! THIS SOURCE DATA SHALL BE USED SOLELY IN        !
C  ! CONJUCTION WITH ELECTRONIC COMPUTER SYSTEMS     !
C  ! SUPPLIED TO THE USER BY HEWLETT-PACKARD.        !
C  !                                                 !
C  ! THIS PROPRIETARY DATA SHALL NOT BE COPIED OR    !
C  ! OTHERWISE REPRODUCED WITHOUT THE PRIOR WRITTEN  !
C  ! CONSENT OF HEWLETT-PACKARD, EXCEPT THAT ONE     !
C  ! COPY MAY BE MADE AND RETAINED BY THE USER FOR   !
C  ! ARCHIVE PURPOSES.                               !
C  !                                                 !
C  ! THE USER SHALL NOT DISCLOSE THIS DATA TO ANY    !
C  ! THIRD PARTIES WITHOUT THE PRIOR WRITTEN CONSENT !
C  ! OF HEWLETT-PACKARD. IN ADDITION, THE USER SHALL !
C  ! USE AT LEAST THE SAME CARE AND SAFEGUARDS TO    !
C  ! PROTECT THIS DATA FROM UNAUTHORIZED USE OR      !
C  ! DISCLOSURE AS THE USER USES TO PROTECT ITS OWN  !
C  ! PROPRIETARY DATA.                               !
C  !                                                 !
C  !=================================================!
C 
C  GENERAL: 
C  -------- 
C 
C    THE FOLLOWING DEVICE SUBROUTINES ARE USED
C    TO PROGRAM THE ELGAR DAP SERIES A-C POWER SUPPLY.
C 
C  HARDWARE REQUIRED: 
C  ------------------ 
C    A. ELGAR DAP SERIES WITH OPTION 333, CAPABLE OF
C       USING OPTIONS 7 AND 8.
C    B. HP59310  BUS INTERFACE KIT. 
C 
C         JUMPER POSITION:
C          SW1-1 - 1
C          SW1-2 TO SW1-8 - 0 
C          SW2-1 - 0
C          SW2-2 - 0
C          SW2-3 - 0
C          SW2-4 - 0
C          SW2-5 - 1
C          SW2-6 - REN
C          SW2-7 - ICF
C          SW2-8 - CNX
C 
C    C. HP 21XX SERIES COMPUTER 
C 
C  BRANCH AND MNEMONIC TABLE ENTRIES: 
C  ---------------------------------- 
C 
C    ACPS1(I,R,R),         OV=XX,   ENT=ACPS1,   FIL=%ACPS1 
C    ACPS3(I,R,R,R,R,I,I), OV=XX,   ENT=ACPS3,   FIL=%ACPS1 
C 
C  CONFIGURATION TABLE ENTRIES: 
C  ---------------------------- 
C 
C    R 64,1,6 
C    U1 
C 
C       NN     NUMBER OF PHASES (1 OR 3)
C       FFF.F  MAXIMUM OUTPUT VOLTAGE 
C       N      NUMBER OF FREQUENCY RANGES (1 OR 3)
C       FF.F   MINIMUM FREQUENCY (HZ).
C 
C 
C 
C------------------------------------ 
C    CALLING SEQUENCE:
C      CALL ACPS1(IUNIT,FREQ,VOLTS) 
C 
C    WHERE: 
C 
C       IUNIT = UNIT #
C 
C       FREQ  = FREQUENCY IN HZ.
C       VOLTS = PROGRAMMED OUTPUT VOLTAGE VALUE 
C 
C 
C 
C------------------------------------ 
      DIMENSION IERMS(5)
      DATA IDTN / 64 /
      DATA IERMS / 10,5,2HAC,2HPS,2H1  /
C 
      IERMS=10
C 
C  FIND STATION AND LU #'S
C   ISTN = STATION #
C   LU1 = HP 59501A LU
C   LUIB = HPIB LU
C 
      ISTN=ISN(DUMMY) 
      LU1=LUDV(ISTN,IDTN,IUNIT) 
      LUIB=IBLU0(LU1) 
      IF(LU1 .LE. 0 .OR. LUIB .LE. 0)GOTO 800 
C 
C  CALL X SUB 
C 
      CALL XACSU(LU1,LUIB,IERMS,IUNIT,FREQ,VOLTS,VOLTS,VOLTS,240.,120.) 
      IF(IERMS)800,20,800 
C 
C 
C  ERROR EXIT 
C 
800   CALL ERROR(IERMS,IERMS(2))
20    END 
      SUBROUTINE ACPS3(IUNIT,FREQ,VOLTA,VOLTB,VOLTC,IPHB,IPHC)
     1,09580-16430 REV.2001 791023
C 
C------------------------------------ 
C    CALLING SEQUENCE:
C     CALL ACPS3(IUNIT,FREQ,VOLTA,VOLTB,VOLTC,IPHB,IPHC)
C   WHERE:
C     IUNIT =  THE UNIT NUMBER OF THE DEVICE. 
C     FREQ  =  THE OUTPUT FREQUENCY OF THE DEVICE (HZ). 
C     VOLTA =  THE OUTPUT VOLTAGE (A-C RMS VOLTS) OF PHASE A. 
C     VOLTB =  THE OUTPUT VOLTAGE (A-C RMS VOLTS) OF PHASE B. 
C     VOLTC =  THE OUTPUT VOLTAGE (A-C RMS VOLTS) OF PHASE C. 
C     IPHB =  THE PHASE ANGLE OF PHASE B (DEGREES) RELATIVE TO
C     PHASE A.
C     IPHC IS THE PHASE ANGLE OF PHASE C (DEGREES) RELATIVE TO
C     PHASE A.
C 
C 
C------------------------------------ 
      DIMENSION IERMS(5)
      DATA IDTN / 64 /
      DATA IERMS / 10,5,2HAC,2HPS,2H3  /
C 
      IERMS=10
C 
C  FIND STATION AND LU #'S
C   ISTN = STATION #
C   LU1 = HP 59501A LU
C   LUIB = HPIB LU
C 
      ISTN=ISN(DUMMY) 
      LU1=LUDV(ISTN,IDTN,IUNIT) 
      LUIB=IBLU0(LU1) 
      IF(LU1 .LE. 0 .OR. LUIB .LE. 0)GOTO 800 
C 
C  CALL X SUB 
C 
      CALL XACSU(LU1,LUIB,IERMS,IUNIT,FREQ,VOLTA,VOLTB,VOLTC,IPHB,IPHC) 
      IF(IERMS)800,20,800 
C 
C 
C  ERROR EXIT 
C 
800   CALL ERROR(IERMS,IERMS(2))
20    END 
C 
C---------------------------------------------
C 
      SUBROUTINE XACSU(LU1,LUIB,IERMS,IUNIT,FREQ,VOLTA,VOLTB,VOLTC,IPHB,
     +IPHC),09580-16430 REV.2001 791023 
      DIMENSION IERMS(5),IBUF(6),IOBUF(19),IREG(2)
      EQUIVALENCE (REG,IREG,IA),(IREG(2),IB)
C 
C  EQUIVALENCES FOR TIM CONFIGURATION BUFFER
C 
      EQUIVALENCE (IBUF(5),FRQMIN)
      EQUIVALENCE (IBUF(4),NFREQ) 
      EQUIVALENCE (IBUF(2),VMAX)
      EQUIVALENCE (IBUF(1),NPHASE)
      DATA IDTN/64/ 
      DATA LETRA/2HA,/,LETRB/2HB,/,LETRC/2HC,/,LETRD/2HD,/,LETRE/2HE,/
      DATA LETRF/2HF,/,LETRG/2HG,/,IZERO/2H00/
C 
C---------------------------------------------
C 
C 
C  THE PARAMETERS IN THE CALLING SEQUENCE HAVE THE FOLLOWING
C  MEANINGS:
C 
C     LUIB = LU # OF HPIB BUSS. 
C     LU1  = LU # OF THE ELGAR DAP SERIES PROGRAMMER. 
C 
C     IERMS IS A FIVE WORD ARRAY WITH IERR(1) CONTAINING
C     THE ERROR CODE. 
C 
C        0 = NO ERROR 
C        1 = PARAMETER ERROR
C 
C     ERROR MESSAGES THAT PERTAIN TO THE HPIB.
C 
C        9 = I/O CALL REJECTED
C       10 = LUIB OR LU1 = 0
C       12 = I/O DEVICE TIME OUT
C       13 = IFC DETECTED DURING I/O REQUEST
C       14 = SRQ ABORTED
C       15 = NON-EXISTENT ALARM PROGRAM 
C       16 = ILLEGAL CONTROL REQUEST
C       17 = EQT EXTENSION AREA FULL
C 
C     IERMS(2) = ERROR MNEMONIC CHARACTER COUNT 
C     IERMS(3) TO IERMS(5) = ERROR MNEMONIC 
C 
C     FREQ  = THE DESIRED OUTPUT FREQUENCY (HZ).
C     VOLTA = PHASE A OUTPUT VOLTAGE. 
C     VOLTB = PHASE B OUTPUT VOLTAGE. 
C     VOLTC = PHASE C OUTPUT VOLTAGE. 
C     IPHB  = PHASE B ANGLE WITH RESPECT TO PHASE A (DEGREES - 0 TO 360). 
C     IPHC  = PHASE C ANGLE WITH RESPECT TO PHASE A (DEGREES - 0 TO 360). 
C 
C---------------------------------------------
C 
C 
C  RETRIEVE CONFIGURATION DATA
C 
      CALL TIM(IDTN,IUNIT,1,IBUF,6,IER) 
      IF(IER .NE. 0)RETURN
      IERMS = 1 
C 
C  CHECK THE INPUT PARAMETERS 
C 
C  CHECK THE FREQUENCY
C 
      IF(FREQ.LT.FRQMIN.OR.FREQ.GT.9990.)GO TO 8000 
      IF(NFREQ.EQ.1.AND.FREQ.GT.999.)GO TO 8000 
C 
C  CHECK ALL THREE PHASES IF REQUIRED 
C 
      IF(VOLTA.GT.VMAX.OR.VOLTA.LT.0.0)GO TO 8000 
      IF(NPHASE.EQ.1)GO TO 100
      IF(VOLTB.GT.VMAX.OR.VOLTB.LT.0.0)GO TO 8000 
      IF(VOLTC.GT.VMAX.OR.VOLTC.LT.0.0)GO TO 8000 
C 
C  CHECK THE PHASE ANGLES 
C 
      IF(IPHB.LT.0.OR.IPHB.GT.360)GO TO 8000
      IF(IPHC.LT.0.OR.IPHC.GT.360)GO TO 8000
C 
C FORMAT FREQUENCY ACCORDING TO TYPE OF PROGRAMMER
C 
100   IF(NFREQ.EQ.1)GO TO 120 
      IF(FREQ.GT.99.9)GO TO 110 
C 
C  IF LOW FREQUENCY, HIGH RESOLUTION, MULTIPLY BY 100 
C  AND PUT IN DIV. BY 10 EXPONENT IN LOW DIGIT
C  99.6 CONVERTS TO INTEGER 9962 .
C 
      IFREQ=10.*FREQ
      IFREQ = 10 * IFREQ + 2
      GO TO 200 
C 
C  PROCESS FREQUENCIES IN THE HIGH RANGE
C  SINCE RESOLUTION IS TO 10 HZ. IN THIS
C  RANGE, VALUES ARE TRUNCATED.  WITH THE 
C  EXPONENT (LOW ORDER DIGIT), A VALUE
C  OF 8815. HZ. CONVERTS TO AN INTEGER 8810 . 
C 
110   IF(FREQ.LT.1000.)GO TO 120
      IFREQ = FREQ
      IFREQ = 10*(IFREQ/10) 
      GO TO 200 
C 
C  FOR THE SINGLE FREQUENCY RANGE UNIT, THE LOW ORDER DIGIT 
C  IS IGNORED.  IN THE 3 RANGE UNIT, IT IS A 1.  A FREQUENCY
C  OF 156.0 HZ TRANSLATES TO AN INTEGER 1561 .
C 
120   IFREQ = FREQ
      IFREQ = 10 * IFREQ + 1
C 
C  NEXT, SEE IF SINGLE PHASE
C  IF SO, NO NEED FOR PHASE ANGLE SETTINGS. 
C 
200   IF(NPHASE.EQ.1)GO TO 300
      IANGB = IPHB * 10 
      IANGC = IPHC * 10 
C 
C SET UP THE VOLTAGES 
C  RESOLUTION IS TO .1 V, SO 104.7 VOLTS CONVERTS TO
C  AN INTEGER 1047 .
C  IF HIGH VOLTAGE (>130) HIGH VOLTAGE BIT IS SET 
C  BY ADDING 4000 TO THE NUMBER.
C 
      IVOLTB = 10. * VOLTB
      IF(IVOLTB.GT.1300)IVOLTB=IVOLTB+4000
      IVOLTC = 10. * VOLTC
      IF(IVOLTC.GT.1300)IVOLTC=IVOLTC+4000
300   IVOLTA = 10. * VOLTA
      IF(IVOLTA.GT.1300)IVOLTA=IVOLTA+4000
C 
C  PERFORM FORMATTING ACCORDING TO SINGLE OR
C  THREE PHASE SUBSYSTEM. 
C 
C 
C  FOR SINGLE PHASE OPERATION, THE FOLLOWING BUFFER IS SENT:
C 
C    IIIIF,JJJJE, 
C 
C   WHERE I AND J ARE THE FREQUENCY AND VOLTAGE VALUES. 
C 
      CALL CNUMD(IFREQ,IOBUF) 
      CALL CNUMD(IVOLTA,IOBUF(4)) 
      IF(NPHASE.NE.1)GO TO 1500 
C 
C  PUT IN LEADING ZEROS 
C 
      DO 1100 I=2,6 
1100  IOBUF(I)=IOR(IZERO,IOBUF(I))
      IOBUF(4)=LETRF
      IOBUF(7)=LETRE
      NUM = 6 
      GO TO 2000
C 
C  FOR THREE PHASE OPERATION, THE FOLLOWING BUFFER IS SENT: 
C 
C  IIIIF,JJJJA,KKKKB,LLLLC,MMMMD,NNNNG, 
C 
C  WHERE: 
C   IIII = FREQUENCY SETTING
C   JJJJ = PHASE A AMPLITUDE SETTING
C   KKKK = PHASE B AMPLITUDE SETTING
C   LLLL = PHASE C AMPLITUDE SETTING
C   MMMM = PHASE B ANGLE SETTING
C   NNNN = PHASE C ANGLE SETTING
C 
1500  CALL CNUMD(IVOLTB,IOBUF(7)) 
      CALL CNUMD(IVOLTC,IOBUF(10))
      CALL CNUMD(IANGB,IOBUF(13)) 
      CALL CNUMD(IANGC,IOBUF(16)) 
C 
C  PUT IN LEADING ZEROS 
C 
      DO 1600 I=2,18
1600  IOBUF(I)=IOR(IZERO,IOBUF(I))
      IOBUF(4)=LETRF
      IOBUF(7)=LETRA
      IOBUF(10)=LETRB 
      IOBUF(13)=LETRC 
      IOBUF(16)=LETRD 
      IOBUF(19)=LETRG 
      NUM=18
C 
C  REMOTE ENABLE
C 
2000  CALL EXEC(100003B,1600B+LUIB) 
      GOTO 9000 
70    CALL ABREG(IA,IB) 
      IF(IB .LT. 0) GOTO 8500 
C 
C  SEND OUTPUT BUFFER 
C 
      CALL REIO(100002B,LU1,IOBUF(2),NUM) 
      GOTO 9000 
71    CALL ABREG(IA,IB) 
      IF(IB .LT. 0) GOTO 8500 
C 
C 
      IERMS=0 
      GO TO 8000
C 
C  ERROR EXIT 
C 
8500  IERMS=IAND(IA,377B)+11
      GOTO 8000 
9000  IERMS=9 
8000  RETURN
      END 
      END$
                                                                                                            