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

196 lines
8.5 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_k: Object
var ctrl_pos = 30
func _ready() -> void:
if Engine.is_editor_hint():
return
var unit_name = get_meta('unit_name')[0]
var prd_k_module = prd.prd_dict[unit_name]
unit_prd_k = prd_k_module.unit_control
var power_amplifier: Array = get_tree().get_nodes_in_group('power_amplifier')
for temp in power_amplifier:
temp.value1 = -70
unit_prd_k.connect('control_is_over', Callable(self, 'on_press_device'))
#unit_prd_k.power_amplify = power_amplifier
on_press_device()
func _process(_delta: float) -> void:
if Engine.is_editor_hint():
return
set_frame($input_0, unit_prd_k.ems_input_1)
set_frame($input_1, unit_prd_k.ems_input_2)
set_frame($input_2, unit_prd_k.ems_input_lit_1)
set_frame($output_0, unit_prd_k.ems_output_1)
set_frame($output_1, unit_prd_k.ems_output_2)
set_frame($output_2, unit_prd_k.ems_output_lit_1)
func set_frame(node_frame: Node, val: int): node_frame.set_frame(val)
func start_control() -> void:
set_default_state(get_tree().get_nodes_in_group('default_reset'), get_tree().get_nodes_in_group('power_amplifier'))
find_labels(self)
static func set_default_state(default_reset_array_node: Array, power_amplifier_arr_node: Array) -> void:
for group in default_reset_array_node:
group.state = STATE_VAL.NONE
for group in power_amplifier_arr_node:
group.state = STATE_VAL.NONE
func _enter_tree() -> void:
if Engine.is_editor_hint():
return
$control_result.text = 'Ожидается запуск контроля ...' # TODO: Необходимо сделать пулл сообщений
$control_result.add_theme_color_override('font_color', Color.ALICE_BLUE)
func _exit_tree() -> void:
if Engine.is_editor_hint():
return
#prd_k_module.cmd_array.append([unit_prd_k.CmdCode.WRITE_ISA, [constants_k.ADDR_UG_LITERA_1, ug_work_1, constants_k.ADDR_UG_LITERA_2, ug_work_2, constants_k.ADDR_UG_LITERA_3, ug_work_3]])
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]
static func power_fill(pow_dic: Dictionary, fs_result: Dictionary, power_amplifier: Array, POWER_THRESHOLD: int) -> void:
for i_powapm in power_amplifier:
var powamp_meta: String = i_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 pow_dic:
if not pow_dic.has(powamp_meta):
break
if pow_dic[powamp_meta].size() < 6:
status = STATE_VAL.ERROR
else:
if powamp_meta == 'um_8' and not fs_result.fs_1: return
if powamp_meta in ['um_1', 'um_2', 'um_3', 'um_4', 'um_5', 'um_6'] and not fs_result.fs_6: return
if powamp_meta in ['um_9', 'um_10', 'um_11', 'um_12', 'um_13', 'um_14'] and not fs_result.fs_7: return
if powamp_meta == 'um_8':
i_powapm.value0 = [pow_dic[powamp_meta][5]]
if pow_dic[powamp_meta][5] < POWER_THRESHOLD:
status = STATE_VAL.ERROR
else:
i_powapm.value0 = pow_dic[powamp_meta]
for i_p in pow_dic[powamp_meta]:
if i_p < POWER_THRESHOLD:
status = STATE_VAL.ERROR
i_powapm.state = status
func on_press_device() -> void:
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_1: Node = $kasseta_fs_kd/ref_A2
var module_fs_6: Node = $kasseta_fs_kd/ref_A4
var dou_6: Node = $dou6_A7
var module_fs_7: Node = $kasseta_fs_kd/ref_A7
var dou_7: Node = $dou7_A8
var for_control_result: Dictionary = {
'control_is_over': unit_prd_k.flag_control_is_over,
'result_dic': unit_prd_k.control_results,
'power_dic': unit_prd_k.power_result,
'block_kasseta_y5_config': unit_prd_k.block_kasseta_y5_config,
'block_ip_config': unit_prd_k.block_ip_config,
'temperature_um' : unit_prd_k.temperature_um,
'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,
'POWER_THRESHOLD': unit_prd_k.constants.POWER_THRESHOLD,
'name_prd': unit_prd_k.self_name,
'module_fs_1': module_fs_1,
'module_fs_6': module_fs_6,
'dou_6': dou_6,
'module_fs_7': module_fs_7,
'dou_7': dou_7,
}
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 block_kasseta_y5_prd_config_k: 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_k.has(meta_y5):
if not block_kasseta_y5_prd_config_k['yau07']:
node_y5.state = STATE_VAL.ERROR if meta_y5 == 'yau07' else STATE_VAL.NONE
break
node_y5.state = STATE_VAL.GOOD if block_kasseta_y5_prd_config_k[meta_y5] else STATE_VAL.ERROR
var block_ip_config_k: 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_k.has(meta_ip) and block_kasseta_y5_prd_config_k.ug:
power_supply.state = STATE_VAL.GOOD if block_ip_config_k[meta_ip][1] else STATE_VAL.ERROR
if not for_result_dic.control_is_over:
set_default_state(for_result_dic.default_reset_array_node, 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 result_dic.fs_1 == 1 and block_kasseta_y5_prd_config_k['yau07']:
for_result_dic.module_fs_1.state = STATE_VAL.GOOD if result_dic.dkm_1 else STATE_VAL.ERROR
if result_dic.fs_6 == 1 and block_kasseta_y5_prd_config_k['yau07']:
for_result_dic.module_fs_6.state = STATE_VAL.GOOD if result_dic.dkm_6 else STATE_VAL.ERROR
for_result_dic.dou_6.state = STATE_VAL.GOOD if result_dic.dou_6 else STATE_VAL.ERROR
if result_dic.fs_7 == 1 and block_kasseta_y5_prd_config_k['yau07']:
for_result_dic.module_fs_7.state = STATE_VAL.GOOD if result_dic.dkm_7 else STATE_VAL.ERROR
for_result_dic.dou_7.state = STATE_VAL.GOOD if result_dic.dou_7 else STATE_VAL.ERROR
if block_kasseta_y5_prd_config_k['yau07']:
power_fill(for_result_dic.power_dic, for_result_dic.result_dic, for_result_dic.power_amplifier, for_result_dic.POWER_THRESHOLD)
var result: bool = true
for device in result_dic.values():
if not device:
result = false
log.message(Logger.INFO, 'Прибор ПРД-%s %s' % [for_result_dic.name_prd, ['неисправен', 'исправен'][int(result)]])
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)