Доработка интегрального контроля УФ
This commit is contained in:
96
scenes/pribor-uf/uf-ctl.gd
Normal file
96
scenes/pribor-uf/uf-ctl.gd
Normal file
@@ -0,0 +1,96 @@
|
|||||||
|
class_name UFControl
|
||||||
|
|
||||||
|
signal update_uf_serviceability(status: bool)
|
||||||
|
|
||||||
|
#region Константы и переменные
|
||||||
|
enum StatusIndex {
|
||||||
|
SOCKETS = 0,
|
||||||
|
IP_220_27B = 2
|
||||||
|
}
|
||||||
|
|
||||||
|
var unit_uf: Object
|
||||||
|
var uf_status: Dictionary
|
||||||
|
|
||||||
|
var _self_name: String
|
||||||
|
var _serviceability: bool = false
|
||||||
|
var serviceability: bool:
|
||||||
|
get:
|
||||||
|
return _serviceability
|
||||||
|
set(value):
|
||||||
|
if value != _serviceability:
|
||||||
|
_serviceability = value
|
||||||
|
emit_signal('update_uf_serviceability', value)
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region Инициализация
|
||||||
|
func _init(name: String) -> void:
|
||||||
|
_self_name = name
|
||||||
|
unit_uf = network.get_unit_instance(_self_name)
|
||||||
|
unit_uf.connect('line_changed', on_line_changed)
|
||||||
|
unit_uf.connect('data_received', on_data_received)
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region Обработчики сигналов
|
||||||
|
func on_line_changed(status: Object) -> void:
|
||||||
|
'''Обработка изменения состояния линии связи'''
|
||||||
|
uf_status['УФ-онлайн'] = status.online
|
||||||
|
update_serviceability()
|
||||||
|
|
||||||
|
func on_data_received(yau: Object) -> void:
|
||||||
|
'''Обработка полученных данных от УФ'''
|
||||||
|
var new_ems_status = control_ems(yau.status)
|
||||||
|
var status_changed = false
|
||||||
|
|
||||||
|
# Обновляем только ключи КЭМС/ЭМС, сохраняя 'УФ-онлайн'
|
||||||
|
for key in ['КЭМС-Б1', 'ЭМС-Б1', 'ЭМС-Б2', 'ИП220-27Б']:
|
||||||
|
var old_value = uf_status.get(key, false)
|
||||||
|
var new_value = new_ems_status.get(key, false)
|
||||||
|
|
||||||
|
if old_value != new_value:
|
||||||
|
uf_status[key] = new_value
|
||||||
|
status_changed = true
|
||||||
|
|
||||||
|
if status_changed:
|
||||||
|
update_serviceability()
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region Статус и сервисабельность
|
||||||
|
func get_current_status() -> Dictionary:
|
||||||
|
'''Получение текущего статуса (только для чтения)'''
|
||||||
|
return uf_status.duplicate(true)
|
||||||
|
|
||||||
|
func is_operational() -> bool:
|
||||||
|
'''Проверка, все ли системы работают нормально'''
|
||||||
|
return serviceability and uf_status.get('УФ-онлайн', false)
|
||||||
|
|
||||||
|
func update_serviceability() -> void:
|
||||||
|
'''Обновление общего статуса сервисабельности'''
|
||||||
|
var new_serviceability: bool = true
|
||||||
|
|
||||||
|
# Проверяем онлайн-статус
|
||||||
|
if uf_status.get('УФ-онлайн', false) == false:
|
||||||
|
new_serviceability = false
|
||||||
|
else:
|
||||||
|
# Проверяем все статусы КЭМС/ЭМС
|
||||||
|
for key in ['КЭМС-Б1', 'ЭМС-Б1', 'ЭМС-Б2', 'ИП220-27Б']:
|
||||||
|
if uf_status.get(key, true) == false:
|
||||||
|
new_serviceability = false
|
||||||
|
break
|
||||||
|
|
||||||
|
# Устанавливаем новое значение через setter
|
||||||
|
self.serviceability = new_serviceability
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region Вспомогательные методы
|
||||||
|
static func control_ems(status: Array) -> Dictionary:
|
||||||
|
'''Анализ статусов КЭМС/ЭМС'''
|
||||||
|
var status_dic: Dictionary = {}
|
||||||
|
if status.is_empty() or status.size() < 3:
|
||||||
|
return status_dic
|
||||||
|
|
||||||
|
status_dic['КЭМС-Б1'] = bool((status[StatusIndex.SOCKETS] >> 0) & 1) and bool((status[StatusIndex.SOCKETS] >> 3) & 1)
|
||||||
|
status_dic['ЭМС-Б1'] = bool((status[StatusIndex.SOCKETS] >> 1) & 1) and bool((status[StatusIndex.SOCKETS] >> 4) & 1)
|
||||||
|
status_dic['ЭМС-Б2'] = bool((status[StatusIndex.SOCKETS] >> 2) & 1) and bool((status[StatusIndex.SOCKETS] >> 5) & 1)
|
||||||
|
status_dic['ИП220-27Б'] = bool((status[StatusIndex.IP_220_27B] >> 6) & 1)
|
||||||
|
return status_dic
|
||||||
|
#endregion
|
||||||
1
scenes/pribor-uf/uf-ctl.gd.uid
Normal file
1
scenes/pribor-uf/uf-ctl.gd.uid
Normal file
@@ -0,0 +1 @@
|
|||||||
|
uid://b6avo0uvwrxnj
|
||||||
@@ -54,6 +54,7 @@ const PRIBORS_RES = \\
|
|||||||
'pribor_uf': ['res://scenes/pribor-uf/pribor-uf.tscn', 'Контроль исправности прибора УФ'],
|
'pribor_uf': ['res://scenes/pribor-uf/pribor-uf.tscn', 'Контроль исправности прибора УФ'],
|
||||||
'pribor_uyep': ['res://scenes/pribor-uyep/pribor-uyep.tscn', 'Контроль исправности устройства У-ЭП'],
|
'pribor_uyep': ['res://scenes/pribor-uyep/pribor-uyep.tscn', 'Контроль исправности устройства У-ЭП'],
|
||||||
}
|
}
|
||||||
|
var uf_control: UFControl
|
||||||
var ctl_btn_state := false
|
var ctl_btn_state := false
|
||||||
var cur_pribor_node = null
|
var cur_pribor_node = null
|
||||||
var check_ready_control: Dictionary = {}
|
var check_ready_control: Dictionary = {}
|
||||||
@@ -106,7 +107,8 @@ func _ready():
|
|||||||
prd_module.unit_control.connect('update_max_value_progress', Callable(self, 'on_update_max_value_progress').bind(pribor_node))
|
prd_module.unit_control.connect('update_max_value_progress', Callable(self, 'on_update_max_value_progress').bind(pribor_node))
|
||||||
prd_module.unit_control.connect('control_is_over', Callable(self, 'on_control_is_over'))
|
prd_module.unit_control.connect('control_is_over', Callable(self, 'on_control_is_over'))
|
||||||
if item == 'уарэп-эмс':
|
if item == 'уарэп-эмс':
|
||||||
signaller.connect('update_uf_serviceability', Callable(self, 'on_update_uf_serviceability').bind(pribor_node))
|
uf_control = UFControl.new('уарэп-эмс')
|
||||||
|
uf_control.connect('update_uf_serviceability', Callable(self, 'on_update_uf_serviceability').bind(pribor_node))
|
||||||
|
|
||||||
# Пиктограммы приборов, которые отображают состояние подключения только
|
# Пиктограммы приборов, которые отображают состояние подключения только
|
||||||
for pribor_node in get_tree().get_nodes_in_group('pribor_pics'):
|
for pribor_node in get_tree().get_nodes_in_group('pribor_pics'):
|
||||||
@@ -114,7 +116,9 @@ func _ready():
|
|||||||
var unit_instance: = network.get_unit_instance(unit_name)
|
var unit_instance: = network.get_unit_instance(unit_name)
|
||||||
var conn_node: = pribor_node.get_node('connect_pribor')
|
var conn_node: = pribor_node.get_node('connect_pribor')
|
||||||
unit_instance.connect('line_changed', on_line_changed.bind(conn_node, unit_name))
|
unit_instance.connect('line_changed', on_line_changed.bind(conn_node, unit_name))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
signaller.conn(signaller.режим_работа, on_mode_changed)
|
signaller.conn(signaller.режим_работа, on_mode_changed)
|
||||||
signaller.conn(signaller.режим_журнал, on_mode_changed)
|
signaller.conn(signaller.режим_журнал, on_mode_changed)
|
||||||
signaller.conn(signaller.режим_настройки, on_mode_changed)
|
signaller.conn(signaller.режим_настройки, on_mode_changed)
|
||||||
@@ -170,6 +174,7 @@ func on_serviceability_changed(state: int, prd_pribor_node: Node)-> void:
|
|||||||
|
|
||||||
|
|
||||||
func on_update_uf_serviceability(uf_serviceaability: bool, uf_pribor: Node)-> void:
|
func on_update_uf_serviceability(uf_serviceaability: bool, uf_pribor: Node)-> void:
|
||||||
|
print('uf_serviceaability: ', uf_serviceaability)
|
||||||
uf_pribor.state = 1 if uf_serviceaability else 2
|
uf_pribor.state = 1 if uf_serviceaability else 2
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -420,7 +420,6 @@ func find_fs_index(aoa: float, freq: int, fs_index_arr: Array):
|
|||||||
|
|
||||||
## Обновление состояния модулей формирователя сигналов
|
## Обновление состояния модулей формирователя сигналов
|
||||||
func update_fs_state(ecms, trenaz_mode: bool):
|
func update_fs_state(ecms, trenaz_mode: bool):
|
||||||
var time_now = Time.get_ticks_msec()
|
|
||||||
for fs in fs_dict.values(): ## Запрет модуляции для всех ФС
|
for fs in fs_dict.values(): ## Запрет модуляции для всех ФС
|
||||||
fs.set_modulation(false)
|
fs.set_modulation(false)
|
||||||
for ecm in ecms.values(): ## Выставление состояния помехи в ФС
|
for ecm in ecms.values(): ## Выставление состояния помехи в ФС
|
||||||
|
|||||||
Reference in New Issue
Block a user