コード例 #1
0
class STRTester(BaseTester):
    """Тестировщик системы терморегулирования (СТР)"""
    name = 'Система терморегулирования'

    signals = (
        TelemetryAttrs.thermal_control_algorithm_state,
        TelemetryAttrs.mi1_heater_state,
        TelemetryAttrs.mi2_heater_state,
        TelemetryAttrs.mk_heater_state,
        # TODO: TU1, TU2
        # TODO: StrSensorFp
        TelemetryAttrs.channel_tmi,

        TelemetryAttrs.str_power,
        TelemetryAttrs.settings_mi_temperature,
        TelemetryAttrs.mi1_temperature,
        TelemetryAttrs.mi2_temperature,
        TelemetryAttrs.mk1_temperature,
        TelemetryAttrs.mk2_temperature,
    )

    rules = (
        StatedTelemetry(TelemetryAttrs.thermal_control_algorithm_state, as_set(states.StateThermalControl)),
        StatedTelemetry(TelemetryAttrs.mi1_heater_state, as_set(states.StateMI1Heater)),
        StatedTelemetry(TelemetryAttrs.mi2_heater_state, as_set(states.StateMI2Heater)),
        StatedTelemetry(TelemetryAttrs.mk_heater_state, as_set(states.StateMKHeater)),
        StatedTelemetry(TelemetryAttrs.channel_tmi, as_set(channels.ChannelTmi)),

        NumericalTelemetry(TelemetryAttrs.str_power, 24., 27., 34.),
        RelatedTelemetry(TelemetryAttrs.mi1_temperature, _get_mi_expected_temperature, 0.2),
        RelatedTelemetry(TelemetryAttrs.mi2_temperature, _get_mi_expected_temperature, 0.2),
        NumericalTelemetry(TelemetryAttrs.mk1_temperature, 39.85, 40., 40.15),
        NumericalTelemetry(TelemetryAttrs.mk2_temperature, 39.85, 40., 40.15),
    )
コード例 #2
0
    def test_as_set(self) -> None:
        class State:
            a = 1
            b = 2
            c = 3

        self.assertSetEqual(as_set(State), {1, 2, 3})
コード例 #3
0
class ScannerTester(BaseTester):
    """Тестировщик сканера"""
    name = 'Модуль сканера'

    signals = (
        TelemetryAttrs.scanner_0pos_flag,
        TelemetryAttrs.scanner_step_error,
    )

    rules = (
        StatedTelemetry(TelemetryAttrs.scanner_0pos_flag, as_set(states.ScannerPosition)),

        StatedTelemetry(TelemetryAttrs.scanner_step_error, {
            states.ScannerStepError.no_error: Weight.normal,

            states.ScannerStepError.small[0]: Weight.warning,
            states.ScannerStepError.small[1]: Weight.warning,

            states.ScannerStepError.medium[0]: Weight.error,
            states.ScannerStepError.medium[1]: Weight.error,

            states.ScannerStepError.large[0]: Weight.critical,
            states.ScannerStepError.large[1]: Weight.critical,
        }),
    )
コード例 #4
0
class PPTTester(BaseTester):
    """Тестировщик привода перемещения триэдров (ППТ)"""
    name = 'Привод перемещения триэдров'

    signals = (
        TelemetryAttrs.ppt_zone,
        TelemetryAttrs.ppt_direction,
        TelemetryAttrs.ppt_arr,
        TelemetryAttrs.channel_ppt,
        TelemetryAttrs.ppt_ref,

        # TODO: Более сложные проверки
        # TelemetryAttrs.ppt_in_zone: Number(100, low=80, high=100),
        # TelemetryAttrs.ppt_out_zone: Number(500, low=450, high=500),
        # TelemetryAttrs.ppt_ripple: Number(0.3),
    )

    rules = (
        StatedTelemetry(TelemetryAttrs.ppt_zone, {
            states.PPTZone.out_of_zone: Weight.normal,
            states.PPTZone.in_zone1: Weight.normal,
            states.PPTZone.in_zone2: Weight.normal,
            states.PPTZone.error: Weight.error,
        }),

        StatedTelemetry(TelemetryAttrs.ppt_direction, as_set(states.PPTDirection)),

        StatedTelemetry(TelemetryAttrs.ppt_arr, {
            states.PPTTrihedronState.arrested: Weight.normal,
            states.PPTTrihedronState.not_arrested: Weight.normal,
            states.PPTTrihedronState.in_arresting_process: Weight.normal,
            states.PPTTrihedronState.error: Weight.error,
        }),

        StatedTelemetry(TelemetryAttrs.channel_ppt, as_set(channels.ChannelPPT)),
        StatedTelemetry(TelemetryAttrs.ppt_ref, as_set(channels.ChannelPPTReference)),
    )
コード例 #5
0
class SettingsTester(BaseTester):
    """Тестировщик настроек"""
    name = 'Настройки'

    signals = (
        TelemetryAttrs.settings_abb_cycles,
        TelemetryAttrs.settings_calibration_period,
        TelemetryAttrs.settings_gain,
        TelemetryAttrs.settings_lane,
        TelemetryAttrs.settings_mi_temperature,
        TelemetryAttrs.settings_space_cycles,
    )

    rules = (
        StatedTelemetry(TelemetryAttrs.settings_abb_cycles, as_set(settings.SettingsBlackBodyCycles)),
        StatedTelemetry(TelemetryAttrs.settings_calibration_period, as_set(settings.SettingsCalibration)),
        StatedTelemetry(TelemetryAttrs.settings_gain, as_set(settings.SettingsGain)),
        StatedTelemetry(TelemetryAttrs.settings_lane, as_set(settings.SettingsLane)),
        StatedTelemetry(TelemetryAttrs.settings_mi_temperature, as_set(settings.SettingsInterferometerModule)),
        StatedTelemetry(TelemetryAttrs.settings_space_cycles, as_set(settings.SettingsSpaceCycles)),
    )
コード例 #6
0
from ikfs_anomaly_detector.core.utils import as_set

matplotlib.rcParams['agg.path.chunksize'] = 10_000


class Colours:
    black = 'k'
    blue = 'b'
    cyan = 'c'
    green = 'g'
    magenta = 'm'
    red = 'r'
    yellow = 'y'


COLOURS = as_set(Colours)


class FontWeights:
    light = 'light'
    normal = 'normal'
    regular = 'regular'
    bold = 'bold'


@dataclass
class Label:
    text: str = ''
    font_size: int = 24
    font_weight: str = FontWeights.bold