diff --git a/scenes/tabs-switch/lbl_ready.gd b/scenes/tabs-switch/lbl_ready.gd index 19ecc2ea..eda1f797 100644 --- a/scenes/tabs-switch/lbl_ready.gd +++ b/scenes/tabs-switch/lbl_ready.gd @@ -22,6 +22,7 @@ class DeviceObserver: var device_name: String var status: Array = [false, false, false] # [online, operational, control_complete] var last_results: Dictionary = {} + var status_uf: bool = false func update_online_state(online: bool) -> bool: if status[DEVICE_STATUS.ONLINE] != online: @@ -59,6 +60,7 @@ class DeviceObserver: var device_observers: Dictionary = {} var overall_prd_state: PRD_STATE = PRD_STATE.NONE +var status_uf: bool = false # Статус УФ (УАРЭП-ЭМС) func _ready() -> void: tooltip_text = 'Нет связи с приборами комплекса' @@ -111,15 +113,17 @@ func _on_prd_control_results(results: Dictionary, prd_module: Object) -> void: _recalculate_overall_state() -func _on_uf_status_receive(_unit_uf: Object) -> void: - # Логика для УФ (раскомментируй если нужно) - # var KEMS_B = ((unit_uf.status[0] >> 0) & 1) and ((unit_uf.status[0] >> 3) & 1) - # var EMS_B_1 = ((unit_uf.status[0] >> 1) & 1) and ((unit_uf.status[0] >> 4) & 1) - # var EMS_B_2 = ((unit_uf.status[0] >> 2) & 1) and ((unit_uf.status[0] >> 5) & 1) - # var IP27B = ((unit_uf.status[2] >> 6) & 1) - # var uf_operational = KEMS_B and EMS_B_1 and EMS_B_2 and IP27B - # signaller.emit_signal('update_uf_serviceability', uf_operational) - pass +func _on_uf_status_receive(unit_uf: Object) -> void: + if unit_uf: + var KEMS_B = ((unit_uf.status[0] >> 0) & 1) and ((unit_uf.status[0] >> 3) & 1) + var EMS_B_1 = ((unit_uf.status[0] >> 1) & 1) and ((unit_uf.status[0] >> 4) & 1) + var EMS_B_2 = ((unit_uf.status[0] >> 2) & 1) and ((unit_uf.status[0] >> 5) & 1) + var IP27B = ((unit_uf.status[2] >> 6) & 1) + + var new_uf_status = KEMS_B and EMS_B_1 and EMS_B_2 and IP27B + if status_uf != new_uf_status: + status_uf = new_uf_status + _recalculate_overall_state() func _recalculate_overall_state() -> void: @@ -127,6 +131,7 @@ func _recalculate_overall_state() -> void: var has_online_devices := false var all_operational := true + # Проверяем только если есть онлайн устройства for observer in device_observers.values(): if observer.status[DEVICE_STATUS.ONLINE]: has_online_devices = true @@ -143,7 +148,10 @@ func _recalculate_overall_state() -> void: # Не прерываем, чтобы проверить все устройства if has_online_devices: - new_state = PRD_STATE.GOOD if all_operational else PRD_STATE.ERR + if all_operational and status_uf: + new_state = PRD_STATE.GOOD + else: + new_state = PRD_STATE.ERR else: new_state = PRD_STATE.NONE @@ -162,15 +170,40 @@ func _update_display() -> void: func _get_tooltip_text() -> String: + var tooltip := "" + match overall_prd_state: PRD_STATE.NONE: - return "Нет связи с приборами комплекса" + tooltip = "Нет связи с приборами комплекса" PRD_STATE.GOOD: - return "Все приборы комплекса исправны" + tooltip = "Все приборы комплекса исправны" PRD_STATE.ERR: - return "Обнаружены неисправности в комплексе" + tooltip = "Обнаружены неисправности в комплексе" _: - return "Неизвестное состояние" + tooltip = "Неизвестное состояние" + + # Добавляем информацию о статусе УФ, если есть онлайн устройства + if overall_prd_state != PRD_STATE.NONE: + tooltip += "\n\n" + tooltip += "Статус УФ (УАРЭП-ЭМС): " + tooltip += "Исправен" if status_uf else "Неисправен" + + # Добавляем детальную информацию о ПРД устройствах + tooltip += "\n\nДетальный статус ПРД:" + var online_count := 0 + var operational_count := 0 + + for device_name in device_observers: + var observer = device_observers[device_name] + if observer.status[DEVICE_STATUS.ONLINE]: + online_count += 1 + if observer.status[DEVICE_STATUS.STATUS]: + operational_count += 1 + + tooltip += "\nПРД онлайн: %d/%d" % [online_count, device_observers.size()] + tooltip += "\nПРД исправны: %d/%d" % [operational_count, online_count] + + return tooltip # Публичные методы для получения информации @@ -181,7 +214,8 @@ func get_device_status(device_name: String) -> Dictionary: "online": observer.status[DEVICE_STATUS.ONLINE], "operational": observer.status[DEVICE_STATUS.STATUS], "control_complete": observer.status[DEVICE_STATUS.CONTROL], - "last_results": observer.last_results.duplicate() + "last_results": observer.last_results.duplicate(), + "status_uf": status_uf } return {} @@ -204,5 +238,6 @@ func get_overall_status() -> Dictionary: "online_devices": online_count, "operational_devices": operational_count, "total_devices": device_observers.size(), - "control_complete_devices": control_complete_count + "control_complete_devices": control_complete_count, + "uf_status": status_uf }