SUBROUTINE DRAW_DIAGNOSTICS() C---------------------------------------------------------------------- C- C- Purpose and Methods : Draws the foreground for the Special Diagnostics C- display. C- C- Inputs : common block variables C- Outputs : screen output C- Controls: none C- C- Created 15-MAR-1991 MICHIGAN STATE UNIVERSITY, TRIGGER CONTROL SOFTWARE C- Updated 30-APR-1992 Philippe Laurens, Steven Klocek C- Add new items. C- Updated 4-NOV-1992 Philippe Laurens, Steven Klocek C- Quantities listed as 'ms/event' are now calculated as per event C- transferred to Level 2 rather than as per Start Digitize C- signal. C- Updated 2-DEC-1992 Philippe Laurens, Steven Klocek C- Corrected calculation of Double Buffer Full ms/event to trap C- occurance of divide by Zero C- Updated 31-MAR-1993 Philippe Laurens C- The labels for the 68k states have been changed while the C- variable names have been given generic numbers. C- C---------------------------------------------------------------------- IMPLICIT NONE INCLUDE 'LV1_MPOOL.PARAMS' INCLUDE 'LV1_MPOOL_RAW.INC' INCLUDE 'LV1_MPOOL_DERIVED.INC' INCLUDE 'LV1_MPOOL_FORMATTED.INC' INCLUDE 'LV1_MON_SCREEN.INC' INCLUDE 'LV1_MON_SCREEN_LAYOUT.PARAMS' INCLUDE 'LV1_MON_ALARMS.PARAMS' INCLUDE 'LV1_MON_ALARMS.INC' EXTERNAL TRULEN C PARAMETER NL = CHAR(13) // CHAR(10) CHARACTER*10 NUM_BUFFER CHARACTER*8 PERCENT_BUFFER CHARACTER*8 PERIOD_BUFFER CHARACTER*79 LINE_BUFFER INTEGER LEN REAL VME_TRANS_PERIOD REAL STATE_TO_PERCENT REAL STATE_TO_PERIOD REAL STATE_TO_PERIOD_TRANSFER REAL PERIOD REAL PERCENT REAL TEMP INTEGER DB_SPEC_TRIG_NUM ! The specific trigger that only pays ! attention to the datablock builder. C PARAMETER (DB_SPEC_TRIG_NUM = 31) C C CALL RESET_LIST() LINE_BUFFER = 'Special Diagnostic Information' LINE_BUFFER(60:79) = CURRENT_TIME CALL PUT_STRING(1, 1, LINE_BUFFER) C LINE_BUFFER = 'Raw Beam Crossing Rate:' IF (DELTA_TIME .GT. 0.) THEN TEMP = FLOAT(DELTA_VETO_CROSSING) & / (DELTA_TIME * 100.E-9) ELSE TEMP = 0.0 ENDIF IF (TEMP .GT. 1000.) THEN CALL BUILD_REAL_STRING(TEMP / 1000., 2, NUM_BUFFER) LINE_BUFFER(30:79) = NUM_BUFFER // ' kHz' ELSE CALL BUILD_REAL_STRING(TEMP,2, NUM_BUFFER) LINE_BUFFER(30:79) = NUM_BUFFER // ' Hz' ENDIF CALL PUT_STRING(3,1, LINE_BUFFER) C LINE_BUFFER = 'Raw Level 1 Trigger Rate:' IF (DELTA_TIME .GT. 0.) THEN TEMP = FLOAT(DELTA_GLOBAL_FIRED) / (DELTA_TIME * 100.E-9) ELSE TEMP = 0.0 ENDIF CALL BUILD_REAL_STRING(TEMP, 2, NUM_BUFFER) LINE_BUFFER(30:79) = NUM_BUFFER // ' Hz ' CALL PUT_STRING(4,1, LINE_BUFFER) C LINE_BUFFER = 'Raw Level 1 Transfer Rate:' IF (DELTA_TIME .GT. 0.) THEN TEMP = FLOAT(DELTA_EVENT_TRANSFER) / (DELTA_TIME * 100.E-9) ELSE TEMP = 0.0 ENDIF CALL BUILD_REAL_STRING(TEMP, 2, NUM_BUFFER) LINE_BUFFER(30:79) = NUM_BUFFER // ' Hz ' CALL PUT_STRING(5,1, LINE_BUFFER) C C LV1 Double Buffer Full C IF (DELTA_VETO_CROSSING .NE. 0) THEN TEMP = FLOAT(GEOSECT_BUSY_INCR(1)) / FLOAT(DELTA_VETO_CROSSING) ELSE TEMP = 0.0 ENDIF C CALL BUILD_PERCENT_STRING(TEMP * 100., 4, PERCENT_BUFFER ) C IF (DELTA_EVENT_TRANSFER .NE. 0) THEN TEMP = FLOAT(GEOSECT_BUSY_INCR(1)) / FLOAT(DELTA_EVENT_TRANSFER) ELSE TEMP = 0.0 ENDIF CALL BUILD_REAL_STRING(1000. * TEMP * BEAM_CROSS_PERIOD, & 2, PERIOD_BUFFER) CALL PUT_STRING(6,1, & 'LV1 Double Buffer Full or Framework Paused :' &//PERCENT_BUFFER // ' % ' &//PERIOD_BUFFER // ' ms/Event' ) C C The amount of time the 68k spends in its different states. C IF (DELTA_BEAM_CROSSING .NE. 0) THEN STATE_TO_PERCENT = 100. / FLOAT(DELTA_BEAM_CROSSING) ELSE STATE_TO_PERCENT = 0. ENDIF IF (DELTA_EVENT_TRANSFER .NE. 0) THEN STATE_TO_PERIOD = 1000. * BEAM_CROSS_PERIOD / & FLOAT(DELTA_EVENT_TRANSFER) ELSE STATE_TO_PERIOD = 0.0 ENDIF C C This is the COMINT card data block builder busy C CALL BUILD_PERCENT_STRING( & DELTA_DBBBUSY * STATE_TO_PERCENT, & 4, PERCENT_BUFFER ) CALL BUILD_REAL_STRING(DELTA_DBBBUSY * STATE_TO_PERIOD, & 2, PERIOD_BUFFER ) CALL PUT_STRING(7,1, & 'LV1 Data Block Builder Running :' &//PERCENT_BUFFER // ' % ' &//PERIOD_BUFFER // ' ms/Event' ) C CALL BUILD_PERCENT_STRING( DELTA_68KSTATE_5 * STATE_TO_PERCENT, & 4, PERCENT_BUFFER ) CALL BUILD_REAL_STRING( DELTA_68KSTATE_5 * STATE_TO_PERIOD, & 2, PERIOD_BUFFER ) CALL PUT_STRING( 8, 1, & 'VTC Done Vertical, Wait for Slave Ready (5) :' &//PERCENT_BUFFER // ' % ' &//PERIOD_BUFFER // ' ms/Event' ) C CALL BUILD_PERCENT_STRING( DELTA_68KSTATE_4 * STATE_TO_PERCENT, & 4, PERCENT_BUFFER ) CALL BUILD_REAL_STRING( DELTA_68KSTATE_4 * STATE_TO_PERIOD, & 2, PERIOD_BUFFER ) CALL PUT_STRING( 9, 1, & 'VTC Wait VBD Finish previous DMA Read (4) :' &//PERCENT_BUFFER // ' % ' &//PERIOD_BUFFER // ' ms/Event' ) C CALL BUILD_PERCENT_STRING( DELTA_68KSTATE_2 * STATE_TO_PERCENT, & 4, PERCENT_BUFFER ) CALL BUILD_REAL_STRING( DELTA_68KSTATE_2 * STATE_TO_PERIOD, & 2, PERIOD_BUFFER ) CALL PUT_STRING( 10, 1, & 'VTC Prepare Level 1 Data (2) :' &//PERCENT_BUFFER // ' % ' &//PERIOD_BUFFER // ' ms/Event' ) C CALL BUILD_PERCENT_STRING( DELTA_68KSTATE_3 * STATE_TO_PERCENT, & 4, PERCENT_BUFFER ) CALL BUILD_REAL_STRING( DELTA_68KSTATE_3 * STATE_TO_PERIOD, & 2, PERIOD_BUFFER ) CALL PUT_STRING( 11, 1, & 'VTC Wait for free VBD Buffer (3) :' &//PERCENT_BUFFER // ' % ' &//PERIOD_BUFFER // ' ms/Event' ) C CALL BUILD_PERCENT_STRING( DELTA_68KSTATE_1 * STATE_TO_PERCENT, & 4, PERCENT_BUFFER ) CALL BUILD_REAL_STRING( DELTA_68KSTATE_1 * STATE_TO_PERIOD, & 2, PERIOD_BUFFER ) CALL PUT_STRING( 12, 1, & 'VTC Wait for next Event (1) :' &//PERCENT_BUFFER // ' % ' &//PERIOD_BUFFER // ' ms/Event' ) C CALL TWB_PUT_LINE(TWB_POWER_COUNT, TWB_POWER_FLAG, & TWB_POWER_LIMIT, TWB_POWER_PROMPT, TWB_POWER_MSG) C CALL TWB_PUT_LINE(TWB_FATAL_COUNT, TWB_FATAL_FLAG, & TWB_FATAL_LIMIT, TWB_FATAL_PROMPT, TWB_FATAL_MSG) C CALL TWB_PUT_LINE(TWB_68KDEAD_COUNT, TWB_68KDEAD_FLAG, & TWB_68KDEAD_LIMIT, TWB_68KDEAD_PROMPT, TWB_68KDEAD_MSG) C CALL TWB_PUT_LINE(TWB_VBD_TIMEOUT_COUNT, TWB_VBD_TIMEOUT_FLAG, & TWB_VBD_TIMEOUT_LIMIT, TWB_VBD_TIMEOUT_PROMPT, & TWB_VBD_TIMEOUT_MSG) C CALL TWB_PUT_LINE(TWB_VBD_BUFFER_COUNT, TWB_VBD_BUFFER_FLAG, & TWB_VBD_BUFFER_LIMIT, TWB_VBD_BUFFER_PROMPT, TWB_VBD_BUFFER_MSG) C CALL TWB_PUT_LINE(TWB_WAIT_VBD_BUFFER_COUNT, & TWB_WAIT_VBD_BUFFER_FLAG, & TWB_WAIT_VBD_BUFFER_LIMIT, & TWB_WAIT_VBD_BUFFER_PROMPT, & TWB_WAIT_VBD_BUFFER_MSG ) C CALL TWB_PUT_LINE(TWB_WAIT_VBD_DMA_COUNT, & TWB_WAIT_VBD_DMA_FLAG, & TWB_WAIT_VBD_DMA_LIMIT, & TWB_WAIT_VBD_DMA_PROMPT, & TWB_WAIT_VBD_DMA_MSG ) C CALL TWB_PUT_LINE(TWB_MTG_COUNT, TWB_MTG_FLAG, & TWB_MTG_LIMIT, TWB_MTG_PROMPT, TWB_MTG_MSG) C CALL TWB_PUT_LINE(TWB_PAUSED_COUNT, TWB_PAUSED_FLAG, & TWB_PAUSED_LIMIT, TWB_PAUSED_PROMPT, TWB_PAUSED_MSG) C CALL TWB_PUT_LINE(TWB_STALE_COUNT, TWB_STALE_FLAG, & TWB_STALE_LIMIT, TWB_STALE_PROMPT, TWB_STALE_MSG) C CALL TWB_PUT_LINE(TWB_DBB_INACTIVE_COUNT, TWB_DBB_INACTIVE_FLAG, & TWB_DBB_INACTIVE_LIMIT, TWB_DBB_INACTIVE_PROMPT, & TWB_DBB_INACTIVE_MSG) C C C---------------------------------------------------------------------- 999 CONTINUE CALL PUT_LIST(13,1) CALL MOVE_CURSOR_SAFE() CALL FLUSH_SCREEN() RETURN END C C C SUBROUTINE TWB_PUT_LINE(TWB_COUNT, TWB_FLAG, TWB_LIMIT, & TWB_PROMPT, TWB_MSG) C---------------------------------------------------------------------- C- C- Purpose and Methods : Output information about the given TWB if necessary. C- C- Inputs : C- TWB_COUNT The time this TWB was first set. C- TWB_FLAG Whether TWB_COUNT has exceeded the threshold for this C- TWB. C- TWB_LIMIT The time threshold for this TWB. C- TWB_PROMPT The message to print identifying the TWB. C- TWB_MSG The message to print describing the TWB. C- 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_SCREEN_LAYOUT.PARAMS' REAL TWB_COUNT, TWB_LIMIT LOGICAL TWB_FLAG CHARACTER*(*) TWB_PROMPT, TWB_MSG C CHARACTER*80 LINE_BUFFER PARAMETER NL = CHAR(13) // CHAR(10) C IF (TWB_COUNT .GT. 0) THEN LINE_BUFFER = TWB_PROMPT LINE_BUFFER(TWB_COM_C:TWB_COM_E) = '= s/Threshold= s' CALL INTTOSTR(IFIX(SECNDS(TWB_COUNT)), & LINE_BUFFER(TWB_COUNT_C:TWB_COUNT_E), 1) CALL INTTOSTR(IFIX(TWB_LIMIT), & LINE_BUFFER(TWB_LIMIT_C:TWB_LIMIT_E), 1) CALL PUT_STRING_DIAGNOSTICS(PS_LIST,0, & LINE_BUFFER(1:TWB_COM_E) // NL) IF (TWB_FLAG .EQV. .TRUE. ) THEN CALL PUT_STRING_DIAGNOSTICS(PS_LIST,0, TWB_MSG // NL) ENDIF ENDIF C---------------------------------------------------------------------- 999 RETURN END C C C SUBROUTINE PUT_STRING_DIAGNOSTICS(ROW, COL, STRING) C---------------------------------------------------------------------- C- C- Purpose and Methods : Seperate the string at CR/LF, and pass it on to C- put_string. C- C- Inputs : ROW The row to place it at C- COL The collumn to place it at C- STRING The string to place C- Outputs : none C- Controls: none C- C- Created 14-MAY-1991 MICHIGAN STATE UNIVERSITY, TRIGGER CONTROL SOFTWARE C- C---------------------------------------------------------------------- IMPLICIT NONE PARAMETER CR = CHAR(13) CHARACTER*(*)STRING INTEGER ROW INTEGER COL INTEGER COUNT, BEGIN C COUNT = 1 BEGIN = 1 DO WHILE (COUNT .LT. LEN(STRING)) IF (STRING(COUNT:COUNT) .EQ. CR) THEN IF (COUNT .NE. 1) THEN CALL PUT_STRING(ROW, COL, STRING(BEGIN:COUNT-1)) ENDIF BEGIN = COUNT + 2 COUNT = COUNT + 2 ELSE COUNT = COUNT + 1 ENDIF END DO C---------------------------------------------------------------------- 999 RETURN END