Compare commits
3 Commits
b273a01bf5
...
423411cf94
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
423411cf94 | ||
|
|
8f2a6b031b | ||
|
|
2e5edc793e |
@@ -18,11 +18,12 @@ func _ready() -> void:
|
||||
for temp in power_amplifier:
|
||||
temp.value1 = -70
|
||||
# Подписываемся на сигналы
|
||||
signaller.conn(signaller.start_contol_device, Callable(self, '_on_start_control'))
|
||||
unit_prd_k.connect('control_is_over', Callable(self, 'on_press_device'))
|
||||
unit_prd_k.connect('status_updated', Callable(self, '_on_status_updated'))
|
||||
# Устанавливаем начальный статус
|
||||
_update_status_text(unit_prd_k.get_current_status())
|
||||
on_press_device()
|
||||
on_press_device(unit_prd_k.self_name)
|
||||
|
||||
|
||||
func _process(_delta: float) -> void:
|
||||
@@ -39,18 +40,17 @@ func _process(_delta: float) -> void:
|
||||
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'))
|
||||
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'))
|
||||
find_labels(self)
|
||||
on_press_device(unit_prd_k.self_name)
|
||||
|
||||
|
||||
static func set_default_state(default_reset_array_node: Array, power_amplifier_arr_node: Array) -> void:
|
||||
static func set_default_state(default_reset_array_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():
|
||||
@@ -76,27 +76,41 @@ static func power_fill(pow_dic: Dictionary, fs_result: Dictionary, power_amplifi
|
||||
for i_node_temperature in power_amplifier_arr_node:
|
||||
var powamp_meta: String = i_node_temperature.get_meta('um')
|
||||
var status = STATE_VAL.GOOD if pow_dic else STATE_VAL.NONE
|
||||
if not pow_dic.has(powamp_meta): return
|
||||
if not pow_dic.has(powamp_meta): continue
|
||||
# Проверки fs_result
|
||||
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' and not fs_result.fs_1: continue
|
||||
if powamp_meta in ['um_1', 'um_2', 'um_3', 'um_4', 'um_5', 'um_6'] and not fs_result.fs_6: continue
|
||||
if powamp_meta in ['um_9', 'um_10', 'um_11', 'um_12', 'um_13', 'um_14'] and not fs_result.fs_7: continue
|
||||
if powamp_meta == 'um_8':
|
||||
i_node_temperature.value0 = [pow_dic[powamp_meta][5]]
|
||||
status = STATE_VAL.ERROR if pow_dic[powamp_meta][5] < POWER_THRESHOLD else STATE_VAL.GOOD
|
||||
var power_value = pow_dic[powamp_meta][5]
|
||||
i_node_temperature.value0 = [power_value]
|
||||
# Проверка для um_8: если значение < 1 → STATE_VAL.NONE
|
||||
if power_value < 1:
|
||||
status = STATE_VAL.NONE
|
||||
else:
|
||||
status = STATE_VAL.ERROR if power_value < POWER_THRESHOLD else STATE_VAL.GOOD
|
||||
else:
|
||||
i_node_temperature.value0 = pow_dic[powamp_meta]
|
||||
# Проверки 3 значения = исправен
|
||||
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
|
||||
var power_array: Array = pow_dic[powamp_meta]
|
||||
i_node_temperature.value0 = power_array
|
||||
# Проверка: если ВСЕ значения в массиве < 1 → STATE_VAL.NONE
|
||||
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:
|
||||
status = STATE_VAL.NONE
|
||||
else:
|
||||
var count_above_threshold = 0
|
||||
for i_p in power_array:
|
||||
if i_p >= POWER_THRESHOLD:
|
||||
count_above_threshold += 1
|
||||
status = STATE_VAL.GOOD if count_above_threshold >= 3 else STATE_VAL.ERROR
|
||||
i_node_temperature.state = status
|
||||
|
||||
|
||||
func on_press_device() -> void:
|
||||
func on_press_device(_name_davice: String) -> 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')
|
||||
@@ -126,7 +140,7 @@ func on_press_device() -> void:
|
||||
|
||||
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_k: Dictionary = for_result_dic.block_kasseta_y5_config
|
||||
var nodes_y5: Array = for_result_dic.nodes_y5
|
||||
for node_y5 in nodes_y5:
|
||||
@@ -136,7 +150,9 @@ static func on_control_result(for_result_dic: Dictionary) -> void:
|
||||
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_k[meta_y5] else STATE_VAL.ERROR
|
||||
|
||||
# Проверяем состояние после установки
|
||||
if node_y5.state == STATE_VAL.ERROR:
|
||||
all_y5_good = false
|
||||
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')
|
||||
@@ -144,9 +160,13 @@ static func on_control_result(for_result_dic: Dictionary) -> void:
|
||||
power_supply.state = STATE_VAL.GOOD if block_ip_config_k[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, for_result_dic.power_amplifier)
|
||||
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:
|
||||
@@ -154,6 +174,7 @@ static func on_control_result(for_result_dic: Dictionary) -> void:
|
||||
if result_dic.has(fs_meta):
|
||||
f.state = result_dic[fs_meta]
|
||||
|
||||
if not all_y5_good: return
|
||||
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
|
||||
|
||||
|
||||
@@ -18,12 +18,12 @@ func _ready() -> void:
|
||||
for temp in power_amplifier:
|
||||
temp.value1 = -70
|
||||
# Подписываемся на сигналы
|
||||
signaller.conn(signaller.start_contol_device, Callable(self, '_on_start_control'))
|
||||
unit_prd_n.connect('control_is_over', Callable(self, 'on_press_device'))
|
||||
unit_prd_n.connect('status_updated', Callable(self, '_on_status_updated'))
|
||||
# Устанавливаем начальный статус
|
||||
_update_status_text(unit_prd_n.get_current_status())
|
||||
start_control()
|
||||
on_press_device()
|
||||
on_press_device(unit_prd_n.self_name)
|
||||
|
||||
|
||||
func _process(_delta: float) -> void:
|
||||
@@ -38,18 +38,19 @@ func _process(_delta: float) -> void:
|
||||
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'))
|
||||
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]
|
||||
find_labels(self)
|
||||
on_press_device(unit_prd_n.self_name)
|
||||
|
||||
|
||||
static func set_default_state(default_reset_array_node: Array, power_amplifier_arr_node: Array) -> void:
|
||||
static func set_default_state(default_reset_array_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():
|
||||
@@ -79,6 +80,18 @@ static func power_fill(pow_dic: Dictionary, fs_result: Dictionary, power_amplifi
|
||||
if powamp_meta in ['um_1', 'um_2', 'um_3', 'um_4', 'um_5', 'um_6'] and not fs_result.fs_2: return
|
||||
if powamp_meta in ['um_9', 'um_10', 'um_11', 'um_12', 'um_13', 'um_14'] and not fs_result.fs_3: 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:
|
||||
@@ -88,7 +101,7 @@ static func power_fill(pow_dic: Dictionary, fs_result: Dictionary, power_amplifi
|
||||
i_node_powapm.state = status
|
||||
|
||||
|
||||
func on_press_device() -> void:
|
||||
func on_press_device(_device_name: String) -> 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')
|
||||
@@ -116,7 +129,7 @@ func on_press_device() -> void:
|
||||
|
||||
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_n: Dictionary = for_result_dic.block_kasseta_y5_config
|
||||
var nodes_y5: Array = for_result_dic.nodes_y5
|
||||
for node_y5 in nodes_y5:
|
||||
@@ -126,7 +139,10 @@ static func on_control_result(for_result_dic: Dictionary) -> void:
|
||||
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_n[meta_y5] else STATE_VAL.ERROR
|
||||
|
||||
# Проверяем состояние после установки
|
||||
if node_y5.state == STATE_VAL.ERROR:
|
||||
all_y5_good = false
|
||||
|
||||
var block_ip_config_n: 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')
|
||||
@@ -134,9 +150,13 @@ static func on_control_result(for_result_dic: Dictionary) -> void:
|
||||
power_supply.state = STATE_VAL.GOOD if block_ip_config_n[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, for_result_dic.power_amplifier)
|
||||
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:
|
||||
@@ -144,6 +164,7 @@ static func on_control_result(for_result_dic: Dictionary) -> void:
|
||||
if result_dic.has(fs_meta):
|
||||
f.state = result_dic[fs_meta]
|
||||
|
||||
if not all_y5_good: return
|
||||
if result_dic.fs_2 == 1 and block_kasseta_y5_prd_config_n['yau07']:
|
||||
for_result_dic.module_fs_2.state = STATE_VAL.GOOD if result_dic.dkm_2 else STATE_VAL.ERROR
|
||||
for_result_dic.dou_2.state = STATE_VAL.GOOD if result_dic.dou_2 else STATE_VAL.ERROR
|
||||
|
||||
@@ -18,11 +18,12 @@ func _ready() -> void:
|
||||
for temp in power_amplifier:
|
||||
temp.value1 = -70
|
||||
# Подписываемся на сигналы
|
||||
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'))
|
||||
# Устанавливаем начальный статус
|
||||
_update_status_text(unit_prd_v.get_current_status())
|
||||
on_press_device()
|
||||
on_press_device(unit_prd_v.self_name)
|
||||
|
||||
|
||||
func _process(_delta: float) -> void:
|
||||
@@ -37,18 +38,19 @@ func _process(_delta: float) -> void:
|
||||
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'))
|
||||
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]
|
||||
find_labels(self)
|
||||
on_press_device(unit_prd_v.self_name)
|
||||
|
||||
|
||||
static func set_default_state(default_reset_array_node: Array, power_amplifier_arr_node: Array) -> void:
|
||||
static func set_default_state(default_reset_array_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():
|
||||
@@ -78,6 +80,17 @@ static func power_fill(pow_dic: Dictionary, fs_result: Dictionary, power_amplifi
|
||||
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:
|
||||
@@ -87,7 +100,7 @@ static func power_fill(pow_dic: Dictionary, fs_result: Dictionary, power_amplifi
|
||||
i_node_powapm.state = status
|
||||
|
||||
|
||||
func on_press_device() -> void:
|
||||
func on_press_device(_device_name: String) -> 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')
|
||||
@@ -115,7 +128,7 @@ func on_press_device() -> void:
|
||||
|
||||
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:
|
||||
@@ -125,7 +138,10 @@ static func on_control_result(for_result_dic: Dictionary) -> void:
|
||||
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')
|
||||
@@ -133,9 +149,13 @@ 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
|
||||
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, for_result_dic.power_amplifier)
|
||||
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:
|
||||
@@ -143,6 +163,7 @@ static func on_control_result(for_result_dic: Dictionary) -> void:
|
||||
if result_dic.has(fs_meta):
|
||||
f.state = result_dic[fs_meta]
|
||||
|
||||
if not all_y5_good: return
|
||||
if result_dic.fs_5 == 1 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
|
||||
|
||||
@@ -57,11 +57,12 @@ const PRIBORS_RES = \\
|
||||
|
||||
|
||||
var cur_pribor_node = null
|
||||
var check_ready_control: Dictionary = {}
|
||||
var device_wait_control_result:Array = ['1н', '2н', '3н', '4н', '1в', '2в', '3в', '4в', '1к', '2к', '3к', '4к',]
|
||||
|
||||
|
||||
func on_line_changed(u, conn_node, _pribor_meta): conn_node.set_val(u.online)
|
||||
func on_serv_changed(u, pribor_node, _pribor_meta): pribor_node.state = int(u.serviceability)
|
||||
var count_device_control_is_ready: int = 0
|
||||
|
||||
|
||||
func on_mode_changed():
|
||||
@@ -102,7 +103,7 @@ func _ready():
|
||||
prd_module.connect('update_serviceability', Callable(self, 'on_serviceability_changed').bind(prd_module, 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('control_is_over', Callable(self, 'on_control_is_over').bind(prd_module.unit_control))
|
||||
prd_module.unit_control.connect('control_is_over', Callable(self, 'on_control_is_over'))
|
||||
if item == 'уарэп-эмс':
|
||||
signaller.connect('update_uf_serviceability', Callable(self, 'on_update_uf_serviceability').bind(pribor_node))
|
||||
# Пиктограммы приборов, которые отображают состояние подключения только
|
||||
@@ -158,11 +159,37 @@ func on_pribor_press(pribor_path, header_text, pribor_node):
|
||||
add_child(pribor)
|
||||
|
||||
|
||||
enum STATE_DEVICE {
|
||||
NONE,
|
||||
GOOD,
|
||||
ERROR
|
||||
}
|
||||
|
||||
func on_serviceability_changed(prd_module: Object, prd_pribor:Node)-> void:
|
||||
if not prd_module.unit_yau07.online:
|
||||
prd_pribor.state = 0
|
||||
prd_pribor.state = STATE_DEVICE.NONE
|
||||
return
|
||||
prd_pribor.state = 1 if prd_module.serviceability else 2
|
||||
print([prd_pribor.get_meta('unit_name'), prd_module.unit_control.current_status])
|
||||
if prd_module.unit_control.flag_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:
|
||||
@@ -175,7 +202,9 @@ func _on_chk_show_functional_toggled(toggled_on: bool) -> void:
|
||||
|
||||
|
||||
func _on_control_prd_pressed() -> void:
|
||||
count_device_control_is_ready = 0
|
||||
check_ready_control = {}
|
||||
for pribor in get_tree().get_nodes_in_group('pribor_buttons'):
|
||||
pribor.state = STATE_DEVICE.NONE
|
||||
signaller.emit_signal('start_contol_device')
|
||||
|
||||
|
||||
@@ -188,18 +217,32 @@ func on_update_max_value_progress(max_value_progress: int, pribor_node: Node) ->
|
||||
pribor_node.progress_max_value = max_value_progress
|
||||
|
||||
|
||||
func on_control_is_over(pribor_node: Node) -> void:
|
||||
if pribor_node.self_name in ['1н', '2н', '3н', '4н', '1в', '2в', '3в', '4в', '1к', '2к', '3к', '4к',]:
|
||||
count_device_control_is_ready += 1
|
||||
if count_device_control_is_ready == 12:
|
||||
var time_dict = Time.get_datetime_dict_from_system()
|
||||
$control_prd.text = 'Контроль выполнен %02d:%02d/%02d.%02d' % [
|
||||
time_dict.hour,
|
||||
time_dict.minute,
|
||||
time_dict.day,
|
||||
time_dict.month]
|
||||
$control_prd.disabled = false
|
||||
$control_prd.tooltip_text = 'Нажать для повторного контроля '
|
||||
func on_control_is_over(pribor_name: String) -> void:
|
||||
if pribor_name in device_wait_control_result:
|
||||
check_ready_control[pribor_name] = true
|
||||
if not _is_all_control_complete(): return
|
||||
# После завершения контроля всех приборов
|
||||
var time_dict = Time.get_datetime_dict_from_system()
|
||||
$control_prd_button.text = 'Контроль выполнен %02d:%02d/%02d.%02d' % [
|
||||
time_dict.hour,
|
||||
time_dict.minute,
|
||||
time_dict.day,
|
||||
time_dict.month]
|
||||
$control_prd_button.disabled = false
|
||||
$control_prd_button.tooltip_text = 'Нажать для повторного контроля '
|
||||
|
||||
|
||||
func _is_all_control_complete() -> bool:
|
||||
for device in device_wait_control_result:
|
||||
if not check_ready_control.get(device, false):
|
||||
return false
|
||||
return true
|
||||
|
||||
|
||||
# TODO: Решить что делать с подключением
|
||||
func _on_gui_input(_event: InputEvent) -> void:
|
||||
pass
|
||||
#print_debug('Увидел подключение, но не нашел куда сигнал подключается')
|
||||
"
|
||||
|
||||
[sub_resource type="SpriteFrames" id="SpriteFrames_foasq"]
|
||||
@@ -452,7 +495,6 @@ patch_margin_right = 16
|
||||
patch_margin_bottom = 16
|
||||
|
||||
[node name="connect_pribor" type="AnimatedSprite2D" parent="pribor_prd_n_1"]
|
||||
visible = false
|
||||
light_mask = 3
|
||||
position = Vector2(35, -10)
|
||||
scale = Vector2(0.625, 0.625)
|
||||
@@ -988,7 +1030,6 @@ patch_margin_right = 16
|
||||
patch_margin_bottom = 16
|
||||
|
||||
[node name="connect_pribor" type="AnimatedSprite2D" parent="pribor_prd_n_2"]
|
||||
visible = false
|
||||
light_mask = 3
|
||||
position = Vector2(37, -10)
|
||||
scale = Vector2(0.625, 0.625)
|
||||
@@ -1881,9 +1922,9 @@ vertical_alignment = 1
|
||||
|
||||
[node name="chk_show_functional" type="CheckButton" parent="lbl_header"]
|
||||
layout_mode = 0
|
||||
offset_left = 972.0
|
||||
offset_left = 940.0
|
||||
offset_top = -1.0
|
||||
offset_right = 1351.0
|
||||
offset_right = 1319.0
|
||||
offset_bottom = 33.0
|
||||
theme_override_font_sizes/font_size = 22
|
||||
text = "Показть функциональную схему Э2"
|
||||
@@ -1943,7 +1984,7 @@ points = PackedVector2Array(-8, 0, 608, 0)
|
||||
width = 2.0
|
||||
default_color = Color(1, 1, 1, 0.352941)
|
||||
|
||||
[node name="control_prd" type="Button" parent="."]
|
||||
[node name="control_prd_button" type="Button" parent="."]
|
||||
layout_mode = 0
|
||||
offset_left = 1043.0
|
||||
offset_top = 64.0
|
||||
@@ -1983,4 +2024,4 @@ texture = ExtResource("22_1s34a")
|
||||
[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="lbl_header/chk_show_functional" to="." method="_on_chk_show_functional_toggled"]
|
||||
[connection signal="pressed" from="control_prd" to="." method="_on_control_prd_pressed"]
|
||||
[connection signal="pressed" from="control_prd_button" to="." method="_on_control_prd_pressed"]
|
||||
|
||||
161
scripts/prd-ctl-config.gd
Normal file
161
scripts/prd-ctl-config.gd
Normal file
@@ -0,0 +1,161 @@
|
||||
class_name PRDConfigManager
|
||||
extends RefCounted
|
||||
|
||||
## Менеджер конфигурации для системы контроля ПРД
|
||||
## Загружает и управляет настройками из JSON-конфигурации
|
||||
|
||||
#region CONSTANTS
|
||||
const CONFIG_PATH = "user://config/setting_prd_control.json"
|
||||
const DEFAULT_CONFIG_PATH = "res://config/setting_prd_control.json"
|
||||
#endregion
|
||||
|
||||
#region PRIVATE_VARIABLES
|
||||
var _config_data: Dictionary # Все данные конфигурации
|
||||
var _device_constants: Dictionary # Константы устройств
|
||||
var _base_configs: Dictionary # Базовые конфигурации
|
||||
var _device_configs: Dictionary # Конфигурации устройств
|
||||
var _data_indices: Dictionary # Индексы данных
|
||||
var _fs_keys: Dictionary # Ключи ФС (функциональных систем)
|
||||
var _temperature_constants: Dictionary # Константы температуры
|
||||
var _ems_input_bits_config: Dictionary # Конфигурация битов ввода ЭМС
|
||||
var _fs_rules: Array # Правила ФС
|
||||
|
||||
var _is_loaded: bool = false # Флаг успешной загрузки
|
||||
#endregion
|
||||
|
||||
#region INITIALIZATION
|
||||
func _init() -> void:
|
||||
"""Инициализация менеджера конфигурации"""
|
||||
_load_configuration()
|
||||
#endregion
|
||||
|
||||
#region PUBLIC_API
|
||||
## Проверяет, успешно ли загружена конфигурация
|
||||
func is_loaded() -> bool:
|
||||
return _is_loaded
|
||||
|
||||
## Возвращает все данные конфигурации
|
||||
func get_config_data() -> Dictionary:
|
||||
return _config_data.duplicate(true)
|
||||
|
||||
## Возвращает константы устройств
|
||||
func get_device_constants() -> Dictionary:
|
||||
return _device_constants.duplicate(true)
|
||||
|
||||
## Возвращает базовые конфигурации
|
||||
func get_base_configs() -> Dictionary:
|
||||
return _base_configs.duplicate(true)
|
||||
|
||||
## Возвращает конфигурации устройств
|
||||
func get_device_configs() -> Dictionary:
|
||||
return _device_configs.duplicate(true)
|
||||
|
||||
## Возвращает индексы данных
|
||||
func get_data_indices() -> Dictionary:
|
||||
return _data_indices.duplicate(true)
|
||||
|
||||
## Возвращает ключи ФС
|
||||
func get_fs_keys() -> Dictionary:
|
||||
return _fs_keys.duplicate(true)
|
||||
|
||||
## Возвращает константы температуры
|
||||
func get_temperature_constants() -> Dictionary:
|
||||
return _temperature_constants.duplicate(true)
|
||||
|
||||
## Возвращает конфигурацию битов ввода ЭМС
|
||||
func get_ems_input_bits_config() -> Dictionary:
|
||||
return _ems_input_bits_config.duplicate(true)
|
||||
|
||||
## Возвращает правила ФС
|
||||
func get_fs_rules() -> Array:
|
||||
return _fs_rules.duplicate(true)
|
||||
|
||||
## Возвращает индекс данных по ключу
|
||||
func get_data_index(key: String) -> int:
|
||||
return _data_indices.get(key, -1)
|
||||
#endregion
|
||||
|
||||
#region PRIVATE_METHODS
|
||||
## Загружает конфигурацию из JSON файла
|
||||
func _load_configuration() -> void:
|
||||
if not _ensure_config_exists():
|
||||
_is_loaded = false
|
||||
return
|
||||
|
||||
var config_file = FileAccess.open(CONFIG_PATH, FileAccess.READ)
|
||||
if config_file:
|
||||
var json_text = config_file.get_as_text()
|
||||
config_file.close()
|
||||
|
||||
var json = JSON.new()
|
||||
var parse_result = json.parse(json_text)
|
||||
if parse_result == OK:
|
||||
_config_data = json.data
|
||||
_parse_config_data()
|
||||
_is_loaded = true
|
||||
else:
|
||||
push_error("Ошибка разбора JSON конфигурации: " + json.get_error_message())
|
||||
_is_loaded = false
|
||||
else:
|
||||
push_error("Ошибка загрузки файла конфигурации: " + CONFIG_PATH)
|
||||
_is_loaded = false
|
||||
|
||||
|
||||
## Парсит данные конфигурации по секциям
|
||||
func _parse_config_data() -> void:
|
||||
_device_constants = _convert_numbers(_config_data.get("device_constants", {}))
|
||||
_base_configs = _convert_numbers(_config_data.get("base_configs", {}))
|
||||
_device_configs = _convert_numbers(_config_data.get("device_configs", {}))
|
||||
_data_indices = _convert_numbers(_config_data.get("data_indices", {}))
|
||||
_fs_keys = _convert_numbers(_config_data.get("fs_keys", {}))
|
||||
_temperature_constants = _convert_numbers(_config_data.get("temperature_constants", {}))
|
||||
_ems_input_bits_config = _convert_numbers(_config_data.get("ems_input_bits_config", {}))
|
||||
_fs_rules = _convert_numbers(_config_data.get("fs_rules", []))
|
||||
|
||||
|
||||
## Конвертирует числовые значения в правильные типы (float -> int если возможно)
|
||||
static func _convert_numbers(value):
|
||||
if value is float:
|
||||
# Конвертируем float в int если нет дробной части
|
||||
if value == int(value):
|
||||
return int(value)
|
||||
return value
|
||||
elif value is Dictionary:
|
||||
var result = {}
|
||||
for key in value:
|
||||
result[key] = _convert_numbers(value[key])
|
||||
return result
|
||||
elif value is Array:
|
||||
var result = []
|
||||
for item in value:
|
||||
result.append(_convert_numbers(item))
|
||||
return result
|
||||
else:
|
||||
return value
|
||||
|
||||
|
||||
## Обеспечивает существование файла конфигурации
|
||||
## Создает папку и копирует дефолтный файл если нужно
|
||||
func _ensure_config_exists() -> bool:
|
||||
# Создаем папку конфигурации если не существует
|
||||
DirAccess.make_dir_recursive_absolute("user://config")
|
||||
|
||||
# Если файл уже существует - все ок
|
||||
if FileAccess.file_exists(CONFIG_PATH):
|
||||
return true
|
||||
|
||||
# Если дефолтного файла нет - ошибка
|
||||
if not FileAccess.file_exists(DEFAULT_CONFIG_PATH):
|
||||
return false
|
||||
|
||||
# Копируем дефолтный конфиг в user директорию
|
||||
var src := FileAccess.open(DEFAULT_CONFIG_PATH, FileAccess.READ)
|
||||
var dst := FileAccess.open(CONFIG_PATH, FileAccess.WRITE)
|
||||
if src == null or dst == null:
|
||||
return false
|
||||
|
||||
dst.store_string(src.get_as_text())
|
||||
src.close()
|
||||
dst.close()
|
||||
return true
|
||||
#endregion
|
||||
1
scripts/prd-ctl-config.gd.uid
Normal file
1
scripts/prd-ctl-config.gd.uid
Normal file
@@ -0,0 +1 @@
|
||||
uid://bi7elq60squds
|
||||
@@ -277,6 +277,9 @@ class PRD:
|
||||
|
||||
func set_um(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:
|
||||
@@ -288,6 +291,7 @@ func _ready() -> void:
|
||||
var unit_control = TestPRD.new({'unit_prd': unit_prd}, new_prd.cmd_array)
|
||||
add_child(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():
|
||||
var fs = Fs.new(key, FS_PRD[key][0])
|
||||
fs_dict[key] = fs
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user