SUBROUTINE CHECK_TWB_ALARMS() C---------------------------------------------------------------------- C- C- Purpose and Methods : Check the trouble warning bits, and set TWB alarm C- flags if necessary. C- C- Inputs : none C- Outputs : none C- Controls: none C- C- Created 29-MAR-1991 MICHIGAN STATE UNIVERSITY, TRIGGER CONTROL SOFTWARE C- Updated 30-APR-1992 Philippe Laurens, Steven Klocek C- Add more TWB's C- C---------------------------------------------------------------------- IMPLICIT NONE INCLUDE 'LV1_MPOOL.PARAMS' INCLUDE 'LV1_MPOOL_DERIVED.INC' INCLUDE 'LV1_MPOOL_FORMATTED.INC' INCLUDE 'LEVEL1_LOOKUP.PARAMS' INCLUDE 'LEVEL1_CAL_TRIG.PARAMS' INCLUDE 'LEVEL1_FRAMEWORK.PARAMS' INCLUDE 'LEVEL1_TRIGGER_DATA_BLOCK.INC' INCLUDE 'LV1_MPOOL_RAW.INC' INCLUDE 'LV1_MON_SCREEN.INC' INCLUDE 'LV1_MON_ALARMS.PARAMS' INCLUDE 'LV1_MON_ALARMS.INC' C LOGICAL FIRST DATA FIRST /.TRUE./ C C Do initialization C IF (FIRST .EQ. .TRUE.) THEN FIRST = .FALSE. TWB_ALARM_BEEP_COUNT = 0. C TWB_POWER_COUNT = 0. TWB_POWER_FLAG = .FALSE. C TWB_FATAL_COUNT = 0. TWB_FATAL_FLAG = .FALSE. C TWB_68KDEAD_COUNT = 0. TWB_68KDEAD_FLAG = .FALSE. C TWB_VBD_TIMEOUT_COUNT = 0. TWB_VBD_TIMEOUT_FLAG = .FALSE. C TWB_VBD_BUFFER_COUNT = 0. TWB_VBD_BUFFER_FLAG = .FALSE. C TWB_WAIT_VBD_BUFFER_COUNT = 0 TWB_WAIT_VBD_BUFFER_FLAG = .FALSE. C TWB_WAIT_VBD_DMA_COUNT = 0 TWB_WAIT_VBD_DMA_FLAG = .FALSE. C TWB_MTG_COUNT = 0. TWB_MTG_FLAG = .FALSE. C TWB_PAUSED_COUNT = 0. TWB_PAUSED_FLAG = .FALSE. C TWB_STALE_COUNT = 0. TWB_STALE_FLAG = .FALSE. C TWB_DBB_INACTIVE_COUNT = 0. TWB_DBB_INACTIVE_FLAG = .FALSE. ENDIF C C Check conditions C TWB_ALARM_BEEP_FLAG = .FALSE. C C Hardware power failure C IF (BTEST(TROUBLE_WARNING_BITS, TWB_POWER_BIT) .EQ. .TRUE.) THEN CALL INC_ALARM_COUNT(TWB_POWER_COUNT, TWB_POWER_LIMIT, & TWB_POWER_FLAG) ELSE CALL CLR_ALARM_COUNT(TWB_POWER_COUNT, TWB_POWER_FLAG) ENDIF C C Monitoring pool failure C IF (IBITS(FRAMEWORK_STATUS, FS_MPOOL_LOC, FS_MPOOL_LEN) & .EQ. 1) THEN CALL INC_ALARM_COUNT(TWB_FATAL_COUNT, TWB_FATAL_LIMIT, & TWB_FATAL_FLAG) ELSE CALL CLR_ALARM_COUNT(TWB_FATAL_COUNT, TWB_FATAL_FLAG) ENDIF C C 68k dead C IF (BTEST(TROUBLE_WARNING_BITS, TWB_68KDEAD_BIT) .EQ. .TRUE.) & THEN CALL INC_ALARM_COUNT(TWB_68KDEAD_COUNT, TWB_68KDEAD_LIMIT, & TWB_68KDEAD_FLAG) ELSE CALL CLR_ALARM_COUNT(TWB_68KDEAD_COUNT, TWB_68KDEAD_FLAG) ENDIF C C VBD Level 2 transfer timeout C IF (BTEST(TROUBLE_WARNING_BITS, TWB_VBD_TIMEOUT_BIT) .EQ. .TRUE.) & THEN CALL INC_ALARM_COUNT(TWB_VBD_TIMEOUT_COUNT, & TWB_VBD_TIMEOUT_LIMIT, TWB_VBD_TIMEOUT_FLAG) ELSE CALL CLR_ALARM_COUNT(TWB_VBD_TIMEOUT_COUNT, & TWB_VBD_TIMEOUT_FLAG) ENDIF C C One VBD buffer stuck C IF (BTEST(TROUBLE_WARNING_BITS, TWB_VBD_BUFFER_BIT) .EQ. .TRUE.) & THEN CALL INC_ALARM_COUNT(TWB_VBD_BUFFER_COUNT, TWB_VBD_BUFFER_LIMIT, & TWB_VBD_BUFFER_FLAG) ELSE CALL CLR_ALARM_COUNT(TWB_VBD_BUFFER_COUNT, TWB_VBD_BUFFER_FLAG) ENDIF C C Is 68k spending too much time waiting for a VBD buffer C IF (BTEST(TROUBLE_WARNING_BITS, TWB_WAIT_VBD_BUFFER) & .EQ. .TRUE.) THEN CALL INC_ALARM_COUNT(TWB_WAIT_VBD_BUFFER_COUNT, & TWB_WAIT_VBD_BUFFER_LIMIT, & TWB_WAIT_VBD_BUFFER_FLAG ) ELSE CALL CLR_ALARM_COUNT(TWB_WAIT_VBD_BUFFER_COUNT, & TWB_WAIT_VBD_BUFFER_FLAG ) ENDIF C C Is 68k spending too much time waiting for VBD DMA C IF (BTEST(TROUBLE_WARNING_BITS, TWB_WAIT_VBD_DMA) & .EQ. .TRUE.) THEN CALL INC_ALARM_COUNT(TWB_WAIT_VBD_DMA_COUNT, & TWB_WAIT_VBD_DMA_LIMIT, & TWB_WAIT_VBD_DMA_FLAG ) ELSE CALL CLR_ALARM_COUNT(TWB_WAIT_VBD_DMA_COUNT, & TWB_WAIT_VBD_DMA_FLAG ) ENDIF C C Master timing generator error C IF (BTEST(TROUBLE_WARNING_BITS, TWB_MTG_BIT) .EQ. .TRUE.) THEN CALL INC_ALARM_COUNT(TWB_MTG_COUNT, TWB_MTG_LIMIT, TWB_MTG_FLAG) ELSE CALL CLR_ALARM_COUNT(TWB_MTG_COUNT, TWB_MTG_FLAG) ENDIF C C Framework paused C IF (IBITS(FRAMEWORK_STATUS, FS_PAUSED_LOC, FS_PAUSED_LEN) & .EQ. 1) THEN CALL INC_ALARM_COUNT(TWB_PAUSED_COUNT, TWB_PAUSED_LIMIT, & TWB_PAUSED_FLAG) ELSE CALL CLR_ALARM_COUNT(TWB_PAUSED_COUNT, TWB_PAUSED_FLAG) ENDIF C C No level 1 data blocks being built C IF (IBITS(FRAMEWORK_STATUS, FS_STALE_LOC, FS_STALE_LEN) & .EQ. 1) THEN CALL INC_ALARM_COUNT(TWB_STALE_COUNT, TWB_STALE_LIMIT, & TWB_STALE_FLAG) ELSE CALL CLR_ALARM_COUNT(TWB_STALE_COUNT, TWB_STALE_FLAG) ENDIF C C LV1 Inactive C IF (BTEST(TROUBLE_WARNING_BITS, TWB_DBB_INACTIVE_BIT).EQ. .TRUE.) & THEN CALL INC_ALARM_COUNT(TWB_DBB_INACTIVE_COUNT, & TWB_DBB_INACTIVE_LIMIT, TWB_DBB_INACTIVE_FLAG) ELSE CALL CLR_ALARM_COUNT(TWB_DBB_INACTIVE_COUNT, & TWB_DBB_INACTIVE_FLAG) ENDIF C C C---------------------------------------------------------------------- 999 RETURN END C C C SUBROUTINE INC_ALARM_COUNT(TWB_COUNT,TWB_LIMIT,TWB_FLAG) C---------------------------------------------------------------------- C- C- Purpose and Methods : Increment the given TWB alarm count, and set the C- alarm flag if necessary. It is set if TWB_COUNT .ge. TWB_LIMIT. C- C- Inputs : TWB_COUNT The number of consecutive times this TWB has been C- set. (MODIFIED) C- TWB_LIMIT The value of TWB_COUNT that requires TWB_FLAG to be C- set. C- Outputs : TWB_FLAG Whether TWB_COUNT has exceeded the limit requiring C- that a flag be set. C- Controls: none C- C- Created 2-APR-1991 MICHIGAN STATE UNIVERSITY, TRIGGER CONTROL SOFTWARE C- C---------------------------------------------------------------------- IMPLICIT NONE INCLUDE 'LV1_MON_ALARMS.INC' REAL TWB_COUNT REAL TWB_LIMIT LOGICAL TWB_FLAG C IF (TWB_COUNT .EQ. 0.) THEN TWB_COUNT = SECNDS(0.0) ENDIF C IF (SECNDS(TWB_COUNT) .GE. TWB_LIMIT) THEN TWB_ALARM_BEEP_FLAG = .TRUE. TWB_FLAG = .TRUE. ELSE TWB_FLAG = .FALSE. ENDIF C C---------------------------------------------------------------------- 999 RETURN END C C C SUBROUTINE CLR_ALARM_COUNT(TWB_COUNT, TWB_FLAG) C---------------------------------------------------------------------- C- C- Purpose and Methods : Reset the TWB alarm count and TWB alarm flag. C- C- Inputs : none C- C- Outputs : TWB_COUNT The number of consecutive times this TWB has been C- set. (MODIFIED) C- TWB_FLAG Whether TWB_COUNT has exceeded the limit requiring C- that a flag be set. C- Controls: none C- C- Created 2-APR-1991 MICHIGAN STATE UNIVERSITY, TRIGGER CONTROL SOFTWARE C- C---------------------------------------------------------------------- IMPLICIT NONE REAL TWB_COUNT LOGICAL TWB_FLAG C TWB_COUNT = 0. TWB_FLAG = .FALSE. C---------------------------------------------------------------------- 999 RETURN END C C C SUBROUTINE CHECK_TWB_BEEP(COMMAND) C---------------------------------------------------------------------- C- C- Purpose and Methods : Check if a beep needs to be output, and do so if it C- does. C- C- Inputs : common block variables C- Outputs : none C- Controls: none C- C- Created 5-APR-1991 MICHIGAN STATE UNIVERSITY, TRIGGER CONTROL SOFTWARE C- C---------------------------------------------------------------------- IMPLICIT NONE INCLUDE 'LV1_MON_ALARMS.PARAMS' INCLUDE 'LV1_MON_ALARMS.INC' INCLUDE 'LV1_MON_SCREEN.INC' INCLUDE 'LV1_MON_SCREEN_LAYOUT.PARAMS' C INTEGER COMMAND REAL PERIOD C IF (TWB_ALARM_BEEP_FLAG .EQV. .TRUE.) THEN IF (TWB_ALARM_BEEP_COUNT .EQ. 0.) THEN TWB_ALARM_BEEP_COUNT = SECNDS(0.0) PERIOD = 0. ELSE PERIOD = SECNDS(TWB_ALARM_BEEP_COUNT) ENDIF C IF ((COMMAND .EQ. COMMAND_DIAGNOST) .OR. & (PERIOD .LE. TWB_ALARM_BEEP_LIMIT) .OR. & (PERIOD .GT. & TWB_ALARM_BEEP_LIMIT + TWB_ALARM_BEEP_INTERVAL)) THEN CALL PUT_STRING( PS_NOMOVE,0, CHAR(7)) CALL FLUSH_SCREEN() IF (PERIOD .GT. & TWB_ALARM_BEEP_LIMIT + TWB_ALARM_BEEP_INTERVAL) THEN TWB_ALARM_BEEP_COUNT = TWB_ALARM_BEEP_COUNT + & TWB_ALARM_BEEP_INTERVAL ENDIF C ENDIF ELSE TWB_ALARM_BEEP_COUNT = 0 ENDIF C---------------------------------------------------------------------- 999 RETURN END