From 021eba8a08e7630e6e147d6c6919f1ce7875bd10 Mon Sep 17 00:00:00 2001
From: TotMaxim
Date: Wed, 3 Dec 2025 16:51:33 +0300
Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D1=80=D0=B0=D0=B1=D0=BE=D1=82?=
=?UTF-8?q?=D0=BA=D0=B0=20=D0=B8=D0=BD=D1=82=D0=B5=D0=B3=D1=80=D0=B0=D0=BB?=
=?UTF-8?q?=D1=8C=D0=BD=D0=BE=D0=B3=D0=BE=20=D0=BA=D0=BE=D0=BD=D1=82=D1=80?=
=?UTF-8?q?=D0=BE=D0=BB=D1=8F?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
scenes/tabs-switch/lbl_ready.gd | 67 +++++++++++++++++++++++++--------
1 file changed, 51 insertions(+), 16 deletions(-)
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
}