Доработка интегрального контроля
This commit is contained in:
@@ -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
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user