Files
uarep-ctl/scenes/pribor-prd-v/pribor-prd-v.gd

203 lines
8.9 KiB
GDScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

@tool
extends 'res://scenes/контроль/прибор.gd'
enum STATE_VAL { NONE = 0, GOOD = 1, ERROR = 2 }
# Основные переменные
var unit_prd_v: Object
var ctrl_pos = 70
func _ready() -> void:
if Engine.is_editor_hint():
return
var unit_name = get_meta('unit_name')[0]
var prd_v_module = prd.prd_dict[unit_name]
unit_prd_v = prd_v_module.unit_control
var power_amplifier: Array = get_tree().get_nodes_in_group('power_amplifier')
for temp in power_amplifier:
temp.value1 = -100
# Подписываемся на сигналы
signaller.conn(signaller.start_contol_device, Callable(self, '_on_start_control'))
unit_prd_v.connect('control_is_over', Callable(self, 'on_press_device'))
unit_prd_v.connect('status_updated', Callable(self, '_on_status_updated'))
find_labels(self)
# Устанавливаем начальный статус
_update_status_text(unit_prd_v.get_current_status())
on_press_device(unit_prd_v.self_name)
func _process(_delta: float) -> void:
if Engine.is_editor_hint():
return
$input_0.set_frame(unit_prd_v.ems_g_sock_dic.ems_input_1)
$input_1.set_frame(unit_prd_v.ems_g_sock_dic.ems_input_2)
$output_0.set_frame(unit_prd_v.ems_g_sock_dic.ems_output_1)
$output_1.set_frame(unit_prd_v.ems_g_sock_dic.ems_output_2)
func _on_start_control() -> void:
set_default_state(get_tree().get_nodes_in_group('default_reset'))
set_default_state(get_tree().get_nodes_in_group('power_amplifier'))
for um in get_tree().get_nodes_in_group('power_amplifier'):
um.value0 = [0, 0, 0, 0, 0, 0]
static func set_default_state(default_reset_array_node: Array) -> void:
for group in default_reset_array_node:
group.state = STATE_VAL.NONE
func _enter_tree() -> void:
if Engine.is_editor_hint():
return
if unit_prd_v:
_update_status_text(unit_prd_v.get_current_status())
static func temperature_fill(temperature_arr_node: Array, temperature_dic: Dictionary)->void:
for i_node_temperature in temperature_arr_node:
var temperature_meta: String = i_node_temperature.get_meta('um')
if not temperature_dic.has(temperature_meta): return
i_node_temperature.value1 = temperature_dic[temperature_meta] if temperature_dic[temperature_meta] < 361 else -40
static func power_fill(pow_dic: Dictionary, fs_result: Dictionary, power_amplifier_arr_node: Array, POWER_THRESHOLD: int) -> void:
for i_node_powapm in power_amplifier_arr_node:
var powamp_meta: String = i_node_powapm.get_meta('um')
var status = STATE_VAL.GOOD if pow_dic else STATE_VAL.NONE
if not pow_dic.has(powamp_meta): return
if powamp_meta in ['um_1', 'um_2', 'um_3', 'um_4', 'um_5', 'um_6'] and not fs_result.fs_4: return
if powamp_meta in ['um_9', 'um_10', 'um_11', 'um_12', 'um_13', 'um_14'] and not fs_result.fs_5: return
i_node_powapm.value0 = pow_dic[powamp_meta]
# Проверка: если ВСЕ значения в массиве < 1 → STATE_VAL.NONE
var power_array: Array = pow_dic[powamp_meta]
var all_below_one: bool = true
for i_p in power_array:
if i_p >= 1:
all_below_one = false
break
if all_below_one:
i_node_powapm.state = STATE_VAL.NONE
continue
var count_above_threshold = 0
for i_p in pow_dic[powamp_meta]:
if i_p >= POWER_THRESHOLD:
count_above_threshold += 1
status = STATE_VAL.GOOD if count_above_threshold >= 3 else STATE_VAL.ERROR
i_node_powapm.state = status
func on_press_device(_device_name: String) -> void:
if not is_inside_tree(): return
var nodes_y5: Array = get_tree().get_nodes_in_group('y-5')
var node_ip_power_arr: Array = get_tree().get_nodes_in_group('power_supply')
var fs_nodes: Array = get_tree().get_nodes_in_group('fs_group')
var power_amplifier: Array = get_tree().get_nodes_in_group('power_amplifier')
var default_reset_array_node: Array = get_tree().get_nodes_in_group('default_reset')
var module_fs_4: Node = $kasseta_FS_VD/ref_A6
var dou_4: Node = $dou4_A5
var module_fs_5: Node = $kasseta_FS_VD/ref_A2
var dou_5: Node = $dou5_A6
var control_data = unit_prd_v.get_control_results()
var for_control_result: Dictionary = {
'nodes_y5': nodes_y5,
'node_ip_power_arr': node_ip_power_arr,
'fs_nodes': fs_nodes,
'power_amplifier': power_amplifier,
'default_reset_array_node': default_reset_array_node,
'module_fs_4': module_fs_4,
'dou_4': dou_4,
'module_fs_5': module_fs_5,
'dou_5': dou_5,
}
for_control_result.merge(control_data, true)
on_control_result(for_control_result)
static func on_control_result(for_result_dic: Dictionary) -> void:
temperature_fill(for_result_dic.power_amplifier, for_result_dic.temperature_um)
var all_y5_good: bool = true
var block_kasseta_y5_prd_config_v: Dictionary = for_result_dic.block_kasseta_y5_config
var nodes_y5: Array = for_result_dic.nodes_y5
for node_y5 in nodes_y5:
var meta_y5 = node_y5.get_meta('y5')
if block_kasseta_y5_prd_config_v.has(meta_y5):
if not block_kasseta_y5_prd_config_v.yau07:
node_y5.state = STATE_VAL.ERROR if meta_y5 == 'yau07' else STATE_VAL.NONE
else:
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:
all_y5_good = false
var block_ip_config_v: Dictionary = for_result_dic.block_ip_config
for power_supply in for_result_dic.node_ip_power_arr:
var meta_ip = power_supply.get_meta('ip')
if block_ip_config_v.has(meta_ip) and block_kasseta_y5_prd_config_v.ug and block_kasseta_y5_prd_config_v.yau07:
power_supply.state = STATE_VAL.GOOD if block_ip_config_v[meta_ip][1] else STATE_VAL.ERROR
else:
power_supply.state = STATE_VAL.NONE
if power_supply.state == STATE_VAL.ERROR:
all_y5_good = false
if not for_result_dic.control_is_over:
set_default_state(for_result_dic.default_reset_array_node)
set_default_state(for_result_dic.power_amplifier)
return
var result_dic: Dictionary = for_result_dic.result_dic
for f in for_result_dic.fs_nodes:
var fs_meta: String = f.get_meta('fs')
if result_dic.has(fs_meta):
f.state = result_dic[fs_meta]
if not all_y5_good: return
var fs_5 = true if int(result_dic.fs_5) == 1 else false
if fs_5 and block_kasseta_y5_prd_config_v['yau07']:
for_result_dic.module_fs_5.state = STATE_VAL.GOOD if result_dic.dkm_5 else STATE_VAL.ERROR
for_result_dic.dou_5.state = STATE_VAL.GOOD if result_dic.dou_5 else STATE_VAL.ERROR
var fs_4 = true if int(result_dic.fs_4) == 1 else false
if fs_4 and block_kasseta_y5_prd_config_v['yau07']:
for_result_dic.module_fs_4.state = STATE_VAL.GOOD if result_dic.dkm_4 else STATE_VAL.ERROR
for_result_dic.dou_4.state = STATE_VAL.GOOD if result_dic.dou_4 else STATE_VAL.ERROR
if block_kasseta_y5_prd_config_v['yau07']:
power_fill(for_result_dic.power_dic, for_result_dic.result_dic, for_result_dic.power_amplifier, for_result_dic.POWER_THRESHOLD)
func find_labels(node1: Node):
if node1 is Label:
if node1.name in ['lbl_rname', 'rname']:
if not node1.has_meta('tooltip_set'):
ctrl_pos += 1
var box_number = ceili(float(ctrl_pos) / 10.0)
var position_number = ctrl_pos % 10
if position_number == 0:
position_number = 10
node1.tooltip_text = 'Ящик - %d, Позиция - %d' % [box_number, position_number]
node1.mouse_filter = Control.MOUSE_FILTER_STOP
node1.set_meta('tooltip_set', true)
for child in node1.get_children():
find_labels(child)
func _on_status_updated(status_text: String) -> void:
_update_status_text(status_text)
on_press_device(unit_prd_v.self_name)
func _update_status_text(text: String) -> void:
$control_result.text = text
if 'Ошибка' in text or 'неисправен' in text:
$control_result.add_theme_color_override('font_color', Color.RED)
log.message(Logger.INFO, 'Прибор ПРД-%s неисправен' % [unit_prd_v.self_name])
elif 'Ограничена' in text or 'Предупреждение' in text:
$control_result.add_theme_color_override('font_color', Color.YELLOW)
elif 'исправен' in text or 'завершён' in text:
$control_result.add_theme_color_override('font_color', Color.GREEN)
log.message(Logger.INFO, 'Прибор ПРД-%s исправен' % [unit_prd_v.self_name])
else:
$control_result.add_theme_color_override('font_color', Color.WHITE)