interface motask parameter filter type '_integer' range 1,100 endparameter parameter focus type '_integer' range 1,100 endparameter action filter_wheel obey needs filter endobey cancel endcancel endaction action focus_wheel obey needs focus endobey cancel endcancel endaction endinterface SUBROUTINE MOTASK( STATUS ) * Task to drive 2 dummy motors. One called FILTER_WHEEL * and the other FOCUS. Each invocation requires 1 parameter * relating to requested position but will be used in the call to the * delay routine for a delay of n seconds IMPLICIT NONE ! No implicit typing INCLUDE 'SAE_PAR' INCLUDE 'ACT_ERR' INCLUDE 'ADAMDEFNS' INTEGER STATUS INTEGER CONTEXT INTEGER SEQ INTEGER FILTER INTEGER FOCUS INTEGER PERIOD CHARACTER*(PAR__SZNAM) NAME SAVE FILTER SAVE FOCUS IF ( STATUS .NE. SAI__OK ) RETURN CALL TASK_GET_NAME ( NAME, STATUS ) IF ( NAME .EQ. 'FILTER_WHEEL' ) THEN CALL TASK_GET_CONTEXT ( CONTEXT, STATUS ) IF ( CONTEXT .EQ. OBEY ) THEN CALL TASK_GET_SEQ ( SEQ, STATUS ) IF ( SEQ .EQ. 0 ) THEN CALL PAR_GET0I ( 'FILTER', FILTER, STATUS ) PERIOD = FILTER * 1000 CALL MSG_SETI ( 'FILTER', FILTER ) CALL MSG_OUT ( ' ', 'moving to filter ^FILTER...', : STATUS ) CALL TASK_PUT_DELAY ( PERIOD, STATUS ) CALL PAR_CANCL ( 'FILTER', STATUS ) CALL TASK_PUT_REQUEST ( ACT__WAIT, STATUS ) ELSE CALL MSG_SETI ( 'FILTER', FILTER ) CALL MSG_OUT( ' ', 'filter position ^FILTER reached', : STATUS ) END IF ELSE IF ( CONTEXT .EQ. CANCEL ) THEN CALL TASK_PUT_REQUEST ( ACT__CANCEL, STATUS ) END IF ELSE IF ( NAME .EQ. 'FOCUS_WHEEL' ) THEN CALL TASK_GET_CONTEXT ( CONTEXT, STATUS ) IF ( CONTEXT .EQ. OBEY ) THEN CALL TASK_GET_SEQ ( SEQ, STATUS ) IF ( SEQ .EQ. 0 ) THEN CALL PAR_GET0I ( 'FOCUS', FOCUS, STATUS ) PERIOD = FOCUS * 1000 CALL MSG_SETI ( 'FOCUS', FOCUS ) CALL MSG_OUT ( ' ', 'moving to focus ^FOCUS...', STATUS ) CALL TASK_PUT_DELAY ( PERIOD, STATUS ) CALL PAR_CANCL ( 'FOCUS', STATUS ) CALL TASK_PUT_REQUEST ( ACT__WAIT, STATUS ) ELSE CALL MSG_SETI ( 'FOCUS', FOCUS ) CALL MSG_OUT ( ' ', 'focus position ^FOCUS reached', : STATUS) END IF ELSE IF ( CONTEXT .EQ. CANCEL ) THEN CALL TASK_PUT_REQUEST ( ACT__CANCEL, STATUS ) END IF END IF END
ADAM Guide to Writing Instrumentation Tasks