Доработка интегрального контроля

This commit is contained in:
TotMaxim
2025-12-03 16:51:33 +03:00
parent 3030eac0c9
commit 021eba8a08

View File

@@ -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
}