extends Panel signal signal_on_start_timer_03() signal signal_on_modul_um() var timer: Timer = Timer.new() var timer_03: Timer = Timer.new() var node_cell_ind: Array var count_cell: int var past_pribor: int var logger: Node var array_pow_1: Array = [] var array_pow_2: Array = [] var count_packet:int = 0 var flag_control_add: bool = false var flag_fs_1_ready: bool = false var flag_fs_2_ready: bool = false var flag_dkm: bool = false var flag_ug: bool = false var flag_modul_on_1: bool = false var flag_modul_on_2: bool = false var flag_start: bool = false class Logger extends Node: var log_counter: int = 0 var log_level = "INFO" var log_array func _init(log_node): log_array = log_node log_array.clear() func get_current_datetime_string() -> String: var time = Time.get_datetime_dict_from_system() return ' [%02d-%02d-%04d %02d:%02d] ' % [time['day'], time['month'], time['year'], time['hour'], time['minute']] func info(message): if log_level == "INFO" or log_level == "DEBUG": var datetime_string = get_current_datetime_string() log_array.insert_line_at(log_counter, "[INFO]" + datetime_string + message) log_counter += 1 func warning(message): if log_level == "WARNING" or log_level == "INFO" or log_level == "DEBUG": var datetime_string = get_current_datetime_string() log_array.insert_line_at(log_counter, "[WARNING]" + datetime_string + message) log_counter += 1 func error(message): var datetime_string = get_current_datetime_string() log_array.insert_line_at(log_counter, "[ERROR]" + datetime_string + message) log_counter += 1 func _ready() -> void: Network.connect('port_fs_opened_1', _on_fs_status_1.bind(Constants.STATE_VAL.GOOD)) Network.connect('port_fs_closed_1', _on_fs_status_1.bind(Constants.STATE_VAL.ERROR)) Network.connect('data_from_fs_1', _on_data_fs.bind('ФС-1')) Network.connect('port_fs_opened_2', _on_fs_status_2.bind(Constants.STATE_VAL.GOOD)) Network.connect('port_fs_closed_2', _on_fs_status_2.bind(Constants.STATE_VAL.ERROR)) Network.connect('data_from_fs_2', _on_data_fs.bind('ФС-2')) self.add_child(timer) self.add_child(timer_03) timer.connect('timeout', Callable(self, '_on_timer')) self.get_parent().get_child(2).connect('signal_FS_is_ready', Callable(self, '_on_fs_status')) timer_03.connect('timeout', Callable(self, '_on_timer_03')) self.connect('signal_on_start_timer_03', Callable(self, '_on_start_timer_03')) Network.connect('yau_receive', Callable(self, '_on_yau_received')) self.connect('signal_on_modul_um', Callable(self, '_on_modul_um')) node_cell_ind = [ $soc_y5/yau_07b, $soc_y5/ems_g, $soc_y5/ug, $soc_y5/ukp_2, $soc_y5/ukp_1, $soc_P1/MAA_1, $soc_P1/MAA_2, $soc_P1/IP9_50_2, $soc_P1/IP9_50_1, $soc_P1/IP12_50, $soc_P2/IP9_50, $soc_P2/IP12_50, $soc_y5/IP5_25, $Kasseta_FS/ref_A3, $Kasseta_FS/ref_A1, $Kasseta_FS/ref_A2, $Kasseta_FS/ref_A4, $Kasseta_FS/Block_FS_PRD_K, $Kasseta_FS/FS_PRD_K, $soc_DKM/DKM_1, $soc_DKM/DKM_2, $soc_DKM/DKM_3, ] count_cell = len(node_cell_ind) _draw_control_panel_prd(Constants.CURRENT_MODE) func _process(_delta: float) -> void: if flag_dkm and flag_ug: emit_signal('signal_on_modul_um') if flag_modul_on_1 and flag_modul_on_2 and flag_start: emit_signal('signal_on_start_timer_03') func _draw_control_panel_prd(pribor): if pribor == Constants.MODE.PRD_H: # Кассета У5 $soc_y5/IP5_25.rname = 'А24' $soc_y5/yau_07b.rname = 'А30' $soc_y5/ems_g.rname = 'А26' $soc_y5/ug.rname = 'А27' $soc_y5/ukp_1.rname = 'А28' $soc_y5/ukp_2.rname = 'А29' # Кассета ФС $Kasseta_FS/Kasseta.text = 'Кассета ФС-НД' $Kasseta_FS/Block_FS_PRD_K.visible = false $Kasseta_FS/FS_PRD_K.visible = false $Kasseta_FS/ref_A1.rname = 'А1' $Kasseta_FS/ref_A1.fname = 'Модуль ФС' $Kasseta_FS/ref_A3.rname = 'А3' $Kasseta_FS/ref_A3.fname = 'БЛОК ФС-2' $Kasseta_FS/ref_A2.rname = 'А2' $Kasseta_FS/ref_A2.fname = 'Модуль ФС' $Kasseta_FS/ref_A4.rname = 'А4' $Kasseta_FS/ref_A4.fname = 'БЛОК ФС-3' # Кассета П-1 $soc_P1/IP12_50.rname = 'А21' $soc_P1/IP9_50_1.rname = 'А20' $soc_P1/IP9_50_2.rname = 'А19' $soc_P1/MAA_1.rname = 'А22' $soc_P1/MAA_2.rname = 'А23' # Кассета П-2 $soc_P2.visible = false # ДКМ $soc_DKM/DKM_1.visible = false $soc_DKM/DKM_2.fname = 'ДКМ-2' $soc_DKM/DKM_3.fname = 'ДКМ-3' elif pribor == Constants.MODE.PRD_B: # Кассета У5 $soc_y5/IP5_25.rname = 'А24' $soc_y5/yau_07b.rname = 'А30' $soc_y5/ems_g.rname = 'А26' $soc_y5/ug.rname = 'А27' $soc_y5/ukp_1.rname = 'А28' $soc_y5/ukp_2.rname = 'А29' # Кассета ФС $Kasseta_FS/Kasseta.text = 'Кассета ФС-ВД' $Kasseta_FS/Block_FS_PRD_K.visible = false $Kasseta_FS/FS_PRD_K.visible = false $Kasseta_FS/ref_A1.rname = 'А1' $Kasseta_FS/ref_A1.fname = 'Модуль ФС' $Kasseta_FS/ref_A3.rname = 'А3' $Kasseta_FS/ref_A3.fname = 'БЛОК ФС-4' $Kasseta_FS/ref_A2.rname = 'А2' $Kasseta_FS/ref_A2.fname = 'Модуль ФС' $Kasseta_FS/ref_A4.rname = 'А4' $Kasseta_FS/ref_A4.fname = 'БЛОК ФС-5' # Кассета П-1 $soc_P1/IP12_50.rname = 'А21' $soc_P1/IP9_50_1.rname = 'А20' $soc_P1/IP9_50_2.rname = 'А19' $soc_P1/MAA_1.rname = 'А22' $soc_P1/MAA_2.rname = 'А23' # Кассета П-2 $soc_P2.visible = false # ДКМ $soc_DKM/DKM_1.visible = false $soc_DKM/DKM_2.fname = 'ДКМ-4' $soc_DKM/DKM_3.fname = 'ДКМ-5' elif pribor == Constants.MODE.PRD_K: # Кассета У5 $soc_y5/IP5_25.rname = 'А31' $soc_y5/yau_07b.rname = 'А37' $soc_y5/ems_g.rname = 'А33' $soc_y5/ug.rname = 'А34' $soc_y5/ukp_1.rname = 'А35' $soc_y5/ukp_2.rname = 'А36' # Кассета ФС $Kasseta_FS/Kasseta.text = 'Кассета ФС-КД' $Kasseta_FS/Block_FS_PRD_K.visible = true $Kasseta_FS/FS_PRD_K.visible = true $Kasseta_FS/ref_A1.rname = 'А3' $Kasseta_FS/ref_A1.fname = 'Модуль ФС' $Kasseta_FS/ref_A3.rname = 'А6' $Kasseta_FS/ref_A3.fname = 'БЛОК ФС-6' $Kasseta_FS/ref_A2.rname = 'А2' $Kasseta_FS/ref_A2.fname = 'Модуль ФС' $Kasseta_FS/ref_A4.rname = 'А5' $Kasseta_FS/ref_A4.fname = 'БЛОК ФС-7' # Кассета П-1 $soc_P1/IP12_50.rname = 'А23' $soc_P1/IP12_50.fname = 'ИП9-50' $soc_P1/IP9_50_1.rname = 'А24' $soc_P1/IP9_50_1.fname = 'ИП9-50' $soc_P1/IP9_50_2.rname = 'А26' $soc_P1/IP9_50_2.fname = 'ИП12-50' $soc_P1/MAA_1.rname = 'А27' $soc_P1/MAA_2.rname = 'А28' # Кассета П-2 $soc_P2.visible = true # ДКМ $soc_DKM/DKM_1.visible = true $soc_DKM/DKM_2.fname = 'ДКМ-6' $soc_DKM/DKM_3.fname = 'ДКМ-7' func _on_fs_status_1(_name_port, status_fs_1: int): $Kasseta_FS/ref_A1.state = status_fs_1 #if logger: #var message: String = "Модуль ФС-1: %s" % name_port #logger.info(message) func _on_fs_status_2(_name_port, status_fs_2): $Kasseta_FS/ref_A2.state = status_fs_2 #if logger: #var message: String = "Модуль ФС-2: %s" % name_port #logger.info(message) func fs_1_setup(freq): await get_tree().create_timer(0.4).timeout Network.set_fs_gen_status(true) ## отключен на true await get_tree().create_timer(0.4).timeout Network.get_gen_state_1() Network.status_can_macro_1(false) Network.set_fs_ferq_carrier(freq * 1_000_000) Network.set_fs_attenuation(float(19)) Network.set_can_macro(freq) Network.status_can_macro_1(true) await get_tree().create_timer(0.4).timeout Network.set_fs_gen_status(false) ## отключен на true await get_tree().create_timer(0.4).timeout Network.get_gen_state_1() func fs_2_setup(freq): await get_tree().create_timer(1.8).timeout Network.set_fs_gen_status_2(true) ## отключен = true await get_tree().create_timer(0.8).timeout Network.get_gen_state_2() Network.status_can_macro_2(false) Network.set_fs_ferq_carrier_2(freq * 1_000_000) Network.set_fs_attenuation_2(float(19)) Network.set_can_macro_2(freq) Network.status_can_macro_2(true) await get_tree().create_timer(0.8).timeout Network.set_fs_gen_status_2(false) ## отключен = true await get_tree().create_timer(0.8).timeout Network.get_gen_state_2() func yau_07b_setup(): Network.write_port_isa(Constants.BASE_PORTS.UG+6, 58) Network.write_port_isa(Constants.BASE_PORTS.UG+8, 58) Network.write_port_isa(Constants.BASE_PORTS.EMS_G+2, Constants.META.MODUL_UM_2) Network.write_port_isa(Constants.BASE_PORTS.EMS_G+8, 2<<13) ## Отключить модуляцию (литера 2) Network.write_port_isa(Constants.BASE_PORTS.EMS_G+2, Constants.META.MODUL_UM_3) Network.write_port_isa(Constants.BASE_PORTS.EMS_G+8, 2<<13) ## Отключить модуляцию (литера 3) func _on_data_fs(fs_data:PackedByteArray, fs_name: String): if logger: var GRP = fs_data.decode_u8(0x0) var CMD = fs_data.decode_u8(0x1) match CMD: Constants.CMD.READ_CARRIER: if GRP == Constants.GROUP.BASE: logger.info('В модуль %s установлена частота: %s МГц ✅' % [fs_name, (fs_data.decode_u64(0xC) / 1_000_000.0)]) Constants.CMD.READ_ATT: if GRP == Constants.GROUP.RF: logger.info('В модуль %s установлена аттенюация: %s dB ✅' % [fs_name, (fs_data.decode_float(0x18))]) Constants.CMD.READ_GEN_STATUS: if GRP == Constants.GROUP.GENERATOR: if fs_data.decode_u32(0xC) == 0: logger.info('Состояние генератора %s: Включен ✅' % fs_name) else: if fs_name == 'ФС-1': flag_fs_1_ready = false if fs_name == 'ФС-2': flag_fs_2_ready = false logger.info('Состояние генератора %s: Отключен ❌' % fs_name) Constants.CMD.BASE_CAN_MACRO_READ: if GRP == Constants.GROUP.BASE: logger.info('В модуль %s установлена частота CAN: %s МГц ✅' % [fs_name, (fs_data.decode_u16(0x20))]) func _on_yau_received(status_yau): if flag_control_add: # Сбор урожая с УКП-1 var arr_power_ukp_1: Array = [] for i in range(6): ## Мощность от УКП_1 var power_ukp_1 = status_yau.decode_u16(Constants.DataIndices.POWER_UKP_1 + 2 * i) arr_power_ukp_1.append(power_ukp_1) if count_packet == 0: array_pow_1 = arr_power_ukp_1 else: for i in range(6): if arr_power_ukp_1[i] > array_pow_1[i]: array_pow_1[i] = arr_power_ukp_1[i] # Сбор урожая с УКП-2 var arr_power_ukp_2: Array = [] for i in range(6): ## Мощность от УКП_2 var power_ukp_2 = status_yau.decode_u16(Constants.DataIndices.POWER_UKP_2 + 2 * i) arr_power_ukp_2.append(power_ukp_2) if count_packet == 0: array_pow_2 = arr_power_ukp_2 else: for i in range(6): if arr_power_ukp_2[i] > array_pow_2[i]: array_pow_2[i] = arr_power_ukp_2[i] count_packet += 1 if logger: ## Флаг для проверки настройки угла и аттенюации на двух литерах if Network.unit.isa_ports.has(Constants.BASE_PORTS.UG+6) and Network.unit.isa_ports.has(Constants.BASE_PORTS.UG+8): if Network.unit.isa_ports[Constants.BASE_PORTS.UG+6] == 58 and Network.unit.isa_ports[Constants.BASE_PORTS.UG+8] == 58: flag_ug = true else: flag_ug = false ## Флаг для проверки модуяции на высоком if Network.unit.isa_ports.has(Constants.BASE_PORTS.EMS_G+8) and Network.unit.isa_ports.has(Constants.BASE_PORTS.EMS_G+2): if Network.unit.isa_ports[Constants.BASE_PORTS.EMS_G+2] == Constants.META.MODUL_UM_2: if Network.unit.isa_ports[Constants.BASE_PORTS.EMS_G+8] == 0x8000: flag_modul_on_1 = true print('Модуляция 1 включена!') #logger.info('Модуляция УМ (2, 4, 6) включена!') elif Network.unit.isa_ports[Constants.BASE_PORTS.EMS_G+8] == 0x4000: flag_modul_on_1 = false print('Модуляция 1 отключена!') #logger.info('Модуляция УМ (2, 4, 6) отключена!') if Network.unit.isa_ports[Constants.BASE_PORTS.EMS_G+2] == Constants.META.MODUL_UM_3: if Network.unit.isa_ports[Constants.BASE_PORTS.EMS_G+8] == 0x8000: flag_modul_on_2 = true print('Модуляция 2 включена!') #logger.info('Модуляция УМ (3, 5, 7) включена!') elif Network.unit.isa_ports[Constants.BASE_PORTS.EMS_G+8] == 0x4000: flag_modul_on_2 = false print('Модуляция 2 отключена!') #logger.info('Модуляция УМ (3, 5, 7) включена!!') func _on_start_super_control(): $log_array/await.visible = true logger = Logger.new(get_node('log_array')) for i in count_cell: node_cell_ind[i].state = Constants.STATE_VAL.NONE flag_dkm = false flag_ug = false #timer.start(5) if (past_pribor != Constants.CURRENT_MODE): _draw_control_panel_prd(Constants.CURRENT_MODE) if (Network.unit.online): $soc_y5/yau_07b.state = Constants.STATE_VAL.GOOD logger.info("ЯУ-07Б: Есть связь ✅") _status_cell(Network.unit.status) else: for i in range(1, count_cell): node_cell_ind[i].state = Constants.STATE_VAL.NONE $soc_y5/yau_07b.state = Constants.STATE_VAL.ERROR logger.error("ЯУ-07Б: Нет связи ❌") $log_array/await.visible = false if Network.unit_fs.online: var fs_freq: Array = [0, 0, 0] if Constants.CURRENT_MODE == Constants.MODE.PRD_H: fs_freq[0] = Constants.FS_FREQ.f2 fs_freq[1] = Constants.FS_FREQ.f3 elif Constants.CURRENT_MODE == Constants.MODE.PRD_B: fs_freq[0] = Constants.FS_FREQ.f4 fs_freq[1] = Constants.FS_FREQ.f5 logger.info('Настройка модулей ФС %s Гц' % str(fs_freq)) fs_1_setup(fs_freq[0]) # Гц fs_2_setup(fs_freq[1]) # Гц else: logger.info('Настройка модулей ФС ❌') func _status_cell(status): var status_board: int = status.decode_u8(Constants.DataIndices.STATUS_BOARD) var dry_contact: int = status.decode_u8(Constants.DataIndices.DRY_CONTACT) # status_board for i in range(1, 5): if ((status_board >> (i-1)) & 0x1) == 1: node_cell_ind[i].state = Constants.STATE_VAL.GOOD logger.info("%s : Есть связь ✅" % node_cell_ind[i].get('fname')) else: node_cell_ind[i].state = Constants.STATE_VAL.ERROR logger.error("%s : Нет связи ❌" % node_cell_ind[i].get('fname')) #dry_contact if (node_cell_ind[2].state == Constants.STATE_VAL.GOOD): for i_node in range(5, 13): var skip = false if i_node == 10 or i_node == 11: skip = Constants.CURRENT_MODE != Constants.MODE.PRD_K if not skip: if ((dry_contact >> (i_node-5)) & 0x1) == 0: node_cell_ind[i_node].state = Constants.STATE_VAL.GOOD logger.info("%s : Есть связь ✅" % node_cell_ind[i_node].get('fname')) else: node_cell_ind[i_node].state = Constants.STATE_VAL.ERROR logger.error("%s : Нет связи ❌" % node_cell_ind[i_node].get('fname')) else: for i_node_unknow in range(5, 13): node_cell_ind[i_node_unknow].state = Constants.STATE_VAL.NONE func _on_timer(): if (Network.unit.online): logger = Logger.new(get_node('log_array')) logger.info("ЯУ-07Б: Есть связь ✅ ") $soc_y5/yau_07b.state = Constants.STATE_VAL.GOOD _status_cell(Network.unit.status) else: for i in range(1, count_cell-9): node_cell_ind[i].state = Constants.STATE_VAL.NONE $soc_y5/yau_07b.state = Constants.STATE_VAL.ERROR logger.error("ЯУ-07Б: Нет связи ❌") if (Network.unit_fs.online): logger.info('Настройка модулей ФС Гц:') fs_1_setup(Constants.FS_FREQ.f2) # Гц fs_2_setup(Constants.FS_FREQ.f3) # Гц else: logger.error('Настройка модулей ФС ❌') func _on_fs_status(META:int): if logger: if META == Constants.META.CI_2_OT_FS or META == Constants.META.CI_4_OT_FS: flag_fs_1_ready = true elif META == Constants.META.CI_3_OT_FS or META == Constants.META.CI_5_OT_FS: flag_fs_2_ready = true if flag_fs_1_ready and flag_fs_2_ready: #dkm var dkm: int = Network.unit.status.decode_u8(Constants.DataIndices.DKM) $DKM.text = str(dkm) if Constants.CURRENT_MODE == Constants.MODE.PRD_H: $soc_DKM/DKM_2.state = (dkm >> 1) & 0x1 $soc_DKM/DKM_3.state = (dkm >> 2) & 0x1 $Kasseta_FS/ref_A3.state = $soc_DKM/DKM_2.state $Kasseta_FS/ref_A4.state = $soc_DKM/DKM_3.state if (dkm >> 1) & 0x1 == 1: logger.info('%s: %s ✅' % [$Kasseta_FS/ref_A3.fname, 'Включено']) else: logger.info('%s: %s ❌' % [$Kasseta_FS/ref_A3.fname, 'Нет связи']) if (dkm >> 2) & 0x1 == 1: logger.info('%s: %s ✅' % [$Kasseta_FS/ref_A4.fname, 'Включено']) else: logger.info('%s: %s ❌' % [$Kasseta_FS/ref_A4.fname, 'Нет связи']) if (dkm >> 1) & 0x1 == 1 and (dkm >> 2) & 0x1 == 1: # Следующий шаг -> flag_dkm = true yau_07b_setup() elif Constants.CURRENT_MODE == Constants.MODE.PRD_B: $soc_DKM/DKM_2.state = (dkm >> 3) & 0x1 $soc_DKM/DKM_3.state = (dkm >> 4) & 0x1 $Kasseta_FS/ref_A3.state = $soc_DKM/DKM_2.state $Kasseta_FS/ref_A4.state = $soc_DKM/DKM_3.state if (dkm >> 3) & 0x1 == 1: logger.info('%s: %s ✅' % [$Kasseta_FS/ref_A3.fname, 'Включено']) else: logger.info('%s: %s ❌' % [$Kasseta_FS/ref_A3.fname, 'Нет связи']) if (dkm >> 4) & 0x1 == 1: logger.info('%s: %s ✅' % [$Kasseta_FS/ref_A4.fname, 'Включено']) else: logger.info('%s: %s ❌' % [$Kasseta_FS/ref_A4.fname, 'Нет связи']) if (dkm >> 3) & 0x1 == 1 and (dkm >> 4) & 0x1 == 1: # Следующий шаг -> flag_dkm = true yau_07b_setup() elif Constants.CURRENT_MODE == Constants.MODE.PRD_K: $soc_DKM/DKM_1.state = (dkm >> 0) & 0x1 $soc_DKM/DKM_2.state = (dkm >> 5) & 0x1 $soc_DKM/DKM_3.state = (dkm >> 6) & 0x1 $Kasseta_FS/Block_FS_PRD_K.state = $soc_DKM/DKM_1.state $Kasseta_FS/ref_A3.state = $soc_DKM/DKM_2.state $Kasseta_FS/ref_A4.state = $soc_DKM/DKM_3.state func _on_modul_um(): Network.write_port_isa(Constants.BASE_PORTS.EMS_G+2, Constants.META.MODUL_UM_2) Network.write_port_isa(Constants.BASE_PORTS.EMS_G+8, 0x8000) Network.write_port_isa(Constants.BASE_PORTS.EMS_G+2, Constants.META.MODUL_UM_3) Network.write_port_isa(Constants.BASE_PORTS.EMS_G+8, 0x8000) flag_ug = false flag_dkm = false flag_start = true func _on_start_timer_03(): flag_start = false timer_03.wait_time = 0.3 timer_03.one_shot = true array_pow_1 = [] array_pow_2 = [] count_packet = 0 flag_control_add = true timer_03.start() func _on_timer_03(): Network.write_port_isa(Constants.BASE_PORTS.EMS_G+2, Constants.META.MODUL_UM_2) Network.write_port_isa(Constants.BASE_PORTS.EMS_G+8, 0x4000) Network.write_port_isa(Constants.BASE_PORTS.EMS_G+2, Constants.META.MODUL_UM_3) Network.write_port_isa(Constants.BASE_PORTS.EMS_G+8, 0x4000) flag_control_add = false await get_tree().create_timer(1.0).timeout logger.info('Количество принятых пакетов от ЯУ-07Б: %s пакета' % count_packet) logger.info('Максимальные значения по мощности от УКП-1: %s ' % str(array_pow_1)) logger.info('Максимальные значения по мощности от УКП-1: %s ' % str(array_pow_2)) _status_prd() $log_array/await.visible = false Network.write_port_isa(Constants.BASE_PORTS.EMS_G+2, Constants.META.CZI_1) func _status_prd(): var status: int = 0 for i in range(10): status += 1 if (node_cell_ind[i].state == Constants.STATE_VAL.GOOD) else 0 for i in range(12, count_cell-2): status += 1 if (node_cell_ind[i].state == Constants.STATE_VAL.GOOD) else 0 if (Constants.CURRENT_MODE == Constants.MODE.PRD_K): status += 1 if (node_cell_ind[10].state == Constants.STATE_VAL.GOOD) else 0 status += 1 if (node_cell_ind[11].state == Constants.STATE_VAL.GOOD) else 0 status += 1 if (node_cell_ind[12].state == Constants.STATE_VAL.GOOD) else 0 status += 1 if (node_cell_ind[17].state == Constants.STATE_VAL.GOOD) else 0 status += 1 if (node_cell_ind[18].state == Constants.STATE_VAL.GOOD) else 0 var pribor_ispraven: bool = false var min_dopusk: int = 40 if (status == count_cell-7): pribor_ispraven = true for i_pow in array_pow_1: if i_pow < min_dopusk: pribor_ispraven = false for i_pow in array_pow_2: if i_pow < min_dopusk: pribor_ispraven = false if pribor_ispraven: $lbl_control.text = 'Прибор исправен' $lbl_control.modulate = Color.AQUAMARINE else: $lbl_control.text = 'Прибор неисправен' $lbl_control.modulate = Color.CRIMSON