From a8b085a514d89da060b68120f4b7214f73293521 Mon Sep 17 00:00:00 2001
From: TotMaxim
Date: Tue, 18 Nov 2025 19:59:45 +0300
Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D1=80=D0=B0=D0=B1=D0=BE=D1=82?=
=?UTF-8?q?=D0=BA=D0=B0=20=D0=BF=D1=80=D0=BE=D0=B2=D0=B5=D1=80=D0=BA=D0=B8?=
=?UTF-8?q?=20=D1=8F=D1=83=2007=D0=B1=20=D0=B8=20=D0=BA=D0=BE=D1=80=D1=80?=
=?UTF-8?q?=D0=B5=D0=BA=D1=82=D0=B8=D1=80=D0=BE=D0=B2=D0=BA=D0=B0=20=D1=82?=
=?UTF-8?q?=D0=B5=D0=BC=D0=BF=D0=B5=D1=80=D0=B0=D1=82=D1=83=D1=80=20=D1=83?=
=?UTF-8?q?=D0=BC=20=D0=B2=20=D0=BA=D0=BE=D0=BD=D1=82=D1=80=D0=BE=D0=BB?=
=?UTF-8?q?=D0=B5?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
scenes/pribor-prd-k/pribor-prd-k.gd | 14 ++++++-----
scenes/pribor-prd-n/pribor-prd-n.gd | 16 +++++++------
scenes/pribor-prd-v/pribor-prd-v.gd | 16 ++++++++-----
scenes/контроль/control_prd.gd | 1 +
scenes/контроль/блок-в.tscn | 6 ++---
scenes/контроль/блок-к.tscn | 8 +++----
scenes/контроль/контроль.tscn | 21 +++++++++++++++--
scripts/pribor-prd.gd | 36 +++++++++++++++++++++--------
8 files changed, 81 insertions(+), 37 deletions(-)
diff --git a/scenes/pribor-prd-k/pribor-prd-k.gd b/scenes/pribor-prd-k/pribor-prd-k.gd
index 4990050b..6cc10961 100644
--- a/scenes/pribor-prd-k/pribor-prd-k.gd
+++ b/scenes/pribor-prd-k/pribor-prd-k.gd
@@ -69,7 +69,7 @@ static func temperature_fill(temperature_arr_node: Array, temperature_dic: Dicti
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]
+ 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:
@@ -114,8 +114,6 @@ func on_press_device() -> void:
'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,
@@ -136,14 +134,16 @@ static func on_control_result(for_result_dic: Dictionary) -> void:
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
+ else:
+ 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:
+ if block_ip_config_k.has(meta_ip) and block_kasseta_y5_prd_config_k.ug and block_kasseta_y5_prd_config_k.yau07:
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 not for_result_dic.control_is_over:
set_default_state(for_result_dic.default_reset_array_node, for_result_dic.power_amplifier)
@@ -200,3 +200,5 @@ func _update_status_text(text: String) -> void:
elif "исправен" in text or "завершён" in text:
$control_result.add_theme_color_override('font_color', Color.GREEN)
log.message(Logger.INFO, 'Прибор ПРД-%s исправен' % [unit_prd_k.self_name])
+ else:
+ $control_result.add_theme_color_override('font_color', Color.WHITE)
diff --git a/scenes/pribor-prd-n/pribor-prd-n.gd b/scenes/pribor-prd-n/pribor-prd-n.gd
index efefe61d..1f546d49 100644
--- a/scenes/pribor-prd-n/pribor-prd-n.gd
+++ b/scenes/pribor-prd-n/pribor-prd-n.gd
@@ -68,7 +68,7 @@ static func temperature_fill(temperature_arr_node: Array, temperature_dic: Dicti
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]
+ 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:
@@ -105,8 +105,6 @@ func on_press_device() -> void:
'fs_nodes': fs_nodes,
'power_amplifier': power_amplifier_arr_node,
'default_reset_array_node': default_reset_array_node,
- 'POWER_THRESHOLD': unit_prd_n.constants.POWER_THRESHOLD,
- 'name_prd': unit_prd_n.self_name,
'module_fs_2': module_fs_2,
'dou_2': dou_2,
'module_fs_3': module_fs_3,
@@ -124,16 +122,18 @@ static func on_control_result(for_result_dic: Dictionary) -> void:
for node_y5 in nodes_y5:
var meta_y5 = node_y5.get_meta('y5')
if block_kasseta_y5_prd_config_n.has(meta_y5):
- if not block_kasseta_y5_prd_config_n['yau07']:
+ if not block_kasseta_y5_prd_config_n.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_n[meta_y5] else STATE_VAL.ERROR
+ else:
+ node_y5.state = STATE_VAL.GOOD if block_kasseta_y5_prd_config_n[meta_y5] else STATE_VAL.ERROR
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')
- if block_ip_config_n.has(meta_ip) and block_kasseta_y5_prd_config_n.ug:
+ if block_ip_config_n.has(meta_ip) and block_kasseta_y5_prd_config_n.ug and block_kasseta_y5_prd_config_n.yau07:
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 not for_result_dic.control_is_over:
set_default_state(for_result_dic.default_reset_array_node, for_result_dic.power_amplifier)
@@ -187,3 +187,5 @@ func _update_status_text(text: String) -> void:
elif "исправен" in text or "завершён" in text:
$control_result.add_theme_color_override('font_color', Color.GREEN)
log.message(Logger.INFO, 'Прибор ПРД-%s исправен' % [unit_prd_n.self_name])
+ else:
+ $control_result.add_theme_color_override('font_color', Color.WHITE)
diff --git a/scenes/pribor-prd-v/pribor-prd-v.gd b/scenes/pribor-prd-v/pribor-prd-v.gd
index 432ad645..7e965f06 100644
--- a/scenes/pribor-prd-v/pribor-prd-v.gd
+++ b/scenes/pribor-prd-v/pribor-prd-v.gd
@@ -67,7 +67,7 @@ static func temperature_fill(temperature_arr_node: Array, temperature_dic: Dicti
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]
+ 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:
@@ -121,16 +121,18 @@ static func on_control_result(for_result_dic: Dictionary) -> void:
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 block_kasseta_y5_prd_config_v['yau07'] == false:
+ if not block_kasseta_y5_prd_config_v.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_v[meta_y5] else STATE_VAL.ERROR
-
+ else:
+ node_y5.state = STATE_VAL.GOOD if block_kasseta_y5_prd_config_v[meta_y5] else STATE_VAL.ERROR
+
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:
+ 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 not for_result_dic.control_is_over:
set_default_state(for_result_dic.default_reset_array_node, for_result_dic.power_amplifier)
@@ -184,3 +186,5 @@ func _update_status_text(text: String) -> void:
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)
diff --git a/scenes/контроль/control_prd.gd b/scenes/контроль/control_prd.gd
index 1d1baaf7..08306016 100644
--- a/scenes/контроль/control_prd.gd
+++ b/scenes/контроль/control_prd.gd
@@ -68,6 +68,7 @@ func _stop_pulse():
pulsing = false
disabled = false
text = original_text
+ tooltip_text = ''
func _on_status_change():
diff --git a/scenes/контроль/блок-в.tscn b/scenes/контроль/блок-в.tscn
index 1b9b7f1e..69bb8d25 100644
--- a/scenes/контроль/блок-в.tscn
+++ b/scenes/контроль/блок-в.tscn
@@ -275,7 +275,7 @@ textures = [ExtResource("1_n1aqt"), ExtResource("2_rim3u"), ExtResource("3_3w8fg
value0 = [20.0, 30.0, 40.0, 50.0, 60.0, 70.0]
min_value1 = -40.0
max_value0 = 1400.0
-max_value1 = 60.0
+max_value1 = 55.0
step0 = 1.0
step1 = 1.0
value_name0 = "P,%"
@@ -476,10 +476,10 @@ size_flags_horizontal = 3
size_flags_vertical = 3
tooltip_text = "
Текущее: 0.00
-Диапазон: -40.00…70.00"
+Диапазон: -40.00…60.00"
mouse_filter = 0
min_value = -40.0
-max_value = 60.0
+max_value = 55.0
fill_mode = 3
nine_patch_stretch = true
stretch_margin_left = 8
diff --git a/scenes/контроль/блок-к.tscn b/scenes/контроль/блок-к.tscn
index be62235e..3ab9579d 100644
--- a/scenes/контроль/блок-к.tscn
+++ b/scenes/контроль/блок-к.tscn
@@ -35,7 +35,7 @@ signal pressed(control: PanelContainer)
if not is_inside_tree():
return
$margin/vbox/grid1/level7.value = v
- $margin/vbox/grid1/level7.tint_progress = Color.RED if v >= 70 else Color.GOLD if v >= 60 else Color.WHITE
+ $margin/vbox/grid1/level7.tint_progress = Color.RED if v >= 50 else Color.GOLD if v >= 40 else Color.WHITE
@export var min_value0: float:
@@ -262,7 +262,7 @@ value0 = [20.0, 30.0, 40.0, 50.0, 60.0, 70.0]
value1 = -40.0
min_value1 = -40.0
max_value0 = 1400.0
-max_value1 = 60.0
+max_value1 = 55.0
step0 = 1.0
step1 = 1.0
value_name0 = "P,%"
@@ -366,10 +366,10 @@ size_flags_horizontal = 3
size_flags_vertical = 3
tooltip_text = "
Текущее: -40.00
-Диапазон: -40.00…70.00"
+Диапазон: -40.00…60.00"
mouse_filter = 0
min_value = -40.0
-max_value = 60.0
+max_value = 55.0
value = -40.0
fill_mode = 3
nine_patch_stretch = true
diff --git a/scenes/контроль/контроль.tscn b/scenes/контроль/контроль.tscn
index 14e10a0c..a2512eb6 100644
--- a/scenes/контроль/контроль.tscn
+++ b/scenes/контроль/контроль.tscn
@@ -50,6 +50,7 @@ const PRIBORS_RES = \\
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():
@@ -89,6 +90,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))
if item == 'уарэп-эмс':
signaller.connect('update_uf_serviceability', Callable(self, 'on_update_uf_serviceability').bind(pribor_node))
# Пиктограммы приборов, которые отображают состояние подключения только
@@ -152,6 +154,7 @@ func on_update_uf_serviceability(uf_serviceaability: bool, uf_pribor: Node)-> vo
func _on_control_prd_pressed() -> void:
+ count_device_control_is_ready = 0
signaller.emit_signal('start_contol_device')
@@ -162,6 +165,20 @@ func on_update_progress(value_progress: float, pribor_node: Node) -> void:
func on_update_max_value_progress(max_value_progress: int, pribor_node: Node) -> void:
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 = 'Нажать для повторного контроля '
"
[sub_resource type="SpriteFrames" id="SpriteFrames_foasq"]
@@ -1683,9 +1700,9 @@ default_color = Color(1, 1, 1, 0.352941)
[node name="control_prd" type="Button" parent="."]
layout_mode = 0
-offset_left = 1101.0
+offset_left = 1043.0
offset_top = 64.0
-offset_right = 1326.0
+offset_right = 1390.0
offset_bottom = 104.0
focus_mode = 0
text = "Запуск контроля"
diff --git a/scripts/pribor-prd.gd b/scripts/pribor-prd.gd
index f82e7d97..5349de52 100644
--- a/scripts/pribor-prd.gd
+++ b/scripts/pribor-prd.gd
@@ -84,6 +84,8 @@ var flag_si_fs_input: bool = false
var flag_si_fs_output: bool = false
var flag_in_control: bool = false
var flag_control_is_over: bool = false
+var flag_no_trust_yau07: bool = false
+var flag_only_fs: bool = false
var unit_prd: Object
var control_timer: Timer = Timer.new()
var ems_6666_timer: Timer = Timer.new()
@@ -222,8 +224,9 @@ func _process(_delta: float) -> void:
func on_data_received(unit_pribor: Object) -> void:
if not flag_in_control: return
var status: PackedByteArray = unit_pribor.status
+ block_kasseta_y5_config = check_block_kasseta_y5(status, block_kasseta_y5_config, flag_no_trust_yau07)
+ if flag_no_trust_yau07: return
socket_status_ems_g(status)
- block_kasseta_y5_config = check_block_kasseta_y5(status, block_kasseta_y5_config)
block_ip_config = check_block_ip(status, block_ip_config)
temperature_um = check_temperature_um(status)
if machine_timer.is_stopped():
@@ -284,6 +287,7 @@ func on_fs_update_state(packet_type_7: Dictionary, fs_mapping: Dictionary) -> vo
control_results[fs_key] = fs_result[fs_key]
flag_fs_status_ok = control_results[fs_key] == 1
+
##
func state_control_machine() -> void:
match state:
@@ -306,6 +310,8 @@ func state_control_machine() -> void:
STATE_MACHINE.CHEK_KASSETA_Y5:
if block_kasseta_y5_config['yau07']:
state = STATE_MACHINE.WRITE_ISA
+ elif flag_only_fs:
+ state = STATE_MACHINE.IN_EMS_STOP
STATE_MACHINE.WRITE_ISA:
if not flag_write_isa:
_handle_ug_set_state(0x6)
@@ -375,7 +381,7 @@ func state_control_machine() -> void:
STATE_MACHINE.STOP_CONTROL:
_handle_stop_control_state()
## В машине состояний вызов изменения состояния прогресс бара контроля
- if block_kasseta_y5_config['yau07']:
+ if block_kasseta_y5_config['yau07'] or flag_no_trust_yau07:
progressbar_status()
@@ -522,6 +528,9 @@ func _handle_stop_control_state() -> void:
_advance_to_next_fs()
state = STATE_MACHINE.INIT
+ if current_litera == 0: return
+ if flag_no_trust_yau07:
+ state = STATE_MACHINE.STOP_CONTROL
## Переходит на следующую литеру, если 0 то считай закончил выполнения контроля
@@ -565,6 +574,8 @@ func _on_start_contol_device()-> void:
func _determine_self_name() -> void:
+ flag_no_trust_yau07 = false
+ flag_only_fs = false
cc = 0
state = STATE_MACHINE.get("INIT", 0)
var current_unit = unit_prd.name
@@ -652,6 +663,11 @@ func on_state_mashine():
## При таймауте таймера ожидания выполнения команды и перехода на следующий шаг машины состояний
func on_stop_control() -> void:
_handle_fs_turn_off_state()
+
+ if state == STATE_MACHINE.UG_SET_RAY:
+ flag_no_trust_yau07 = true
+ elif state == STATE_MACHINE.CHEK_KASSETA_Y5:
+ flag_only_fs = true
state = STATE_MACHINE.FS_TURN_OFF
@@ -661,6 +677,8 @@ func on_mode_changed(in_tree: bool) -> void:
if not in_tree: ## TODO: Дополнительная проверка если контроль идет, если нет, то смысла вызывать нет
_set_status("Ожидание запуска контроля")
flag_control_is_over = false
+ flag_no_trust_yau07 = false
+ flag_only_fs = false
progress_value = 0
machine_timer.stop()
state = STATE_MACHINE.INIT
@@ -778,12 +796,13 @@ static func check_block_ip(status_prd: PackedByteArray, ip_config: Dictionary) -
## Проверка кассеты у-5 (ЯУ-07Б, ЭМС-Г, УГ, УКП-1, УКП-2)
-static func check_block_kasseta_y5(status_prd: PackedByteArray, y5_config: Dictionary) -> Dictionary:
- y5_config.yau07 = true
- y5_config.ems = (status_prd[0] & 1) and ((status_prd[0] >> 4) & 1)
- y5_config.ug = (status_prd[0] >> 1) & 1
- y5_config.ukp1 = (status_prd[0] >> 2) & 1
- y5_config.ukp2 = (status_prd[0] >> 3) & 1
+static func check_block_kasseta_y5(status_prd: PackedByteArray, y5_config: Dictionary, flag_not_trust: bool) -> Dictionary:
+ y5_config.yau07 = not flag_not_trust
+ if y5_config.yau07:
+ y5_config.ems = (status_prd[0] & 1) and ((status_prd[0] >> 4) & 1)
+ y5_config.ug = (status_prd[0] >> 1) & 1
+ y5_config.ukp1 = (status_prd[0] >> 2) & 1
+ y5_config.ukp2 = (status_prd[0] >> 3) & 1
return y5_config
@@ -860,7 +879,6 @@ static func _should_apply_rule(fs_num: int, rule: Dictionary, results: Dictionar
return bool(fs_num >= rule.min and fs_num < rule.max) and results.has(rule.key)
-
## Получение мощности при выполнении контроля
static func power_um_ukp(status: PackedByteArray, litera: int, pwr_result: Array) -> Array:
const Constants: Dictionary = {'POWER_UKP_1' : 31, 'POWER_UKP_2': 63}