Доработка интегрального контроля (в процессе)
This commit is contained in:
@@ -30,7 +30,6 @@
|
|||||||
"3": {"freq": 1157.0, "width": 100.0}
|
"3": {"freq": 1157.0, "width": 100.0}
|
||||||
},
|
},
|
||||||
"start_litera": 2,
|
"start_litera": 2,
|
||||||
"progress_max": 20
|
|
||||||
},
|
},
|
||||||
"PRD_V": {
|
"PRD_V": {
|
||||||
"constants": {
|
"constants": {
|
||||||
@@ -62,7 +61,6 @@
|
|||||||
"5": {"freq": 1575.0, "width": 110.0}
|
"5": {"freq": 1575.0, "width": 110.0}
|
||||||
},
|
},
|
||||||
"start_litera": 4,
|
"start_litera": 4,
|
||||||
"progress_max": 20
|
|
||||||
},
|
},
|
||||||
"PRD_K": {
|
"PRD_K": {
|
||||||
"constants": {
|
"constants": {
|
||||||
@@ -97,7 +95,6 @@
|
|||||||
"7": {"freq": 4750.0, "width": 110.0}
|
"7": {"freq": 4750.0, "width": 110.0}
|
||||||
},
|
},
|
||||||
"start_litera": 1,
|
"start_litera": 1,
|
||||||
"progress_max": 30
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"base_configs": {
|
"base_configs": {
|
||||||
@@ -122,28 +119,32 @@
|
|||||||
"block_ip": "base",
|
"block_ip": "base",
|
||||||
"block_kasseta": "base",
|
"block_kasseta": "base",
|
||||||
"control_results": {
|
"control_results": {
|
||||||
|
"block_kasseta":false,
|
||||||
"block_ip": false,
|
"block_ip": false,
|
||||||
"temperature": true,
|
"temperature": true,
|
||||||
"dkm_2": false,
|
"dkm_2": false,
|
||||||
"dkm_3": false,
|
"dkm_3": false,
|
||||||
"dou_2": false,
|
"dou_2": false,
|
||||||
"dou_3": false,
|
"dou_3": false,
|
||||||
"fs_2": 0,
|
"fs_2": false,
|
||||||
"fs_3": 0
|
"fs_3": false,
|
||||||
|
"is_over_control": false,
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"PRD_V": {
|
"PRD_V": {
|
||||||
"block_ip": "base",
|
"block_ip": "base",
|
||||||
"block_kasseta": "base",
|
"block_kasseta": "base",
|
||||||
"control_results": {
|
"control_results": {
|
||||||
|
"block_kasseta":false,
|
||||||
"block_ip": false,
|
"block_ip": false,
|
||||||
"temperature": true,
|
"temperature": true,
|
||||||
"dkm_4": false,
|
"dkm_4": false,
|
||||||
"dkm_5": false,
|
"dkm_5": false,
|
||||||
"dou_4": false,
|
"dou_4": false,
|
||||||
"dou_5": false,
|
"dou_5": false,
|
||||||
"fs_4": 0,
|
"fs_4": false,
|
||||||
"fs_5": 0
|
"fs_5": false,
|
||||||
|
"is_over_control": false,
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"PRD_K": {
|
"PRD_K": {
|
||||||
@@ -159,6 +160,7 @@
|
|||||||
},
|
},
|
||||||
"block_kasseta": "base",
|
"block_kasseta": "base",
|
||||||
"control_results": {
|
"control_results": {
|
||||||
|
"block_kasseta":false,
|
||||||
"block_ip": false,
|
"block_ip": false,
|
||||||
"temperature": true,
|
"temperature": true,
|
||||||
"dkm_1": false,
|
"dkm_1": false,
|
||||||
@@ -166,9 +168,10 @@
|
|||||||
"dkm_7": false,
|
"dkm_7": false,
|
||||||
"dou_6": false,
|
"dou_6": false,
|
||||||
"dou_7": false,
|
"dou_7": false,
|
||||||
"fs_1": 0,
|
"fs_1": false,
|
||||||
"fs_6": 0,
|
"fs_6": false,
|
||||||
"fs_7": 0
|
"fs_7": false,
|
||||||
|
"is_over_control": false,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -63,11 +63,10 @@ func _enter_tree() -> void:
|
|||||||
func _exit_tree() -> void:
|
func _exit_tree() -> void:
|
||||||
if Engine.is_editor_hint():
|
if Engine.is_editor_hint():
|
||||||
return
|
return
|
||||||
#prd_v_module.cmd_array.append([unit_prd_v.CmdCode.WRITE_ISA, [constants_v.ADDR_UG_LITERA_1, ug_work_1, constants_v.ADDR_UG_LITERA_2, ug_work_2]])
|
|
||||||
|
|
||||||
|
|
||||||
static func temperature_fill(temperature_arr_node: Array, temperature_dic: Dictionary)->void:
|
static func temperature_fill(temperature_arr_node: Array, temperature_dic: Dictionary)->void:
|
||||||
for i_node_temperature in temperature_arr_node:
|
for i_node_temperature in temperature_arr_node:
|
||||||
var temperature_meta: String = i_node_temperature.get_meta('um')
|
var temperature_meta: String = i_node_temperature.get_meta('um')
|
||||||
if not temperature_dic.has(temperature_meta): return
|
if not temperature_dic.has(temperature_meta): return
|
||||||
i_node_temperature.value1 = temperature_dic[temperature_meta] if temperature_dic[temperature_meta] < 361 else -40
|
i_node_temperature.value1 = temperature_dic[temperature_meta] if temperature_dic[temperature_meta] < 361 else -40
|
||||||
@@ -139,7 +138,6 @@ static func on_control_result(for_result_dic: Dictionary) -> void:
|
|||||||
node_y5.state = STATE_VAL.ERROR if meta_y5 == 'yau07' else STATE_VAL.NONE
|
node_y5.state = STATE_VAL.ERROR if meta_y5 == 'yau07' else STATE_VAL.NONE
|
||||||
else:
|
else:
|
||||||
node_y5.state = STATE_VAL.GOOD if block_kasseta_y5_prd_config_v[meta_y5] else STATE_VAL.ERROR
|
node_y5.state = STATE_VAL.GOOD if block_kasseta_y5_prd_config_v[meta_y5] else STATE_VAL.ERROR
|
||||||
# Проверяем состояние после установки
|
|
||||||
if node_y5.state == STATE_VAL.ERROR:
|
if node_y5.state == STATE_VAL.ERROR:
|
||||||
all_y5_good = false
|
all_y5_good = false
|
||||||
|
|
||||||
@@ -150,7 +148,6 @@ static func on_control_result(for_result_dic: Dictionary) -> void:
|
|||||||
power_supply.state = STATE_VAL.GOOD if block_ip_config_v[meta_ip][1] else STATE_VAL.ERROR
|
power_supply.state = STATE_VAL.GOOD if block_ip_config_v[meta_ip][1] else STATE_VAL.ERROR
|
||||||
else:
|
else:
|
||||||
power_supply.state = STATE_VAL.NONE
|
power_supply.state = STATE_VAL.NONE
|
||||||
# Проверяем состояние после установки
|
|
||||||
if power_supply.state == STATE_VAL.ERROR:
|
if power_supply.state == STATE_VAL.ERROR:
|
||||||
all_y5_good = false
|
all_y5_good = false
|
||||||
|
|
||||||
|
|||||||
@@ -1,48 +1,208 @@
|
|||||||
extends Label
|
extends Label
|
||||||
# Используем более понятные имена переменных
|
|
||||||
const STATUS_GOOD := {"text": "Исправно", "color": Color.GREEN, "font_color": Color.BLACK}
|
|
||||||
const STATUS_BAD := {"text": "Отказ", "color": Color.RED, "font_color": Color.WHITE}
|
|
||||||
var _is_uf_status_initialized: bool = false
|
|
||||||
var is_prd_operational: bool = true
|
|
||||||
var is_uf_operational: bool = true
|
|
||||||
|
|
||||||
|
enum PRD_STATE {
|
||||||
|
NONE, # Нет связи
|
||||||
|
GOOD, # Исправно
|
||||||
|
ERR # Отказ
|
||||||
|
}
|
||||||
|
|
||||||
|
enum DEVICE_STATUS {
|
||||||
|
ONLINE, # Связь есть
|
||||||
|
STATUS, # Статус исправности
|
||||||
|
CONTROL # Контроль завершен
|
||||||
|
}
|
||||||
|
|
||||||
|
const STATUS_CONFIG := {
|
||||||
|
PRD_STATE.NONE: {"text": "Нет связи", "color": Color.WHITE, "font_color": Color.BLACK},
|
||||||
|
PRD_STATE.GOOD: {"text": "Исправно", "color": Color.GREEN, "font_color": Color.BLACK},
|
||||||
|
PRD_STATE.ERR: {"text": "Отказ", "color": Color.RED, "font_color": Color.WHITE}
|
||||||
|
}
|
||||||
|
|
||||||
|
class DeviceObserver:
|
||||||
|
var device_name: String
|
||||||
|
var status: Array = [false, false, false] # [online, operational, control_complete]
|
||||||
|
var last_results: Dictionary = {}
|
||||||
|
|
||||||
|
func update_online_state(online: bool) -> bool:
|
||||||
|
if status[DEVICE_STATUS.ONLINE] != online:
|
||||||
|
status[DEVICE_STATUS.ONLINE] = online
|
||||||
|
return true
|
||||||
|
return false
|
||||||
|
|
||||||
|
func update_control_results(results: Dictionary) -> bool:
|
||||||
|
var changed := false
|
||||||
|
last_results = results.duplicate()
|
||||||
|
|
||||||
|
if results.get('is_over_control', false):
|
||||||
|
# Контроль завершен - проверяем все результаты
|
||||||
|
var all_ok := true
|
||||||
|
for key in results:
|
||||||
|
if key != 'is_over_control' and not results[key]:
|
||||||
|
all_ok = false
|
||||||
|
break
|
||||||
|
|
||||||
|
if status[DEVICE_STATUS.STATUS] != all_ok or status[DEVICE_STATUS.CONTROL] != true:
|
||||||
|
status[DEVICE_STATUS.STATUS] = all_ok
|
||||||
|
status[DEVICE_STATUS.CONTROL] = true
|
||||||
|
changed = true
|
||||||
|
else:
|
||||||
|
# Контроль в процессе - проверяем базовые параметры
|
||||||
|
var basic_ok: bool = results.get('block_kasseta', false) and \
|
||||||
|
results.get('block_ip', false) and \
|
||||||
|
results.get('temperature', true)
|
||||||
|
|
||||||
|
if status[DEVICE_STATUS.STATUS] != basic_ok or status[DEVICE_STATUS.CONTROL] != false:
|
||||||
|
status[DEVICE_STATUS.STATUS] = basic_ok
|
||||||
|
status[DEVICE_STATUS.CONTROL] = false
|
||||||
|
changed = true
|
||||||
|
return changed
|
||||||
|
|
||||||
|
var device_observers: Dictionary = {}
|
||||||
|
var overall_prd_state: PRD_STATE = PRD_STATE.NONE
|
||||||
|
|
||||||
func _ready() -> void:
|
func _ready() -> void:
|
||||||
tooltip_text = 'Нет связи с приборами комплекса'
|
tooltip_text = 'Нет связи с приборами комплекса'
|
||||||
for prd_module in prd.prd_dict.values():
|
|
||||||
prd_module.connect('update_serviceability', Callable(self, 'on_serviceability_changed').bind(prd_module))
|
|
||||||
var unit_uf: = network.get_unit_instance('уарэп-эмс')
|
|
||||||
unit_uf.connect('data_received', Callable(self, 'on_uf_status_receive'))
|
|
||||||
add_theme_color_override("font_color", Color.BLACK)
|
add_theme_color_override("font_color", Color.BLACK)
|
||||||
|
|
||||||
|
# Инициализация наблюдателей
|
||||||
func on_serviceability_changed(unit_prd_module: Object) -> void:
|
_initialize_observers()
|
||||||
var check_service: bool = true
|
|
||||||
|
# Подписка на сигналы ПРД модулей
|
||||||
for prd_module in prd.prd_dict.values():
|
for prd_module in prd.prd_dict.values():
|
||||||
if prd_module.unit_yau07.online:
|
# Подключаемся к контролю ПРД
|
||||||
if not unit_prd_module.serviceability:
|
if prd_module.unit_control:
|
||||||
check_service = false
|
prd_module.unit_control.connect('control_results_updated', Callable(self, '_on_prd_control_results').bind(prd_module))
|
||||||
if check_service != is_prd_operational:
|
# Подключаемся к онлайн-статусу ЯУ-07
|
||||||
is_prd_operational = check_service
|
if prd_module.unit_yau07:
|
||||||
_update_serviceability_display()
|
prd_module.unit_yau07.connect('line_changed', Callable(self, '_on_prd_online_changed').bind(prd_module))
|
||||||
|
|
||||||
|
# Подписка на УФ
|
||||||
|
var unit_uf = network.get_unit_instance('уарэп-эмс')
|
||||||
|
if unit_uf:
|
||||||
|
unit_uf.data_received.connect(Callable(self, '_on_uf_status_receive'))
|
||||||
|
|
||||||
|
# Инициализация начального состояния
|
||||||
|
_recalculate_overall_state()
|
||||||
|
|
||||||
|
|
||||||
func _update_serviceability_display() -> void:
|
func _initialize_observers() -> void:
|
||||||
var status := STATUS_GOOD if (is_uf_operational and is_prd_operational) else STATUS_BAD
|
var device_names := [
|
||||||
text = status.text
|
'уарэп-яу07-1н', 'уарэп-яу07-1в', 'уарэп-яу07-1к',
|
||||||
modulate = status.color
|
'уарэп-яу07-2н', 'уарэп-яу07-2в', 'уарэп-яу07-2к',
|
||||||
tooltip_text = 'Результаты обобщенного признака работоспособности изделия'
|
'уарэп-яу07-3н', 'уарэп-яу07-3в', 'уарэп-яу07-3к',
|
||||||
add_theme_color_override("font_color", status.font_color)
|
'уарэп-яу07-4н', 'уарэп-яу07-4в', 'уарэп-яу07-4к'
|
||||||
|
]
|
||||||
|
|
||||||
|
for device_name in device_names:
|
||||||
|
device_observers[device_name] = DeviceObserver.new()
|
||||||
|
device_observers[device_name].device_name = device_name
|
||||||
|
|
||||||
|
|
||||||
func on_uf_status_receive(unit_uf: Object) -> void:
|
func _on_prd_online_changed(line_status: Object, prd_module: Object) -> void:
|
||||||
var KEMS_B = ((unit_uf.status[0] >> 0) & 1) and ((unit_uf.status[0] >> 3) & 1)
|
var online: bool = line_status.online
|
||||||
var EMS_B_1 = ((unit_uf.status[0] >> 1) & 1) and ((unit_uf.status[0] >> 4) & 1)
|
var observer: DeviceObserver = device_observers.get(prd_module.prd_name)
|
||||||
var EMS_B_2 = ((unit_uf.status[0] >> 2) & 1) and ((unit_uf.status[0] >> 5) & 1)
|
if observer and observer.update_online_state(online):
|
||||||
var IP27B = ((unit_uf.status[2] >> 6) & 1)
|
_recalculate_overall_state()
|
||||||
var check_service: bool = KEMS_B and EMS_B_1 and EMS_B_2 and IP27B
|
|
||||||
if not _is_uf_status_initialized or check_service != is_uf_operational:
|
|
||||||
is_uf_operational = check_service
|
func _on_prd_control_results(results: Dictionary, prd_module: Object) -> void:
|
||||||
_update_serviceability_display()
|
var observer: DeviceObserver = device_observers.get(prd_module.prd_name)
|
||||||
signaller.emit_signal('update_uf_serviceability', check_service)
|
if observer and observer.update_control_results(results):
|
||||||
_is_uf_status_initialized = true
|
_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 _recalculate_overall_state() -> void:
|
||||||
|
var new_state := PRD_STATE.NONE
|
||||||
|
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
|
||||||
|
|
||||||
|
if observer.status[DEVICE_STATUS.CONTROL]:
|
||||||
|
# Если контроль завершен - строгая проверка
|
||||||
|
if not observer.status[DEVICE_STATUS.STATUS]:
|
||||||
|
all_operational = false
|
||||||
|
break
|
||||||
|
else:
|
||||||
|
# Если контроль в процессе - мягкая проверка
|
||||||
|
if not observer.status[DEVICE_STATUS.STATUS]:
|
||||||
|
all_operational = false
|
||||||
|
# Не прерываем, чтобы проверить все устройства
|
||||||
|
|
||||||
|
if has_online_devices:
|
||||||
|
new_state = PRD_STATE.GOOD if all_operational else PRD_STATE.ERR
|
||||||
|
else:
|
||||||
|
new_state = PRD_STATE.NONE
|
||||||
|
|
||||||
|
if overall_prd_state != new_state:
|
||||||
|
overall_prd_state = new_state
|
||||||
|
_update_display()
|
||||||
|
|
||||||
|
|
||||||
|
func _update_display() -> void:
|
||||||
|
var config: Dictionary = STATUS_CONFIG[overall_prd_state].duplicate()
|
||||||
|
|
||||||
|
text = config.text
|
||||||
|
modulate = config.color
|
||||||
|
add_theme_color_override("font_color", config.font_color)
|
||||||
|
tooltip_text = _get_tooltip_text()
|
||||||
|
|
||||||
|
|
||||||
|
func _get_tooltip_text() -> String:
|
||||||
|
match overall_prd_state:
|
||||||
|
PRD_STATE.NONE:
|
||||||
|
return "Нет связи с приборами комплекса"
|
||||||
|
PRD_STATE.GOOD:
|
||||||
|
return "Все приборы комплекса исправны"
|
||||||
|
PRD_STATE.ERR:
|
||||||
|
return "Обнаружены неисправности в комплексе"
|
||||||
|
_:
|
||||||
|
return "Неизвестное состояние"
|
||||||
|
|
||||||
|
|
||||||
|
# Публичные методы для получения информации
|
||||||
|
func get_device_status(device_name: String) -> Dictionary:
|
||||||
|
var observer: DeviceObserver = device_observers.get(device_name)
|
||||||
|
if observer:
|
||||||
|
return {
|
||||||
|
"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()
|
||||||
|
}
|
||||||
|
return {}
|
||||||
|
|
||||||
|
|
||||||
|
func get_overall_status() -> Dictionary:
|
||||||
|
var online_count := 0
|
||||||
|
var operational_count := 0
|
||||||
|
var control_complete_count := 0
|
||||||
|
|
||||||
|
for observer in device_observers.values():
|
||||||
|
if observer.status[DEVICE_STATUS.ONLINE]:
|
||||||
|
online_count += 1
|
||||||
|
if observer.status[DEVICE_STATUS.STATUS]:
|
||||||
|
operational_count += 1
|
||||||
|
if observer.status[DEVICE_STATUS.CONTROL]:
|
||||||
|
control_complete_count += 1
|
||||||
|
|
||||||
|
return {
|
||||||
|
"overall_state": overall_prd_state,
|
||||||
|
"online_devices": online_count,
|
||||||
|
"operational_devices": operational_count,
|
||||||
|
"total_devices": device_observers.size(),
|
||||||
|
"control_complete_devices": control_complete_count
|
||||||
|
}
|
||||||
|
|||||||
@@ -67,6 +67,8 @@ func on_serv_changed(u, pribor_node, _pribor_meta): pribor_node.state = int(u.se
|
|||||||
func on_mode_changed():
|
func on_mode_changed():
|
||||||
clean_pribor_items()
|
clean_pribor_items()
|
||||||
reset_pribor_buttons()
|
reset_pribor_buttons()
|
||||||
|
$chk_show_functional.visible = false
|
||||||
|
$chk_show_functional.button_pressed = false
|
||||||
|
|
||||||
|
|
||||||
func reset_pribor_buttons():
|
func reset_pribor_buttons():
|
||||||
@@ -99,7 +101,7 @@ func _ready():
|
|||||||
for item in unit_names:
|
for item in unit_names:
|
||||||
if prd.prd_dict.has(item):
|
if prd.prd_dict.has(item):
|
||||||
var prd_module = prd.prd_dict[item]
|
var prd_module = prd.prd_dict[item]
|
||||||
prd_module.connect('update_serviceability', Callable(self, 'on_serviceability_changed').bind(prd_module, pribor_node))
|
prd_module.connect('update_serviceability', Callable(self, 'on_serviceability_changed').bind(pribor_node))
|
||||||
prd_module.unit_control.connect('update_progress', Callable(self, 'on_update_progress').bind(pribor_node))
|
prd_module.unit_control.connect('update_progress', Callable(self, 'on_update_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('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'))
|
||||||
@@ -139,7 +141,7 @@ func clean_pribor_items():
|
|||||||
func on_pribor_press(pribor_path, header_text, pribor_node):
|
func on_pribor_press(pribor_path, header_text, pribor_node):
|
||||||
if cur_pribor_node:
|
if cur_pribor_node:
|
||||||
cur_pribor_node.show_functional = false
|
cur_pribor_node.show_functional = false
|
||||||
$lbl_header/chk_show_functional.button_pressed = false
|
$chk_show_functional.button_pressed = false
|
||||||
cur_pribor_node = pribor_node
|
cur_pribor_node = pribor_node
|
||||||
clean_pribor_items()
|
clean_pribor_items()
|
||||||
var pribor_obj = load(pribor_path)
|
var pribor_obj = load(pribor_path)
|
||||||
@@ -151,6 +153,7 @@ func on_pribor_press(pribor_path, header_text, pribor_node):
|
|||||||
push_error('экземпляр не создан: \\\"%s\\\" (%s)' % [pribor_path, header_text])
|
push_error('экземпляр не создан: \\\"%s\\\" (%s)' % [pribor_path, header_text])
|
||||||
return
|
return
|
||||||
$lbl_header.text = header_text
|
$lbl_header.text = header_text
|
||||||
|
$chk_show_functional.visible = true
|
||||||
var meta_list = pribor_node.get_meta_list()
|
var meta_list = pribor_node.get_meta_list()
|
||||||
if meta_list.find('unit_name') > -1:
|
if meta_list.find('unit_name') > -1:
|
||||||
var unit_name = pribor_node.get_meta('unit_name')
|
var unit_name = pribor_node.get_meta('unit_name')
|
||||||
@@ -160,37 +163,9 @@ func on_pribor_press(pribor_path, header_text, pribor_node):
|
|||||||
update_pribor_items_visibility()
|
update_pribor_items_visibility()
|
||||||
|
|
||||||
|
|
||||||
enum STATE_DEVICE {
|
## Прием сигналов о текущем состояниях приборах
|
||||||
NONE,
|
func on_serviceability_changed(state: int, prd_pribor_node: Node)-> void:
|
||||||
GOOD,
|
prd_pribor_node.state = state
|
||||||
ERROR
|
|
||||||
}
|
|
||||||
|
|
||||||
func on_serviceability_changed(prd_module: Object, prd_pribor:Node)-> void:
|
|
||||||
if not prd_module.unit_yau07.online:
|
|
||||||
prd_pribor.state = STATE_DEVICE.NONE
|
|
||||||
return
|
|
||||||
print([prd_pribor.get_meta('unit_name'), prd_module.unit_control.current_status])
|
|
||||||
if prd_module.unit_control.control_is_over:
|
|
||||||
var control_results = prd_module.unit_control.get_control_results()
|
|
||||||
var result_dic = control_results.result_dic
|
|
||||||
# Проверяем только основные устройства
|
|
||||||
var critical_devices = ['fs_1', 'fs_2', 'fs_3', 'fs_4', 'fs_5', 'fs_6', 'fs_7',
|
|
||||||
'dkm_1', 'dkm_2', 'dkm_3', 'dkm_4', 'dkm_5', 'dkm_6', 'dkm_7',
|
|
||||||
'block_ip', 'dou_2', 'dou_3', 'dou_4', 'dou_5', 'dou_6', 'dou_7']
|
|
||||||
# Проверяем результаты контроля напрямую
|
|
||||||
var all_ok: bool = true
|
|
||||||
for device_key in critical_devices:
|
|
||||||
if result_dic.has(device_key) and result_dic[device_key] is bool:
|
|
||||||
if not result_dic[device_key]:
|
|
||||||
all_ok = false
|
|
||||||
break
|
|
||||||
|
|
||||||
prd_pribor.state = STATE_DEVICE.GOOD if all_ok else STATE_DEVICE.ERROR
|
|
||||||
elif not prd_module.serviceability:
|
|
||||||
prd_pribor.state = STATE_DEVICE.ERROR
|
|
||||||
else:
|
|
||||||
prd_pribor.state = STATE_DEVICE.NONE
|
|
||||||
|
|
||||||
|
|
||||||
func on_update_uf_serviceability(uf_serviceaability: bool, uf_pribor: Node)-> void:
|
func on_update_uf_serviceability(uf_serviceaability: bool, uf_pribor: Node)-> void:
|
||||||
@@ -205,7 +180,7 @@ func _on_chk_show_functional_toggled(toggled_on: bool) -> void:
|
|||||||
func _on_control_prd_pressed() -> void:
|
func _on_control_prd_pressed() -> void:
|
||||||
check_ready_control = {}
|
check_ready_control = {}
|
||||||
for pribor in get_tree().get_nodes_in_group('pribor_buttons'):
|
for pribor in get_tree().get_nodes_in_group('pribor_buttons'):
|
||||||
pribor.state = STATE_DEVICE.NONE
|
pribor.state = 0 # NONE
|
||||||
signaller.emit_signal('start_contol_device')
|
signaller.emit_signal('start_contol_device')
|
||||||
|
|
||||||
|
|
||||||
@@ -240,10 +215,18 @@ func _is_all_control_complete() -> bool:
|
|||||||
return true
|
return true
|
||||||
|
|
||||||
|
|
||||||
# TODO: Решить что делать с подключением
|
func _on_gui_input(event: InputEvent) -> void:
|
||||||
func _on_gui_input(_event: InputEvent) -> void:
|
if event is InputEventMouseButton and event.pressed and event.button_index == MOUSE_BUTTON_LEFT:
|
||||||
pass
|
if cur_pribor_node:
|
||||||
#print_debug('Увидел подключение, но не нашел куда сигнал подключается')
|
cur_pribor_node.show_functional = false
|
||||||
|
var pribor_buttons := get_tree().get_nodes_in_group('pribor_buttons')
|
||||||
|
for node in pribor_buttons:
|
||||||
|
node.button_pressed = false
|
||||||
|
clean_pribor_items()
|
||||||
|
cur_pribor_node = null
|
||||||
|
$chk_show_functional.button_pressed = false
|
||||||
|
$chk_show_functional.visible = false
|
||||||
|
$lbl_header.text = \"\"
|
||||||
|
|
||||||
|
|
||||||
func on_control_button_pressed(state: bool) -> void:
|
func on_control_button_pressed(state: bool) -> void:
|
||||||
@@ -509,6 +492,7 @@ patch_margin_right = 16
|
|||||||
patch_margin_bottom = 16
|
patch_margin_bottom = 16
|
||||||
|
|
||||||
[node name="connect_pribor" type="AnimatedSprite2D" parent="pribor_prd_n_1"]
|
[node name="connect_pribor" type="AnimatedSprite2D" parent="pribor_prd_n_1"]
|
||||||
|
visible = false
|
||||||
light_mask = 3
|
light_mask = 3
|
||||||
position = Vector2(35, -10)
|
position = Vector2(35, -10)
|
||||||
scale = Vector2(0.625, 0.625)
|
scale = Vector2(0.625, 0.625)
|
||||||
@@ -551,6 +535,14 @@ offset_bottom = 830.0
|
|||||||
scale = Vector2(0.97094, 0.97094)
|
scale = Vector2(0.97094, 0.97094)
|
||||||
texture = ExtResource("9_qe1go")
|
texture = ExtResource("9_qe1go")
|
||||||
|
|
||||||
|
[node name="connect_pribor2" type="AnimatedSprite2D" parent="pribor_prd_n_1"]
|
||||||
|
light_mask = 3
|
||||||
|
position = Vector2(35, -10)
|
||||||
|
scale = Vector2(0.625, 0.625)
|
||||||
|
sprite_frames = SubResource("SpriteFrames_foasq")
|
||||||
|
frame_progress = 0.72355
|
||||||
|
script = ExtResource("11_u7tym")
|
||||||
|
|
||||||
[node name="pribor_uf" type="TextureButton" parent="." groups=["pribor_buttons"]]
|
[node name="pribor_uf" type="TextureButton" parent="." groups=["pribor_buttons"]]
|
||||||
editor_description = "Кнопка для выбора прибора."
|
editor_description = "Кнопка для выбора прибора."
|
||||||
layout_mode = 0
|
layout_mode = 0
|
||||||
@@ -1044,6 +1036,7 @@ patch_margin_right = 16
|
|||||||
patch_margin_bottom = 16
|
patch_margin_bottom = 16
|
||||||
|
|
||||||
[node name="connect_pribor" type="AnimatedSprite2D" parent="pribor_prd_n_2"]
|
[node name="connect_pribor" type="AnimatedSprite2D" parent="pribor_prd_n_2"]
|
||||||
|
visible = false
|
||||||
light_mask = 3
|
light_mask = 3
|
||||||
position = Vector2(37, -10)
|
position = Vector2(37, -10)
|
||||||
scale = Vector2(0.625, 0.625)
|
scale = Vector2(0.625, 0.625)
|
||||||
@@ -1934,12 +1927,13 @@ text = "Контроль исправности прибора"
|
|||||||
horizontal_alignment = 1
|
horizontal_alignment = 1
|
||||||
vertical_alignment = 1
|
vertical_alignment = 1
|
||||||
|
|
||||||
[node name="chk_show_functional" type="CheckButton" parent="lbl_header"]
|
[node name="chk_show_functional" type="CheckButton" parent="."]
|
||||||
|
visible = false
|
||||||
layout_mode = 0
|
layout_mode = 0
|
||||||
offset_left = 940.0
|
offset_left = 1028.0
|
||||||
offset_top = -1.0
|
offset_top = 26.0
|
||||||
offset_right = 1319.0
|
offset_right = 1407.0
|
||||||
offset_bottom = 33.0
|
offset_bottom = 60.0
|
||||||
theme_override_font_sizes/font_size = 22
|
theme_override_font_sizes/font_size = 22
|
||||||
text = "Показть функциональную схему Э2"
|
text = "Показть функциональную схему Э2"
|
||||||
flat = true
|
flat = true
|
||||||
@@ -2037,5 +2031,5 @@ texture = ExtResource("22_1s34a")
|
|||||||
[connection signal="toggled" from="pribor_prd_v_4" to="pribor_prd_v_4" method="_on_toggled"]
|
[connection signal="toggled" from="pribor_prd_v_4" to="pribor_prd_v_4" method="_on_toggled"]
|
||||||
[connection signal="toggled" from="pribor_prd_n_4" to="pribor_prd_n_4" method="_on_toggled"]
|
[connection signal="toggled" from="pribor_prd_n_4" to="pribor_prd_n_4" method="_on_toggled"]
|
||||||
[connection signal="toggled" from="pribor_prd_k_4" to="pribor_prd_k_4" method="_on_toggled"]
|
[connection signal="toggled" from="pribor_prd_k_4" to="pribor_prd_k_4" method="_on_toggled"]
|
||||||
[connection signal="toggled" from="lbl_header/chk_show_functional" to="." method="_on_chk_show_functional_toggled"]
|
[connection signal="toggled" from="chk_show_functional" to="." method="_on_chk_show_functional_toggled"]
|
||||||
[connection signal="pressed" from="control_prd_button" to="." method="_on_control_prd_pressed"]
|
[connection signal="pressed" from="control_prd_button" to="." method="_on_control_prd_pressed"]
|
||||||
|
|||||||
102
scripts/prd.gd
102
scripts/prd.gd
@@ -151,17 +151,26 @@ class Fs:
|
|||||||
|
|
||||||
|
|
||||||
class PRD:
|
class PRD:
|
||||||
|
enum STATE_DEVICE {
|
||||||
|
NONE,
|
||||||
|
GOOD,
|
||||||
|
ERROR
|
||||||
|
}
|
||||||
var prd_name: String ## Имя прибора
|
var prd_name: String ## Имя прибора
|
||||||
var unit_yau07 ## Юнит эмс
|
var unit_yau07: Object ## Юнит эмс
|
||||||
var unit_control: Object ## Класс проверки прибора ПРД
|
var unit_control: Object ## Класс проверки прибора ПРД
|
||||||
var fs_dic: Dictionary ## Массив блоков ФС
|
var fs_dic: Dictionary ## Массив блоков ФС
|
||||||
var yemsg_board: yemsboards.EmsBoard ## Плата ЭМС-Г
|
var yemsg_board: yemsboards.EmsBoard ## Плата ЭМС-Г
|
||||||
var state = PrdState.WORK
|
var state = PrdState.WORK
|
||||||
var cmd_array: Array ## Очередь команд
|
var cmd_array: Array ## Очередь команд
|
||||||
var ug_online: bool = false ## Состояние ячейки УГ
|
var ug_online: bool = false ## Состояние ячейки УГ
|
||||||
var serviceability: bool = false
|
|
||||||
var set_ug_state: bool = true ## Необходимо ли записать в УГ настройки
|
var set_ug_state: bool = true ## Необходимо ли записать в УГ настройки
|
||||||
signal update_serviceability()
|
signal update_serviceability(state: int) ## Сообщает изменение текущего состояния юнита ПРД
|
||||||
|
var serviceability: int:
|
||||||
|
set(v):
|
||||||
|
if v != serviceability:
|
||||||
|
serviceability = v
|
||||||
|
emit_signal('update_serviceability', v)
|
||||||
|
|
||||||
func _init(u_name, u_yau07):
|
func _init(u_name, u_yau07):
|
||||||
prd_name = u_name
|
prd_name = u_name
|
||||||
@@ -201,11 +210,11 @@ class PRD:
|
|||||||
|
|
||||||
|
|
||||||
func on_line_changed(unit_ems):
|
func on_line_changed(unit_ems):
|
||||||
emit_signal('update_serviceability')
|
|
||||||
if not unit_ems.online:
|
if not unit_ems.online:
|
||||||
yemsg_board.ems_load = yemsg_board.LoadState.NOT_DEFINED
|
yemsg_board.ems_load = yemsg_board.LoadState.NOT_DEFINED
|
||||||
yemsg_board.set_wait()
|
yemsg_board.set_wait()
|
||||||
set_ug_state = true
|
set_ug_state = true
|
||||||
|
serviceability = STATE_DEVICE.NONE
|
||||||
|
|
||||||
func on_data_received(_u):
|
func on_data_received(_u):
|
||||||
set_prd_status()
|
set_prd_status()
|
||||||
@@ -222,33 +231,79 @@ class PRD:
|
|||||||
execute_cmd()
|
execute_cmd()
|
||||||
return
|
return
|
||||||
execute_cmd()
|
execute_cmd()
|
||||||
|
|
||||||
func set_prd_status():
|
## Мониторинг состояния юнита прд
|
||||||
|
func set_prd_status() -> void:
|
||||||
|
# Обновление статуса платы ЯУ-07
|
||||||
yemsg_board.set_status(unit_yau07.status)
|
yemsg_board.set_status(unit_yau07.status)
|
||||||
|
|
||||||
|
# Проверка онлайн-статусов основных модулей
|
||||||
ug_online = (unit_yau07.status[0] >> 1) & 1
|
ug_online = (unit_yau07.status[0] >> 1) & 1
|
||||||
if not ug_online:
|
|
||||||
set_ug_state = true
|
|
||||||
var ukp_1_online = (unit_yau07.status[0] >> 2) & 1
|
var ukp_1_online = (unit_yau07.status[0] >> 2) & 1
|
||||||
var ukp_2_online = (unit_yau07.status[0] >> 3) & 1
|
var ukp_2_online = (unit_yau07.status[0] >> 3) & 1
|
||||||
var ems_g_online = (unit_yau07.status[0] & 1) & 1
|
var ems_g_online = (unit_yau07.status[0] & 1) & 1
|
||||||
|
|
||||||
|
# Установка флага состояния УГ
|
||||||
|
if not ug_online:
|
||||||
|
set_ug_state = true
|
||||||
|
|
||||||
|
# Проверка источников питания
|
||||||
|
var ip_online: bool = _check_dry_contact(unit_yau07.status, prd_name)
|
||||||
|
var check_temperature_um: bool = unit_control.flags.temperature_ok
|
||||||
|
var check_dic: Dictionary = {
|
||||||
|
'ukp_1_online': ukp_1_online,
|
||||||
|
'ukp_2_online': ukp_2_online,
|
||||||
|
'ems_g_online': ems_g_online,
|
||||||
|
'ip_online': ip_online,
|
||||||
|
'ug_online': ug_online,
|
||||||
|
'temperature_um': check_temperature_um
|
||||||
|
}
|
||||||
|
# Определение состояния обслуживания
|
||||||
|
if unit_control:
|
||||||
|
if unit_control.flags.control_is_over:
|
||||||
|
serviceability = _set_serviceability_from_control_results(unit_control)
|
||||||
|
else:
|
||||||
|
serviceability = _set_serviceability_from_online_status(check_dic)
|
||||||
|
|
||||||
|
## Проверка онлайн-статуса сухих контактов
|
||||||
|
static func _check_dry_contact(unit_yau07_status: PackedByteArray, self_name: String) -> bool:
|
||||||
var bit_ip_config: Array = [0, 1, 2, 3, 4, 5, 6, 7]
|
var bit_ip_config: Array = [0, 1, 2, 3, 4, 5, 6, 7]
|
||||||
var ip_online: bool = true
|
var is_k_type: bool = self_name in ['уарэп-яу07-1к', 'уарэп-яу07-2к', 'уарэп-яу07-3к', 'уарэп-яу07-4к']
|
||||||
var is_k_type: bool = prd_name in ['уарэп-яу07-1к', 'уарэп-яу07-2к', 'уарэп-яу07-3к', 'уарэп-яу07-4к']
|
|
||||||
for bit in bit_ip_config:
|
for bit in bit_ip_config:
|
||||||
var status: bool = unit_yau07.status[27] >> bit & 1
|
if not is_k_type and bit in [5, 6]: # Игнорируем биты 5 и 6 для всех приборов, кроме типа "к"
|
||||||
# Игнорируем биты 5 и 6 для всех приборов, кроме типа "к"
|
|
||||||
if not is_k_type and (bit == 5 or bit == 6):
|
|
||||||
continue
|
continue
|
||||||
|
var status: bool = unit_yau07_status[27] >> bit & 1
|
||||||
if status:
|
if status:
|
||||||
ip_online = false
|
return false
|
||||||
|
return true
|
||||||
|
|
||||||
|
## Установка состояния обслуживания на основе результатов контроля
|
||||||
|
static func _set_serviceability_from_control_results(unit_ctrl: Object) -> int:
|
||||||
|
var control_results = unit_ctrl.get_control_results()
|
||||||
|
var result_dic = control_results.result_dic
|
||||||
|
const CRITICAL_DEVICES: Array = [
|
||||||
|
'fs_1', 'fs_2', 'fs_3', 'fs_4', 'fs_5', 'fs_6', 'fs_7',
|
||||||
|
'dkm_1', 'dkm_2', 'dkm_3', 'dkm_4', 'dkm_5', 'dkm_6', 'dkm_7',
|
||||||
|
'block_ip', 'dou_2', 'dou_3', 'dou_4', 'dou_5', 'dou_6', 'dou_7'
|
||||||
|
]
|
||||||
|
var all_ok: bool = true
|
||||||
|
for device_key in CRITICAL_DEVICES:
|
||||||
|
if result_dic.has(device_key) and result_dic[device_key] is bool:
|
||||||
|
if not result_dic[device_key]:
|
||||||
|
all_ok = false
|
||||||
|
break
|
||||||
|
return STATE_DEVICE.GOOD if all_ok else STATE_DEVICE.ERROR
|
||||||
|
|
||||||
|
## Установка состояния обслуживания на основе онлайн-статусов
|
||||||
|
static func _set_serviceability_from_online_status(check_dic: Dictionary) -> int:
|
||||||
|
var all_online: bool = true
|
||||||
|
for status in check_dic:
|
||||||
|
if not check_dic[status]:
|
||||||
|
all_online = false
|
||||||
break
|
break
|
||||||
|
return STATE_DEVICE.NONE if all_online else STATE_DEVICE.ERROR
|
||||||
var check_serviceability = ug_online and ukp_1_online and ukp_2_online and ems_g_online and ip_online
|
|
||||||
if serviceability != check_serviceability:
|
|
||||||
serviceability = check_serviceability
|
|
||||||
emit_signal('update_serviceability')
|
|
||||||
|
|
||||||
|
|
||||||
func execute_cmd():
|
func execute_cmd():
|
||||||
if not len(cmd_array): return
|
if not len(cmd_array): return
|
||||||
if unit_yau07.cmd_state != unit_yau07.CmdState.DONE: return
|
if unit_yau07.cmd_state != unit_yau07.CmdState.DONE: return
|
||||||
@@ -290,8 +345,6 @@ class PRD:
|
|||||||
func set_um(data_arr):
|
func set_um(data_arr):
|
||||||
cmd_array.append([unit_yau07.CmdCode.WRITE_ISA, data_arr])
|
cmd_array.append([unit_yau07.CmdCode.WRITE_ISA, data_arr])
|
||||||
|
|
||||||
func _on_control_completed(_unit_control_name: String)->void:
|
|
||||||
emit_signal('update_serviceability')
|
|
||||||
|
|
||||||
|
|
||||||
func _ready() -> void:
|
func _ready() -> void:
|
||||||
@@ -303,7 +356,6 @@ func _ready() -> void:
|
|||||||
var unit_control = TestPRD.new({'unit_prd': unit_prd}, new_prd.cmd_array)
|
var unit_control = TestPRD.new({'unit_prd': unit_prd}, new_prd.cmd_array)
|
||||||
add_child(unit_control)
|
add_child(unit_control)
|
||||||
new_prd.unit_control = unit_control
|
new_prd.unit_control = unit_control
|
||||||
unit_control.control_is_over.connect(new_prd._on_control_completed) # Прямая подписка на метод new_prd
|
|
||||||
for key in FS_PRD.keys():
|
for key in FS_PRD.keys():
|
||||||
var fs = Fs.new(key, FS_PRD[key][0])
|
var fs = Fs.new(key, FS_PRD[key][0])
|
||||||
fs_dict[key] = fs
|
fs_dict[key] = fs
|
||||||
|
|||||||
@@ -105,14 +105,14 @@ var _fs_rules: Array
|
|||||||
## Основные переменные класса
|
## Основные переменные класса
|
||||||
var config_manager: PRDConfigManager
|
var config_manager: PRDConfigManager
|
||||||
var unit_prd: Object
|
var unit_prd: Object
|
||||||
|
var control_results: Dictionary
|
||||||
|
var power_result: Dictionary
|
||||||
var constants: Dictionary
|
var constants: Dictionary
|
||||||
var pribor_config: Dictionary
|
var pribor_config: Dictionary
|
||||||
var fs_parameters: Dictionary
|
var fs_parameters: Dictionary
|
||||||
var block_ip_config: Dictionary
|
var block_ip_config: Dictionary
|
||||||
var block_kasseta_y5_config: Dictionary
|
var block_kasseta_y5_config: Dictionary
|
||||||
var temperature_um: Dictionary
|
var temperature_um: Dictionary
|
||||||
var control_results: Dictionary
|
|
||||||
var power_result: Dictionary
|
|
||||||
var ecms: Dictionary
|
var ecms: Dictionary
|
||||||
var power_for_litera: Dictionary
|
var power_for_litera: Dictionary
|
||||||
var self_name: String
|
var self_name: String
|
||||||
@@ -152,9 +152,10 @@ var current_fs_progress: float = 0.0
|
|||||||
var current_status: String = 'Ожидание запуска контроля'
|
var current_status: String = 'Ожидание запуска контроля'
|
||||||
|
|
||||||
## Сигналы класса
|
## Сигналы класса
|
||||||
signal control_is_over(device_name: String) # Когда контроль завершен
|
signal control_is_over(device_name: String) # Когда контроль завершен
|
||||||
signal status_updated(status_text: String) # Сигнал для обновления статуса
|
signal status_updated(status_text: String) # Сигнал для обновления статуса
|
||||||
signal update_progress(progress_value: float) # Обновление статуса выполнения контроля
|
signal control_results_updated(control_results: Dictionary) # Обновление результатов контроля
|
||||||
|
signal update_progress(progress_value: float) # Обновление статуса выполнения контроля
|
||||||
signal update_max_value_progress(max_progress_value: int) # Установка максимального значения для прогресс бара
|
signal update_max_value_progress(max_progress_value: int) # Установка максимального значения для прогресс бара
|
||||||
|
|
||||||
## Свойство прогресса с автоматическим emit сигнала
|
## Свойство прогресса с автоматическим emit сигнала
|
||||||
@@ -282,23 +283,19 @@ func _process(_delta: float) -> void:
|
|||||||
|
|
||||||
## Обработка данных от ЯУ-07
|
## Обработка данных от ЯУ-07
|
||||||
func on_data_received(unit_pribor: Object) -> void:
|
func on_data_received(unit_pribor: Object) -> void:
|
||||||
if not flags.in_control:
|
|
||||||
return
|
|
||||||
|
|
||||||
var status: PackedByteArray = unit_pribor.status
|
var status: PackedByteArray = unit_pribor.status
|
||||||
block_kasseta_y5_config = check_block_kasseta_y5(status, block_kasseta_y5_config, flags.no_trust_yau07)
|
|
||||||
if flags.no_trust_yau07:
|
|
||||||
return
|
|
||||||
|
|
||||||
socket_status_ems_g(status)
|
|
||||||
block_ip_config = check_block_ip(status, block_ip_config)
|
|
||||||
temperature_um = check_temperature_um(status)
|
temperature_um = check_temperature_um(status)
|
||||||
flags.temperature_ok = check_overheating(temperature_um)
|
flags.temperature_ok = check_overheating(temperature_um)
|
||||||
if machine_timer.is_stopped():
|
block_ip_config = check_block_ip(status, block_ip_config)
|
||||||
return
|
block_kasseta_y5_config = check_block_kasseta_y5(status, block_kasseta_y5_config, flags.no_trust_yau07)
|
||||||
|
_set_control_result('block_kasseta', on_y5_control_result(block_kasseta_y5_config))
|
||||||
|
_set_control_result('temperature', flags.temperature_ok)
|
||||||
|
_set_control_result('block_ip', on_dry_control_result(block_ip_config))
|
||||||
|
if not flags.in_control: return
|
||||||
|
if machine_timer.is_stopped(): return
|
||||||
|
if flags.no_trust_yau07: return
|
||||||
|
socket_status_ems_g(status)
|
||||||
_process_dkm_status(status)
|
_process_dkm_status(status)
|
||||||
|
|
||||||
# Формирование мощностей в литерах
|
# Формирование мощностей в литерах
|
||||||
if current_litera != 0:
|
if current_litera != 0:
|
||||||
var tek_litera: Dictionary = power_for_litera[current_litera]
|
var tek_litera: Dictionary = power_for_litera[current_litera]
|
||||||
@@ -361,10 +358,10 @@ func socket_status_ems_g(packet_form_yau_07: PackedByteArray) -> void:
|
|||||||
func state_control_machine() -> void:
|
func state_control_machine() -> void:
|
||||||
match state:
|
match state:
|
||||||
STATE_MACHINE.INIT: _handle_init_state()
|
STATE_MACHINE.INIT: _handle_init_state()
|
||||||
STATE_MACHINE.FS_TURN_ON: _handle_fs_turn_on_state()
|
|
||||||
STATE_MACHINE.FS_WORK: _handle_fs_work_state()
|
|
||||||
STATE_MACHINE.CHEK_KASSETA_Y5: _handle_check_kasseta_state() # Проверка Кассеты У5
|
STATE_MACHINE.CHEK_KASSETA_Y5: _handle_check_kasseta_state() # Проверка Кассеты У5
|
||||||
STATE_MACHINE.CHEK_BLOCK_IP: _handle_check_block_ip_state() # Проверка ИП
|
STATE_MACHINE.CHEK_BLOCK_IP: _handle_check_block_ip_state() # Проверка ИП
|
||||||
|
STATE_MACHINE.FS_TURN_ON: _handle_fs_turn_on_state()
|
||||||
|
STATE_MACHINE.FS_WORK: _handle_fs_work_state()
|
||||||
STATE_MACHINE.READ_ISA: _handle_read_isa_state()
|
STATE_MACHINE.READ_ISA: _handle_read_isa_state()
|
||||||
STATE_MACHINE.UG_SET_RAY_CTRL: _handle_ray_operation(6)
|
STATE_MACHINE.UG_SET_RAY_CTRL: _handle_ray_operation(6)
|
||||||
STATE_MACHINE.UG_SET_RAY: _handle_ray_operation() # Режим чтения
|
STATE_MACHINE.UG_SET_RAY: _handle_ray_operation() # Режим чтения
|
||||||
@@ -386,20 +383,19 @@ func _handle_init_state() -> void:
|
|||||||
if current_litera in [1, 2, 3, 4, 5, 6, 7]:
|
if current_litera in [1, 2, 3, 4, 5, 6, 7]:
|
||||||
_set_status('Инициализация ФС-%s' % current_litera)
|
_set_status('Инициализация ФС-%s' % current_litera)
|
||||||
if _get_current_ecm(): return
|
if _get_current_ecm(): return
|
||||||
state = STATE_MACHINE.FS_TURN_ON
|
state = STATE_MACHINE.CHEK_KASSETA_Y5
|
||||||
else:
|
else:
|
||||||
if _get_current_ecm(): return
|
if _get_current_ecm(): return
|
||||||
# Завершение контроля если литеры закончились
|
# Завершение контроля если литеры закончились
|
||||||
flags.control_is_over = true
|
flags.control_is_over = true
|
||||||
control_results = on_control_result(block_ip_config, control_results)
|
|
||||||
power_result = prep_power(power_for_litera, self_name)
|
power_result = prep_power(power_for_litera, self_name)
|
||||||
machine_timer.stop()
|
machine_timer.stop()
|
||||||
|
_set_control_result('is_over_control', flags.control_is_over)
|
||||||
|
|
||||||
var result: bool = true
|
var result: bool = true
|
||||||
for device in control_results.values():
|
for device in control_results.values():
|
||||||
if not device:
|
if not device:
|
||||||
result = false
|
result = false
|
||||||
|
|
||||||
_set_status('Прибор ПРД-%s: %s' % [self_name, ['неисправен', 'исправен'][int(result)]])
|
_set_status('Прибор ПРД-%s: %s' % [self_name, ['неисправен', 'исправен'][int(result)]])
|
||||||
emit_signal('control_is_over', self_name)
|
emit_signal('control_is_over', self_name)
|
||||||
|
|
||||||
@@ -429,11 +425,9 @@ static func take_ecm_id(ecm_dic: Dictionary, device_name: String, current_lit: i
|
|||||||
func _handle_fs_work_state() -> void:
|
func _handle_fs_work_state() -> void:
|
||||||
_set_status('Проверка связи сервиса КАПС РПБ')
|
_set_status('Проверка связи сервиса КАПС РПБ')
|
||||||
if not flags.ecm_is_comming: return
|
if not flags.ecm_is_comming: return
|
||||||
#print([self_name, current_ecm_key , ecms[current_ecm_key]])
|
|
||||||
# Если ЭМС доступна и ФС в порядке - запускаем таймер ЭМС
|
|
||||||
if current_ecm_key != 0 and flags.fs_status_ok:
|
if current_ecm_key != 0 and flags.fs_status_ok:
|
||||||
_set_status('Проверка ФС-%s' % current_litera)
|
_set_status('Проверка ФС-%s' % current_litera)
|
||||||
# Проверка завершения работы ФС
|
# Если ФС в порядке
|
||||||
if (current_litera == 2 and control_results.fs_2) or \
|
if (current_litera == 2 and control_results.fs_2) or \
|
||||||
(current_litera == 3 and control_results.fs_3) or \
|
(current_litera == 3 and control_results.fs_3) or \
|
||||||
(current_litera == 4 and control_results.fs_4) or \
|
(current_litera == 4 and control_results.fs_4) or \
|
||||||
@@ -443,9 +437,12 @@ func _handle_fs_work_state() -> void:
|
|||||||
(current_litera == 1 and control_results.fs_1):
|
(current_litera == 1 and control_results.fs_1):
|
||||||
if not block_kasseta_y5_config['yau07']:
|
if not block_kasseta_y5_config['yau07']:
|
||||||
_set_status('Ожидание данных от ЯУ-07...')
|
_set_status('Ожидание данных от ЯУ-07...')
|
||||||
return # НЕ переходим дальше пока нет данных
|
return # НЕ переходим дальше пока нет данных от сервиса МП550
|
||||||
|
|
||||||
state = STATE_MACHINE.CHEK_KASSETA_Y5
|
if flags.only_fs:
|
||||||
|
state = STATE_MACHINE.IN_EMS_STOP
|
||||||
|
else:
|
||||||
|
state = STATE_MACHINE.UG_SET_RAY_5 if current_litera == 1 else STATE_MACHINE.UG_SET_RAY_CTRL
|
||||||
|
|
||||||
|
|
||||||
## Обработка состояния CHECK_KASSETA - проверка кассеты Y5
|
## Обработка состояния CHECK_KASSETA - проверка кассеты Y5
|
||||||
@@ -463,9 +460,9 @@ func _handle_check_kasseta_state() -> void:
|
|||||||
_set_status('Перегрев УМ')
|
_set_status('Перегрев УМ')
|
||||||
state = STATE_MACHINE.IN_EMS_STOP
|
state = STATE_MACHINE.IN_EMS_STOP
|
||||||
else:
|
else:
|
||||||
#flag_only_fs = true
|
flags.flag_only_fs = true
|
||||||
_set_status('Касета У5: ERROR')
|
_set_status('Касета У5: ERROR, Проверка ФС.')
|
||||||
state = STATE_MACHINE.IN_EMS_STOP
|
state = STATE_MACHINE.FS_TURN_ON
|
||||||
|
|
||||||
|
|
||||||
## Обработка состояния CHECK_BLOCK_IP - проверка кассеты Y5
|
## Обработка состояния CHECK_BLOCK_IP - проверка кассеты Y5
|
||||||
@@ -475,13 +472,8 @@ func _handle_check_block_ip_state() -> void:
|
|||||||
for ip in block_ip_config:
|
for ip in block_ip_config:
|
||||||
if not block_ip_config[ip][1]:
|
if not block_ip_config[ip][1]:
|
||||||
block_ip = false
|
block_ip = false
|
||||||
if block_ip:
|
|
||||||
if current_litera == 1:
|
state = STATE_MACHINE.FS_TURN_ON if block_ip else STATE_MACHINE.IN_EMS_STOP
|
||||||
state = STATE_MACHINE.UG_SET_RAY_5
|
|
||||||
else:
|
|
||||||
state = STATE_MACHINE.UG_SET_RAY_CTRL
|
|
||||||
elif flags.only_fs:
|
|
||||||
state = STATE_MACHINE.IN_EMS_STOP
|
|
||||||
|
|
||||||
|
|
||||||
## Обработка состояния READ_ISA - чтение из УГ
|
## Обработка состояния READ_ISA - чтение из УГ
|
||||||
@@ -982,13 +974,21 @@ func get_control_results() -> Dictionary:
|
|||||||
|
|
||||||
#region STATIC_UTILITY_METHODS
|
#region STATIC_UTILITY_METHODS
|
||||||
## Итоговое заключение по результатам контроля всех ИП
|
## Итоговое заключение по результатам контроля всех ИП
|
||||||
static func on_control_result(ip_config: Dictionary, ctrl_results: Dictionary) -> Dictionary:
|
static func on_dry_control_result(ip_config: Dictionary) -> bool:
|
||||||
var all_blocks_ip_ok = true
|
var all_blocks_ip_ok = true
|
||||||
for block in ip_config:
|
for block in ip_config:
|
||||||
if not ip_config[block][1]:
|
if not ip_config[block][1]:
|
||||||
all_blocks_ip_ok = false
|
all_blocks_ip_ok = false
|
||||||
ctrl_results['block_ip'] = all_blocks_ip_ok
|
return all_blocks_ip_ok
|
||||||
return ctrl_results
|
|
||||||
|
|
||||||
|
## Итоговое заключение по результатам контроля кассеты у5
|
||||||
|
static func on_y5_control_result(block_kasseta: Dictionary) -> bool:
|
||||||
|
var all_blocks_y5_ok = true
|
||||||
|
for block in block_kasseta:
|
||||||
|
if not block_kasseta[block]:
|
||||||
|
all_blocks_y5_ok = false
|
||||||
|
return all_blocks_y5_ok
|
||||||
|
|
||||||
|
|
||||||
## Установка угла и аттенюации для УМ
|
## Установка угла и аттенюации для УМ
|
||||||
@@ -1072,13 +1072,18 @@ static func check_temperature_um(status_prd: PackedByteArray) -> Dictionary:
|
|||||||
temperature_ukp_1 = status_prd.decode_u16(Constants.TEMPERATURE_UKP_1 + 2 * i_temp)
|
temperature_ukp_1 = status_prd.decode_u16(Constants.TEMPERATURE_UKP_1 + 2 * i_temp)
|
||||||
tmp_1 = round(Constants.CONST_MIN_TEMP + (Constants.MAXIMUM_CODE_ADC - temperature_ukp_1) * TEMP + 3)
|
tmp_1 = round(Constants.CONST_MIN_TEMP + (Constants.MAXIMUM_CODE_ADC - temperature_ukp_1) * TEMP + 3)
|
||||||
return_dic_temp[arr_um[i_temp]] = tmp_1
|
return_dic_temp[arr_um[i_temp]] = tmp_1
|
||||||
|
else:
|
||||||
|
for i_temp in 8:
|
||||||
|
return_dic_temp[arr_um[i_temp]] = -999 # Заполняем нулями если УКП нет на связи
|
||||||
|
|
||||||
if ukp2_online:
|
if ukp2_online:
|
||||||
for i_temp in 8:
|
for i_temp in 8:
|
||||||
var temperature_ukp_2: int = status_prd.decode_u16(Constants.TEMPERATURE_UKP_2 + 2 * i_temp)
|
var temperature_ukp_2: int = status_prd.decode_u16(Constants.TEMPERATURE_UKP_2 + 2 * i_temp)
|
||||||
var tmp_2: int = round(Constants.CONST_MIN_TEMP + (Constants.MAXIMUM_CODE_ADC - temperature_ukp_2) * TEMP + 3)
|
var tmp_2: int = round(Constants.CONST_MIN_TEMP + (Constants.MAXIMUM_CODE_ADC - temperature_ukp_2) * TEMP + 3)
|
||||||
return_dic_temp[arr_um[i_temp+8]] = tmp_2
|
return_dic_temp[arr_um[i_temp+8]] = tmp_2
|
||||||
|
else:
|
||||||
|
for i_temp in 8:
|
||||||
|
return_dic_temp[arr_um[i_temp+8]] = -999 # Заполняем -999 если УКП нет на связи
|
||||||
return return_dic_temp
|
return return_dic_temp
|
||||||
|
|
||||||
|
|
||||||
@@ -1372,3 +1377,16 @@ func get_current_states() -> Dictionary:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
#region setters
|
||||||
|
func _set_control_result(key: String, status: bool)-> void:
|
||||||
|
var old_value = control_results.get(key)
|
||||||
|
if key == 'is_over_control' or old_value != status:
|
||||||
|
control_results[key] = status
|
||||||
|
emit_signal('control_results_updated', control_results)
|
||||||
|
print_debug('control_results_updated: ',[key, status])
|
||||||
|
|
||||||
|
|
||||||
|
func _get_control_result(key: String) -> bool:
|
||||||
|
return control_results[key]
|
||||||
|
#endregion
|
||||||
|
|||||||
@@ -309,7 +309,7 @@ func cleanup_invalid_selectors():
|
|||||||
keys_to_remove.append(key)
|
keys_to_remove.append(key)
|
||||||
for key in keys_to_remove:
|
for key in keys_to_remove:
|
||||||
nodes.erase(key)
|
nodes.erase(key)
|
||||||
print("Удален невалидный селектор: ", key)
|
print_debug("Удален невалидный селектор: ", key)
|
||||||
|
|
||||||
##
|
##
|
||||||
func clear_rows_selected():
|
func clear_rows_selected():
|
||||||
|
|||||||
Reference in New Issue
Block a user