From 87e360e1a99c50dfc335e466976d0cdcfd9699f0 Mon Sep 17 00:00:00 2001
From: TotMaxim
Date: Wed, 12 Nov 2025 20:47:35 +0300
Subject: [PATCH 01/10] =?UTF-8?q?=D0=9F=D0=BE=D1=81=D0=BB=D0=B5=20=D0=BE?=
=?UTF-8?q?=D1=82=D0=BB=D0=B0=D0=B4=D0=BA=D0=B8,=20=D0=B4=D0=BE=D0=B1?=
=?UTF-8?q?=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=B8=D0=BD=D0=B4?=
=?UTF-8?q?=D0=B8=D0=BA=D0=B0=D1=86=D0=B8=D0=B8=20=D1=81=D0=BE=D1=81=D1=82?=
=?UTF-8?q?=D0=BE=D1=8F=D0=BD=D0=B8=D0=B9=20=D1=8D=D0=BC=D1=81=20=D1=8F?=
=?UTF-8?q?=D1=87=D0=B5=D0=B5=D0=BA?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
scenes/pribor-prd-k/pribor-prd-k.gd | 16 +++-
scenes/pribor-prd-k/pribor-prd-k.tscn | 65 +++++++++++++-
scenes/pribor-prd-n/pribor-prd-n.gd | 13 ++-
scenes/pribor-prd-n/pribor-prd-n.tscn | 56 +++++++++++-
scenes/pribor-prd-v/pribor-prd-v.gd | 61 ++++++++++++-
scenes/pribor-prd-v/pribor-prd-v.tscn | 56 +++++++++++-
scenes/tilemap/tilemap.gd | 12 +--
scenes/работа/работа.gd | 6 +-
scripts/interfer.gd | 5 +-
scripts/pribor-prd.gd | 123 +++++++++++---------------
10 files changed, 323 insertions(+), 90 deletions(-)
diff --git a/scenes/pribor-prd-k/pribor-prd-k.gd b/scenes/pribor-prd-k/pribor-prd-k.gd
index 2bd6f78..651fd03 100644
--- a/scenes/pribor-prd-k/pribor-prd-k.gd
+++ b/scenes/pribor-prd-k/pribor-prd-k.gd
@@ -18,9 +18,23 @@ func _ready() -> void:
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:
+ 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()
find_labels(self)
@@ -139,7 +153,7 @@ func on_control_result(for_result_dic: Dictionary) -> void:
for_result_dic.dou_7.state = STATE_VAL.GOOD if result_dic.dou_7 else STATE_VAL.ERROR
else:
result_dic.fs_7 = 0
-
+
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
diff --git a/scenes/pribor-prd-k/pribor-prd-k.tscn b/scenes/pribor-prd-k/pribor-prd-k.tscn
index b56036d..0096012 100644
--- a/scenes/pribor-prd-k/pribor-prd-k.tscn
+++ b/scenes/pribor-prd-k/pribor-prd-k.tscn
@@ -1,4 +1,4 @@
-[gd_scene load_steps=10 format=3 uid="uid://m5s87q7m66lj"]
+[gd_scene load_steps=15 format=3 uid="uid://m5s87q7m66lj"]
[ext_resource type="PackedScene" uid="uid://d3iqb5e4g81m5" path="res://scenes/контроль/элемент-г.tscn" id="1_8dmgr"]
[ext_resource type="Script" uid="uid://cwvikiygf8b1m" path="res://scenes/pribor-prd-k/pribor-prd-k.gd" id="1_tpdyp"]
@@ -9,6 +9,30 @@
[ext_resource type="Script" uid="uid://crpedygm3gohi" path="res://scenes/контроль/кассета.gd" id="7_xpa2n"]
[ext_resource type="PackedScene" uid="uid://dq31j24gv5vi4" path="res://scenes/контроль/кассета-п-2.tscn" id="8_6fdp7"]
[ext_resource type="PackedScene" uid="uid://p2suppildvq0" path="res://scenes/контроль/элемент-в.tscn" id="8_la5yt"]
+[ext_resource type="Texture2D" uid="uid://belwchvdktrw0" path="res://data/эмс-бланк.png" id="10_c7lv8"]
+[ext_resource type="Texture2D" uid="uid://bwddxs24es81u" path="res://data/эмс-бланк-пост.png" id="11_wd1vi"]
+[ext_resource type="Texture2D" uid="uid://pfoscstbm025" path="res://data/эмс-бланк-перем.png" id="12_bjebg"]
+[ext_resource type="Texture2D" uid="uid://dvl3sq036gn75" path="res://data/эмс-бланк-замыкание.png" id="13_kc77u"]
+
+[sub_resource type="SpriteFrames" id="SpriteFrames_di0aa"]
+animations = [{
+"frames": [{
+"duration": 1.0,
+"texture": ExtResource("10_c7lv8")
+}, {
+"duration": 1.0,
+"texture": ExtResource("11_wd1vi")
+}, {
+"duration": 1.0,
+"texture": ExtResource("12_bjebg")
+}, {
+"duration": 1.0,
+"texture": ExtResource("13_kc77u")
+}],
+"loop": true,
+"name": &"default",
+"speed": 5.0
+}]
[node name="pribor_prd_k" type="Control"]
layout_mode = 3
@@ -322,3 +346,42 @@ offset_bottom = 1003.0
text = "Прибор ПРД- неисправен"
horizontal_alignment = 1
metadata/_edit_lock_ = true
+
+[node name="input_0" type="AnimatedSprite2D" parent="."]
+position = Vector2(234, 177)
+sprite_frames = SubResource("SpriteFrames_di0aa")
+
+[node name="Label" type="Label" parent="input_0"]
+offset_left = -38.0
+offset_top = 16.0
+offset_right = 30.0
+offset_bottom = 35.0
+text = "Вход ЕМС"
+
+[node name="input_1" type="AnimatedSprite2D" parent="."]
+position = Vector2(277, 177)
+sprite_frames = SubResource("SpriteFrames_di0aa")
+
+[node name="input_2" type="AnimatedSprite2D" parent="."]
+position = Vector2(188, 177)
+sprite_frames = SubResource("SpriteFrames_di0aa")
+
+[node name="output_0" type="AnimatedSprite2D" parent="."]
+position = Vector2(421, 177)
+sprite_frames = SubResource("SpriteFrames_di0aa")
+
+[node name="Label" type="Label" parent="output_0"]
+offset_left = -40.0
+offset_top = 14.0
+offset_right = 36.0
+offset_bottom = 33.0
+text = "Модуляция"
+metadata/_edit_use_anchors_ = true
+
+[node name="output_1" type="AnimatedSprite2D" parent="."]
+position = Vector2(462, 177)
+sprite_frames = SubResource("SpriteFrames_di0aa")
+
+[node name="output_2" type="AnimatedSprite2D" parent="."]
+position = Vector2(383, 177)
+sprite_frames = SubResource("SpriteFrames_di0aa")
diff --git a/scenes/pribor-prd-n/pribor-prd-n.gd b/scenes/pribor-prd-n/pribor-prd-n.gd
index 842b539..84b2b56 100644
--- a/scenes/pribor-prd-n/pribor-prd-n.gd
+++ b/scenes/pribor-prd-n/pribor-prd-n.gd
@@ -18,9 +18,20 @@ func _ready() -> void:
for temp in power_amplifier:
temp.value1 = -70
unit_prd_n.connect('control_is_over', Callable(self, 'on_press_device'))
+ #unit_prd_n.power_amplify = power_amplifier
on_press_device()
+func _process(delta: float) -> void:
+ set_frame($input_0, unit_prd_n.ems_input_1)
+ set_frame($input_1, unit_prd_n.ems_input_2)
+ set_frame($output_0, unit_prd_n.ems_output_1)
+ set_frame($output_1, unit_prd_n.ems_output_2)
+
+
+func set_frame(node_frame: Node, val: int): node_frame.set_frame(val)
+
+
func start_control() -> void:
set_default_state()
find_labels(self)
@@ -129,7 +140,7 @@ func on_control_result(for_result_dic: Dictionary) -> void:
for_result_dic.dou_3.state = STATE_VAL.GOOD if result_dic.dou_3 else STATE_VAL.ERROR
else:
result_dic.fs_3 = 0
-
+
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
diff --git a/scenes/pribor-prd-n/pribor-prd-n.tscn b/scenes/pribor-prd-n/pribor-prd-n.tscn
index a52ce38..899c973 100644
--- a/scenes/pribor-prd-n/pribor-prd-n.tscn
+++ b/scenes/pribor-prd-n/pribor-prd-n.tscn
@@ -1,4 +1,4 @@
-[gd_scene load_steps=8 format=3 uid="uid://dnuexoef2nnv5"]
+[gd_scene load_steps=13 format=3 uid="uid://dnuexoef2nnv5"]
[ext_resource type="Script" uid="uid://cto2r4ipew65m" path="res://scenes/pribor-prd-n/pribor-prd-n.gd" id="1_bnnv3"]
[ext_resource type="PackedScene" uid="uid://d3iqb5e4g81m5" path="res://scenes/контроль/элемент-г.tscn" id="2_is25t"]
@@ -7,6 +7,30 @@
[ext_resource type="Script" uid="uid://crpedygm3gohi" path="res://scenes/контроль/кассета.gd" id="6_b5wvk"]
[ext_resource type="PackedScene" uid="uid://bcyxqni7gxvtq" path="res://scenes/контроль/блок-в.tscn" id="7_bnnv3"]
[ext_resource type="PackedScene" uid="uid://p2suppildvq0" path="res://scenes/контроль/элемент-в.tscn" id="7_eoqf2"]
+[ext_resource type="Texture2D" uid="uid://belwchvdktrw0" path="res://data/эмс-бланк.png" id="8_bnnv3"]
+[ext_resource type="Texture2D" uid="uid://bwddxs24es81u" path="res://data/эмс-бланк-пост.png" id="9_is25t"]
+[ext_resource type="Texture2D" uid="uid://pfoscstbm025" path="res://data/эмс-бланк-перем.png" id="10_meukj"]
+[ext_resource type="Texture2D" uid="uid://dvl3sq036gn75" path="res://data/эмс-бланк-замыкание.png" id="11_xkifg"]
+
+[sub_resource type="SpriteFrames" id="SpriteFrames_1wf07"]
+animations = [{
+"frames": [{
+"duration": 1.0,
+"texture": ExtResource("8_bnnv3")
+}, {
+"duration": 1.0,
+"texture": ExtResource("9_is25t")
+}, {
+"duration": 1.0,
+"texture": ExtResource("10_meukj")
+}, {
+"duration": 1.0,
+"texture": ExtResource("11_xkifg")
+}],
+"loop": true,
+"name": &"default",
+"speed": 5.0
+}]
[node name="pribor_prd_n" type="Control"]
layout_mode = 3
@@ -350,3 +374,33 @@ offset_right = 649.0
offset_bottom = 1003.0
horizontal_alignment = 1
metadata/_edit_lock_ = true
+
+[node name="input_0" type="AnimatedSprite2D" parent="."]
+position = Vector2(234, 177)
+sprite_frames = SubResource("SpriteFrames_1wf07")
+
+[node name="Label" type="Label" parent="input_0"]
+offset_left = -15.0
+offset_top = 15.0
+offset_right = 53.0
+offset_bottom = 34.0
+text = "Вход ЕМС"
+
+[node name="input_1" type="AnimatedSprite2D" parent="."]
+position = Vector2(277, 177)
+sprite_frames = SubResource("SpriteFrames_1wf07")
+
+[node name="output_0" type="AnimatedSprite2D" parent="."]
+position = Vector2(381, 177)
+sprite_frames = SubResource("SpriteFrames_1wf07")
+
+[node name="Label" type="Label" parent="output_0"]
+offset_left = -19.0
+offset_top = 14.0
+offset_right = 57.0
+offset_bottom = 33.0
+text = "Модуляция"
+
+[node name="output_1" type="AnimatedSprite2D" parent="."]
+position = Vector2(422, 177)
+sprite_frames = SubResource("SpriteFrames_1wf07")
diff --git a/scenes/pribor-prd-v/pribor-prd-v.gd b/scenes/pribor-prd-v/pribor-prd-v.gd
index 76c3950..081214b 100644
--- a/scenes/pribor-prd-v/pribor-prd-v.gd
+++ b/scenes/pribor-prd-v/pribor-prd-v.gd
@@ -21,6 +21,18 @@ func _ready() -> void:
on_press_device()
+func _process(_delta: float) -> void:
+ if Engine.is_editor_hint():
+ return
+ set_frame($input_0, unit_prd_v.ems_input_1)
+ set_frame($input_1, unit_prd_v.ems_input_2)
+ set_frame($output_0, unit_prd_v.ems_output_1)
+ set_frame($output_1, unit_prd_v.ems_output_2)
+
+
+func set_frame(node_frame: Node, val: int): node_frame.set_frame(val)
+
+
func start_control() -> void:
set_default_state()
find_labels(self)
@@ -64,6 +76,53 @@ static func power_fill(pow_dic: Dictionary, fs_result: Dictionary, power_amplifi
i_powapm.state = status
+## Проверка температур УМ от УКП
+static func check_temperature_um(status_prd: PackedByteArray, power_amplifier: Array) -> bool:
+ if power_amplifier.size() < 1: return false
+ const Constants: Dictionary = {
+ 'CONST_MIN_TEMP': -25,
+ 'MAXIMUM_CODE_ADC': 3796,
+ 'MINIMUM_CODE_AD': 2660,
+ 'TEMPERATURE_UKP_1': 47,
+ 'TEMPERATURE_UKP_2': 79,
+ }
+ const TEMP: float = 115.0 / (Constants.MAXIMUM_CODE_ADC - Constants.MINIMUM_CODE_AD)
+ var ukp1_online: int = (status_prd[0] >> 2) & 1
+ var ukp2_online = (status_prd[0] >> 3) & 1
+ var all_temp_is_ok: bool = true
+
+ if ukp1_online:
+ var tmp_1: int
+ var temperature_ukp_1: int
+ for i_temp in 6:
+ 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)
+ power_amplifier[i_temp].value1 = tmp_1
+ if tmp_1>70:
+ all_temp_is_ok = false
+
+ if power_amplifier.size() > 12: # Темпуратура от УМ литеры 1
+ temperature_ukp_1 = status_prd.decode_u16(Constants.TEMPERATURE_UKP_1 + 2 * 7)
+ tmp_1 = round(Constants.CONST_MIN_TEMP + (Constants.MAXIMUM_CODE_ADC - temperature_ukp_1) * TEMP + 3)
+ power_amplifier[6].value1 = tmp_1
+ if tmp_1>70:
+ all_temp_is_ok = false
+
+ if ukp2_online:
+ for i_temp in 6:
+ 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)
+ if power_amplifier.size() > 12:
+ power_amplifier[i_temp+7].value1 = tmp_2
+ if tmp_2>70:
+ all_temp_is_ok = false
+ else:
+ power_amplifier[i_temp+6].value1 = tmp_2
+ if tmp_2>70:
+ all_temp_is_ok = false
+ return all_temp_is_ok
+
+
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')
@@ -128,7 +187,7 @@ static func on_control_result(for_result_dic: Dictionary) -> void:
for_result_dic.dou_4.state = STATE_VAL.GOOD if result_dic.dou_4 else STATE_VAL.ERROR
else:
result_dic.fs_4 = 0
-
+
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
diff --git a/scenes/pribor-prd-v/pribor-prd-v.tscn b/scenes/pribor-prd-v/pribor-prd-v.tscn
index bf501cb..e53a2ae 100644
--- a/scenes/pribor-prd-v/pribor-prd-v.tscn
+++ b/scenes/pribor-prd-v/pribor-prd-v.tscn
@@ -1,4 +1,4 @@
-[gd_scene load_steps=9 format=3 uid="uid://cvskpe1ti3p45"]
+[gd_scene load_steps=14 format=3 uid="uid://cvskpe1ti3p45"]
[ext_resource type="Script" uid="uid://cvuosuvjaci1h" path="res://scenes/pribor-prd-v/pribor-prd-v.gd" id="1_c20s6"]
[ext_resource type="PackedScene" uid="uid://d3iqb5e4g81m5" path="res://scenes/контроль/элемент-г.tscn" id="2_xpo4b"]
@@ -8,6 +8,30 @@
[ext_resource type="Script" uid="uid://crpedygm3gohi" path="res://scenes/контроль/кассета.gd" id="6_os4mt"]
[ext_resource type="PackedScene" uid="uid://p2suppildvq0" path="res://scenes/контроль/элемент-в.tscn" id="7_38u2b"]
[ext_resource type="PackedScene" uid="uid://bcyxqni7gxvtq" path="res://scenes/контроль/блок-в.tscn" id="8_4e87c"]
+[ext_resource type="Texture2D" uid="uid://belwchvdktrw0" path="res://data/эмс-бланк.png" id="9_4e87c"]
+[ext_resource type="Texture2D" uid="uid://bwddxs24es81u" path="res://data/эмс-бланк-пост.png" id="10_g8fvp"]
+[ext_resource type="Texture2D" uid="uid://pfoscstbm025" path="res://data/эмс-бланк-перем.png" id="11_gsby4"]
+[ext_resource type="Texture2D" uid="uid://dvl3sq036gn75" path="res://data/эмс-бланк-замыкание.png" id="12_vxfkm"]
+
+[sub_resource type="SpriteFrames" id="SpriteFrames_s5gcy"]
+animations = [{
+"frames": [{
+"duration": 1.0,
+"texture": ExtResource("9_4e87c")
+}, {
+"duration": 1.0,
+"texture": ExtResource("10_g8fvp")
+}, {
+"duration": 1.0,
+"texture": ExtResource("11_gsby4")
+}, {
+"duration": 1.0,
+"texture": ExtResource("12_vxfkm")
+}],
+"loop": true,
+"name": &"default",
+"speed": 5.0
+}]
[node name="pribor_prd_v" type="Control"]
layout_mode = 3
@@ -299,3 +323,33 @@ offset_right = 649.0
offset_bottom = 1003.0
horizontal_alignment = 1
metadata/_edit_lock_ = true
+
+[node name="input_0" type="AnimatedSprite2D" parent="."]
+position = Vector2(234, 177)
+sprite_frames = SubResource("SpriteFrames_s5gcy")
+
+[node name="Label" type="Label" parent="input_0"]
+offset_left = -15.0
+offset_top = 15.0
+offset_right = 53.0
+offset_bottom = 34.0
+text = "Вход ЕМС"
+
+[node name="input_1" type="AnimatedSprite2D" parent="."]
+position = Vector2(277, 177)
+sprite_frames = SubResource("SpriteFrames_s5gcy")
+
+[node name="output_0" type="AnimatedSprite2D" parent="."]
+position = Vector2(381, 177)
+sprite_frames = SubResource("SpriteFrames_s5gcy")
+
+[node name="Label" type="Label" parent="output_0"]
+offset_left = -19.0
+offset_top = 14.0
+offset_right = 57.0
+offset_bottom = 33.0
+text = "Модуляция"
+
+[node name="output_1" type="AnimatedSprite2D" parent="."]
+position = Vector2(422, 177)
+sprite_frames = SubResource("SpriteFrames_s5gcy")
diff --git a/scenes/tilemap/tilemap.gd b/scenes/tilemap/tilemap.gd
index b143c97..74d15ae 100644
--- a/scenes/tilemap/tilemap.gd
+++ b/scenes/tilemap/tilemap.gd
@@ -368,12 +368,12 @@ func _process(delta) -> void:
_queue.erase(tile.i)
req.request_completed.connect(_response.bind(req, tile))
- #if req.request(tile.url) != OK:
- #tile.t = now
- #remove_child(req)
- #req.queue_free()
- #_req_count -= 1
- # push_error('запрос \"%s\" не отправлен' % tile.url) TODO: For Deugs
+ if req.request(tile.url) != OK:
+ tile.t = now
+ remove_child(req)
+ req.queue_free()
+ _req_count -= 1
+ push_error('запрос \"%s\" не отправлен' % tile.url) #TODO: For Deugs
if _queue.is_empty():
emit_signal('load_completed')
diff --git a/scenes/работа/работа.gd b/scenes/работа/работа.gd
index efec4e6..98bb536 100644
--- a/scenes/работа/работа.gd
+++ b/scenes/работа/работа.gd
@@ -98,7 +98,7 @@ func on_settings_changed():
color_closed = ProjectSettings.get_setting('application/interfer/closed_sectors', Color(0.0, 0.0, 0.0, 1.0))
color_emit_sel = color_select
color_closed_emit = color_closed
-
+
color_select *= Color(1.0, 1.0, 1.0, 0.0)
color_ecm *= Color(1.0, 1.0, 1.0, 0.0)
color_emit_sel *= Color(1.0, 1.0, 1.0, 0.2)
@@ -529,7 +529,7 @@ func update_fs_colors():
$btn_activate.self_modulate = Color.WHITE
else:
$btn_activate.self_modulate = Color.WHITE
-
+
func unsel_fs_all(need_btns_off: bool):
@@ -565,7 +565,7 @@ func set_btns_disabled(value: bool, btn):
btn.set_disabled(value)
-func on_interfer_prinuditelno (prenuditelno_sectors, btns):
+func on_interfer_prinuditelno(prenuditelno_sectors, btns):
for key in prenuditelno_sectors:
var sectors = []
for sector in prenuditelno_sectors[key]:
diff --git a/scripts/interfer.gd b/scripts/interfer.gd
index cacda5d..3381836 100644
--- a/scripts/interfer.gd
+++ b/scripts/interfer.gd
@@ -266,7 +266,7 @@ func on_th_aoa_update(threats: Dictionary, ecms: Dictionary, unit_instance) -> v
thr.nmfs = nmfs
if (thr.proto in gos_protocols) and thr.fflags.proto and (not gos_flag):
gos_nmfs.append(nmfs)
-
+
thr.emit_state = 0
for ecm in ecms.values():
if thr.nmfs == ecm.nmfs:
@@ -278,7 +278,7 @@ func on_th_aoa_update(threats: Dictionary, ecms: Dictionary, unit_instance) -> v
ecm_active = false
if ecm_active and (prd.fs_caps_id[ecm.nmfs] in fs_closed):
interfer_off(ecm, unit_instance)
-
+
var th_id = thr.id
for ecm_i in thrs.keys():
if thrs[ecm_i] == th_id:
@@ -675,4 +675,3 @@ func set_th_emit(th: threats.Threat, ecm: Interfer):
return
else:
th.emit_state = 1
-
diff --git a/scripts/pribor-prd.gd b/scripts/pribor-prd.gd
index d5d7957..a5a7d3d 100644
--- a/scripts/pribor-prd.gd
+++ b/scripts/pribor-prd.gd
@@ -182,7 +182,7 @@ class TestPRD extends Node:
'ip5_25': [7, false],
}
####
-
+
const RAY_m5:= 'RAY_m5'
const RAY_5:= 'RAY_5'
const RAY_15:= 'RAY_15'
@@ -263,17 +263,16 @@ class TestPRD extends Node:
var flag_si_fs_input: bool = false
var flag_si_fs_output: bool = false
var unit_prd: Object
- var power_amplify: Array
var power_result: Dictionary
- #var control_label: Label
var control_timer: Timer = Timer.new()
var ems_6666_timer: Timer = Timer.new()
var machine_timer: Timer = Timer.new()
+ var cc: int = 0
+ var cmd_array: Array
+
signal control_is_over()
signal update_progress(progress_value: float)
signal update_max_value_progress(max_progress_value: int)
- var cc: int = 0
- var cmd_array: Array
var progress_value: float:
set(v):
@@ -302,14 +301,14 @@ class TestPRD extends Node:
## Пакеты от ЯУ-07
func on_data_received(unit_pribor: Object) -> void:
+ var status: PackedByteArray = unit_pribor.status
+ socket_status_ems_g(status)
if machine_timer.is_stopped():
return
- var status: PackedByteArray = unit_pribor.status
block_kasseta_y5_config = check_block_kasseta_y5(status, block_kasseta_y5_config)
block_ip_config = check_block_ip(status, block_ip_config)
- control_results.temperature = check_temperature_um(status, power_amplify)
- socket_status_ems_g(status)
+
_process_dkm_status(status)
if current_litera != 0:
var tek_litera: Dictionary = power_for_litera[current_litera]
@@ -318,8 +317,29 @@ class TestPRD extends Node:
tek_litera[_get_ray_key(state)] = power_um_ukp(status, current_litera, tek_litera[_get_ray_key(state)])
power_for_litera[current_litera] = tek_litera
+ var ems_input_1: int
+ var ems_input_2: int
+ var ems_input_lit_1: int
+ var ems_output_1: int
+ var ems_output_2: int
+ var ems_output_lit_1: int
func socket_status_ems_g(packet_form_yau_07: PackedByteArray) -> void:
+ if self_name in ['1н', '2н', '3н', '4н']:
+ ems_input_1 = (packet_form_yau_07.decode_u16(DataIndices.IN_BLANK_PRD) & (1 << 9)) != 0
+ ems_input_2 = (packet_form_yau_07.decode_u16(DataIndices.IN_BLANK_PRD) & (1 << 10)) != 0
+ if self_name in ['1в', '2в', '3в', '4в']:
+ ems_input_1 = (packet_form_yau_07.decode_u16(DataIndices.IN_BLANK_PRD) & (1 << 11)) != 0
+ ems_input_1 = (packet_form_yau_07.decode_u16(DataIndices.IN_BLANK_PRD) & (1 << 12)) != 0
+ if self_name in ['1к', '2к', '3к', '4к']:
+ ems_input_1 = (packet_form_yau_07.decode_u16(DataIndices.IN_BLANK_PRD) & (1 << 13)) != 0
+ ems_input_1 = (packet_form_yau_07.decode_u16(DataIndices.IN_BLANK_PRD) & (1 << 14)) != 0
+ ems_input_lit_1 = (packet_form_yau_07.decode_u16(DataIndices.IN_BLANK_PRD) & (1 << 8)) != 0
+
+ ems_output_1 = (packet_form_yau_07.decode_u16(DataIndices.OUT_BLANK_PRD) & (1 << 4)) != 0
+ ems_output_2 = (packet_form_yau_07.decode_u16(DataIndices.OUT_BLANK_PRD) & (1 << 5)) != 0
+ ems_output_lit_1 = (packet_form_yau_07.decode_u16(DataIndices.OUT_BLANK_PRD) & (1 << 3)) != 0
+
var number_socket_input: int
if current_litera >= 1 and current_litera <= 7:
number_socket_input = current_litera + 7
@@ -327,6 +347,8 @@ class TestPRD extends Node:
var in_blank: int = packet_form_yau_07.decode_u16(DataIndices.IN_BLANK_PRD)
flag_si_fs_input = (in_blank & (1 << number_socket_input)) != 0 ## Флаг СИ от ФС входа в ЭМС-Г для текущей литеры
+
+
var number_socket_output: int
number_socket_output = 4 if current_litera in [2, 4, 6] else 3 if current_litera == 1 else 5
@@ -344,7 +366,7 @@ class TestPRD extends Node:
fs_result = on_fs_state(packet_type_7, fs_mapping, fs_result)
control_results[fs_key] = fs_result[fs_key]
flag_fs_status_ok = control_results[fs_key] == 1
-
+
##
func state_control_machine() -> void:
match state:
@@ -354,11 +376,14 @@ class TestPRD extends Node:
_handle_fs_turn_on_state()
state = STATE_MACHINE.FS_WORK
STATE_MACHINE.FS_WORK:
- for key in ecms.keys():
- pass
- #print([fs_parameters, current_litera])
- #print('ecms: %s %s' % [ecms[key].kni, ecms[key].params.freq])
- if ecms.size() and flag_fs_status_ok:
+ var flag_ecm: bool = false
+ for key in ecms:
+ var params = ecms[key].params.freq
+ if fs_parameters[current_litera].freq == params:
+ var kni = ecms[key].kni
+ if pribor_config[self_name].angle == kni:
+ flag_ecm = true
+ if flag_ecm and flag_fs_status_ok:
ems_6666_timer.start()
_handle_fs_work_state()
STATE_MACHINE.CHEK_KASSETA_Y5:
@@ -490,13 +515,13 @@ class TestPRD extends Node:
## Таймер отправки команды в ЭМС-Г для модуляции
func _on_ems_6666_timer() -> void:
cmd_array.append([unit_prd.CmdCode.WRITE_ISA, [constants.BASE_ADDR_EMS_G, 6666]])
-
-
+
+
## Таймер вызова машины состояний
func on_state_mashine():
state_control_machine()
-
-
+
+
func progressbar_status() -> void:
match state:
STATE_MACHINE.INIT:
@@ -546,8 +571,8 @@ class TestPRD extends Node:
func on_interfer_resized(ecms_dic: Dictionary) -> void:
ecms = ecms_dic
-
-
+
+
func _on_start_contol_device()-> void:
_determine_self_name()
machine_timer.wait_time = constants.STATE_MASHINE_TIMER
@@ -601,13 +626,13 @@ class TestPRD extends Node:
add_child(ems_6666_timer)
ems_6666_timer.timeout.connect(_on_ems_6666_timer)
ems_6666_timer.wait_time = 1.0
-
+
add_child(machine_timer)
machine_timer.connect('timeout', Callable(self, 'on_state_mashine'))
-
-
+
+
func on_mode_changed(in_tree: bool) -> void:
- if not in_tree:
+ if not in_tree: ## TODO: Дополнительная проверка если контроль идет, если нет, то смысла вызывать нет
progress_value = 0
machine_timer.stop()
state = STATE_MACHINE.INIT
@@ -615,7 +640,7 @@ class TestPRD extends Node:
#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]])
else:
pass
-
+
func _process_dkm_status(status: PackedByteArray) -> void:
if not control_results.has(_get_current_fs_key()):
@@ -722,7 +747,7 @@ class TestPRD extends Node:
params.width,
sectors[litera - 1] if litera == 1 else sectors[litera - 5] if litera > 5 else sectors[litera - 4] if litera > 3 else sectors[litera - 2]
])
- signaller.emit_signal('emit_changed', mode)
+ #signaller.emit_signal('emit_changed', mode)
signaller.emit_signal('interfer_init', interfer_name, fs_arr, power_um)
@@ -749,52 +774,6 @@ class TestPRD extends Node:
return y5_config
- ## Проверка температур УМ от УКП
- static func check_temperature_um(status_prd: PackedByteArray, power_amplifier: Array) -> bool:
- const Constants: Dictionary = {
- 'CONST_MIN_TEMP': -25,
- 'MAXIMUM_CODE_ADC': 3796,
- 'MINIMUM_CODE_AD': 2660,
- 'TEMPERATURE_UKP_1': 47,
- 'TEMPERATURE_UKP_2': 79,
- }
- const TEMP: float = 115.0 / (Constants.MAXIMUM_CODE_ADC - Constants.MINIMUM_CODE_AD)
- var ukp1_online: int = (status_prd[0] >> 2) & 1
- var ukp2_online = (status_prd[0] >> 3) & 1
- var all_temp_is_ok: bool = true
-
- if ukp1_online:
- var tmp_1: int
- var temperature_ukp_1: int
- for i_temp in 6:
- 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)
- #power_amplifier[i_temp].value1 = tmp_1
- if tmp_1>70:
- all_temp_is_ok = false
-
- if power_amplifier.size() > 12: # Темпуратура от УМ литеры 1
- temperature_ukp_1 = status_prd.decode_u16(Constants.TEMPERATURE_UKP_1 + 2 * 7)
- tmp_1 = round(Constants.CONST_MIN_TEMP + (Constants.MAXIMUM_CODE_ADC - temperature_ukp_1) * TEMP + 3)
- #power_amplifier[6].value1 = tmp_1
- if tmp_1>70:
- all_temp_is_ok = false
-
- if ukp2_online:
- for i_temp in 6:
- 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)
- if power_amplifier.size() > 12:
- #power_amplifier[i_temp+7].value1 = tmp_2
- if tmp_2>70:
- all_temp_is_ok = false
- else:
- #power_amplifier[i_temp+6].value1 = tmp_2
- if tmp_2>70:
- all_temp_is_ok = false
- return all_temp_is_ok
-
-
## Проверка ДКМ
static func check_dkm(status_prd: PackedByteArray, bit_dkm: int) -> bool:
var dkm: int = 28
From 9856e300e94d3664b41074a6b95f128d094c7679 Mon Sep 17 00:00:00 2001
From: TotMaxim
Date: Wed, 12 Nov 2025 21:40:57 +0300
Subject: [PATCH 02/10] =?UTF-8?q?=D0=9E=D1=82=D0=BB=D0=B0=D0=B4=D0=B8?=
=?UTF-8?q?=D0=BB=20=D0=BE=D1=82=D0=BE=D0=B1=D1=80=D0=B0=D0=B6=D0=B5=D0=BD?=
=?UTF-8?q?=D0=B8=D0=B5=20=D0=BA=D0=BE=D0=BD=D1=82=D1=80=D0=BE=D0=BB=D1=8F?=
=?UTF-8?q?=20=D1=84=D1=81=20=D0=B8=20=D0=B7=D0=B0=D0=B2=D0=B8=D1=81=D0=B8?=
=?UTF-8?q?=D0=BC=D0=BE=D1=81=D1=82=D0=B8=20=D0=BE=D1=82=20=D1=80=D0=B5?=
=?UTF-8?q?=D0=B7=D0=B0=D0=BB=D1=8C=D1=82=D0=B0=D1=82=D0=B0?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
scenes/pribor-prd-k/pribor-prd-k.gd | 30 +++++++++++++----------------
scenes/pribor-prd-n/pribor-prd-n.gd | 24 +++++++++++------------
scenes/pribor-prd-v/pribor-prd-v.gd | 18 +++++++----------
scripts/pribor-prd.gd | 17 ++++++++--------
4 files changed, 39 insertions(+), 50 deletions(-)
diff --git a/scenes/pribor-prd-k/pribor-prd-k.gd b/scenes/pribor-prd-k/pribor-prd-k.gd
index 651fd03..3cb2020 100644
--- a/scenes/pribor-prd-k/pribor-prd-k.gd
+++ b/scenes/pribor-prd-k/pribor-prd-k.gd
@@ -22,7 +22,9 @@ func _ready() -> void:
on_press_device()
-func _process(delta: float) -> void:
+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)
@@ -31,7 +33,6 @@ func _process(delta: float) -> void:
set_frame($output_2, unit_prd_k.ems_output_lit_1)
-
func set_frame(node_frame: Node, val: int): node_frame.set_frame(val)
@@ -119,7 +120,7 @@ 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_k.has(meta_y5):
- if block_kasseta_y5_prd_config_k['yau07'] == false:
+ 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
@@ -135,26 +136,21 @@ func on_control_result(for_result_dic: Dictionary) -> void:
for f in for_result_dic.fs_nodes:
var fs_meta: String = f.get_meta('fs')
if result_dic.has(fs_meta):
- var new_state = result_dic[fs_meta]
- f.state = new_state
- result_dic[fs_meta] = new_state
+ f.state = result_dic[fs_meta]
- if result_dic.fs_1 == 1:
+ 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
- else:
- result_dic.fs_1 = 0
- if result_dic.fs_6 == 1:
+
+ 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
- else:
- result_dic.fs_6 = 0
- if result_dic.fs_7 == 1:
+
+ 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
- else:
- result_dic.fs_7 = 0
-
- power_fill(for_result_dic.power_dic, for_result_dic.result_dic, for_result_dic.power_amplifier, for_result_dic.POWER_THRESHOLD)
+
+ 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():
diff --git a/scenes/pribor-prd-n/pribor-prd-n.gd b/scenes/pribor-prd-n/pribor-prd-n.gd
index 84b2b56..fb0046c 100644
--- a/scenes/pribor-prd-n/pribor-prd-n.gd
+++ b/scenes/pribor-prd-n/pribor-prd-n.gd
@@ -22,7 +22,9 @@ func _ready() -> void:
on_press_device()
-func _process(delta: float) -> void:
+func _process(_delta: float) -> void:
+ if Engine.is_editor_hint():
+ return
set_frame($input_0, unit_prd_n.ems_input_1)
set_frame($input_1, unit_prd_n.ems_input_2)
set_frame($output_0, unit_prd_n.ems_output_1)
@@ -110,7 +112,7 @@ 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 block_kasseta_y5_prd_config_n['yau07'] == false:
+ 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
@@ -126,22 +128,18 @@ func on_control_result(for_result_dic: Dictionary) -> void:
for f in for_result_dic.fs_nodes:
var fs_meta: String = f.get_meta('fs')
if result_dic.has(fs_meta):
- var new_state = result_dic[fs_meta]
- f.state = new_state
- result_dic[fs_meta] = new_state
+ f.state = result_dic[fs_meta]
- if result_dic.fs_2 == 1:
+ 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
- else:
- result_dic.fs_2 = 0
- if result_dic.fs_3 == 1:
+
+ if result_dic.fs_3 == 1 and block_kasseta_y5_prd_config_n['yau07']:
for_result_dic.module_fs_3.state = STATE_VAL.GOOD if result_dic.dkm_3 else STATE_VAL.ERROR
for_result_dic.dou_3.state = STATE_VAL.GOOD if result_dic.dou_3 else STATE_VAL.ERROR
- else:
- result_dic.fs_3 = 0
-
- power_fill(for_result_dic.power_dic, for_result_dic.result_dic, for_result_dic.power_amplifier, for_result_dic.POWER_THRESHOLD)
+
+ if block_kasseta_y5_prd_config_n['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():
diff --git a/scenes/pribor-prd-v/pribor-prd-v.gd b/scenes/pribor-prd-v/pribor-prd-v.gd
index 081214b..b01521e 100644
--- a/scenes/pribor-prd-v/pribor-prd-v.gd
+++ b/scenes/pribor-prd-v/pribor-prd-v.gd
@@ -173,22 +173,18 @@ static func on_control_result(for_result_dic: Dictionary) -> void:
for f in for_result_dic.fs_nodes:
var fs_meta: String = f.get_meta('fs')
if result_dic.has(fs_meta):
- var new_state = result_dic[fs_meta]
- f.state = new_state
- result_dic[fs_meta] = new_state
+ f.state = result_dic[fs_meta]
- if result_dic.fs_5 == 1:
+ 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
- else:
- result_dic.fs_5 = 0
- if result_dic.fs_4 == 1:
+
+ if result_dic.fs_4 == 1 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
- else:
- result_dic.fs_4 = 0
-
- power_fill(for_result_dic.power_dic, for_result_dic.result_dic, for_result_dic.power_amplifier, for_result_dic.POWER_THRESHOLD)
+
+ 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)
var result: bool = true
for device in result_dic.values():
diff --git a/scripts/pribor-prd.gd b/scripts/pribor-prd.gd
index a5a7d3d..3ba55b9 100644
--- a/scripts/pribor-prd.gd
+++ b/scripts/pribor-prd.gd
@@ -122,8 +122,8 @@ class TestPRD extends Node:
'dkm_3': false,
'dou_2': false,
'dou_3': false,
- 'fs_2': 2,
- 'fs_3': 2,
+ 'fs_2': 0,
+ 'fs_3': 0,
}
####
var block_ip_config_v := {
@@ -148,8 +148,8 @@ class TestPRD extends Node:
'dkm_5': false,
'dou_4': false,
'dou_5': false,
- 'fs_4': 2,
- 'fs_5': 2,
+ 'fs_4': 0,
+ 'fs_5': 0,
}
####
var block_kasseta_y5_prd_config_k: = {
@@ -167,9 +167,9 @@ class TestPRD extends Node:
'dkm_7': false,
'dou_6': false,
'dou_7': false,
- 'fs_1': 2,
- 'fs_6': 2,
- 'fs_7': 2,
+ 'fs_1': 0,
+ 'fs_6': 0,
+ 'fs_7': 0,
}
var block_ip_config_k := {
'maa2000_1': [0, false],
@@ -347,8 +347,6 @@ class TestPRD extends Node:
var in_blank: int = packet_form_yau_07.decode_u16(DataIndices.IN_BLANK_PRD)
flag_si_fs_input = (in_blank & (1 << number_socket_input)) != 0 ## Флаг СИ от ФС входа в ЭМС-Г для текущей литеры
-
-
var number_socket_output: int
number_socket_output = 4 if current_litera in [2, 4, 6] else 3 if current_litera == 1 else 5
@@ -371,6 +369,7 @@ class TestPRD extends Node:
func state_control_machine() -> void:
match state:
STATE_MACHINE.INIT:
+ print("Start control for %s device %s litera" % [self_name, current_litera])
_handle_init_state()
STATE_MACHINE.FS_TURN_ON:
_handle_fs_turn_on_state()
From 69b455f811429da69dcc5c5556bbd6eff60ffe1d Mon Sep 17 00:00:00 2001
From: TotMaxim
Date: Thu, 13 Nov 2025 00:23:39 +0300
Subject: [PATCH 03/10] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?=
=?UTF-8?q?=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=B0=D0=BD=D0=B8=D0=BC=D0=B0=D1=86?=
=?UTF-8?q?=D0=B8=D0=B8=20=D0=BA=D0=BD=D0=BE=D0=BF=D0=BA=D0=B8=20=D0=B7?=
=?UTF-8?q?=D0=B0=D0=BF=D1=83=D1=81=D0=BA=D0=B0=20=D0=BA=D0=BE=D0=BD=D1=82?=
=?UTF-8?q?=D1=80=D0=BE=D0=BB=D1=8F?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
scenes/контроль/control_prd.gd | 79 ++++++++++++++++++++++++++++++
scenes/контроль/control_prd.gd.uid | 1 +
scenes/контроль/контроль.tscn | 4 +-
3 files changed, 83 insertions(+), 1 deletion(-)
create mode 100644 scenes/контроль/control_prd.gd
create mode 100644 scenes/контроль/control_prd.gd.uid
diff --git a/scenes/контроль/control_prd.gd b/scenes/контроль/control_prd.gd
new file mode 100644
index 0000000..1d1baaf
--- /dev/null
+++ b/scenes/контроль/control_prd.gd
@@ -0,0 +1,79 @@
+extends Button
+
+var base_style: StyleBoxFlat
+var tween
+var pulsing: bool = false
+var original_text: String
+
+
+func _ready():
+ original_text = text
+ _setup_styles()
+ _setup_signals()
+
+
+func _setup_styles() -> void:
+ if get("theme_override_styles/disabled") == null:
+ base_style = StyleBoxFlat.new()
+ base_style.border_color = Color(1.0, 0.5, 0.0)
+ base_style.border_width_top = 4
+ base_style.border_width_bottom = 4
+ base_style.border_width_left = 4
+ base_style.border_width_right = 4
+ base_style.bg_color = Color(0.2, 0.2, 0.2)
+ set("theme_override_styles/disabled", base_style)
+ else:
+ base_style = get("theme_override_styles/disabled")
+ set("theme_override_colors/font_disabled_color", Color(1.0, 1.0, 1.0))
+
+
+func _setup_signals() -> void:
+ connect("pressed", Callable(self, "_on_pressed"))
+
+ if not signaller:
+ return
+ var signals_to_connect := ["режим_работа", "режим_журнал", "режим_эмс", "режим_настройки", "режим_контроль"]
+ for signal_name in signals_to_connect:
+ if signaller.has_signal(signal_name):
+ signaller.connect(signal_name, Callable(self, "_on_status_change"))
+
+
+func _on_pressed():
+ disabled = true
+ text = "Идет выполнение контроля"
+ _start_pulse()
+
+
+func _start_pulse():
+ if pulsing:
+ return
+ pulsing = true
+ tween = create_tween()
+ tween.set_loops()
+ var color1 = Color(1.0, 0.5, 0.0) # оранжевый
+ var color2 = Color(0.4, 0.4, 0.4) # серый
+ tween.tween_property(base_style, "border_color", color2, 0.5)\
+ .set_trans(Tween.TRANS_SINE)\
+ .set_ease(Tween.EASE_IN_OUT)
+ tween.tween_property(base_style, "border_color", color1, 0.5)\
+ .set_trans(Tween.TRANS_SINE)\
+ .set_ease(Tween.EASE_IN_OUT)
+
+
+func _stop_pulse():
+ if tween:
+ tween.kill()
+ tween = null
+ base_style.border_color = Color(1.0, 0.5, 0.0)
+ pulsing = false
+ disabled = false
+ text = original_text
+
+
+func _on_status_change():
+ _stop_pulse()
+
+
+func _exit_tree() -> void:
+ if tween:
+ tween.kill()
diff --git a/scenes/контроль/control_prd.gd.uid b/scenes/контроль/control_prd.gd.uid
new file mode 100644
index 0000000..d2330c1
--- /dev/null
+++ b/scenes/контроль/control_prd.gd.uid
@@ -0,0 +1 @@
+uid://xjs7owe2iexn
diff --git a/scenes/контроль/контроль.tscn b/scenes/контроль/контроль.tscn
index 0f29107..5a3a92e 100644
--- a/scenes/контроль/контроль.tscn
+++ b/scenes/контроль/контроль.tscn
@@ -1,4 +1,4 @@
-[gd_scene load_steps=20 format=3 uid="uid://lwmw4egynmd1"]
+[gd_scene load_steps=21 format=3 uid="uid://lwmw4egynmd1"]
[ext_resource type="Texture2D" uid="uid://bar8k5qef7kch" path="res://data/УФ.png" id="2_0nvm1"]
[ext_resource type="Script" uid="uid://q3gmpsqspjfp" path="res://scenes/контроль/внешний.gd" id="2_8r80x"]
@@ -17,6 +17,7 @@
[ext_resource type="Texture2D" uid="uid://00871pb6moln" path="res://data/прогресс-фон-1.png" id="9_w6m6a"]
[ext_resource type="Texture2D" uid="uid://c1k856fxhrjnh" path="res://data/прогресс-заполнение-1.png" id="10_lbx5w"]
[ext_resource type="Script" uid="uid://bncy1x53jp73d" path="res://scenes/контроль/connect_pribor.gd" id="11_u7tym"]
+[ext_resource type="Script" uid="uid://xjs7owe2iexn" path="res://scenes/контроль/control_prd.gd" id="18_lbx5w"]
[sub_resource type="GDScript" id="GDScript_iqgf5"]
script/source = "extends Panel
@@ -1687,6 +1688,7 @@ offset_right = 1326.0
offset_bottom = 104.0
focus_mode = 0
text = "Запуск контроля"
+script = ExtResource("18_lbx5w")
[connection signal="toggled" from="pribor_prd_n_1" to="pribor_prd_n_1" method="_on_toggled"]
[connection signal="toggled" from="pribor_uf" to="pribor_uf" method="_on_toggled"]
From 9727eb04a9019fa5afa456f8d8a3f4f03d4be9ae Mon Sep 17 00:00:00 2001
From: TotMaxim
Date: Sun, 16 Nov 2025 14:05:57 +0300
Subject: [PATCH 04/10] =?UTF-8?q?=D0=9A=D0=BE=D1=80=D1=80=D0=B5=D0=BA?=
=?UTF-8?q?=D1=82=D0=B8=D1=80=D0=BE=D0=B2=D0=BA=D0=B0=20=D0=B8=D0=BD=D1=82?=
=?UTF-8?q?=D0=B5=D1=80=D1=84=D0=B5=D0=B9=D1=81=D0=B0=20=D0=BA=D0=BE=D0=BD?=
=?UTF-8?q?=D1=82=D1=80=D0=BE=D0=BB=D1=8F?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
scenes/pribor-prd-k/kasseta-fs-kd.tscn | 8 +-
scenes/pribor-prd-k/pribor-prd-k.tscn | 203 +++++++++++++++++++++++--
scenes/pribor-prd-n/pribor-prd-n.tscn | 86 ++++++++++-
scenes/pribor-prd-v/pribor-prd-v.tscn | 78 +++++++++-
scenes/контроль/блок-в.tscn | 8 +-
scenes/контроль/кассета-п-2.tscn | 5 +-
scenes/контроль/кассета-у-5-нв.tscn | 12 +-
7 files changed, 358 insertions(+), 42 deletions(-)
diff --git a/scenes/pribor-prd-k/kasseta-fs-kd.tscn b/scenes/pribor-prd-k/kasseta-fs-kd.tscn
index ac2d952..3fcc635 100644
--- a/scenes/pribor-prd-k/kasseta-fs-kd.tscn
+++ b/scenes/pribor-prd-k/kasseta-fs-kd.tscn
@@ -49,7 +49,7 @@ offset_top = 33.0
offset_right = 155.0
offset_bottom = 183.0
fname = "Блок ФС-2"
-rname = "A2"
+rname = "A6"
[node name="ref_A6" parent="." groups=["default_reset", "fs_group"] instance=ExtResource("3_kqnvt")]
offset_left = 155.0
@@ -57,7 +57,7 @@ offset_top = 33.0
offset_right = 205.0
offset_bottom = 183.0
fname = "Модуль ФС"
-rname = "A5"
+rname = "A3"
metadata/fs = "fs_6"
[node name="ref_A5" parent="." groups=["default_reset", "fs_group"] instance=ExtResource("3_kqnvt")]
@@ -66,7 +66,7 @@ offset_top = 33.0
offset_right = 255.0
offset_bottom = 183.0
fname = "Модуль ФС"
-rname = "A3"
+rname = "A2"
metadata/fs = "fs_7"
[node name="ref_A7" parent="." groups=["default_reset"] instance=ExtResource("3_kqnvt")]
@@ -75,4 +75,4 @@ offset_top = 33.0
offset_right = 305.0
offset_bottom = 183.0
fname = "Блок ФС-6"
-rname = "A6"
+rname = "A5"
diff --git a/scenes/pribor-prd-k/pribor-prd-k.tscn b/scenes/pribor-prd-k/pribor-prd-k.tscn
index 0096012..55af137 100644
--- a/scenes/pribor-prd-k/pribor-prd-k.tscn
+++ b/scenes/pribor-prd-k/pribor-prd-k.tscn
@@ -1,19 +1,59 @@
-[gd_scene load_steps=15 format=3 uid="uid://m5s87q7m66lj"]
+[gd_scene load_steps=25 format=3 uid="uid://m5s87q7m66lj"]
[ext_resource type="PackedScene" uid="uid://d3iqb5e4g81m5" path="res://scenes/контроль/элемент-г.tscn" id="1_8dmgr"]
[ext_resource type="Script" uid="uid://cwvikiygf8b1m" path="res://scenes/pribor-prd-k/pribor-prd-k.gd" id="1_tpdyp"]
[ext_resource type="Texture2D" uid="uid://c4mdrmk7h638f" path="res://data/nine-patch-round.png" id="2_14h25"]
[ext_resource type="PackedScene" uid="uid://cm5jd4gjrrpba" path="res://scenes/контроль/кассета-у-5-к.tscn" id="2_tb85r"]
[ext_resource type="PackedScene" uid="uid://bcyxqni7gxvtq" path="res://scenes/контроль/блок-в.tscn" id="5_c7lv8"]
+[ext_resource type="Texture2D" uid="uid://c6nve6f8sfyj2" path="res://data/состояние-исправности-0.png" id="6_l0j7c"]
[ext_resource type="PackedScene" uid="uid://bmagw8nd0ulhj" path="res://scenes/pribor-prd-k/kasseta-fs-kd.tscn" id="7_ia27q"]
[ext_resource type="Script" uid="uid://crpedygm3gohi" path="res://scenes/контроль/кассета.gd" id="7_xpa2n"]
[ext_resource type="PackedScene" uid="uid://dq31j24gv5vi4" path="res://scenes/контроль/кассета-п-2.tscn" id="8_6fdp7"]
[ext_resource type="PackedScene" uid="uid://p2suppildvq0" path="res://scenes/контроль/элемент-в.tscn" id="8_la5yt"]
+[ext_resource type="Texture2D" uid="uid://00871pb6moln" path="res://data/прогресс-фон-1.png" id="9_0ba6e"]
+[ext_resource type="Texture2D" uid="uid://c1k856fxhrjnh" path="res://data/прогресс-заполнение-1.png" id="10_b3870"]
[ext_resource type="Texture2D" uid="uid://belwchvdktrw0" path="res://data/эмс-бланк.png" id="10_c7lv8"]
[ext_resource type="Texture2D" uid="uid://bwddxs24es81u" path="res://data/эмс-бланк-пост.png" id="11_wd1vi"]
[ext_resource type="Texture2D" uid="uid://pfoscstbm025" path="res://data/эмс-бланк-перем.png" id="12_bjebg"]
[ext_resource type="Texture2D" uid="uid://dvl3sq036gn75" path="res://data/эмс-бланк-замыкание.png" id="13_kc77u"]
+[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_3nd2u"]
+
+[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_rceim"]
+
+[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_8yvwo"]
+
+[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_6qu57"]
+
+[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_mlxje"]
+
+[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_3dspb"]
+
+[sub_resource type="GDScript" id="GDScript_45hqb"]
+script/source = "@tool
+
+extends MarginContainer
+
+
+func _enter_tree() -> void:
+ margins = [8, 8, 8, 8]
+
+
+@export var margins: Array:
+ set(vals):
+ add_theme_constant_override('margin_top', vals[0])
+ add_theme_constant_override('margin_left', vals[1])
+ add_theme_constant_override('margin_bottom', vals[2])
+ add_theme_constant_override('margin_right', vals[3])
+ get:
+ var vals = [0, 0, 0, 0]
+ vals[0] = get_theme_constant('margin_top')
+ vals[1] = get_theme_constant('margin_left')
+ vals[2] = get_theme_constant('margin_bottom')
+ vals[3] = get_theme_constant('margin_right')
+ return vals
+"
+
[sub_resource type="SpriteFrames" id="SpriteFrames_di0aa"]
animations = [{
"frames": [{
@@ -185,25 +225,158 @@ value0_info = "Мощность, Вт"
value1_info = "Температура,°C"
metadata/um = "um_6"
-[node name="utm80_A9" parent="." groups=["power_amplifier"] instance=ExtResource("5_c7lv8")]
+[node name="utm80_A9" type="PanelContainer" parent="."]
+editor_description = "Элемент замены из ЗИП"
layout_mode = 0
offset_left = 485.0
offset_top = 812.0
offset_right = 652.0
offset_bottom = 907.0
-fname = "УТМ80"
-rname = "A9"
-value0_info = "Мощность, Вт"
-value1_info = "Температура,°C"
+theme_override_styles/panel = SubResource("StyleBoxEmpty_3nd2u")
metadata/um = "um_7"
+[node name="button" type="Button" parent="utm80_A9"]
+layout_mode = 2
+theme_override_styles/focus = SubResource("StyleBoxEmpty_rceim")
+theme_override_styles/disabled = SubResource("StyleBoxEmpty_8yvwo")
+theme_override_styles/hover = SubResource("StyleBoxEmpty_6qu57")
+theme_override_styles/pressed = SubResource("StyleBoxEmpty_mlxje")
+theme_override_styles/normal = SubResource("StyleBoxEmpty_3dspb")
+
+[node name="rect" type="NinePatchRect" parent="utm80_A9"]
+layout_mode = 2
+texture = ExtResource("2_14h25")
+draw_center = false
+region_rect = Rect2(0, 0, 63, 63)
+patch_margin_left = 17
+patch_margin_top = 17
+patch_margin_right = 17
+patch_margin_bottom = 15
+
+[node name="margin" type="MarginContainer" parent="utm80_A9"]
+layout_mode = 2
+theme_override_constants/margin_left = 8
+theme_override_constants/margin_top = 8
+theme_override_constants/margin_right = 8
+theme_override_constants/margin_bottom = 8
+script = SubResource("GDScript_45hqb")
+margins = [8, 8, 8, 8]
+
+[node name="vbox" type="VBoxContainer" parent="utm80_A9/margin"]
+layout_mode = 2
+
+[node name="grid0" type="GridContainer" parent="utm80_A9/margin/vbox"]
+layout_mode = 2
+columns = 3
+
+[node name="state" type="TextureRect" parent="utm80_A9/margin/vbox/grid0"]
+custom_minimum_size = Vector2(24, 24)
+layout_mode = 2
+size_flags_horizontal = 2
+size_flags_vertical = 6
+texture = ExtResource("6_l0j7c")
+expand_mode = 1
+
+[node name="fname" type="Label" parent="utm80_A9/margin/vbox/grid0"]
+self_modulate = Color(1, 1, 1, 0.627451)
+custom_minimum_size = Vector2(0, 20)
+layout_mode = 2
+size_flags_horizontal = 3
+size_flags_vertical = 3
+theme_override_font_sizes/font_size = 17
+text = "УТМ80"
+horizontal_alignment = 1
+vertical_alignment = 1
+
+[node name="rname" type="Label" parent="utm80_A9/margin/vbox/grid0"]
+layout_mode = 2
+size_flags_horizontal = 3
+size_flags_vertical = 6
+theme_override_font_sizes/font_size = 18
+text = "A9"
+horizontal_alignment = 2
+vertical_alignment = 1
+
+[node name="grid1" type="GridContainer" parent="utm80_A9/margin/vbox"]
+custom_minimum_size = Vector2(80, 0)
+layout_mode = 2
+size_flags_horizontal = 4
+size_flags_vertical = 3
+columns = 2
+
+[node name="level1" type="TextureProgressBar" parent="utm80_A9/margin/vbox/grid1" groups=["уровни"]]
+layout_mode = 2
+size_flags_horizontal = 3
+size_flags_vertical = 3
+tooltip_text = "Мощность, Вт
+Текущее: 0.00
+Диапазон: 0.00…1400.00"
+mouse_filter = 0
+max_value = 1400.0
+fill_mode = 3
+nine_patch_stretch = true
+stretch_margin_left = 8
+stretch_margin_top = 8
+stretch_margin_right = 8
+stretch_margin_bottom = 8
+texture_under = ExtResource("9_0ba6e")
+texture_progress = ExtResource("10_b3870")
+tint_under = Color(1, 1, 1, 0.419608)
+tint_progress = Color(0.890196, 0.486275, 0.196078, 1)
+
+[node name="level7" type="TextureProgressBar" parent="utm80_A9/margin/vbox/grid1"]
+layout_mode = 2
+size_flags_horizontal = 3
+size_flags_vertical = 3
+tooltip_text = "Температура,°C
+Текущее: 56.00
+Диапазон: -50.00…120.00"
+mouse_filter = 0
+min_value = -50.0
+max_value = 120.0
+value = 56.0
+fill_mode = 3
+nine_patch_stretch = true
+stretch_margin_left = 8
+stretch_margin_top = 8
+stretch_margin_right = 8
+stretch_margin_bottom = 8
+texture_under = ExtResource("9_0ba6e")
+texture_progress = ExtResource("10_b3870")
+tint_under = Color(0.890196, 0.486275, 0.196078, 1)
+tint_over = Color(0.890196, 0.486275, 0.196078, 1)
+
+[node name="grid2" type="GridContainer" parent="utm80_A9/margin/vbox"]
+clip_contents = true
+custom_minimum_size = Vector2(80, 0)
+layout_mode = 2
+size_flags_horizontal = 4
+size_flags_vertical = 4
+columns = 2
+
+[node name="lbl6" type="Label" parent="utm80_A9/margin/vbox/grid2" groups=["названия"]]
+clip_contents = true
+layout_mode = 2
+size_flags_horizontal = 3
+theme_override_font_sizes/font_size = 8
+text = "P,%"
+horizontal_alignment = 1
+
+[node name="lbl7" type="Label" parent="utm80_A9/margin/vbox/grid2"]
+clip_contents = true
+layout_mode = 2
+size_flags_horizontal = 3
+theme_override_font_sizes/font_size = 8
+text = "°C"
+horizontal_alignment = 1
+
[node name="rm1620m_A16" parent="." groups=["power_amplifier"] instance=ExtResource("5_c7lv8")]
layout_mode = 0
offset_left = 8.0
offset_top = 242.0
offset_right = 175.0
offset_bottom = 337.0
-fname = "УМ1535Б"
+fname = "РМ16-20М"
rname = "A16"
value0_info = "Мощность, Вт"
value1_info = "Температура,°C"
@@ -215,7 +388,7 @@ offset_left = 8.0
offset_top = 337.0
offset_right = 173.0
offset_bottom = 432.0
-fname = "УМ1535Б"
+fname = "РМ16-20М"
rname = "A17"
value0_info = "Мощность, Вт"
value1_info = "Температура,°C"
@@ -227,7 +400,7 @@ offset_left = 8.0
offset_top = 432.0
offset_right = 175.0
offset_bottom = 527.0
-fname = "УМ1535Б"
+fname = "РМ16-20М"
rname = "A18"
value0_info = "Мощность, Вт"
value1_info = "Температура,°C"
@@ -239,7 +412,7 @@ offset_left = 8.0
offset_top = 527.0
offset_right = 175.0
offset_bottom = 622.0
-fname = "УМ1535Б"
+fname = "РМ16-20М"
rname = "A19"
value0_info = "Мощность, Вт"
value1_info = "Температура,°C"
@@ -251,7 +424,7 @@ offset_left = 8.0
offset_top = 622.0
offset_right = 175.0
offset_bottom = 717.0
-fname = "УМ1535Б"
+fname = "РМ16-20М"
rname = "A20"
value0_info = "Мощность, Вт"
value1_info = "Температура,°C"
@@ -263,7 +436,7 @@ offset_left = 8.0
offset_top = 717.0
offset_right = 175.0
offset_bottom = 812.0
-fname = "УМ1535Б"
+fname = "РМ16-20М"
rname = "A21"
value0_info = "Мощность, Вт"
value1_info = "Температура,°C"
@@ -321,9 +494,9 @@ metadata/ip = "ip12_50_1"
[node name="lbl_fname" type="Label" parent="kasseta_p_1"]
self_modulate = Color(1, 1, 1, 0.62)
layout_mode = 0
-offset_left = 7.0
+offset_left = 2.0
offset_top = 8.0
-offset_right = 159.0
+offset_right = 162.0
offset_bottom = 33.0
text = "Кассета П-1"
horizontal_alignment = 1
@@ -385,3 +558,5 @@ sprite_frames = SubResource("SpriteFrames_di0aa")
[node name="output_2" type="AnimatedSprite2D" parent="."]
position = Vector2(383, 177)
sprite_frames = SubResource("SpriteFrames_di0aa")
+
+[connection signal="pressed" from="utm80_A9/button" to="utm80_A9" method="_on_button_pressed"]
diff --git a/scenes/pribor-prd-n/pribor-prd-n.tscn b/scenes/pribor-prd-n/pribor-prd-n.tscn
index 899c973..a12b1ab 100644
--- a/scenes/pribor-prd-n/pribor-prd-n.tscn
+++ b/scenes/pribor-prd-n/pribor-prd-n.tscn
@@ -1,9 +1,8 @@
-[gd_scene load_steps=13 format=3 uid="uid://dnuexoef2nnv5"]
+[gd_scene load_steps=12 format=3 uid="uid://dnuexoef2nnv5"]
[ext_resource type="Script" uid="uid://cto2r4ipew65m" path="res://scenes/pribor-prd-n/pribor-prd-n.gd" id="1_bnnv3"]
[ext_resource type="PackedScene" uid="uid://d3iqb5e4g81m5" path="res://scenes/контроль/элемент-г.tscn" id="2_is25t"]
[ext_resource type="Texture2D" uid="uid://c4mdrmk7h638f" path="res://data/nine-patch-round.png" id="3_meukj"]
-[ext_resource type="PackedScene" uid="uid://bk1655p4e8y4u" path="res://scenes/контроль/кассета-у-5-нв.tscn" id="4_xkifg"]
[ext_resource type="Script" uid="uid://crpedygm3gohi" path="res://scenes/контроль/кассета.gd" id="6_b5wvk"]
[ext_resource type="PackedScene" uid="uid://bcyxqni7gxvtq" path="res://scenes/контроль/блок-в.tscn" id="7_bnnv3"]
[ext_resource type="PackedScene" uid="uid://p2suppildvq0" path="res://scenes/контроль/элемент-в.tscn" id="7_eoqf2"]
@@ -103,12 +102,83 @@ text = "Панель
horizontal_alignment = 1
vertical_alignment = 1
-[node name="kasseta_U5" parent="." instance=ExtResource("4_xkifg")]
+[node name="kasseta_U5" type="NinePatchRect" parent="."]
layout_mode = 0
offset_left = 175.0
offset_top = 242.0
offset_right = 485.0
offset_bottom = 432.0
+texture = ExtResource("3_meukj")
+patch_margin_left = 16
+patch_margin_top = 16
+patch_margin_right = 16
+patch_margin_bottom = 16
+script = ExtResource("6_b5wvk")
+
+[node name="lbl_fname" type="Label" parent="kasseta_U5"]
+self_modulate = Color(1, 1, 1, 0.62)
+layout_mode = 0
+offset_left = 5.0
+offset_top = 7.0
+offset_right = 305.0
+offset_bottom = 35.0
+text = "Кассета У5"
+horizontal_alignment = 1
+vertical_alignment = 1
+
+[node name="ref_A24" parent="kasseta_U5" groups=["power_supply"] instance=ExtResource("7_eoqf2")]
+offset_left = 5.0
+offset_top = 32.0
+offset_right = 55.0
+offset_bottom = 182.0
+fname = "ИП5-25"
+rname = "A24"
+metadata/ip = "ip5_25"
+
+[node name="ref_A30" parent="kasseta_U5" groups=["y-5"] instance=ExtResource("7_eoqf2")]
+offset_left = 55.0
+offset_top = 32.0
+offset_right = 105.0
+offset_bottom = 182.0
+fname = "ЯУ-07Б"
+rname = "A30"
+metadata/y5 = "yau07"
+
+[node name="ref_A26" parent="kasseta_U5" groups=["y-5"] instance=ExtResource("7_eoqf2")]
+offset_left = 105.0
+offset_top = 32.0
+offset_right = 155.0
+offset_bottom = 182.0
+fname = "ЭМС-Г"
+rname = "A26"
+metadata/y5 = "ems"
+
+[node name="ref_A27" parent="kasseta_U5" groups=["y-5"] instance=ExtResource("7_eoqf2")]
+offset_left = 155.0
+offset_top = 32.0
+offset_right = 205.0
+offset_bottom = 182.0
+fname = "УГ"
+rname = "A27"
+metadata/y5 = "ug"
+
+[node name="ref_A28" parent="kasseta_U5" groups=["y-5"] instance=ExtResource("7_eoqf2")]
+offset_left = 205.0
+offset_top = 32.0
+offset_right = 255.0
+offset_bottom = 182.0
+fname = "УКП"
+rname = "A28"
+metadata/y5 = "ukp1"
+
+[node name="ref_A29" parent="kasseta_U5" groups=["y-5"] instance=ExtResource("7_eoqf2")]
+offset_left = 254.0
+offset_top = 32.0
+offset_right = 304.0
+offset_bottom = 182.0
+fname = "УКП"
+rname = "A29"
+metadata/y5 = "ukp2"
[node name="kasseta_FS_ND" type="NinePatchRect" parent="."]
layout_mode = 0
@@ -142,7 +212,7 @@ offset_top = 32.0
offset_right = 105.0
offset_bottom = 182.0
fname = "Блок ФС-3"
-rname = "A3"
+rname = "A4"
[node name="ref_A1" parent="kasseta_FS_ND" groups=["default_reset", "fs_group"] instance=ExtResource("7_eoqf2")]
offset_left = 105.0
@@ -150,7 +220,7 @@ offset_top = 32.0
offset_right = 155.0
offset_bottom = 182.0
fname = "Модуль ФС"
-rname = "A1"
+rname = "A2"
metadata/fs = "fs_3"
[node name="ref_A2" parent="kasseta_FS_ND" groups=["default_reset", "fs_group"] instance=ExtResource("7_eoqf2")]
@@ -159,7 +229,7 @@ offset_top = 32.0
offset_right = 205.0
offset_bottom = 182.0
fname = "Модуль ФС"
-rname = "A2"
+rname = "A1"
metadata/fs = "fs_2"
[node name="ref_A4" parent="kasseta_FS_ND" groups=["default_reset"] instance=ExtResource("7_eoqf2")]
@@ -168,7 +238,7 @@ offset_top = 32.0
offset_right = 255.0
offset_bottom = 182.0
fname = "Блок ФС-2"
-rname = "A4"
+rname = "A3"
[node name="kasseta_P_1" type="NinePatchRect" parent="."]
layout_mode = 0
@@ -228,7 +298,7 @@ offset_left = 485.0
offset_top = 242.0
offset_right = 652.0
offset_bottom = 337.0
-fname = "УМ1535Б"
+fname = "УМ1535А"
rname = "A7"
value0_info = "Мощность, Вт"
value1_info = "Температура,°C"
diff --git a/scenes/pribor-prd-v/pribor-prd-v.tscn b/scenes/pribor-prd-v/pribor-prd-v.tscn
index e53a2ae..3d9bd2e 100644
--- a/scenes/pribor-prd-v/pribor-prd-v.tscn
+++ b/scenes/pribor-prd-v/pribor-prd-v.tscn
@@ -1,9 +1,8 @@
-[gd_scene load_steps=14 format=3 uid="uid://cvskpe1ti3p45"]
+[gd_scene load_steps=13 format=3 uid="uid://cvskpe1ti3p45"]
[ext_resource type="Script" uid="uid://cvuosuvjaci1h" path="res://scenes/pribor-prd-v/pribor-prd-v.gd" id="1_c20s6"]
[ext_resource type="PackedScene" uid="uid://d3iqb5e4g81m5" path="res://scenes/контроль/элемент-г.tscn" id="2_xpo4b"]
[ext_resource type="Texture2D" uid="uid://c4mdrmk7h638f" path="res://data/nine-patch-round.png" id="3_wyy1b"]
-[ext_resource type="PackedScene" uid="uid://bk1655p4e8y4u" path="res://scenes/контроль/кассета-у-5-нв.tscn" id="4_gl2bl"]
[ext_resource type="PackedScene" uid="uid://cd5sue1e8iyrv" path="res://scenes/pribor-prd-n/kasseta-fs-nd.tscn" id="5_nhd2k"]
[ext_resource type="Script" uid="uid://crpedygm3gohi" path="res://scenes/контроль/кассета.gd" id="6_os4mt"]
[ext_resource type="PackedScene" uid="uid://p2suppildvq0" path="res://scenes/контроль/элемент-в.tscn" id="7_38u2b"]
@@ -104,12 +103,83 @@ text = "Панель
horizontal_alignment = 1
vertical_alignment = 1
-[node name="kasseta_U5" parent="." instance=ExtResource("4_gl2bl")]
+[node name="kasseta_U5" type="NinePatchRect" parent="."]
layout_mode = 0
offset_left = 175.0
offset_top = 242.0
offset_right = 485.0
offset_bottom = 432.0
+texture = ExtResource("3_wyy1b")
+patch_margin_left = 16
+patch_margin_top = 16
+patch_margin_right = 16
+patch_margin_bottom = 16
+script = ExtResource("6_os4mt")
+
+[node name="lbl_fname" type="Label" parent="kasseta_U5"]
+self_modulate = Color(1, 1, 1, 0.62)
+layout_mode = 0
+offset_left = 5.0
+offset_top = 7.0
+offset_right = 305.0
+offset_bottom = 35.0
+text = "Кассета У5"
+horizontal_alignment = 1
+vertical_alignment = 1
+
+[node name="ref_A24" parent="kasseta_U5" groups=["power_supply"] instance=ExtResource("7_38u2b")]
+offset_left = 5.0
+offset_top = 32.0
+offset_right = 55.0
+offset_bottom = 182.0
+fname = "ИП5-25"
+rname = "A24"
+metadata/ip = "ip5_25"
+
+[node name="ref_A30" parent="kasseta_U5" groups=["y-5"] instance=ExtResource("7_38u2b")]
+offset_left = 55.0
+offset_top = 32.0
+offset_right = 105.0
+offset_bottom = 182.0
+fname = "ЯУ-07Б"
+rname = "A30"
+metadata/y5 = "yau07"
+
+[node name="ref_A26" parent="kasseta_U5" groups=["y-5"] instance=ExtResource("7_38u2b")]
+offset_left = 105.0
+offset_top = 32.0
+offset_right = 155.0
+offset_bottom = 182.0
+fname = "ЭМС-Г"
+rname = "A26"
+metadata/y5 = "ems"
+
+[node name="ref_A27" parent="kasseta_U5" groups=["y-5"] instance=ExtResource("7_38u2b")]
+offset_left = 155.0
+offset_top = 32.0
+offset_right = 205.0
+offset_bottom = 182.0
+fname = "УГ"
+rname = "A27"
+metadata/y5 = "ug"
+
+[node name="ref_A28" parent="kasseta_U5" groups=["y-5"] instance=ExtResource("7_38u2b")]
+offset_left = 205.0
+offset_top = 32.0
+offset_right = 255.0
+offset_bottom = 182.0
+fname = "УКП"
+rname = "A28"
+metadata/y5 = "ukp1"
+
+[node name="ref_A29" parent="kasseta_U5" groups=["y-5"] instance=ExtResource("7_38u2b")]
+offset_left = 254.0
+offset_top = 32.0
+offset_right = 304.0
+offset_bottom = 182.0
+fname = "УКП"
+rname = "A29"
+metadata/y5 = "ukp2"
[node name="kasseta_FS_VD" parent="." instance=ExtResource("5_nhd2k")]
layout_mode = 0
@@ -177,7 +247,7 @@ offset_left = 485.0
offset_top = 242.0
offset_right = 652.0
offset_bottom = 337.0
-fname = "УМ1535Б"
+fname = "УМ1535А"
rname = "A7"
value0_info = "Мощность, Вт"
value1_info = "Температура,°C"
diff --git a/scenes/контроль/блок-в.tscn b/scenes/контроль/блок-в.tscn
index 06dcfa8..578fee5 100644
--- a/scenes/контроль/блок-в.tscn
+++ b/scenes/контроль/блок-в.tscn
@@ -145,10 +145,10 @@ func _enter_tree() -> void: call_deferred('_enter_tree_defered')
func _ready():
- var items: Array = get_level_nodes()
- for item in items:
- item.connect('value_changed', on_level_changed.bind(item, value0_info))
- on_level_changed(item.value, item, value0_info)
+ #var items: Array = get_level_nodes()
+ #for item in items:
+ #item.connect('value_changed', on_level_changed.bind(item, value0_info))
+ #on_level_changed(item.value, item, value0_info)
var level7: = $margin/vbox/grid1/level7
level7.connect('value_changed', on_level_changed.bind(level7, value1_info))
on_level_changed(level7.value, level7, value1_info)
diff --git a/scenes/контроль/кассета-п-2.tscn b/scenes/контроль/кассета-п-2.tscn
index a265d9d..abe840d 100644
--- a/scenes/контроль/кассета-п-2.tscn
+++ b/scenes/контроль/кассета-п-2.tscn
@@ -35,9 +35,10 @@ metadata/ip = "ip12_50_2"
[node name="lbl_fname" type="Label" parent="."]
self_modulate = Color(1, 1, 1, 0.62)
layout_mode = 0
-offset_left = 5.0
+offset_left = 8.0
offset_top = 5.0
-offset_right = 105.0
+offset_right = 112.0
offset_bottom = 30.0
+text = "Касета П-2"
horizontal_alignment = 1
vertical_alignment = 1
diff --git a/scenes/контроль/кассета-у-5-нв.tscn b/scenes/контроль/кассета-у-5-нв.tscn
index dad7c79..011731b 100644
--- a/scenes/контроль/кассета-у-5-нв.tscn
+++ b/scenes/контроль/кассета-у-5-нв.tscn
@@ -31,7 +31,7 @@ offset_top = 32.0
offset_right = 55.0
offset_bottom = 182.0
fname = "ИП5-25"
-rname = "A24"
+rname = "A31"
metadata/ip = "ip5_25"
[node name="ref_A30" parent="." groups=["y-5"] instance=ExtResource("3_picsk")]
@@ -40,7 +40,7 @@ offset_top = 32.0
offset_right = 105.0
offset_bottom = 182.0
fname = "ЯУ-07Б"
-rname = "A30"
+rname = "A37"
metadata/y5 = "yau07"
[node name="ref_A26" parent="." groups=["y-5"] instance=ExtResource("3_picsk")]
@@ -49,7 +49,7 @@ offset_top = 32.0
offset_right = 155.0
offset_bottom = 182.0
fname = "ЭМС-Г"
-rname = "A26"
+rname = "A33"
metadata/y5 = "ems"
[node name="ref_A27" parent="." groups=["y-5"] instance=ExtResource("3_picsk")]
@@ -58,7 +58,7 @@ offset_top = 32.0
offset_right = 205.0
offset_bottom = 182.0
fname = "УГ"
-rname = "A27"
+rname = "A34"
metadata/y5 = "ug"
[node name="ref_A28" parent="." groups=["y-5"] instance=ExtResource("3_picsk")]
@@ -67,7 +67,7 @@ offset_top = 32.0
offset_right = 255.0
offset_bottom = 182.0
fname = "УКП"
-rname = "A28"
+rname = "A36"
metadata/y5 = "ukp1"
[node name="ref_A29" parent="." groups=["y-5"] instance=ExtResource("3_picsk")]
@@ -76,5 +76,5 @@ offset_top = 32.0
offset_right = 304.0
offset_bottom = 182.0
fname = "УКП"
-rname = "A29"
+rname = "A35"
metadata/y5 = "ukp2"
From de86d281cacc61e59fc4233d456d0ec1853efb65 Mon Sep 17 00:00:00 2001
From: TotMaxim
Date: Sun, 16 Nov 2025 16:43:32 +0300
Subject: [PATCH 05/10] =?UTF-8?q?=D0=B7=D0=B0=D0=B3=D1=80=D1=83=D0=B7?=
=?UTF-8?q?=D0=BA=D0=B0=20json?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
scripts/prd.gd | 3 +-
scripts/pribor-prd.gd | 1728 +++++++++++++++++++----------------------
2 files changed, 783 insertions(+), 948 deletions(-)
diff --git a/scripts/prd.gd b/scripts/prd.gd
index 5e4f796..c1b56b0 100644
--- a/scripts/prd.gd
+++ b/scripts/prd.gd
@@ -285,8 +285,7 @@ func _ready() -> void:
var unit_prd = network.get_unit_instance(prd_name)
var new_prd = PRD.new(prd_name, unit_prd)
prd_dict[prd_name] = new_prd
- var control_pribor_prd = preload('res://scripts/pribor-prd.gd')
- var unit_control = control_pribor_prd.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)
new_prd.unit_control = unit_control
for key in FS_PRD.keys():
diff --git a/scripts/pribor-prd.gd b/scripts/pribor-prd.gd
index 3ba55b9..a92df2a 100644
--- a/scripts/pribor-prd.gd
+++ b/scripts/pribor-prd.gd
@@ -1,983 +1,819 @@
-class TestPRD extends Node:
- const DEVICE_CONSTANT: Dictionary = {
- 'PRD_N': {
- CONSTANTS = {
- 'POWER_UKP_1': 31,
- 'POWER_UKP_2': 63,
- 'DKM_BIT_2': 1,
- 'DKM_BIT_3': 2,
- 'BASE_ADDR_EMS_G': 0x120,
- 'ADDR_UG_LITERA_1': 0x106,
- 'ADDR_UG_LITERA_2': 0x108,
- 'ADDR_UG_LITERA_3': 0x10A,
- 'TEMP_THRESHOLD': 70,
- 'POWER_THRESHOLD': 40,
- 'RAY_DOU_NUM': 0x3,
- 'ATT_UM_2': 0x2,
- 'ATT_UM_3': 0x3,
- 'POWER_UM': 100,
- 'TIMER_DELAY': 10.0,
- 'STATE_MASHINE_TIMER': 0.3,
- },
- PRIBOR_CONFIG = {
- '1н': {'angle': 0.0, 'sectors': [4, 8]},
- '2н': {'angle': 90.0, 'sectors': [7, 11]},
- '3н': {'angle': 180.0, 'sectors': [6, 10]},
- '4н': {'angle': 270.0, 'sectors': [5, 9]},
- },
- FS_PARAMS = {
- 2: {'freq': 932.0, 'width': 100.0},
- 3: {'freq': 1157.0, 'width': 100.0}
- },
- START_LITERA = 2
- },
- 'PRD_V': {
- CONSTANTS = {
- 'POWER_UKP_1': 31,
- 'POWER_UKP_2': 63,
- 'DKM_BIT_4': 3,
- 'DKM_BIT_5': 4,
- 'BASE_ADDR_EMS_G': 0x120,
- 'ADDR_UG_LITERA_1': 0x106,
- 'ADDR_UG_LITERA_2': 0x108,
- 'ADDR_UG_LITERA_3': 0x10A,
- 'TEMP_THRESHOLD': 70,
- 'POWER_THRESHOLD': 40,
- 'RAY_DOU_NUM': 0x3,
- 'ATT_UM_4': 0x2,
- 'ATT_UM_5': 0x3,
- 'POWER_UM': 100,
- 'TIMER_DELAY': 10.0,
- 'STATE_MASHINE_TIMER': 0.3,
- },
- PRIBOR_CONFIG = {
- '1в': {'angle': 0.0, 'sectors': [12, 16]},
- '2в': {'angle': 90.0, 'sectors': [15, 19]},
- '3в': {'angle': 180.0, 'sectors': [14, 18]},
- '4в': {'angle': 270.0, 'sectors': [13, 17]},
- },
- FS_PARAMS = {
- 4: {'freq': 1227.0, 'width': 100.0},
- 5: {'freq': 1575.0, 'width': 110.0},
- },
- START_LITERA = 4
- },
- 'PRD_K': {
- CONSTANTS = {
- 'POWER_UKP_1': 31,
- 'POWER_UKP_2': 63,
- 'DKM_BIT_1': 0,
- 'DKM_BIT_6': 5,
- 'DKM_BIT_7': 6,
- 'BASE_ADDR_EMS_G': 0x120,
- 'ADDR_UG_LITERA_1': 0x106,
- 'ADDR_UG_LITERA_2': 0x108,
- 'ADDR_UG_LITERA_3': 0x10A,
- 'TEMP_THRESHOLD': 40,
- 'POWER_THRESHOLD': 40,
- 'RAY_DOU_NUM': 0x3,
- 'ATT_UM_1': 0x0,
- 'ATT_UM_6': 0x3,
- 'ATT_UM_7': 0x2,
- 'POWER_UM': 100,
- 'TIMER_DELAY': 10.0,
- 'STATE_MASHINE_TIMER': 0.3,
- },
- PRIBOR_CONFIG = { # Конфигурация параметров для каждого прибора
- '1к': {'angle': 0.0, 'sectors': [0, 20, 24]},
- '2к': {'angle': 90.0, 'sectors': [3, 23, 27]},
- '3к': {'angle': 180.0, 'sectors': [2, 22, 26]},
- '4к': {'angle': 270.0, 'sectors': [1, 21, 25]},
- },
- FS_PARAMS = { # Конфигурация частот и ширин для каждого ФС
- 1: {'freq': 450.0, 'width': 80.0},
- 6: {'freq': 2450.0, 'width': 110.0},
- 7: {'freq': 4750.0, 'width': 110.0}
- },
- START_LITERA = 1
- }
+class_name TestPRD
+extends Node
+# Константы
+const CONFIG_PATH = "user://config/setting_prd_control.json"
+
+const RAY_m5: String = "RAY_m5"
+const RAY_5: String = "RAY_5"
+const RAY_15: String = "RAY_15"
+const RAY_25: String = "RAY_25"
+const RAY_35: String = "RAY_35"
+const RAY_45: String = "RAY_45"
+
+const RAY_TYPES := [RAY_m5, RAY_5, RAY_15, RAY_25, RAY_35, RAY_45]
+
+# Загруженные конфигурации
+var config_data: Dictionary
+var device_constants: Dictionary
+var base_configs: Dictionary
+var device_configs: Dictionary
+var data_indices: Dictionary
+var state_machine_enum: Dictionary
+var fs_keys: Dictionary
+var temperature_constants: Dictionary
+var ems_input_bits_config: Dictionary
+var fs_rules: Array
+
+var _ray_state_mapping: Dictionary
+# Переменные класса
+var constants: Dictionary
+var pribor_config: Dictionary
+var fs_parameters: Dictionary
+var block_ip_config: Dictionary
+var block_kasseta_y5_config: Dictionary
+var control_results: Dictionary
+var self_name: String
+var state: int = 0
+var current_litera: int
+var flag_write_isa: bool = false
+var flag_fs_status_ok: bool = false
+var flag_si_fs_input: bool = false
+var flag_si_fs_output: bool = false
+var unit_prd: Object
+var power_result: Dictionary
+var control_timer: Timer = Timer.new()
+var ems_6666_timer: Timer = Timer.new()
+var machine_timer: Timer = Timer.new()
+var cc: int = 0
+var cmd_array: Array
+
+signal control_is_over()
+signal update_progress(progress_value: float)
+signal update_max_value_progress(max_progress_value: int)
+
+var progress_value: float:
+ set(v):
+ if progress_value != v:
+ progress_value = v
+ call_deferred('emit_signal', 'update_progress', v)
+
+var ecms: Dictionary
+var power_for_litera: Dictionary
+
+
+## Инициализация аргуметнов
+func _init(init_data: Dictionary, cmd_array_from_prd: Array) -> void:
+ unit_prd = init_data['unit_prd']
+ cmd_array = cmd_array_from_prd
+ _load_configuration()
+ _initialize_ray_mapping()
+ _initialize_power_structure()
+
+
+func _initialize_power_structure() -> void:
+ power_for_litera = {}
+ for litera in range(1, 8):
+ power_for_litera[litera] = {}
+ for ray_type in RAY_TYPES:
+ power_for_litera[litera][ray_type] = []
+
+
+func _ready() -> void:
+ _determine_self_name()
+ initialize_connections()
+ setup_timer()
+
+
+func _get_ray_key(machine_state: int) -> String:
+ return _ray_state_mapping.get(machine_state, "")
+
+
+func _load_configuration() -> void:
+ 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()
+ else:
+ push_error("Failed to parse JSON config: " + json.get_error_message())
+ else:
+ push_error("Failed to load config file: " + CONFIG_PATH)
+
+
+func _parse_config_data() -> void:
+ device_constants = config_data.get("device_constants", {})
+ base_configs = config_data.get("base_configs", {})
+ device_configs = config_data.get("device_configs", {})
+ data_indices = config_data.get("data_indices", {})
+ state_machine_enum = config_data.get("state_machine", {})
+ fs_keys = config_data.get("fs_keys", {})
+ temperature_constants = config_data.get("temperature_constants", {})
+ ems_input_bits_config = config_data.get("ems_input_bits_config", {})
+ fs_rules = config_data.get("fs_rules", [])
+
+
+func _initialize_ray_mapping() -> void:
+ _ray_state_mapping = {
+ state_machine_enum.get("UG_SET_RAY_0", 7): RAY_m5,
+ state_machine_enum.get("UG_SET_RAY_1", 8): RAY_5,
+ state_machine_enum.get("UG_SET_RAY_2", 9): RAY_15,
+ state_machine_enum.get("UG_SET_RAY_3", 10): RAY_25,
+ state_machine_enum.get("UG_SET_RAY_4", 11): RAY_35,
+ state_machine_enum.get("UG_SET_RAY_5", 12): RAY_45
}
- var block_ip_config_n:= {
- 'maa2000_1': [0, false],
- 'maa2000_2': [1, false],
- 'ip9_50_1': [2, false],
- 'ip9_50_2': [3, false],
- 'ip12_50_1': [4, false],
- 'ip5_25': [7, false],
+
+func _process(_delta: float) -> void:
+ pass
+
+
+## Пакеты от ЯУ-07
+func on_data_received(unit_pribor: Object) -> void:
+ var status: PackedByteArray = unit_pribor.status
+ 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)
+
+ if machine_timer.is_stopped():
+ return
+
+ _process_dkm_status(status)
+ if current_litera != 0:
+ var tek_litera: Dictionary = power_for_litera[current_litera]
+ var interes = _get_ray_key(state)
+ if interes != '':
+ tek_litera[_get_ray_key(state)] = power_um_ukp(status, current_litera, tek_litera[_get_ray_key(state)])
+ power_for_litera[current_litera] = tek_litera
+
+var ems_input_1: int
+var ems_input_2: int
+var ems_input_lit_1: int
+var ems_output_1: int
+var ems_output_2: int
+var ems_output_lit_1: int
+
+# Методы для работы с DataIndices из JSON
+func _get_data_index(key: String) -> int:
+ return data_indices.get(key, -1)
+
+func socket_status_ems_g(packet_form_yau_07: PackedByteArray) -> void:
+ if self_name in ['1н', '2н', '3н', '4н']:
+ ems_input_1 = (packet_form_yau_07.decode_u16(_get_data_index('IN_BLANK_PRD')) & (1 << 9)) != 0
+ ems_input_2 = (packet_form_yau_07.decode_u16(_get_data_index('IN_BLANK_PRD')) & (1 << 10)) != 0
+ if self_name in ['1в', '2в', '3в', '4в']:
+ ems_input_1 = (packet_form_yau_07.decode_u16(_get_data_index('IN_BLANK_PRD')) & (1 << 11)) != 0
+ ems_input_1 = (packet_form_yau_07.decode_u16(_get_data_index('IN_BLANK_PRD')) & (1 << 12)) != 0
+ if self_name in ['1к', '2к', '3к', '4к']:
+ ems_input_1 = (packet_form_yau_07.decode_u16(_get_data_index('IN_BLANK_PRD')) & (1 << 13)) != 0
+ ems_input_1 = (packet_form_yau_07.decode_u16(_get_data_index('IN_BLANK_PRD')) & (1 << 14)) != 0
+ ems_input_lit_1 = (packet_form_yau_07.decode_u16(_get_data_index('IN_BLANK_PRD')) & (1 << 8)) != 0
+
+ ems_output_1 = (packet_form_yau_07.decode_u16(_get_data_index('OUT_BLANK_PRD')) & (1 << 4)) != 0
+ ems_output_2 = (packet_form_yau_07.decode_u16(_get_data_index('OUT_BLANK_PRD')) & (1 << 5)) != 0
+ ems_output_lit_1 = (packet_form_yau_07.decode_u16(_get_data_index('OUT_BLANK_PRD')) & (1 << 3)) != 0
+
+ var number_socket_input: int
+ if current_litera >= 1 and current_litera <= 7:
+ number_socket_input = current_litera + 7
+
+ var in_blank: int = packet_form_yau_07.decode_u16(_get_data_index('IN_BLANK_PRD'))
+ flag_si_fs_input = (in_blank & (1 << number_socket_input)) != 0 ## Флаг СИ от ФС входа в ЭМС-Г для текущей литеры
+
+ var number_socket_output: int
+ number_socket_output = 4 if current_litera in [2, 4, 6] else 3 if current_litera == 1 else 5
+
+ var out_blank: int = packet_form_yau_07.decode_u16(_get_data_index('OUT_BLANK_PRD'))
+ flag_si_fs_output = (out_blank & (1 << number_socket_output)) != 0 ## Флаг Модуляции УМ ЭМС-Г для текущей литеры
+
+
+## Пакеты от MP550Service
+func on_fs_update_state(packet_type_7: Dictionary, fs_mapping: Dictionary) -> void:
+ var fs_key: String = fs_keys.get(str(current_litera), '')
+ if fs_key.is_empty():
+ return
+
+ var fs_result := {fs_key: 0}
+ fs_result = on_fs_state(packet_type_7, fs_mapping, fs_result, fs_rules)
+ control_results[fs_key] = fs_result[fs_key]
+ flag_fs_status_ok = control_results[fs_key] == 1
+
+##
+func state_control_machine() -> void:
+ match state:
+ state_machine_enum.INIT:
+ print("Start control for %s device %s litera" % [self_name, current_litera])
+ _handle_init_state()
+ state_machine_enum.FS_TURN_ON:
+ _handle_fs_turn_on_state()
+ state = state_machine_enum.FS_WORK
+ state_machine_enum.FS_WORK:
+ var flag_ecm: bool = false
+ for key in ecms:
+ var params = ecms[key].params.freq
+ if fs_parameters[current_litera].freq == params:
+ var kni = ecms[key].kni
+ if pribor_config[self_name].angle == kni:
+ flag_ecm = true
+ if flag_ecm and flag_fs_status_ok:
+ ems_6666_timer.start()
+ _handle_fs_work_state()
+ state_machine_enum.CHEK_KASSETA_Y5:
+ if block_kasseta_y5_config['yau07']:
+ state = state_machine_enum.WRITE_ISA
+ state_machine_enum.WRITE_ISA:
+ if not flag_write_isa:
+ _handle_ug_set_state(0x6)
+ state = state_machine_enum.READ_ISA
+ state_machine_enum.READ_ISA:
+ if (unit_prd.cmd_state == unit_prd.CmdState.DONE) or (unit_prd.cmd_state == unit_prd.CmdState.FAIL):
+ _handle_read_isa(unit_prd, [constants.ADDR_UG_LITERA_1, constants.ADDR_UG_LITERA_2, constants.ADDR_UG_LITERA_3], cmd_array)
+ flag_write_isa = false
+ state = state_machine_enum.UG_SET_RAY
+ state_machine_enum.UG_SET_RAY:
+ var addr: int = constants.ADDR_UG_LITERA_1
+ if current_litera == 3 or current_litera == 5 or current_litera == 7:
+ addr = constants.ADDR_UG_LITERA_2
+ if unit_prd.isa_ports.has(addr) and (unit_prd.cmd_state == unit_prd.CmdState.DONE):
+ if unit_prd.isa_ports[addr] & 0x07 == 0:
+ state = state_machine_enum.UG_SET_RAY_1
+ elif unit_prd.isa_ports[addr] & 0x07 == 1:
+ state = state_machine_enum.UG_SET_RAY_2
+ elif unit_prd.isa_ports[addr] & 0x07 == 2:
+ state = state_machine_enum.UG_SET_RAY_3
+ elif unit_prd.isa_ports[addr] & 0x07 == 3:
+ state = state_machine_enum.UG_SET_RAY_4
+ elif unit_prd.isa_ports[addr] & 0x07 == 4:
+ state = state_machine_enum.UG_SET_RAY_5
+ elif unit_prd.isa_ports[addr] & 0x07 == 5:
+ if not current_litera == 1:
+ control_results = check_dou_result(control_results, power_for_litera, self_name, current_litera, constants)
+ state = state_machine_enum.IN_EMS_STOP
+ elif unit_prd.isa_ports[addr] & 0x07 == 6:
+ state = state_machine_enum.UG_SET_RAY_0
+
+ state_machine_enum.UG_SET_RAY_0:
+ if flag_si_fs_input and not flag_write_isa:
+ control_timer.stop()
+ _handle_ug_set_state(0x0)
+ await get_tree().create_timer(0.5).timeout
+ state = state_machine_enum.READ_ISA
+ state_machine_enum.UG_SET_RAY_1:
+ if not flag_write_isa:
+ _handle_ug_set_state(0x1)
+ state = state_machine_enum.READ_ISA
+ state_machine_enum.UG_SET_RAY_2:
+ if not flag_write_isa:
+ _handle_ug_set_state(0x2)
+ state = state_machine_enum.READ_ISA
+ state_machine_enum.UG_SET_RAY_3:
+ if not flag_write_isa:
+ _handle_ug_set_state(0x3)
+ state = state_machine_enum.READ_ISA
+ state_machine_enum.UG_SET_RAY_4:
+ if not flag_write_isa:
+ _handle_ug_set_state(0x4)
+ state = state_machine_enum.READ_ISA
+ state_machine_enum.UG_SET_RAY_5:
+ if not flag_write_isa:
+ _handle_ug_set_state(0x5)
+ state = state_machine_enum.READ_ISA
+ state_machine_enum.IN_EMS_STOP:
+ ems_6666_timer.stop()
+ state = state_machine_enum.FS_TURN_OFF
+ state_machine_enum.FS_TURN_OFF:
+ ems_6666_timer.stop()
+ _handle_fs_turn_off_state()
+ state = state_machine_enum.STOP_CONTROL
+ state_machine_enum.STOP_CONTROL:
+ _handle_stop_control_state()
+ ## В машине состояний вызов изменения состояния прогресс бара контроля
+ progressbar_status()
+
+
+## 'Выполняется инициализация ФС-%s' % current_litera
+func _handle_init_state() -> void:
+ if current_litera in [1, 2, 3, 4, 5, 6, 7]:
+ if not ecms.size():
+ state = state_machine_enum.FS_TURN_ON
+ else:
+ control_results = on_control_result(block_ip_config, control_results)
+ power_result = prep_power(power_for_litera, self_name)
+ emit_signal('control_is_over')
+ machine_timer.stop()
+
+
+##'Выполняется включение ФС-%s' % current_litera
+func _handle_fs_turn_on_state() -> void:
+ manage_fs(true, self_name, pribor_config, fs_parameters, current_litera, constants.POWER_UM)
+ control_timer.wait_time = constants.TIMER_DELAY
+ control_timer.start()
+
+
+##'Выполняется проверка ФС-%s' % current_litera
+func _handle_fs_work_state() -> void:
+ if (current_litera == 2 and control_results.fs_2) or \
+ (current_litera == 3 and control_results.fs_3) or \
+ (current_litera == 4 and control_results.fs_4) or \
+ (current_litera == 5 and control_results.fs_5) or \
+ (current_litera == 6 and control_results.fs_6) or \
+ (current_litera == 7 and control_results.fs_7) or \
+ (current_litera == 1 and control_results.fs_1):
+ state = state_machine_enum.CHEK_KASSETA_Y5
+
+
+func _handle_ug_set_state(RAY_DOU_NUM: int) -> void:
+ var dic_att := {
+ 'RAY_DOU_NUM': RAY_DOU_NUM,
+ 'ADDR_UG_LITERA_1': constants.ADDR_UG_LITERA_1,
+ 'ADDR_UG_LITERA_2': constants.ADDR_UG_LITERA_2,
+ 'ADDR_UG_LITERA_3': constants.ADDR_UG_LITERA_3,
+ 'ATT_UM_3': 0x00,
+ 'BASE_EMS_G': constants.BASE_ADDR_EMS_G
}
- var block_kasseta_y5_prd_config_n: = {
- 'yau07': false,
- 'ems': false,
- 'ug': false,
- 'ukp1': false,
- 'ukp2': false,
- }
-
- # Результаты контроля
- var control_results_n: Dictionary = {
- 'block_ip': false, # Проверка касет П1 и ИП МА2000
- 'temperature': true, # Проверка температур УМ
- 'dkm_2': false,
- 'dkm_3': false,
- 'dou_2': false,
- 'dou_3': false,
- 'fs_2': 0,
- 'fs_3': 0,
- }
- ####
- var block_ip_config_v := {
- 'maa2000_1': [0, false],
- 'maa2000_2': [1, false],
- 'ip9_50_1': [2, false],
- 'ip9_50_2': [3, false],
- 'ip12_50_1': [4, false],
- 'ip5_25': [7, false],
- }
- var block_kasseta_y5_prd_config_v: = {
- 'yau07': false,
- 'ems': false,
- 'ug': false,
- 'ukp1': false,
- 'ukp2': false,
- }
- var control_results_v: Dictionary = {
- 'block_ip': false, # Проверка касет П1 и ИП МА2000
- 'temperature': true, # Проверка температур УМ
- 'dkm_4': false,
- 'dkm_5': false,
- 'dou_4': false,
- 'dou_5': false,
- 'fs_4': 0,
- 'fs_5': 0,
- }
- ####
- var block_kasseta_y5_prd_config_k: = {
- 'yau07': false,
- 'ems': false,
- 'ug': false,
- 'ukp1': false,
- 'ukp2': false,
- }
- var control_results_k: Dictionary = {
- 'block_ip': false, # Проверка касет П1 и ИП МА2000
- 'temperature': true,
- 'dkm_1': false,
- 'dkm_6': false,
- 'dkm_7': false,
- 'dou_6': false,
- 'dou_7': false,
- 'fs_1': 0,
- 'fs_6': 0,
- 'fs_7': 0,
- }
- var block_ip_config_k := {
- 'maa2000_1': [0, false],
- 'maa2000_2': [1, false],
- 'ip9_50_1': [2, false],
- 'ip9_50_2': [3, false],
- 'ip12_50_1': [4, false],
- 'ip9_50_3': [5, false],
- 'ip12_50_2': [6, false],
- 'ip5_25': [7, false],
- }
- ####
-
- const RAY_m5:= 'RAY_m5'
- const RAY_5:= 'RAY_5'
- const RAY_15:= 'RAY_15'
- const RAY_25:= 'RAY_25'
- const RAY_35:= 'RAY_35'
- const RAY_45:= 'RAY_45'
- enum DataIndices {
- STATUS_BOARD = 0,
- IN_BLANK_PRD = 1,
- IN_IMPULS_PRD = 7,
- OUT_BLANK_PRD = 13,
- OUT_IMPULS_PRD = 19,
- DRY_CONTACT = 27,
- DKM = 28,
- POWER_UKP_1 = 31,
- TEMPERATURE_UKP_1 = 47,
- POWER_UKP_2 = 63,
- TEMPERATURE_UKP_2 = 79,
- }
-
- enum STATE_MACHINE {
- INIT,
- FS_TURN_ON,
- FS_WORK,
- WRITE_ISA,
- READ_ISA,
- CHEK_KASSETA_Y5,
- UG_SET_RAY,
- UG_SET_RAY_0,
- UG_SET_RAY_1,
- UG_SET_RAY_2,
- UG_SET_RAY_3,
- UG_SET_RAY_4,
- UG_SET_RAY_5,
- IN_EMS_RUN,
- IN_EMS_STOP,
- FS_TURN_OFF,
- STOP_CONTROL,
- AWAIT
- }
- const FS_KEYS := {
- 1: 'fs_1',
- 2: 'fs_2',
- 3: 'fs_3',
- 4: 'fs_4',
- 5: 'fs_5',
- 6: 'fs_6',
- 7: 'fs_7'
- }
- const TEMPERATURE_CONSTANTS := {
- 'CONST_MIN_TEMP': -25,
- 'MAXIMUM_CODE_ADC': 3796,
- 'MINIMUM_CODE_AD': 2660,
- 'TEMPERATURE_UKP_1': 47,
- 'TEMPERATURE_UKP_2': 79,
- }
-
- var power_for_litera: Dictionary = {
- 1: {RAY_m5: [], RAY_5: [], RAY_15: [], RAY_25: [], RAY_35: [], RAY_45: [],},
- 2: {RAY_m5: [], RAY_5: [], RAY_15: [], RAY_25: [], RAY_35: [], RAY_45: [],},
- 3: {RAY_m5: [], RAY_5: [], RAY_15: [], RAY_25: [], RAY_35: [], RAY_45: [],},
- 4: {RAY_m5: [], RAY_5: [], RAY_15: [], RAY_25: [], RAY_35: [], RAY_45: [],},
- 5: {RAY_m5: [], RAY_5: [], RAY_15: [], RAY_25: [], RAY_35: [], RAY_45: [],},
- 6: {RAY_m5: [], RAY_5: [], RAY_15: [], RAY_25: [], RAY_35: [], RAY_45: [],},
- 7: {RAY_m5: [], RAY_5: [], RAY_15: [], RAY_25: [], RAY_35: [], RAY_45: [],},
- }
- var constants: Dictionary
- var pribor_config: Dictionary
- var fs_parameters: Dictionary
- var block_ip_config: Dictionary
- var block_kasseta_y5_config: Dictionary
- var control_results: Dictionary
- var self_name: String
- var state: int = STATE_MACHINE.INIT
- var current_litera: int
- var flag_write_isa: bool = false
- var flag_fs_status_ok: bool = false
- var flag_si_fs_input: bool = false
- var flag_si_fs_output: bool = false
- var unit_prd: Object
- var power_result: Dictionary
- var control_timer: Timer = Timer.new()
- var ems_6666_timer: Timer = Timer.new()
- var machine_timer: Timer = Timer.new()
- var cc: int = 0
- var cmd_array: Array
-
- signal control_is_over()
- signal update_progress(progress_value: float)
- signal update_max_value_progress(max_progress_value: int)
-
- var progress_value: float:
- set(v):
- if progress_value != v:
- progress_value = v
- call_deferred('emit_signal', 'update_progress', v)
+ if self_name == '1к' or self_name == '2к' or self_name == '3к' or self_name == '4к':
+ dic_att['ATT_UM_1'] = constants.ATT_UM_6
+ dic_att['ATT_UM_2'] = constants.ATT_UM_7
+ dic_att['ATT_UM_3'] = constants.ATT_UM_1
+ elif self_name == '1в' or self_name == '2в' or self_name == '3в' or self_name == '4в':
+ dic_att['ATT_UM_1'] = constants.ATT_UM_4
+ dic_att['ATT_UM_2'] = constants.ATT_UM_5
+ elif self_name == '1н' or self_name == '2н' or self_name == '3н' or self_name == '4н':
+ dic_att['ATT_UM_1'] = constants.ATT_UM_2
+ dic_att['ATT_UM_2'] = constants.ATT_UM_3
+ flag_write_isa = on_ug_setting(unit_prd, dic_att, cmd_array)
- var ecms: Dictionary ## Словарь помеховых воздействий
-
- ## Инициализация аргуметнов
- func _init(init_data: Dictionary, cmd_array_from_prd: Array) -> void:
- unit_prd = init_data['unit_prd']
- cmd_array = cmd_array_from_prd
+## Таймер отправки команды в ЭМС-Г для модуляции
+func _on_ems_6666_timer() -> void:
+ cmd_array.append([unit_prd.CmdCode.WRITE_ISA, [constants.BASE_ADDR_EMS_G, 6666]])
- func _ready() -> void:
- _determine_self_name()
- initialize_connections()
- setup_timer()
+## Таймер вызова машины состояний
+func on_state_mashine():
+ state_control_machine()
- func _process(_delta: float) -> void:
+func progressbar_status() -> void:
+ match state:
+ state_machine_enum.INIT:
+ cc += 10 if current_litera in [3, 5, 6, 7] else 0
+ if control_timer.get_time_left() > 0:
+ progress_value = cc + control_timer.get_wait_time() - control_timer.get_time_left()
+ if current_litera == 0:
+ progress_value = 0
+
+
+##'Выполняется отключение ФС-%s' % current_litera
+func _handle_fs_turn_off_state() -> void:
+ flag_fs_status_ok = false
+ manage_fs(false, self_name, pribor_config, fs_parameters, current_litera, constants.POWER_UM)
+
+
+##'Выполняется завершение проверки ФС-%s' % current_litera
+func _handle_stop_control_state() -> void:
+ _advance_to_next_fs()
+ state = state_machine_enum.INIT
+
+
+func _advance_to_next_fs() -> void:
+ match current_litera:
+ 1: current_litera = 6
+ 2: current_litera = 3
+ 3: current_litera = 0
+ 4: current_litera = 5
+ 5: current_litera = 0
+ 6: current_litera = 7
+ 7: current_litera = 0
+
+
+######################################
+func initialize_connections() -> void:
+ var fs_mapping = _create_fs_mapping(self_name)
+ signaller.conn(signaller.fs_update_state, Callable(self, 'on_fs_update_state').bind(fs_mapping))
+ signaller.conn(signaller.start_contol_device, Callable(self, '_on_start_contol_device'))
+ interfer.connect('interfer_resized', Callable(self, 'on_interfer_resized'))
+ unit_prd.connect('data_received', Callable(self, 'on_data_received'))
+
+ var mode_signals = ['режим_работа', 'режим_журнал', 'режим_эмс', 'режим_настройки']
+ for signal_name in mode_signals:
+ signaller.connect(signal_name, Callable(self, 'on_mode_changed').bind(false))
+ signaller.connect('режим_контроль', Callable(self, 'on_mode_changed').bind(true))
+
+
+func on_interfer_resized(ecms_dic: Dictionary) -> void:
+ ecms = ecms_dic
+
+
+func _on_start_contol_device()-> void:
+ _determine_self_name()
+ machine_timer.wait_time = constants.STATE_MASHINE_TIMER
+ machine_timer.start()
+
+
+func _determine_self_name() -> void:
+ cc = 0
+ state = state_machine_enum.get("INIT", 0)
+ var current_unit = unit_prd.name
+ var parts = current_unit.split('-')
+ self_name = parts[-1]
+
+ var device_type: String = _get_device_type()
+ if device_type.is_empty():
+ return
+
+ var device_config = device_constants.get(device_type, {})
+ var device_data_config = device_configs.get(device_type, {})
+
+ # Загружаем конфигурацию устройства
+ constants = device_config.get("constants", {})
+ pribor_config = device_config.get("pribor_config", {})
+
+ # Конвертируем fs_params ключи в int
+ var raw_fs_params = device_config.get("fs_params", {})
+ fs_parameters = {}
+ for key in raw_fs_params:
+ fs_parameters[int(key)] = raw_fs_params[key]
+
+ # Загружаем конфигурации блоков
+ block_ip_config = _load_block_config(device_data_config.get("block_ip", {}), "block_ip")
+ block_kasseta_y5_config = _load_block_config(device_data_config.get("block_kasseta", {}), "block_kasseta")
+ control_results = device_data_config.get("control_results", {})
+ current_litera = device_config.get("start_litera", 0)
+
+ progress_value = 0
+ call_deferred('emit_signal', 'update_max_value_progress', device_config.get("progress_max", 20))
+
+
+func _load_block_config(config, config_type: String) -> Dictionary:
+ if config is String and config == "base":
+ return base_configs.get(config_type, {}).duplicate(true)
+ elif config is Dictionary:
+ return config.duplicate(true)
+ return {}
+
+
+func _get_device_type() -> String:
+ if self_name.ends_with('н'): return 'PRD_N'
+ elif self_name.ends_with('в'): return 'PRD_V'
+ elif self_name.ends_with('к'): return 'PRD_K'
+ return ''
+
+
+func setup_timer() -> void:
+ add_child(control_timer)
+ control_timer.timeout.connect(on_stop_control)
+ control_timer.one_shot = true
+ control_timer.wait_time = constants.get("TIMER_DELAY", 10.0)
+
+ add_child(ems_6666_timer)
+ ems_6666_timer.timeout.connect(_on_ems_6666_timer)
+ ems_6666_timer.wait_time = 1.0
+
+ add_child(machine_timer)
+ machine_timer.connect('timeout', Callable(self, 'on_state_mashine'))
+
+
+func on_mode_changed(in_tree: bool) -> void:
+ if not in_tree: ## TODO: Дополнительная проверка если контроль идет, если нет, то смысла вызывать нет
+ progress_value = 0
+ machine_timer.stop()
+ state = state_machine_enum.INIT
+ _handle_fs_turn_off_state()
+ #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]])
+ else:
pass
- ## Пакеты от ЯУ-07
- func on_data_received(unit_pribor: Object) -> void:
- var status: PackedByteArray = unit_pribor.status
- socket_status_ems_g(status)
- if machine_timer.is_stopped():
- return
-
- block_kasseta_y5_config = check_block_kasseta_y5(status, block_kasseta_y5_config)
- block_ip_config = check_block_ip(status, block_ip_config)
-
- _process_dkm_status(status)
- if current_litera != 0:
- var tek_litera: Dictionary = power_for_litera[current_litera]
- var interes = _get_ray_key(state)
- if interes != '':
- tek_litera[_get_ray_key(state)] = power_um_ukp(status, current_litera, tek_litera[_get_ray_key(state)])
- power_for_litera[current_litera] = tek_litera
-
- var ems_input_1: int
- var ems_input_2: int
- var ems_input_lit_1: int
- var ems_output_1: int
- var ems_output_2: int
- var ems_output_lit_1: int
-
- func socket_status_ems_g(packet_form_yau_07: PackedByteArray) -> void:
- if self_name in ['1н', '2н', '3н', '4н']:
- ems_input_1 = (packet_form_yau_07.decode_u16(DataIndices.IN_BLANK_PRD) & (1 << 9)) != 0
- ems_input_2 = (packet_form_yau_07.decode_u16(DataIndices.IN_BLANK_PRD) & (1 << 10)) != 0
- if self_name in ['1в', '2в', '3в', '4в']:
- ems_input_1 = (packet_form_yau_07.decode_u16(DataIndices.IN_BLANK_PRD) & (1 << 11)) != 0
- ems_input_1 = (packet_form_yau_07.decode_u16(DataIndices.IN_BLANK_PRD) & (1 << 12)) != 0
- if self_name in ['1к', '2к', '3к', '4к']:
- ems_input_1 = (packet_form_yau_07.decode_u16(DataIndices.IN_BLANK_PRD) & (1 << 13)) != 0
- ems_input_1 = (packet_form_yau_07.decode_u16(DataIndices.IN_BLANK_PRD) & (1 << 14)) != 0
- ems_input_lit_1 = (packet_form_yau_07.decode_u16(DataIndices.IN_BLANK_PRD) & (1 << 8)) != 0
-
- ems_output_1 = (packet_form_yau_07.decode_u16(DataIndices.OUT_BLANK_PRD) & (1 << 4)) != 0
- ems_output_2 = (packet_form_yau_07.decode_u16(DataIndices.OUT_BLANK_PRD) & (1 << 5)) != 0
- ems_output_lit_1 = (packet_form_yau_07.decode_u16(DataIndices.OUT_BLANK_PRD) & (1 << 3)) != 0
-
- var number_socket_input: int
- if current_litera >= 1 and current_litera <= 7:
- number_socket_input = current_litera + 7
-
- var in_blank: int = packet_form_yau_07.decode_u16(DataIndices.IN_BLANK_PRD)
- flag_si_fs_input = (in_blank & (1 << number_socket_input)) != 0 ## Флаг СИ от ФС входа в ЭМС-Г для текущей литеры
-
- var number_socket_output: int
- number_socket_output = 4 if current_litera in [2, 4, 6] else 3 if current_litera == 1 else 5
-
- var out_blank: int = packet_form_yau_07.decode_u16(DataIndices.OUT_BLANK_PRD)
- flag_si_fs_output = (out_blank & (1 << number_socket_output)) != 0 ## Флаг Модуляции УМ ЭМС-Г для текущей литеры
-
-
- ## Пакеты от MP550Service
- func on_fs_update_state(packet_type_7: Dictionary, fs_mapping: Dictionary) -> void:
- var fs_key: String = FS_KEYS.get(current_litera, '')
- if fs_key.is_empty():
- return
-
- var fs_result := {fs_key: 0}
- fs_result = on_fs_state(packet_type_7, fs_mapping, fs_result)
- control_results[fs_key] = fs_result[fs_key]
- flag_fs_status_ok = control_results[fs_key] == 1
-
- ##
- func state_control_machine() -> void:
- match state:
- STATE_MACHINE.INIT:
- print("Start control for %s device %s litera" % [self_name, current_litera])
- _handle_init_state()
- STATE_MACHINE.FS_TURN_ON:
- _handle_fs_turn_on_state()
- state = STATE_MACHINE.FS_WORK
- STATE_MACHINE.FS_WORK:
- var flag_ecm: bool = false
- for key in ecms:
- var params = ecms[key].params.freq
- if fs_parameters[current_litera].freq == params:
- var kni = ecms[key].kni
- if pribor_config[self_name].angle == kni:
- flag_ecm = true
- if flag_ecm and flag_fs_status_ok:
- ems_6666_timer.start()
- _handle_fs_work_state()
- STATE_MACHINE.CHEK_KASSETA_Y5:
- if block_kasseta_y5_config['yau07']:
- state = STATE_MACHINE.WRITE_ISA
- STATE_MACHINE.WRITE_ISA:
- if not flag_write_isa:
- _handle_ug_set_state(0x6)
- state = STATE_MACHINE.READ_ISA
- STATE_MACHINE.READ_ISA:
- if (unit_prd.cmd_state == unit_prd.CmdState.DONE) or (unit_prd.cmd_state == unit_prd.CmdState.FAIL):
- _handle_read_isa(unit_prd, [constants.ADDR_UG_LITERA_1, constants.ADDR_UG_LITERA_2, constants.ADDR_UG_LITERA_3], cmd_array)
- flag_write_isa = false
- state = STATE_MACHINE.UG_SET_RAY
- STATE_MACHINE.UG_SET_RAY:
- var addr: int = constants.ADDR_UG_LITERA_1
- if current_litera == 3 or current_litera == 5 or current_litera == 7:
- addr = constants.ADDR_UG_LITERA_2
- if unit_prd.isa_ports.has(addr) and (unit_prd.cmd_state == unit_prd.CmdState.DONE):
- if unit_prd.isa_ports[addr] & 0x07 == 0:
- state = STATE_MACHINE.UG_SET_RAY_1
- elif unit_prd.isa_ports[addr] & 0x07 == 1:
- state = STATE_MACHINE.UG_SET_RAY_2
- elif unit_prd.isa_ports[addr] & 0x07 == 2:
- state = STATE_MACHINE.UG_SET_RAY_3
- elif unit_prd.isa_ports[addr] & 0x07 == 3:
- state = STATE_MACHINE.UG_SET_RAY_4
- elif unit_prd.isa_ports[addr] & 0x07 == 4:
- state = STATE_MACHINE.UG_SET_RAY_5
- elif unit_prd.isa_ports[addr] & 0x07 == 5:
- if not current_litera == 1:
- control_results = check_dou_result(control_results, power_for_litera, self_name, current_litera, constants)
- state = STATE_MACHINE.IN_EMS_STOP
- elif unit_prd.isa_ports[addr] & 0x07 == 6:
- state = STATE_MACHINE.UG_SET_RAY_0
-
- STATE_MACHINE.UG_SET_RAY_0:
- if flag_si_fs_input and not flag_write_isa:
- control_timer.stop()
- _handle_ug_set_state(0x0)
- await get_tree().create_timer(0.5).timeout
- state = STATE_MACHINE.READ_ISA
- STATE_MACHINE.UG_SET_RAY_1:
- if not flag_write_isa:
- _handle_ug_set_state(0x1)
- state = STATE_MACHINE.READ_ISA
- STATE_MACHINE.UG_SET_RAY_2:
- if not flag_write_isa:
- _handle_ug_set_state(0x2)
- state = STATE_MACHINE.READ_ISA
- STATE_MACHINE.UG_SET_RAY_3:
- if not flag_write_isa:
- _handle_ug_set_state(0x3)
- state = STATE_MACHINE.READ_ISA
- STATE_MACHINE.UG_SET_RAY_4:
- if not flag_write_isa:
- _handle_ug_set_state(0x4)
- state = STATE_MACHINE.READ_ISA
- STATE_MACHINE.UG_SET_RAY_5:
- if not flag_write_isa:
- _handle_ug_set_state(0x5)
- state = STATE_MACHINE.READ_ISA
- STATE_MACHINE.IN_EMS_STOP:
- ems_6666_timer.stop()
- state = STATE_MACHINE.FS_TURN_OFF
- STATE_MACHINE.FS_TURN_OFF:
- ems_6666_timer.stop()
- _handle_fs_turn_off_state()
- state = STATE_MACHINE.STOP_CONTROL
- STATE_MACHINE.STOP_CONTROL:
- _handle_stop_control_state()
- ## В машине состояний вызов изменения состояния контроля
- progressbar_status()
-
-
- ## 'Выполняется инициализация ФС-%s' % current_litera
- func _handle_init_state() -> void:
- if current_litera in [1, 2, 3, 4, 5, 6, 7]:
- if not ecms.size():
- state = STATE_MACHINE.FS_TURN_ON
- else:
- control_results = on_control_result(block_ip_config, control_results)
- power_result = prep_power(power_for_litera, self_name)
- emit_signal('control_is_over')
- machine_timer.stop()
-
-
- ##'Выполняется включение ФС-%s' % current_litera
- func _handle_fs_turn_on_state() -> void:
- manage_fs(true, self_name, pribor_config, fs_parameters, current_litera, constants.POWER_UM)
- control_timer.wait_time = constants.TIMER_DELAY
- control_timer.start()
-
-
- ##'Выполняется проверка ФС-%s' % current_litera
- func _handle_fs_work_state() -> void:
- if (current_litera == 2 and control_results.fs_2) or \
- (current_litera == 3 and control_results.fs_3) or \
- (current_litera == 4 and control_results.fs_4) or \
- (current_litera == 5 and control_results.fs_5) or \
- (current_litera == 6 and control_results.fs_6) or \
- (current_litera == 7 and control_results.fs_7) or \
- (current_litera == 1 and control_results.fs_1):
- state = STATE_MACHINE.CHEK_KASSETA_Y5
-
-
- func _handle_ug_set_state(RAY_DOU_NUM: int) -> void:
- var dic_att := {
- 'RAY_DOU_NUM': RAY_DOU_NUM,
- 'ADDR_UG_LITERA_1': constants.ADDR_UG_LITERA_1,
- 'ADDR_UG_LITERA_2': constants.ADDR_UG_LITERA_2,
- 'ADDR_UG_LITERA_3': constants.ADDR_UG_LITERA_3,
- 'ATT_UM_3': 0x00,
- 'BASE_EMS_G': constants.BASE_ADDR_EMS_G
- }
- if self_name == '1к' or self_name == '2к' or self_name == '3к' or self_name == '4к':
- dic_att['ATT_UM_1'] = constants.ATT_UM_6
- dic_att['ATT_UM_2'] = constants.ATT_UM_7
- dic_att['ATT_UM_3'] = constants.ATT_UM_1
- elif self_name == '1в' or self_name == '2в' or self_name == '3в' or self_name == '4в':
- dic_att['ATT_UM_1'] = constants.ATT_UM_4
- dic_att['ATT_UM_2'] = constants.ATT_UM_5
- elif self_name == '1н' or self_name == '2н' or self_name == '3н' or self_name == '4н':
- dic_att['ATT_UM_1'] = constants.ATT_UM_2
- dic_att['ATT_UM_2'] = constants.ATT_UM_3
- flag_write_isa = on_ug_setting(unit_prd, dic_att, cmd_array)
-
-
- ## Таймер отправки команды в ЭМС-Г для модуляции
- func _on_ems_6666_timer() -> void:
- cmd_array.append([unit_prd.CmdCode.WRITE_ISA, [constants.BASE_ADDR_EMS_G, 6666]])
-
-
- ## Таймер вызова машины состояний
- func on_state_mashine():
- state_control_machine()
-
-
- func progressbar_status() -> void:
- match state:
- STATE_MACHINE.INIT:
- cc += 10 if current_litera in [3, 5, 6, 7] else 0
- if control_timer.get_time_left() > 0:
- progress_value = cc + control_timer.get_wait_time() - control_timer.get_time_left()
- if current_litera == 0:
- progress_value = 0
-
-
- ##'Выполняется отключение ФС-%s' % current_litera
- func _handle_fs_turn_off_state() -> void:
- flag_fs_status_ok = false
- manage_fs(false, self_name, pribor_config, fs_parameters, current_litera, constants.POWER_UM)
-
-
- ##'Выполняется завершение проверки ФС-%s' % current_litera
- func _handle_stop_control_state() -> void:
- _advance_to_next_fs()
- state = STATE_MACHINE.INIT
-
-
- func _advance_to_next_fs() -> void:
- match current_litera:
- 1: current_litera = 6
- 2: current_litera = 3
- 3: current_litera = 0
- 4: current_litera = 5
- 5: current_litera = 0
- 6: current_litera = 7
- 7: current_litera = 0
-
-
- ######################################
- func initialize_connections() -> void:
- var fs_mapping = _create_fs_mapping(self_name)
- signaller.conn(signaller.fs_update_state, Callable(self, 'on_fs_update_state').bind(fs_mapping))
- signaller.conn(signaller.start_contol_device, Callable(self, '_on_start_contol_device'))
- interfer.connect('interfer_resized', Callable(self, 'on_interfer_resized'))
- unit_prd.connect('data_received', Callable(self, 'on_data_received'))
- signaller.connect('режим_работа', Callable(self, 'on_mode_changed').bind(false))
- signaller.connect('режим_журнал', Callable(self, 'on_mode_changed').bind(false))
- signaller.connect('режим_эмс', Callable(self, 'on_mode_changed').bind(false))
- signaller.connect('режим_настройки', Callable(self, 'on_mode_changed').bind(false))
- signaller.connect('режим_контроль', Callable(self, 'on_mode_changed').bind(true))
-
-
- func on_interfer_resized(ecms_dic: Dictionary) -> void:
- ecms = ecms_dic
-
-
- func _on_start_contol_device()-> void:
- _determine_self_name()
- machine_timer.wait_time = constants.STATE_MASHINE_TIMER
- machine_timer.start()
-
-
- func _determine_self_name() -> void:
- cc = 0
- state = STATE_MACHINE.INIT
- var current_unit = unit_prd.name
- var parts = current_unit.split('-')
- self_name = parts[-1]
- if self_name == '1н' or self_name == '2н' or self_name == '3н' or self_name == '4н':
- progress_value = 0
- call_deferred('emit_signal', 'update_max_value_progress', 20)
- constants = DEVICE_CONSTANT.PRD_N.CONSTANTS
- pribor_config = DEVICE_CONSTANT.PRD_N.PRIBOR_CONFIG
- fs_parameters = DEVICE_CONSTANT.PRD_N.FS_PARAMS
- block_ip_config = block_ip_config_n
- block_kasseta_y5_config = block_kasseta_y5_prd_config_n
- control_results = control_results_n
- current_litera = DEVICE_CONSTANT.PRD_N.START_LITERA
- if self_name == '1в' or self_name == '2в' or self_name == '3в' or self_name == '4в':
- progress_value = 0
- call_deferred('emit_signal', 'update_max_value_progress', 20)
- constants = DEVICE_CONSTANT.PRD_V.CONSTANTS
- pribor_config = DEVICE_CONSTANT.PRD_V.PRIBOR_CONFIG
- fs_parameters = DEVICE_CONSTANT.PRD_V.FS_PARAMS
- block_ip_config = block_ip_config_v
- block_kasseta_y5_config = block_kasseta_y5_prd_config_v
- control_results = control_results_v
- current_litera = DEVICE_CONSTANT.PRD_V.START_LITERA
- if self_name == '1к' or self_name == '2к' or self_name == '3к' or self_name == '4к':
- progress_value = 0
- call_deferred('emit_signal', 'update_max_value_progress', 30)
- constants = DEVICE_CONSTANT.PRD_K.CONSTANTS
- pribor_config = DEVICE_CONSTANT.PRD_K.PRIBOR_CONFIG
- fs_parameters = DEVICE_CONSTANT.PRD_K.FS_PARAMS
- block_ip_config = block_ip_config_k
- block_kasseta_y5_config = block_kasseta_y5_prd_config_n
- control_results = control_results_k
- current_litera = DEVICE_CONSTANT.PRD_K.START_LITERA
-
-
- func setup_timer() -> void:
- add_child(control_timer)
- control_timer.timeout.connect(on_stop_control)
- control_timer.one_shot = true
- control_timer.wait_time = constants.TIMER_DELAY
-
- add_child(ems_6666_timer)
- ems_6666_timer.timeout.connect(_on_ems_6666_timer)
- ems_6666_timer.wait_time = 1.0
-
- add_child(machine_timer)
- machine_timer.connect('timeout', Callable(self, 'on_state_mashine'))
-
-
- func on_mode_changed(in_tree: bool) -> void:
- if not in_tree: ## TODO: Дополнительная проверка если контроль идет, если нет, то смысла вызывать нет
- progress_value = 0
- machine_timer.stop()
- state = STATE_MACHINE.INIT
- _handle_fs_turn_off_state()
- #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]])
- else:
- pass
-
-
- func _process_dkm_status(status: PackedByteArray) -> void:
- if not control_results.has(_get_current_fs_key()):
- return
- var dkm_bit = _get_dkm_bit_for_current_fs(current_litera, constants)
- if dkm_bit == 0:
- control_results['dkm_1'] = check_dkm(status, dkm_bit)
-
- var addr: int = constants.ADDR_UG_LITERA_1
- if current_litera == 3 or current_litera == 5 or current_litera == 7:
- addr = constants.ADDR_UG_LITERA_2
- if not unit_prd.isa_ports.has(addr) or not (unit_prd.cmd_state == unit_prd.CmdState.DONE):
- return
- if not unit_prd.isa_ports[addr] & 0x07 == 6: return
-
- if dkm_bit == 1:
- control_results['dkm_2'] = check_dkm(status, dkm_bit)
- elif dkm_bit == 2:
- control_results['dkm_3'] = check_dkm(status, dkm_bit)
- elif dkm_bit == 3:
- control_results['dkm_4'] = check_dkm(status, dkm_bit)
- elif dkm_bit == 4:
- control_results['dkm_5'] = check_dkm(status, dkm_bit)
- elif dkm_bit == 5:
- control_results['dkm_6'] = check_dkm(status, dkm_bit)
- elif dkm_bit == 6:
- control_results['dkm_7'] = check_dkm(status, dkm_bit)
-
-
- func _get_current_fs_key() -> String:
- return FS_KEYS.get(current_litera, '')
-
-
- static func _get_dkm_bit_for_current_fs(litera: int, constants_dic: Dictionary) -> int:
- match litera:
- 1: return constants_dic.DKM_BIT_1
- 2: return constants_dic.DKM_BIT_2
- 3: return constants_dic.DKM_BIT_3
- 4: return constants_dic.DKM_BIT_4
- 5: return constants_dic.DKM_BIT_5
- 6: return constants_dic.DKM_BIT_6
- 7: return constants_dic.DKM_BIT_7
- _: return -1
-
-
- static func _get_ray_key(machine_state: int) -> String:
- match machine_state:
- STATE_MACHINE.UG_SET_RAY_0: return RAY_m5
- STATE_MACHINE.UG_SET_RAY_1: return RAY_5
- STATE_MACHINE.UG_SET_RAY_2: return RAY_15
- STATE_MACHINE.UG_SET_RAY_3: return RAY_25
- STATE_MACHINE.UG_SET_RAY_4: return RAY_35
- STATE_MACHINE.UG_SET_RAY_5: return RAY_45
- _: return ''
-
-
- func on_stop_control() -> void:
- _handle_fs_turn_off_state()
- state = STATE_MACHINE.FS_TURN_OFF
-
-
- static func on_control_result(ip_config: Dictionary, ctrl_results: Dictionary) -> Dictionary:
- var all_blocks_ip_ok = true
-
- for block in ip_config:
- if not ip_config[block][1]:
- all_blocks_ip_ok = false
- ctrl_results['block_ip'] = all_blocks_ip_ok
- return ctrl_results
-
-
- ## Установка угла и аттенюации для УМ
- static func on_ug_setting(prd_unit: Object, settings_ug: Dictionary, prd_cmd_array: Array) -> bool:
- var result_1 = ((settings_ug.ATT_UM_1 & 0x07) << 3) | (settings_ug.RAY_DOU_NUM & 0x07)
- var result_2 = ((settings_ug.ATT_UM_2 & 0x07) << 3) | (settings_ug.RAY_DOU_NUM & 0x07)
- prd_cmd_array.append([prd_unit.CmdCode.WRITE_ISA, [ settings_ug.ADDR_UG_LITERA_1, result_1,
- settings_ug.ADDR_UG_LITERA_2, result_2,
- settings_ug.ADDR_UG_LITERA_3, settings_ug.ATT_UM_3,
- ]
+func _process_dkm_status(status: PackedByteArray) -> void:
+ if not control_results.has(_get_current_fs_key()):
+ return
+ var dkm_bit = _get_dkm_bit_for_current_fs(current_litera, constants)
+ if dkm_bit == 0:
+ control_results['dkm_1'] = check_dkm(status, dkm_bit)
+
+ var addr: int = constants.ADDR_UG_LITERA_1
+ if current_litera == 3 or current_litera == 5 or current_litera == 7:
+ addr = constants.ADDR_UG_LITERA_2
+ if not unit_prd.isa_ports.has(addr) or not (unit_prd.cmd_state == unit_prd.CmdState.DONE):
+ return
+ if not unit_prd.isa_ports[addr] & 0x07 == 6: return
+
+ if dkm_bit == 1:
+ control_results['dkm_2'] = check_dkm(status, dkm_bit)
+ elif dkm_bit == 2:
+ control_results['dkm_3'] = check_dkm(status, dkm_bit)
+ elif dkm_bit == 3:
+ control_results['dkm_4'] = check_dkm(status, dkm_bit)
+ elif dkm_bit == 4:
+ control_results['dkm_5'] = check_dkm(status, dkm_bit)
+ elif dkm_bit == 5:
+ control_results['dkm_6'] = check_dkm(status, dkm_bit)
+ elif dkm_bit == 6:
+ control_results['dkm_7'] = check_dkm(status, dkm_bit)
+
+
+func _get_current_fs_key() -> String:
+ return fs_keys.get(str(current_litera), '')
+
+
+static func _get_dkm_bit_for_current_fs(litera: int, constants_dic: Dictionary) -> int:
+ match litera:
+ 1: return constants_dic.DKM_BIT_1
+ 2: return constants_dic.DKM_BIT_2
+ 3: return constants_dic.DKM_BIT_3
+ 4: return constants_dic.DKM_BIT_4
+ 5: return constants_dic.DKM_BIT_5
+ 6: return constants_dic.DKM_BIT_6
+ 7: return constants_dic.DKM_BIT_7
+ _: return -1
+
+
+func on_stop_control() -> void:
+ _handle_fs_turn_off_state()
+ state = state_machine_enum.FS_TURN_OFF
+
+
+static func on_control_result(ip_config: Dictionary, ctrl_results: Dictionary) -> Dictionary:
+ var all_blocks_ip_ok = true
+
+ for block in ip_config:
+ if not ip_config[block][1]:
+ all_blocks_ip_ok = false
+ ctrl_results['block_ip'] = all_blocks_ip_ok
+ return ctrl_results
+
+
+## Установка угла и аттенюации для УМ
+static func on_ug_setting(prd_unit: Object, settings_ug: Dictionary, prd_cmd_array: Array) -> bool:
+ var result_1 = ((settings_ug.ATT_UM_1 & 0x07) << 3) | (settings_ug.RAY_DOU_NUM & 0x07)
+ var result_2 = ((settings_ug.ATT_UM_2 & 0x07) << 3) | (settings_ug.RAY_DOU_NUM & 0x07)
+ prd_cmd_array.append([prd_unit.CmdCode.WRITE_ISA, [ settings_ug.ADDR_UG_LITERA_1, result_1,
+ settings_ug.ADDR_UG_LITERA_2, result_2,
+ settings_ug.ADDR_UG_LITERA_3, settings_ug.ATT_UM_3,
+ ]
+ ])
+ return true
+
+
+static func _handle_read_isa(prd_unit: Object, read_isa_ports: Array, prd_cmd_array) -> void:
+ prd_cmd_array.append([prd_unit.CmdCode.READ_ISA, read_isa_ports])
+
+
+## Управаление модулем фс (включить/отключить излучение)
+static func manage_fs(mode: bool, pribor: String, p_conf: Dictionary, fs_params: Dictionary, litera: int, power_um: int) -> void:
+ # Получаем конфигурацию для текущего прибора
+ var config: Dictionary = p_conf[pribor]
+ var angle: float = config.angle
+ var sectors: Array = config.sectors
+
+ # Формируем выходные данные
+ var interfer_name: String = 'k1' if mode else 'off'
+ var fs_arr: Array = []
+
+ if litera in fs_params:
+ var params = fs_params[litera]
+ fs_arr.append([
+ angle,
+ params.freq,
+ params.width,
+ sectors[litera - 1] if litera == 1 else sectors[litera - 5] if litera > 5 else sectors[litera - 4] if litera > 3 else sectors[litera - 2]
])
- return true
+ #signaller.emit_signal('emit_changed', mode)
+ signaller.emit_signal('interfer_init', interfer_name, fs_arr, power_um)
- static func _handle_read_isa(prd_unit: Object, read_isa_ports: Array, prd_cmd_array) -> void:
- prd_cmd_array.append([prd_unit.CmdCode.READ_ISA, read_isa_ports])
+## Проверка касет П1 и ИП МА2000
+static func check_block_ip(status_prd: PackedByteArray, ip_config: Dictionary) -> Dictionary:
+ # Конфигурация проверяемых блоков
+ var byte_dry: int = 27
+ var ug_valid: bool = (status_prd[0] >> 1) & 1
+ for block in ip_config:
+ var bit: int = ip_config[block][0]
+ if ug_valid:
+ var status = status_prd[byte_dry] >> bit & 1
+ ip_config[block][1] = false if status else true
+ return ip_config
- ## Управаление модулем фс (включить/отключить излучение)
- static func manage_fs(mode: bool, pribor: String, p_conf: Dictionary, fs_params: Dictionary, litera: int, power_um: int) -> void:
- # Получаем конфигурацию для текущего прибора
- var config: Dictionary = p_conf[pribor]
- var angle: float = config.angle
- var sectors: Array = config.sectors
-
- # Формируем выходные данные
- var interfer_name: String = 'k1' if mode else 'off'
- var fs_arr: Array = []
-
- if litera in fs_params:
- var params = fs_params[litera]
- fs_arr.append([
- angle,
- params.freq,
- params.width,
- sectors[litera - 1] if litera == 1 else sectors[litera - 5] if litera > 5 else sectors[litera - 4] if litera > 3 else sectors[litera - 2]
- ])
- #signaller.emit_signal('emit_changed', mode)
- signaller.emit_signal('interfer_init', interfer_name, fs_arr, power_um)
+## Проверка кассеты у-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
+ return y5_config
- ## Проверка касет П1 и ИП МА2000
- static func check_block_ip(status_prd: PackedByteArray, ip_config: Dictionary) -> Dictionary:
- # Конфигурация проверяемых блоков
- var byte_dry: int = 27
- var ug_valid: bool = (status_prd[0] >> 1) & 1
- for block in ip_config:
- var bit: int = ip_config[block][0]
+## Мониторинг температуры
+static func check_temperature(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
+ return y5_config
+
+
+## Проверка ДКМ
+static func check_dkm(status_prd: PackedByteArray, bit_dkm: int) -> bool:
+ var dkm: int = 28
+ var status_dkm: bool = status_prd[dkm] >> bit_dkm & 1
+ return status_dkm
+
+
+##
+static func _create_fs_mapping(s_name: String) -> Dictionary:
+ var suffixes: Dictionary = {
+ 0: '1к', 1: '4к', 2: '3к', 3: '2к',
+ 4: '1н', 5: '4н', 6: '3н', 7: '2н',
+ 8: '1н', 9: '4н', 10: '3н', 11: '2н',
+ 12: '1в', 13: '4в', 14: '3в', 15: '2в',
+ 16: '1в', 17: '4в', 18: '3в', 19: '2в',
+ 20: '1к', 21: '4к', 22: '3к', 23: '2к',
+ 24: '1к', 25: '4к', 26: '3к', 27: '2к',
+ }
+
+ var mapping: Dictionary = {}
+ for fs_num in suffixes:
+ mapping[fs_num] = {'condition': s_name == suffixes[fs_num]}
+ return mapping
+
+
+##
+static func on_fs_state(packet_type_7: Dictionary, fs_mapping: Dictionary, fs_results: Dictionary, fs_rules_config: Array) -> Dictionary:
+ var updated_results := fs_results.duplicate()
+ for fs_num in packet_type_7:
+ if not (fs_num in fs_mapping and fs_mapping[fs_num]['condition']):
+ continue
+ var fs_data = packet_type_7[fs_num]
+ for rule in fs_rules_config:
+ if _should_apply_rule(fs_num, rule, updated_results):
+ updated_results[rule.key] = fs_data.isg
+ break
+ return updated_results
+
+
+## Вспомогательная функция для проверки применения правила
+static func _should_apply_rule(fs_num: int, rule: Dictionary, results: Dictionary) -> bool:
+ 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}
+ var power_values: Array = []
+ var base_offset = 0
+ var iteration: int = 6
+ var ug_valid: bool = (status[0] >> 2) & 1
+
+ match litera:
+ 1:
+ # Обработка для current_fs = 1 (одно значение)
+ var value = status.decode_u16(Constants.POWER_UKP_1 + 2 * 7)
if ug_valid:
- var status = status_prd[byte_dry] >> bit & 1
- ip_config[block][1] = false if status else true
- return ip_config
+ power_values = [value]
+ 2:
+ # Обработка для current_fs = 2 (6 значений из УКП1)
+ base_offset = Constants.POWER_UKP_1
+ if ug_valid:
+ for i in iteration:
+ power_values.append(status.decode_u16(base_offset + 2 * i))
+ 3:
+ # Обработка для current_fs = 3 (6 значений из УКП2)
+ base_offset = Constants.POWER_UKP_2
+ if ug_valid:
+ for i in iteration:
+ power_values.append(status.decode_u16(base_offset + 2 * i))
+ 4:
+ # Обработка для current_fs = 4 (6 значений из УКП1)
+ base_offset = Constants.POWER_UKP_1
+ if ug_valid:
+ for i in iteration:
+ power_values.append(status.decode_u16(base_offset + 2 * i))
+ 5:
+ # Обработка для current_fs = 5 (6 значений из УКП2)
+ base_offset = Constants.POWER_UKP_2
+ if ug_valid:
+ for i in iteration:
+ power_values.append(status.decode_u16(base_offset + 2 * i))
+ 6:
+ # Обработка для current_fs = 6 (6 значений из УКП1)
+ base_offset = Constants.POWER_UKP_1
+ if ug_valid:
+ for i in iteration:
+ power_values.append(status.decode_u16(base_offset + 2 * i))
+ 7:
+ # Обработка для current_fs = 7 (6 значений из УКП2)
+ base_offset = Constants.POWER_UKP_2
+ if ug_valid:
+ for i in iteration:
+ power_values.append(status.decode_u16(base_offset + 2 * i))
+
+ power_values = update_max_power_values(power_values, pwr_result)
+ return power_values
- ## Проверка кассеты у-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
- return y5_config
-
-
- ## Проверка ДКМ
- static func check_dkm(status_prd: PackedByteArray, bit_dkm: int) -> bool:
- var dkm: int = 28
- var status_dkm: bool = status_prd[dkm] >> bit_dkm & 1
- return status_dkm
-
-
- ##
- static func _create_fs_mapping(s_name: String) -> Dictionary:
- var suffixes: Dictionary = {
- 0: '1к', 1: '4к', 2: '3к', 3: '2к',
- 4: '1н', 5: '4н', 6: '3н', 7: '2н',
- 8: '1н', 9: '4н', 10: '3н', 11: '2н',
- 12: '1в', 13: '4в', 14: '3в', 15: '2в',
- 16: '1в', 17: '4в', 18: '3в', 19: '2в',
- 20: '1к', 21: '4к', 22: '3к', 23: '2к',
- 24: '1к', 25: '4к', 26: '3к', 27: '2к',
- }
-
- var mapping: Dictionary = {}
- for fs_num in suffixes:
- mapping[fs_num] = {'condition': s_name == suffixes[fs_num]}
- return mapping
-
-
- ##
- static func on_fs_state(packet_type_7: Dictionary, fs_mapping: Dictionary, fs_results: Dictionary) -> Dictionary:
- var FS_RULES = [
- {'key': 'fs_1', 'min': 0, 'max': 4},
- {'key': 'fs_2', 'min': 4, 'max': 8},
- {'key': 'fs_3', 'min': 8, 'max': 12},
- {'key': 'fs_4', 'min': 12, 'max': 16},
- {'key': 'fs_5', 'min': 16, 'max': 20},
- {'key': 'fs_6', 'min': 20, 'max': 24},
- {'key': 'fs_7', 'min': 24, 'max': 27}
- ]
-
- var updated_results := fs_results.duplicate()
- for fs_num in packet_type_7:
- if not (fs_num in fs_mapping and fs_mapping[fs_num]['condition']):
- continue
- var fs_data = packet_type_7[fs_num]
- for rule_key in FS_RULES.size():
- var rule: Dictionary = FS_RULES[rule_key]
- if _should_apply_rule(fs_num, rule, updated_results):
- updated_results[rule.key] = fs_data.isg
- break
- return updated_results
-
-
- ## Вспомогательная функция для проверки применения правила
- static func _should_apply_rule(fs_num: int, rule: Dictionary, results: Dictionary) -> bool:
- 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}
- var power_values: Array = []
- var base_offset = 0
- var iteration: int = 6
- var ug_valid: bool = (status[0] >> 2) & 1
-
- match litera:
- 1:
- # Обработка для current_fs = 1 (одно значение)
- var value = status.decode_u16(Constants.POWER_UKP_1 + 2 * 7)
- if ug_valid:
- power_values = [value]
- 2:
- # Обработка для current_fs = 2 (6 значений из УКП1)
- base_offset = Constants.POWER_UKP_1
- if ug_valid:
- for i in iteration:
- power_values.append(status.decode_u16(base_offset + 2 * i))
- 3:
- # Обработка для current_fs = 3 (6 значений из УКП2)
- base_offset = Constants.POWER_UKP_2
- if ug_valid:
- for i in iteration:
- power_values.append(status.decode_u16(base_offset + 2 * i))
- 4:
- # Обработка для current_fs = 4 (6 значений из УКП1)
- base_offset = Constants.POWER_UKP_1
- if ug_valid:
- for i in iteration:
- power_values.append(status.decode_u16(base_offset + 2 * i))
- 5:
- # Обработка для current_fs = 5 (6 значений из УКП2)
- base_offset = Constants.POWER_UKP_2
- if ug_valid:
- for i in iteration:
- power_values.append(status.decode_u16(base_offset + 2 * i))
- 6:
- # Обработка для current_fs = 6 (6 значений из УКП1)
- base_offset = Constants.POWER_UKP_1
- if ug_valid:
- for i in iteration:
- power_values.append(status.decode_u16(base_offset + 2 * i))
- 7:
- # Обработка для current_fs = 7 (6 значений из УКП2)
- base_offset = Constants.POWER_UKP_2
- if ug_valid:
- for i in iteration:
- power_values.append(status.decode_u16(base_offset + 2 * i))
-
- power_values = update_max_power_values(power_values, pwr_result)
- return power_values
-
-
- ## Обновление максимальных значений
- static func update_max_power_values(power_data: Array, max_power_values: Array) -> Array:
- if power_data.size() != 6:
- if max_power_values.is_empty():
- max_power_values = power_data.duplicate()
- elif power_data[0] > max_power_values[0]:
- max_power_values = power_data.duplicate()
- return max_power_values
-
+## Обновление максимальных значений
+static func update_max_power_values(power_data: Array, max_power_values: Array) -> Array:
+ if power_data.size() != 6:
if max_power_values.is_empty():
max_power_values = power_data.duplicate()
- else:
- for i in 6:
- if power_data[i] > max_power_values[i]:
- max_power_values[i] = power_data[i]
+ elif power_data[0] > max_power_values[0]:
+ max_power_values = power_data.duplicate()
+ return max_power_values
- return max_power_values.duplicate()
+ if max_power_values.is_empty():
+ max_power_values = power_data.duplicate()
+ else:
+ for i in 6:
+ if power_data[i] > max_power_values[i]:
+ max_power_values[i] = power_data[i]
+
+ return max_power_values.duplicate()
- static func check_dou_result(control_dic: Dictionary, power_dic: Dictionary, pribor: String, litera: int, cnst: Dictionary) -> Dictionary:
- var all_dou_ok = true
- var dou: String = 'dou_2' if litera == 2 else 'dou_3'
- if pribor == '1к' or pribor == '2к' or pribor == '3к' or pribor == '4к':
- dou = 'dou_6' if litera == 6 else 'dou_7'
- elif pribor == '1в' or pribor == '2в' or pribor == '3в' or pribor == '4в':
- dou = 'dou_4' if litera == 4 else 'dou_5'
-
- var ray_dic: Dictionary = power_dic[litera]
- if ray_dic[RAY_m5].size() == 0 or \
- ray_dic[RAY_5 ].size() == 0 or \
- ray_dic[RAY_15].size() == 0 or \
- ray_dic[RAY_25].size() == 0 or \
- ray_dic[RAY_35].size() == 0 or \
- ray_dic[RAY_45].size() == 0:
- control_dic[dou] = false
- return control_dic
-
- for i_pow_arr in ray_dic.values():
- for i_pow in i_pow_arr.size():
- if i_pow_arr[i_pow] < cnst.POWER_THRESHOLD:
- all_dou_ok = false
-
- control_dic[dou] = all_dou_ok
+static func check_dou_result(control_dic: Dictionary, power_dic: Dictionary, pribor: String, litera: int, cnst: Dictionary) -> Dictionary:
+ var all_dou_ok = true
+ var dou: String = 'dou_2' if litera == 2 else 'dou_3'
+ if pribor == '1к' or pribor == '2к' or pribor == '3к' or pribor == '4к':
+ dou = 'dou_6' if litera == 6 else 'dou_7'
+ elif pribor == '1в' or pribor == '2в' or pribor == '3в' or pribor == '4в':
+ dou = 'dou_4' if litera == 4 else 'dou_5'
+ var ray_dic: Dictionary = power_dic[litera]
+ if ray_dic[RAY_m5].size() == 0 or \
+ ray_dic[RAY_5 ].size() == 0 or \
+ ray_dic[RAY_15].size() == 0 or \
+ ray_dic[RAY_25].size() == 0 or \
+ ray_dic[RAY_35].size() == 0 or \
+ ray_dic[RAY_45].size() == 0:
+ control_dic[dou] = false
return control_dic
+ for i_pow_arr in ray_dic.values():
+ for i_pow in i_pow_arr.size():
+ if i_pow_arr[i_pow] < cnst.POWER_THRESHOLD:
+ all_dou_ok = false
- static func prep_power(power_dic: Dictionary, prd_name: String)-> Dictionary:
- const RAY_KEYS := ["RAY_m5", "RAY_5", "RAY_15", "RAY_25", "RAY_35", "RAY_45"]
- var prep_pow_dic: Dictionary = {}
+ control_dic[dou] = all_dou_ok
- var arr_litera: Array[int]
- match prd_name:
- '1н', '2н', '3н', '4н':
- arr_litera = [2, 3]
- '1в', '2в', '3в', '4в':
- arr_litera = [4, 5]
- '1к', '2к', '3к', '4к':
- arr_litera = [6, 7, 1]
+ return control_dic
- if not arr_litera:
- print_debug('Ошибка в prd_name')
- return prep_pow_dic
- var um_names: Array[Array] = []
- if arr_litera.size() != 3:
- um_names = [
- ['um_1', 'um_2', 'um_3', 'um_4', 'um_5', 'um_6'],
- ['um_7', 'um_8', 'um_9', 'um_10', 'um_11', 'um_12']
- ]
- else:
- um_names = [
- ['um_1', 'um_2', 'um_3', 'um_4', 'um_5', 'um_6'],
- ['um_8', 'um_9', 'um_10', 'um_11', 'um_12', 'um_13'],
- ['um_7'] # Особый случай для третьего элемента
- ]
+static func prep_power(power_dic: Dictionary, prd_name: String)-> Dictionary:
+ const RAY_KEYS := ["RAY_m5", "RAY_5", "RAY_15", "RAY_25", "RAY_35", "RAY_45"]
+ var prep_pow_dic: Dictionary = {}
- for litera_index in arr_litera.size():
- var litera: int = arr_litera[litera_index]
- var litera_data: Dictionary = power_dic.get(litera, {})
- var um_data: Array[Array] = [[], [], [], [], [], []]
+ var arr_litera: Array[int]
+ match prd_name:
+ '1н', '2н', '3н', '4н':
+ arr_litera = [2, 3]
+ '1в', '2в', '3в', '4в':
+ arr_litera = [4, 5]
+ '1к', '2к', '3к', '4к':
+ arr_litera = [6, 7, 1]
- for i in range(RAY_KEYS.size()):
- var ray_key: String = RAY_KEYS[i]
- var ray_array: Array = litera_data.get(ray_key, [])
-
- if ray_array.size() == 1:
- var single_value = ray_array[0]
- for j in range(6):
- um_data[j].append(single_value)
- else:
- for j in range(6):
- um_data[j].append(ray_array[j] if j < ray_array.size() else 0)
-
- var current_um_names: Array = um_names[litera_index]
- for um_index in range(current_um_names.size()):
- prep_pow_dic[current_um_names[um_index]] = um_data[um_index]
+ if not arr_litera:
+ print_debug('Ошибка в prd_name')
return prep_pow_dic
+
+ var um_names: Array[Array] = []
+ if arr_litera.size() != 3:
+ um_names = [
+ ['um_1', 'um_2', 'um_3', 'um_4', 'um_5', 'um_6'],
+ ['um_7', 'um_8', 'um_9', 'um_10', 'um_11', 'um_12']
+ ]
+ else:
+ um_names = [
+ ['um_1', 'um_2', 'um_3', 'um_4', 'um_5', 'um_6'],
+ ['um_8', 'um_9', 'um_10', 'um_11', 'um_12', 'um_13'],
+ ['um_7'] # Особый случай для третьего элемента
+ ]
+
+ for litera_index in arr_litera.size():
+ var litera: int = arr_litera[litera_index]
+ var litera_data: Dictionary = power_dic.get(litera, {})
+ var um_data: Array[Array] = [[], [], [], [], [], []]
+
+ for i in range(RAY_KEYS.size()):
+ var ray_key: String = RAY_KEYS[i]
+ var ray_array: Array = litera_data.get(ray_key, [])
+
+ if ray_array.size() == 1:
+ var single_value = ray_array[0]
+ for j in range(6):
+ um_data[j].append(single_value)
+ else:
+ for j in range(6):
+ um_data[j].append(ray_array[j] if j < ray_array.size() else 0)
+
+ var current_um_names: Array = um_names[litera_index]
+ for um_index in range(current_um_names.size()):
+ prep_pow_dic[current_um_names[um_index]] = um_data[um_index]
+ return prep_pow_dic
From 217281ce5170df5328269ae6d80892ae39766183 Mon Sep 17 00:00:00 2001
From: TotMaxim
Date: Sun, 16 Nov 2025 19:30:59 +0300
Subject: [PATCH 06/10] =?UTF-8?q?=D0=B4=D0=BE=D1=80=D0=B0=D0=B1=D0=BE?=
=?UTF-8?q?=D1=82=D0=BA=D0=B0=20=D0=BC=D0=BE=D0=BD=D0=B8=D1=82=D0=BE=D1=80?=
=?UTF-8?q?=D0=B8=D0=BD=D0=B3=D0=B0=20=D1=82=D0=B5=D0=BC=D0=BF=D0=B5=D1=80?=
=?UTF-8?q?=D0=B0=D1=82=D1=83=D1=80=20=D0=BA=D0=BE=D0=BD=D1=82=D1=80=D0=BE?=
=?UTF-8?q?=D0=BB=D1=8F?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
scenes/pribor-prd-k/pribor-prd-k.gd | 13 +++++++-
scenes/pribor-prd-n/pribor-prd-n.gd | 43 ++++++++++++++----------
scenes/pribor-prd-n/pribor-prd-n.tscn | 12 +++----
scenes/pribor-prd-v/pribor-prd-v.gd | 13 +++++++-
scenes/tabs-switch/lbl_ready.gd | 2 +-
scenes/tabs-switch/tab-switch.tscn | 30 ++++++++---------
scenes/контроль/блок-в.tscn | 8 ++---
scripts/pribor-prd.gd | 48 +++++++++++++++++++++------
8 files changed, 113 insertions(+), 56 deletions(-)
diff --git a/scenes/pribor-prd-k/pribor-prd-k.gd b/scenes/pribor-prd-k/pribor-prd-k.gd
index 3cb2020..15b3f48 100644
--- a/scenes/pribor-prd-k/pribor-prd-k.gd
+++ b/scenes/pribor-prd-k/pribor-prd-k.gd
@@ -62,6 +62,14 @@ func _exit_tree() -> void:
#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')
+ var status = STATE_VAL.GOOD if temperature_dic else STATE_VAL.NONE
+ 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')
@@ -98,6 +106,7 @@ func on_press_device() -> void:
'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,
@@ -114,7 +123,8 @@ func on_press_device() -> void:
func on_control_result(for_result_dic: Dictionary) -> void:
- ## If control is end
+ 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:
@@ -132,6 +142,7 @@ func on_control_result(for_result_dic: Dictionary) -> void:
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 control is end
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')
diff --git a/scenes/pribor-prd-n/pribor-prd-n.gd b/scenes/pribor-prd-n/pribor-prd-n.gd
index fb0046c..6b58662 100644
--- a/scenes/pribor-prd-n/pribor-prd-n.gd
+++ b/scenes/pribor-prd-n/pribor-prd-n.gd
@@ -17,6 +17,8 @@ func _ready() -> void:
var power_amplifier: Array = get_tree().get_nodes_in_group('power_amplifier')
for temp in power_amplifier:
temp.value1 = -70
+ temp.max_value1 = 70
+ temp.min_value1 = -40
unit_prd_n.connect('control_is_over', Callable(self, 'on_press_device'))
#unit_prd_n.power_amplify = power_amplifier
on_press_device()
@@ -60,28 +62,33 @@ func _exit_tree() -> void:
#prd_n_module.cmd_array.append([unit_prd_n.CmdCode.WRITE_ISA, [constants_n.ADDR_UG_LITERA_1, ug_work_1, constants_n.ADDR_UG_LITERA_2, ug_work_2]])
-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')
+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')
+ var status = STATE_VAL.GOOD if temperature_dic else STATE_VAL.NONE
+ 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_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 pow_dic[powamp_meta].size() < 6:
- status = STATE_VAL.ERROR
- else:
- 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_7', 'um_8', 'um_9', 'um_10', 'um_11', 'um_12'] and not fs_result.fs_3: return
- 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
+ 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_7', 'um_8', 'um_9', 'um_10', 'um_11', 'um_12'] and not fs_result.fs_3: return
+ i_node_powapm.value0 = pow_dic[powamp_meta]
+ for i_p in pow_dic[powamp_meta]:
+ if i_p < POWER_THRESHOLD:
+ status = STATE_VAL.ERROR
+ i_node_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 power_amplifier_arr_node: Array = get_tree().get_nodes_in_group('power_amplifier')
var module_fs_2: Node = $kasseta_FS_ND/ref_A4
var dou_2: Node = $dou2_A5
var module_fs_3: Node = $kasseta_FS_ND/ref_A3
@@ -91,10 +98,11 @@ func on_press_device() -> void:
'power_dic': unit_prd_n.power_result,
'block_kasseta_y5_config': unit_prd_n.block_kasseta_y5_config,
'block_ip_config': unit_prd_n.block_ip_config,
+ 'temperature_um' : unit_prd_n.temperature_um,
'nodes_y5': nodes_y5,
'node_ip_power_arr': node_ip_power_arr,
'fs_nodes': fs_nodes,
- 'power_amplifier': power_amplifier,
+ 'power_amplifier': power_amplifier_arr_node,
'POWER_THRESHOLD': unit_prd_n.constants.POWER_THRESHOLD,
'name_prd': unit_prd_n.self_name,
'module_fs_2': module_fs_2,
@@ -106,7 +114,8 @@ func on_press_device() -> void:
func on_control_result(for_result_dic: Dictionary) -> void:
- ## If control is end
+ temperature_fill(for_result_dic.power_amplifier, for_result_dic.temperature_um)
+
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:
@@ -124,6 +133,7 @@ func on_control_result(for_result_dic: Dictionary) -> void:
if block_ip_config_n.has(meta_ip) and block_kasseta_y5_prd_config_n.ug:
power_supply.state = STATE_VAL.GOOD if block_ip_config_n[meta_ip][1] else STATE_VAL.ERROR
+ ## If control is end
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')
@@ -140,7 +150,6 @@ func on_control_result(for_result_dic: Dictionary) -> void:
if block_kasseta_y5_prd_config_n['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:
diff --git a/scenes/pribor-prd-n/pribor-prd-n.tscn b/scenes/pribor-prd-n/pribor-prd-n.tscn
index a12b1ab..68571ce 100644
--- a/scenes/pribor-prd-n/pribor-prd-n.tscn
+++ b/scenes/pribor-prd-n/pribor-prd-n.tscn
@@ -374,7 +374,7 @@ fname = "УМ1535А"
rname = "A13"
value0_info = "Мощность, Вт"
value1_info = "Температура,°C"
-metadata/um = "um_7"
+metadata/um = "um_9"
[node name="um1535_A14" parent="." groups=["power_amplifier"] instance=ExtResource("7_bnnv3")]
layout_mode = 0
@@ -386,7 +386,7 @@ fname = "УМ1535А"
rname = "A14"
value0_info = "Мощность, Вт"
value1_info = "Температура,°C"
-metadata/um = "um_8"
+metadata/um = "um_10"
[node name="um1535_A15" parent="." groups=["power_amplifier"] instance=ExtResource("7_bnnv3")]
layout_mode = 0
@@ -398,7 +398,7 @@ fname = "УМ1535А"
rname = "A15"
value0_info = "Мощность, Вт"
value1_info = "Температура,°C"
-metadata/um = "um_9"
+metadata/um = "um_11"
[node name="um1535_A16" parent="." groups=["power_amplifier"] instance=ExtResource("7_bnnv3")]
layout_mode = 0
@@ -410,7 +410,7 @@ fname = "УМ1535А"
rname = "A16"
value0_info = "Мощность, Вт"
value1_info = "Температура,°C"
-metadata/um = "um_10"
+metadata/um = "um_12"
[node name="um1535_A17" parent="." groups=["power_amplifier"] instance=ExtResource("7_bnnv3")]
layout_mode = 0
@@ -422,7 +422,7 @@ fname = "УМ1535А"
rname = "A17"
value0_info = "Мощность, Вт"
value1_info = "Температура,°C"
-metadata/um = "um_11"
+metadata/um = "um_13"
[node name="um1535_A18" parent="." groups=["power_amplifier"] instance=ExtResource("7_bnnv3")]
layout_mode = 0
@@ -434,7 +434,7 @@ fname = "УМ1535А"
rname = "A18"
value0_info = "Мощность, Вт"
value1_info = "Температура,°C"
-metadata/um = "um_12"
+metadata/um = "um_14"
[node name="control_result" type="Label" parent="."]
layout_mode = 0
diff --git a/scenes/pribor-prd-v/pribor-prd-v.gd b/scenes/pribor-prd-v/pribor-prd-v.gd
index b01521e..1993ed1 100644
--- a/scenes/pribor-prd-v/pribor-prd-v.gd
+++ b/scenes/pribor-prd-v/pribor-prd-v.gd
@@ -59,6 +59,14 @@ func _exit_tree() -> void:
#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:
+ for i_node_temperature in temperature_arr_node:
+ var temperature_meta: String = i_node_temperature.get_meta('um')
+ var status = STATE_VAL.GOOD if temperature_dic else STATE_VAL.NONE
+ 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')
@@ -137,6 +145,7 @@ func on_press_device() -> void:
'power_dic': unit_prd_v.power_result,
'block_kasseta_y5_config': unit_prd_v.block_kasseta_y5_config,
'block_ip_config': unit_prd_v.block_ip_config,
+ 'temperature_um' : unit_prd_v.temperature_um,
'nodes_y5': nodes_y5,
'node_ip_power_arr': node_ip_power_arr,
'fs_nodes': fs_nodes,
@@ -152,7 +161,8 @@ func on_press_device() -> void:
static func on_control_result(for_result_dic: Dictionary) -> void:
- ## If control is end
+ temperature_fill(for_result_dic.power_amplifier, for_result_dic.temperature_um)
+
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:
@@ -169,6 +179,7 @@ static func on_control_result(for_result_dic: Dictionary) -> void:
if block_ip_config_v.has(meta_ip) and block_kasseta_y5_prd_config_v.ug:
power_supply.state = STATE_VAL.GOOD if block_ip_config_v[meta_ip][1] else STATE_VAL.ERROR
+ ## If control is end
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')
diff --git a/scenes/tabs-switch/lbl_ready.gd b/scenes/tabs-switch/lbl_ready.gd
index f35d4ed..b089367 100644
--- a/scenes/tabs-switch/lbl_ready.gd
+++ b/scenes/tabs-switch/lbl_ready.gd
@@ -4,7 +4,7 @@ const STATUS_GOOD := {"text": "Исправно", "color": Color.GREEN, "font_co
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 = false
+var is_uf_operational: bool = true
func _ready() -> void:
diff --git a/scenes/tabs-switch/tab-switch.tscn b/scenes/tabs-switch/tab-switch.tscn
index f8649de..6836d83 100644
--- a/scenes/tabs-switch/tab-switch.tscn
+++ b/scenes/tabs-switch/tab-switch.tscn
@@ -79,21 +79,6 @@ visible = false
layout_mode = 2
metadata/_tab_index = 5
-[node name="lbl_ready" type="Label" parent="."]
-layout_mode = 0
-offset_left = 1504.0
-offset_right = 1600.0
-offset_bottom = 27.0
-tooltip_text = "Готовность аппаратуры к работе"
-mouse_filter = 0
-theme_override_font_sizes/font_size = 14
-theme_override_styles/normal = SubResource("StyleBoxFlat_o1r22")
-text = "Нет связи"
-horizontal_alignment = 1
-vertical_alignment = 1
-script = ExtResource("8_tidwt")
-metadata/_edit_lock_ = true
-
[node name="remote_control" type="Label" parent="."]
layout_mode = 2
offset_left = 1242.0
@@ -125,5 +110,20 @@ toggle_mode = true
text = "Тренаж"
script = ExtResource("9_41d34")
+[node name="lbl_ready" type="Label" parent="."]
+layout_mode = 0
+offset_left = 1504.0
+offset_right = 1600.0
+offset_bottom = 27.0
+tooltip_text = "Готовность аппаратуры к работе"
+mouse_filter = 0
+theme_override_font_sizes/font_size = 14
+theme_override_styles/normal = SubResource("StyleBoxFlat_o1r22")
+text = "Нет связи"
+horizontal_alignment = 1
+vertical_alignment = 1
+script = ExtResource("8_tidwt")
+metadata/_edit_lock_ = true
+
[connection signal="tab_changed" from="tab_switch" to="tab_switch" method="_on_tab_changed"]
[connection signal="toggled" from="тренаж_режим" to="tab_switch" method="_on_button_trenaj_toggled"]
diff --git a/scenes/контроль/блок-в.tscn b/scenes/контроль/блок-в.tscn
index 578fee5..b55f585 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.WHITE
+ $margin/vbox/grid1/level7.tint_progress = Color.RED if v >= 70 else Color.GOLD if v >= 60 else Color.WHITE
@export var min_value0: float:
@@ -191,8 +191,8 @@ func _enter_tree_defered():
$margin/vbox/grid0/rname.text = rname
$margin/vbox/grid0/fname.text = fname
$margin/vbox/grid0/state.texture = textures[state]
- else:
- push_warning('обращение к %s вне дерева' % self)
+ #else:
+ #push_warning('обращение к %s вне дерева' % self) TODO: пишеться только когда заходишь в проект а дальше не используется
func get_level_nodes() -> Array:
@@ -477,7 +477,7 @@ size_flags_horizontal = 3
size_flags_vertical = 3
tooltip_text = "
Текущее: 56.00
-Диапазон: -50.00…120.00"
+Диапазон: -40.00…70.00"
mouse_filter = 0
min_value = -50.0
max_value = 120.0
diff --git a/scripts/pribor-prd.gd b/scripts/pribor-prd.gd
index a92df2a..23865d7 100644
--- a/scripts/pribor-prd.gd
+++ b/scripts/pribor-prd.gd
@@ -31,7 +31,9 @@ var pribor_config: Dictionary
var fs_parameters: Dictionary
var block_ip_config: Dictionary
var block_kasseta_y5_config: Dictionary
+var temperature_um: Dictionary
var control_results: Dictionary
+var power_result: Dictionary
var self_name: String
var state: int = 0
var current_litera: int
@@ -39,8 +41,8 @@ var flag_write_isa: bool = false
var flag_fs_status_ok: bool = false
var flag_si_fs_input: bool = false
var flag_si_fs_output: bool = false
+var flag_in_control: bool = false
var unit_prd: Object
-var power_result: Dictionary
var control_timer: Timer = Timer.new()
var ems_6666_timer: Timer = Timer.new()
var machine_timer: Timer = Timer.new()
@@ -134,11 +136,12 @@ func _process(_delta: float) -> void:
## Пакеты от ЯУ-07
func on_data_received(unit_pribor: Object) -> void:
+ if not flag_in_control: return
var status: PackedByteArray = unit_pribor.status
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():
return
@@ -479,14 +482,14 @@ func setup_timer() -> void:
func on_mode_changed(in_tree: bool) -> void:
+ flag_in_control = in_tree
if not in_tree: ## TODO: Дополнительная проверка если контроль идет, если нет, то смысла вызывать нет
progress_value = 0
machine_timer.stop()
state = state_machine_enum.INIT
_handle_fs_turn_off_state()
#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]])
- else:
- pass
+
func _process_dkm_status(status: PackedByteArray) -> void:
@@ -611,13 +614,36 @@ static func check_block_kasseta_y5(status_prd: PackedByteArray, y5_config: Dicti
## Мониторинг температуры
-static func check_temperature(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
- return y5_config
+static func check_temperature_um(status_prd: PackedByteArray) -> Dictionary:
+ const Constants: Dictionary = {
+ 'CONST_MIN_TEMP': -25,
+ 'MAXIMUM_CODE_ADC': 3796,
+ 'MINIMUM_CODE_AD': 2660,
+ 'TEMPERATURE_UKP_1': 47,
+ 'TEMPERATURE_UKP_2': 79,
+ }
+ const arr_um: Array = ['um_1', 'um_2', 'um_3', 'um_4', 'um_5', 'um_6', 'um_7', 'um_8', 'um_9', 'um_10', 'um_11', 'um_12', 'um_13', 'um_14', 'um_15', 'um_16']
+ const TEMP: float = 115.0 / (Constants.MAXIMUM_CODE_ADC - Constants.MINIMUM_CODE_AD)
+ var return_dic_temp: Dictionary
+ var ukp1_online: int = (status_prd[0] >> 2) & 1
+ var ukp2_online = (status_prd[0] >> 3) & 1
+
+ if ukp1_online:
+ var tmp_1: int
+ var temperature_ukp_1: int
+ for i_temp in 8:
+ 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)
+ return_dic_temp[arr_um[i_temp]] = tmp_1
+
+
+ if ukp2_online:
+ for i_temp in 8:
+ 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)
+ return_dic_temp[arr_um[i_temp+8]] = tmp_2
+
+ return return_dic_temp
## Проверка ДКМ
From 9f32e293a07fa7b69e9da87a06683a3d75986752 Mon Sep 17 00:00:00 2001
From: TotMaxim
Date: Sun, 16 Nov 2025 20:12:44 +0300
Subject: [PATCH 07/10] =?UTF-8?q?=D0=B4=D0=BE=D1=80=D0=B0=D0=B1=D0=BE?=
=?UTF-8?q?=D1=82=D0=BA=D0=B0=20=D0=BD=D0=BE=D0=B2=D0=BE=D0=B3=D0=BE=20?=
=?UTF-8?q?=D0=B1=D0=BB=D0=BE=D0=BA=D0=B0=20(=D0=B1=D0=BB=D0=BE=D0=BA-?=
=?UTF-8?q?=D0=BA.tscn)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
scenes/pribor-prd-k/pribor-prd-k.gd | 1 -
scenes/pribor-prd-k/pribor-prd-k.tscn | 200 +------------
scenes/pribor-prd-n/pribor-prd-n.gd | 1 -
scenes/pribor-prd-v/pribor-prd-v.gd | 1 -
scenes/контроль/блок-в.tscn | 22 +-
scenes/контроль/блок-к.tscn | 406 ++++++++++++++++++++++++++
6 files changed, 427 insertions(+), 204 deletions(-)
create mode 100644 scenes/контроль/блок-к.tscn
diff --git a/scenes/pribor-prd-k/pribor-prd-k.gd b/scenes/pribor-prd-k/pribor-prd-k.gd
index 15b3f48..c4ef34c 100644
--- a/scenes/pribor-prd-k/pribor-prd-k.gd
+++ b/scenes/pribor-prd-k/pribor-prd-k.gd
@@ -65,7 +65,6 @@ func _exit_tree() -> void:
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')
- var status = STATE_VAL.GOOD if temperature_dic else STATE_VAL.NONE
if not temperature_dic.has(temperature_meta): return
i_node_temperature.value1 = temperature_dic[temperature_meta]
diff --git a/scenes/pribor-prd-k/pribor-prd-k.tscn b/scenes/pribor-prd-k/pribor-prd-k.tscn
index 55af137..404443e 100644
--- a/scenes/pribor-prd-k/pribor-prd-k.tscn
+++ b/scenes/pribor-prd-k/pribor-prd-k.tscn
@@ -1,59 +1,20 @@
-[gd_scene load_steps=25 format=3 uid="uid://m5s87q7m66lj"]
+[gd_scene load_steps=16 format=3 uid="uid://m5s87q7m66lj"]
[ext_resource type="PackedScene" uid="uid://d3iqb5e4g81m5" path="res://scenes/контроль/элемент-г.tscn" id="1_8dmgr"]
[ext_resource type="Script" uid="uid://cwvikiygf8b1m" path="res://scenes/pribor-prd-k/pribor-prd-k.gd" id="1_tpdyp"]
[ext_resource type="Texture2D" uid="uid://c4mdrmk7h638f" path="res://data/nine-patch-round.png" id="2_14h25"]
[ext_resource type="PackedScene" uid="uid://cm5jd4gjrrpba" path="res://scenes/контроль/кассета-у-5-к.tscn" id="2_tb85r"]
[ext_resource type="PackedScene" uid="uid://bcyxqni7gxvtq" path="res://scenes/контроль/блок-в.tscn" id="5_c7lv8"]
-[ext_resource type="Texture2D" uid="uid://c6nve6f8sfyj2" path="res://data/состояние-исправности-0.png" id="6_l0j7c"]
+[ext_resource type="PackedScene" uid="uid://ffi1njkjceb5" path="res://scenes/контроль/блок-к.tscn" id="6_wd1vi"]
[ext_resource type="PackedScene" uid="uid://bmagw8nd0ulhj" path="res://scenes/pribor-prd-k/kasseta-fs-kd.tscn" id="7_ia27q"]
[ext_resource type="Script" uid="uid://crpedygm3gohi" path="res://scenes/контроль/кассета.gd" id="7_xpa2n"]
[ext_resource type="PackedScene" uid="uid://dq31j24gv5vi4" path="res://scenes/контроль/кассета-п-2.tscn" id="8_6fdp7"]
[ext_resource type="PackedScene" uid="uid://p2suppildvq0" path="res://scenes/контроль/элемент-в.tscn" id="8_la5yt"]
-[ext_resource type="Texture2D" uid="uid://00871pb6moln" path="res://data/прогресс-фон-1.png" id="9_0ba6e"]
-[ext_resource type="Texture2D" uid="uid://c1k856fxhrjnh" path="res://data/прогресс-заполнение-1.png" id="10_b3870"]
[ext_resource type="Texture2D" uid="uid://belwchvdktrw0" path="res://data/эмс-бланк.png" id="10_c7lv8"]
[ext_resource type="Texture2D" uid="uid://bwddxs24es81u" path="res://data/эмс-бланк-пост.png" id="11_wd1vi"]
[ext_resource type="Texture2D" uid="uid://pfoscstbm025" path="res://data/эмс-бланк-перем.png" id="12_bjebg"]
[ext_resource type="Texture2D" uid="uid://dvl3sq036gn75" path="res://data/эмс-бланк-замыкание.png" id="13_kc77u"]
-[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_3nd2u"]
-
-[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_rceim"]
-
-[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_8yvwo"]
-
-[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_6qu57"]
-
-[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_mlxje"]
-
-[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_3dspb"]
-
-[sub_resource type="GDScript" id="GDScript_45hqb"]
-script/source = "@tool
-
-extends MarginContainer
-
-
-func _enter_tree() -> void:
- margins = [8, 8, 8, 8]
-
-
-@export var margins: Array:
- set(vals):
- add_theme_constant_override('margin_top', vals[0])
- add_theme_constant_override('margin_left', vals[1])
- add_theme_constant_override('margin_bottom', vals[2])
- add_theme_constant_override('margin_right', vals[3])
- get:
- var vals = [0, 0, 0, 0]
- vals[0] = get_theme_constant('margin_top')
- vals[1] = get_theme_constant('margin_left')
- vals[2] = get_theme_constant('margin_bottom')
- vals[3] = get_theme_constant('margin_right')
- return vals
-"
-
[sub_resource type="SpriteFrames" id="SpriteFrames_di0aa"]
animations = [{
"frames": [{
@@ -225,150 +186,15 @@ value0_info = "Мощность, Вт"
value1_info = "Температура,°C"
metadata/um = "um_6"
-[node name="utm80_A9" type="PanelContainer" parent="."]
-editor_description = "Элемент замены из ЗИП"
+[node name="блок-к" parent="." groups=["power_amplifier"] instance=ExtResource("6_wd1vi")]
layout_mode = 0
offset_left = 485.0
offset_top = 812.0
offset_right = 652.0
offset_bottom = 907.0
-theme_override_styles/panel = SubResource("StyleBoxEmpty_3nd2u")
-metadata/um = "um_7"
-
-[node name="button" type="Button" parent="utm80_A9"]
-layout_mode = 2
-theme_override_styles/focus = SubResource("StyleBoxEmpty_rceim")
-theme_override_styles/disabled = SubResource("StyleBoxEmpty_8yvwo")
-theme_override_styles/hover = SubResource("StyleBoxEmpty_6qu57")
-theme_override_styles/pressed = SubResource("StyleBoxEmpty_mlxje")
-theme_override_styles/normal = SubResource("StyleBoxEmpty_3dspb")
-
-[node name="rect" type="NinePatchRect" parent="utm80_A9"]
-layout_mode = 2
-texture = ExtResource("2_14h25")
-draw_center = false
-region_rect = Rect2(0, 0, 63, 63)
-patch_margin_left = 17
-patch_margin_top = 17
-patch_margin_right = 17
-patch_margin_bottom = 15
-
-[node name="margin" type="MarginContainer" parent="utm80_A9"]
-layout_mode = 2
-theme_override_constants/margin_left = 8
-theme_override_constants/margin_top = 8
-theme_override_constants/margin_right = 8
-theme_override_constants/margin_bottom = 8
-script = SubResource("GDScript_45hqb")
-margins = [8, 8, 8, 8]
-
-[node name="vbox" type="VBoxContainer" parent="utm80_A9/margin"]
-layout_mode = 2
-
-[node name="grid0" type="GridContainer" parent="utm80_A9/margin/vbox"]
-layout_mode = 2
-columns = 3
-
-[node name="state" type="TextureRect" parent="utm80_A9/margin/vbox/grid0"]
-custom_minimum_size = Vector2(24, 24)
-layout_mode = 2
-size_flags_horizontal = 2
-size_flags_vertical = 6
-texture = ExtResource("6_l0j7c")
-expand_mode = 1
-
-[node name="fname" type="Label" parent="utm80_A9/margin/vbox/grid0"]
-self_modulate = Color(1, 1, 1, 0.627451)
-custom_minimum_size = Vector2(0, 20)
-layout_mode = 2
-size_flags_horizontal = 3
-size_flags_vertical = 3
-theme_override_font_sizes/font_size = 17
-text = "УТМ80"
-horizontal_alignment = 1
-vertical_alignment = 1
-
-[node name="rname" type="Label" parent="utm80_A9/margin/vbox/grid0"]
-layout_mode = 2
-size_flags_horizontal = 3
-size_flags_vertical = 6
-theme_override_font_sizes/font_size = 18
-text = "A9"
-horizontal_alignment = 2
-vertical_alignment = 1
-
-[node name="grid1" type="GridContainer" parent="utm80_A9/margin/vbox"]
-custom_minimum_size = Vector2(80, 0)
-layout_mode = 2
-size_flags_horizontal = 4
-size_flags_vertical = 3
-columns = 2
-
-[node name="level1" type="TextureProgressBar" parent="utm80_A9/margin/vbox/grid1" groups=["уровни"]]
-layout_mode = 2
-size_flags_horizontal = 3
-size_flags_vertical = 3
-tooltip_text = "Мощность, Вт
-Текущее: 0.00
-Диапазон: 0.00…1400.00"
-mouse_filter = 0
-max_value = 1400.0
-fill_mode = 3
-nine_patch_stretch = true
-stretch_margin_left = 8
-stretch_margin_top = 8
-stretch_margin_right = 8
-stretch_margin_bottom = 8
-texture_under = ExtResource("9_0ba6e")
-texture_progress = ExtResource("10_b3870")
-tint_under = Color(1, 1, 1, 0.419608)
-tint_progress = Color(0.890196, 0.486275, 0.196078, 1)
-
-[node name="level7" type="TextureProgressBar" parent="utm80_A9/margin/vbox/grid1"]
-layout_mode = 2
-size_flags_horizontal = 3
-size_flags_vertical = 3
-tooltip_text = "Температура,°C
-Текущее: 56.00
-Диапазон: -50.00…120.00"
-mouse_filter = 0
-min_value = -50.0
-max_value = 120.0
-value = 56.0
-fill_mode = 3
-nine_patch_stretch = true
-stretch_margin_left = 8
-stretch_margin_top = 8
-stretch_margin_right = 8
-stretch_margin_bottom = 8
-texture_under = ExtResource("9_0ba6e")
-texture_progress = ExtResource("10_b3870")
-tint_under = Color(0.890196, 0.486275, 0.196078, 1)
-tint_over = Color(0.890196, 0.486275, 0.196078, 1)
-
-[node name="grid2" type="GridContainer" parent="utm80_A9/margin/vbox"]
-clip_contents = true
-custom_minimum_size = Vector2(80, 0)
-layout_mode = 2
-size_flags_horizontal = 4
-size_flags_vertical = 4
-columns = 2
-
-[node name="lbl6" type="Label" parent="utm80_A9/margin/vbox/grid2" groups=["названия"]]
-clip_contents = true
-layout_mode = 2
-size_flags_horizontal = 3
-theme_override_font_sizes/font_size = 8
-text = "P,%"
-horizontal_alignment = 1
-
-[node name="lbl7" type="Label" parent="utm80_A9/margin/vbox/grid2"]
-clip_contents = true
-layout_mode = 2
-size_flags_horizontal = 3
-theme_override_font_sizes/font_size = 8
-text = "°C"
-horizontal_alignment = 1
+fname = "УТМ80"
+rname = "A9"
+metadata/um = "um_8"
[node name="rm1620m_A16" parent="." groups=["power_amplifier"] instance=ExtResource("5_c7lv8")]
layout_mode = 0
@@ -380,7 +206,7 @@ fname = "РМ16-20М"
rname = "A16"
value0_info = "Мощность, Вт"
value1_info = "Температура,°C"
-metadata/um = "um_8"
+metadata/um = "um_9"
[node name="rm1620m_A17" parent="." groups=["power_amplifier"] instance=ExtResource("5_c7lv8")]
layout_mode = 0
@@ -392,7 +218,7 @@ fname = "РМ16-20М"
rname = "A17"
value0_info = "Мощность, Вт"
value1_info = "Температура,°C"
-metadata/um = "um_9"
+metadata/um = "um_10"
[node name="rm1620m_A18" parent="." groups=["power_amplifier"] instance=ExtResource("5_c7lv8")]
layout_mode = 0
@@ -404,7 +230,7 @@ fname = "РМ16-20М"
rname = "A18"
value0_info = "Мощность, Вт"
value1_info = "Температура,°C"
-metadata/um = "um_10"
+metadata/um = "um_11"
[node name="rm1620m_A19" parent="." groups=["power_amplifier"] instance=ExtResource("5_c7lv8")]
layout_mode = 0
@@ -416,7 +242,7 @@ fname = "РМ16-20М"
rname = "A19"
value0_info = "Мощность, Вт"
value1_info = "Температура,°C"
-metadata/um = "um_11"
+metadata/um = "um_12"
[node name="rm1620m_A20" parent="." groups=["power_amplifier"] instance=ExtResource("5_c7lv8")]
layout_mode = 0
@@ -428,7 +254,7 @@ fname = "РМ16-20М"
rname = "A20"
value0_info = "Мощность, Вт"
value1_info = "Температура,°C"
-metadata/um = "um_12"
+metadata/um = "um_13"
[node name="rm1620m_A21" parent="." groups=["power_amplifier"] instance=ExtResource("5_c7lv8")]
layout_mode = 0
@@ -440,7 +266,7 @@ fname = "РМ16-20М"
rname = "A21"
value0_info = "Мощность, Вт"
value1_info = "Температура,°C"
-metadata/um = "um_13"
+metadata/um = "um_14"
[node name="kasseta_fs_kd" parent="." instance=ExtResource("7_ia27q")]
layout_mode = 0
@@ -558,5 +384,3 @@ sprite_frames = SubResource("SpriteFrames_di0aa")
[node name="output_2" type="AnimatedSprite2D" parent="."]
position = Vector2(383, 177)
sprite_frames = SubResource("SpriteFrames_di0aa")
-
-[connection signal="pressed" from="utm80_A9/button" to="utm80_A9" method="_on_button_pressed"]
diff --git a/scenes/pribor-prd-n/pribor-prd-n.gd b/scenes/pribor-prd-n/pribor-prd-n.gd
index 6b58662..8f7ad06 100644
--- a/scenes/pribor-prd-n/pribor-prd-n.gd
+++ b/scenes/pribor-prd-n/pribor-prd-n.gd
@@ -65,7 +65,6 @@ func _exit_tree() -> void:
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')
- var status = STATE_VAL.GOOD if temperature_dic else STATE_VAL.NONE
if not temperature_dic.has(temperature_meta): return
i_node_temperature.value1 = temperature_dic[temperature_meta]
diff --git a/scenes/pribor-prd-v/pribor-prd-v.gd b/scenes/pribor-prd-v/pribor-prd-v.gd
index 1993ed1..b932aa2 100644
--- a/scenes/pribor-prd-v/pribor-prd-v.gd
+++ b/scenes/pribor-prd-v/pribor-prd-v.gd
@@ -62,7 +62,6 @@ func _exit_tree() -> void:
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')
- var status = STATE_VAL.GOOD if temperature_dic else STATE_VAL.NONE
if not temperature_dic.has(temperature_meta): return
i_node_temperature.value1 = temperature_dic[temperature_meta]
diff --git a/scenes/контроль/блок-в.tscn b/scenes/контроль/блок-в.tscn
index b55f585..669b072 100644
--- a/scenes/контроль/блок-в.tscn
+++ b/scenes/контроль/блок-в.tscn
@@ -145,10 +145,10 @@ func _enter_tree() -> void: call_deferred('_enter_tree_defered')
func _ready():
- #var items: Array = get_level_nodes()
- #for item in items:
- #item.connect('value_changed', on_level_changed.bind(item, value0_info))
- #on_level_changed(item.value, item, value0_info)
+ var items: Array = get_level_nodes()
+ for item in items:
+ item.connect('value_changed', on_level_changed.bind(item, value0_info))
+ on_level_changed(item.value, item, value0_info)
var level7: = $margin/vbox/grid1/level7
level7.connect('value_changed', on_level_changed.bind(level7, value1_info))
on_level_changed(level7.value, level7, value1_info)
@@ -273,10 +273,8 @@ theme_override_styles/panel = SubResource("StyleBoxEmpty_3nd2u")
script = SubResource("GDScript_oj3k3")
textures = [ExtResource("1_n1aqt"), ExtResource("2_rim3u"), ExtResource("3_3w8fg")]
value0 = [20.0, 30.0, 40.0, 50.0, 60.0, 70.0]
-value1 = 56.0
-min_value1 = -50.0
-max_value0 = 100.0
-max_value1 = 120.0
+max_value0 = 1400.0
+max_value1 = 70.0
step0 = 1.0
step1 = 1.0
value_name0 = "P,%"
@@ -476,12 +474,10 @@ layout_mode = 2
size_flags_horizontal = 3
size_flags_vertical = 3
tooltip_text = "
-Текущее: 56.00
-Диапазон: -40.00…70.00"
+Текущее: 0.00
+Диапазон: 0.00…70.00"
mouse_filter = 0
-min_value = -50.0
-max_value = 120.0
-value = 56.0
+max_value = 70.0
fill_mode = 3
nine_patch_stretch = true
stretch_margin_left = 8
diff --git a/scenes/контроль/блок-к.tscn b/scenes/контроль/блок-к.tscn
new file mode 100644
index 0000000..9156160
--- /dev/null
+++ b/scenes/контроль/блок-к.tscn
@@ -0,0 +1,406 @@
+[gd_scene load_steps=15 format=3 uid="uid://ffi1njkjceb5"]
+
+[ext_resource type="Texture2D" uid="uid://c6nve6f8sfyj2" path="res://data/состояние-исправности-0.png" id="1_uojqc"]
+[ext_resource type="Texture2D" uid="uid://dnreyfh3cd1k2" path="res://data/состояние-исправности-1.png" id="2_a8ar3"]
+[ext_resource type="Texture2D" uid="uid://c6booa8753u5t" path="res://data/состояние-исправности-2.png" id="3_xwd13"]
+[ext_resource type="Texture2D" uid="uid://c4mdrmk7h638f" path="res://data/nine-patch-round.png" id="4_eobkx"]
+[ext_resource type="Texture2D" uid="uid://00871pb6moln" path="res://data/прогресс-фон-1.png" id="5_mg57e"]
+[ext_resource type="Texture2D" uid="uid://c1k856fxhrjnh" path="res://data/прогресс-заполнение-1.png" id="6_of7rd"]
+
+[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_3nd2u"]
+
+[sub_resource type="GDScript" id="GDScript_oj3k3"]
+script/source = "@tool
+class_name blok_v extends PanelContainer
+
+@export var textures: Array
+@export var animation_duration: float = 1.5
+signal pressed(control: PanelContainer)
+
+
+## Значения уровней
+@export var value0: Array:
+ set(v):
+ value0.assign(v)
+ var items: Array = get_level_nodes()
+ var count: int = min(items.size(), v.size())
+ for i in count:
+ set_value0_animated(items[i], v[i])
+
+
+## Значение уровня
+@export var value1: float:
+ set(v):
+ value1 = v
+ 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
+
+
+@export var min_value0: float:
+ set(v):
+ min_value0 = v
+ var items: = get_level_nodes()
+ set_group_param(items, 'min_value', v)
+
+
+@export var min_value1: float:
+ set(v):
+ min_value1 = v
+ if not is_inside_tree():
+ return
+ $margin/vbox/grid1/level7.min_value = v
+
+
+@export var max_value0: float:
+ set(v):
+ max_value0 = v
+ var items: = get_level_nodes()
+ set_group_param(items, 'max_value', v)
+
+
+@export var max_value1: float:
+ set(v):
+ max_value1 = v
+ if not is_inside_tree():
+ return
+ $margin/vbox/grid1/level7.max_value = v
+
+
+@export var step0: float:
+ set(v):
+ step0 = v
+ var items: = get_level_nodes()
+ set_group_param(items, 'step', v)
+
+
+@export var step1: float:
+ set(v):
+ step1 = v
+ if not is_inside_tree():
+ return
+ $margin/vbox/grid1/level7.step = v
+
+
+@export var value_name0: String:
+ set(v):
+ value_name0 = v
+ var items: Array = get_name_nodes()
+ set_group_param(items, 'text', v)
+
+
+@export var value_name1: String:
+ set(v):
+ value_name1 = v
+ if not is_inside_tree():
+ return
+ $margin/vbox/grid2/lbl7.text = v
+
+
+@export var fname: String:
+ set(v):
+ fname = v
+ if not is_inside_tree():
+ return
+ $margin/vbox/grid0/fname.text = v
+
+
+@export var rname: String:
+ set(v):
+ rname = v
+ if not is_inside_tree():
+ return
+ $margin/vbox/grid0/rname.text = v
+
+
+@export var state: int:
+ set(v):
+ state = tools.clip_value(v, 0, textures.size() - 1)
+ if not is_inside_tree():
+ return
+ $margin/vbox/grid0/state.texture = textures[state]
+
+
+@export var alignment: int:
+ set(v):
+ alignment = v
+ if is_inside_tree():
+ $margin/vbox.alignment = v
+
+
+@export var value0_info: String:
+ set(v):
+ value0_info = v
+
+
+@export var value1_info: String:
+ set(v):
+ value1_info = v
+
+
+func _on_button_pressed(): emit_signal('pressed', self)
+func set_value0(value: Array): value0.assign(value)
+func _enter_tree() -> void: call_deferred('_enter_tree_defered')
+
+
+func _ready():
+ var items: Array = get_level_nodes()
+ for item in items:
+ item.connect('value_changed', on_level_changed.bind(item, value0_info))
+ on_level_changed(item.value, item, value0_info)
+ var level7: = $margin/vbox/grid1/level7
+ level7.connect('value_changed', on_level_changed.bind(level7, value1_info))
+ on_level_changed(level7.value, level7, value1_info)
+
+
+func on_level_changed(_val: float, item: TextureProgressBar, info: String):
+ item.tooltip_text = '%s\\nТекущее: %0.2f\\nДиапазон: %0.2f…%0.2f' % [info, item.value, item.min_value, item.max_value]
+
+
+func set_group_param(items: Array, param: StringName, v) -> void:
+ if not is_inside_tree():
+ return
+ if not get_tree():
+ return
+ for i in items.size():
+ items[i].set(param, v)
+
+
+func set_value0_by_index(index: int, value: float) -> void:
+ var items: Array = get_level_nodes()
+ items[index].value = value
+
+
+func _enter_tree_defered():
+ var items: Array = get_level_nodes()
+ var count: int = min(items.size(), value0.size())
+ for i in count:
+ items[i].min_value = min_value0
+ items[i].max_value = 1400 # max_value0: TODO для отладки
+ items[i].step = step0
+ items = get_name_nodes()
+ set_group_param(items, 'text', value_name0)
+ if is_inside_tree():
+ $margin/vbox/grid1/level7.value = value1
+ $margin/vbox/grid1/level7.min_value = min_value1
+ $margin/vbox/grid1/level7.max_value = max_value1
+ $margin/vbox/grid1/level7.step = step1
+ $margin/vbox/grid2/lbl7.text = value_name1
+ $margin/vbox.alignment = alignment
+ $margin/vbox/grid0/rname.text = rname
+ $margin/vbox/grid0/fname.text = fname
+ $margin/vbox/grid0/state.texture = textures[state]
+
+
+func get_level_nodes() -> Array:
+ if not is_inside_tree():
+ return []
+ if not get_tree():
+ return []
+ return [$margin/vbox/grid1/level1]
+
+
+func get_name_nodes() -> Array:
+ if not is_inside_tree():
+ return []
+ if not get_tree():
+ return []
+ return [$margin/vbox/grid2/lbl1]
+
+
+func set_value0_animated(target_node, target_value: float) -> void:
+ var tween: Tween = create_tween()
+ tween.set_ease(Tween.EASE_OUT)
+ tween.set_trans(Tween.TRANS_QUINT)
+ tween.tween_property(target_node, 'value', target_value, animation_duration)
+"
+
+[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_rceim"]
+
+[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_8yvwo"]
+
+[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_6qu57"]
+
+[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_mlxje"]
+
+[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_3dspb"]
+
+[sub_resource type="GDScript" id="GDScript_45hqb"]
+script/source = "@tool
+
+extends MarginContainer
+
+
+func _enter_tree() -> void:
+ margins = [8, 8, 8, 8]
+
+
+@export var margins: Array:
+ set(vals):
+ add_theme_constant_override('margin_top', vals[0])
+ add_theme_constant_override('margin_left', vals[1])
+ add_theme_constant_override('margin_bottom', vals[2])
+ add_theme_constant_override('margin_right', vals[3])
+ get:
+ var vals = [0, 0, 0, 0]
+ vals[0] = get_theme_constant('margin_top')
+ vals[1] = get_theme_constant('margin_left')
+ vals[2] = get_theme_constant('margin_bottom')
+ vals[3] = get_theme_constant('margin_right')
+ return vals
+"
+
+[node name="блок-к" type="PanelContainer"]
+editor_description = "Элемент замены из ЗИП"
+offset_right = 160.0
+offset_bottom = 88.0
+theme_override_styles/panel = SubResource("StyleBoxEmpty_3nd2u")
+script = SubResource("GDScript_oj3k3")
+textures = [ExtResource("1_uojqc"), ExtResource("2_a8ar3"), ExtResource("3_xwd13")]
+value0 = [20.0, 30.0, 40.0, 50.0, 60.0, 70.0]
+max_value0 = 1400.0
+max_value1 = 70.0
+step0 = 1.0
+step1 = 1.0
+value_name0 = "P,%"
+value_name1 = "°C"
+fname = "Блок В"
+rname = "A1"
+
+[node name="button" type="Button" parent="."]
+layout_mode = 2
+theme_override_styles/focus = SubResource("StyleBoxEmpty_rceim")
+theme_override_styles/disabled = SubResource("StyleBoxEmpty_8yvwo")
+theme_override_styles/hover = SubResource("StyleBoxEmpty_6qu57")
+theme_override_styles/pressed = SubResource("StyleBoxEmpty_mlxje")
+theme_override_styles/normal = SubResource("StyleBoxEmpty_3dspb")
+
+[node name="rect" type="NinePatchRect" parent="."]
+layout_mode = 2
+texture = ExtResource("4_eobkx")
+draw_center = false
+region_rect = Rect2(0, 0, 63, 63)
+patch_margin_left = 17
+patch_margin_top = 17
+patch_margin_right = 17
+patch_margin_bottom = 15
+
+[node name="margin" type="MarginContainer" parent="."]
+layout_mode = 2
+theme_override_constants/margin_left = 8
+theme_override_constants/margin_top = 8
+theme_override_constants/margin_right = 8
+theme_override_constants/margin_bottom = 8
+script = SubResource("GDScript_45hqb")
+margins = [8, 8, 8, 8]
+
+[node name="vbox" type="VBoxContainer" parent="margin"]
+layout_mode = 2
+
+[node name="grid0" type="GridContainer" parent="margin/vbox"]
+layout_mode = 2
+columns = 3
+
+[node name="state" type="TextureRect" parent="margin/vbox/grid0"]
+custom_minimum_size = Vector2(24, 24)
+layout_mode = 2
+size_flags_horizontal = 2
+size_flags_vertical = 6
+texture = ExtResource("1_uojqc")
+expand_mode = 1
+
+[node name="fname" type="Label" parent="margin/vbox/grid0"]
+self_modulate = Color(1, 1, 1, 0.627451)
+custom_minimum_size = Vector2(0, 20)
+layout_mode = 2
+size_flags_horizontal = 3
+size_flags_vertical = 3
+theme_override_font_sizes/font_size = 17
+text = "Блок В"
+horizontal_alignment = 1
+vertical_alignment = 1
+
+[node name="rname" type="Label" parent="margin/vbox/grid0"]
+layout_mode = 2
+size_flags_horizontal = 3
+size_flags_vertical = 6
+theme_override_font_sizes/font_size = 18
+text = "A1"
+horizontal_alignment = 2
+vertical_alignment = 1
+
+[node name="grid1" type="GridContainer" parent="margin/vbox"]
+layout_mode = 2
+size_flags_horizontal = 4
+size_flags_vertical = 3
+columns = 7
+
+[node name="level1" type="TextureProgressBar" parent="margin/vbox/grid1" groups=["уровни"]]
+custom_minimum_size = Vector2(30, 0)
+layout_mode = 2
+size_flags_horizontal = 3
+size_flags_vertical = 3
+tooltip_text = "
+Текущее: 0.00
+Диапазон: 0.00…1400.00"
+mouse_filter = 0
+max_value = 1400.0
+fill_mode = 3
+nine_patch_stretch = true
+stretch_margin_left = 8
+stretch_margin_top = 8
+stretch_margin_right = 8
+stretch_margin_bottom = 8
+texture_under = ExtResource("5_mg57e")
+texture_progress = ExtResource("6_of7rd")
+tint_under = Color(1, 1, 1, 0.419608)
+tint_progress = Color(0.890196, 0.486275, 0.196078, 1)
+
+[node name="level7" type="TextureProgressBar" parent="margin/vbox/grid1"]
+custom_minimum_size = Vector2(30, 0)
+layout_mode = 2
+size_flags_horizontal = 3
+size_flags_vertical = 3
+tooltip_text = "
+Текущее: 0.00
+Диапазон: 0.00…70.00"
+mouse_filter = 0
+max_value = 70.0
+fill_mode = 3
+nine_patch_stretch = true
+stretch_margin_left = 8
+stretch_margin_top = 8
+stretch_margin_right = 8
+stretch_margin_bottom = 8
+texture_under = ExtResource("5_mg57e")
+texture_progress = ExtResource("6_of7rd")
+tint_under = Color(0.890196, 0.486275, 0.196078, 1)
+tint_over = Color(0.890196, 0.486275, 0.196078, 1)
+
+[node name="grid2" type="GridContainer" parent="margin/vbox"]
+clip_contents = true
+layout_mode = 2
+size_flags_horizontal = 4
+size_flags_vertical = 4
+columns = 7
+
+[node name="lbl1" type="Label" parent="margin/vbox/grid2" groups=["названия"]]
+clip_contents = true
+custom_minimum_size = Vector2(30, 0)
+layout_mode = 2
+size_flags_horizontal = 3
+theme_override_font_sizes/font_size = 8
+text = "P,%"
+horizontal_alignment = 1
+
+[node name="lbl7" type="Label" parent="margin/vbox/grid2"]
+clip_contents = true
+custom_minimum_size = Vector2(30, 0)
+layout_mode = 2
+size_flags_horizontal = 3
+theme_override_font_sizes/font_size = 8
+text = "°C"
+horizontal_alignment = 1
+
+[connection signal="pressed" from="button" to="." method="_on_button_pressed"]
From 89bc19ec9832bce78f6539d987e0c4e5740da1dd Mon Sep 17 00:00:00 2001
From: TotMaxim
Date: Sun, 16 Nov 2025 20:17:15 +0300
Subject: [PATCH 08/10] =?UTF-8?q?=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?=
=?UTF-8?q?=D0=B5=D0=BD=D0=B8=D1=8F=20=D1=84=D0=B0=D0=B9=D0=BB=D0=BE=D0=B2?=
=?UTF-8?q?=20=D0=BA=D0=BE=D0=BD=D1=84=D0=B8=D0=B3=D1=83=D1=80=D0=B0=D1=86?=
=?UTF-8?q?=D0=B8=D0=B8=20=D0=B4=D0=BB=D1=8F=20=D0=BA=D0=BE=D0=BD=D1=82?=
=?UTF-8?q?=D1=80=D0=BE=D0=BB=D1=8F=20=D0=BF=D1=80=D0=B4?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
config/setting_prd_control.json | 239 ++++++++++++++++++++++++++++++++
1 file changed, 239 insertions(+)
create mode 100644 config/setting_prd_control.json
diff --git a/config/setting_prd_control.json b/config/setting_prd_control.json
new file mode 100644
index 0000000..2c331fb
--- /dev/null
+++ b/config/setting_prd_control.json
@@ -0,0 +1,239 @@
+{
+ "device_constants": {
+ "PRD_N": {
+ "constants": {
+ "POWER_UKP_1": 31,
+ "POWER_UKP_2": 63,
+ "DKM_BIT_2": 1,
+ "DKM_BIT_3": 2,
+ "BASE_ADDR_EMS_G": 288,
+ "ADDR_UG_LITERA_1": 262,
+ "ADDR_UG_LITERA_2": 264,
+ "ADDR_UG_LITERA_3": 266,
+ "TEMP_THRESHOLD": 70,
+ "POWER_THRESHOLD": 40,
+ "RAY_DOU_NUM": 3,
+ "ATT_UM_2": 2,
+ "ATT_UM_3": 3,
+ "POWER_UM": 100,
+ "TIMER_DELAY": 10.0,
+ "STATE_MASHINE_TIMER": 0.3
+ },
+ "pribor_config": {
+ "1н": {"angle": 0.0, "sectors": [4, 8]},
+ "2н": {"angle": 90.0, "sectors": [7, 11]},
+ "3н": {"angle": 180.0, "sectors": [6, 10]},
+ "4н": {"angle": 270.0, "sectors": [5, 9]}
+ },
+ "fs_params": {
+ "2": {"freq": 932.0, "width": 100.0},
+ "3": {"freq": 1157.0, "width": 100.0}
+ },
+ "start_litera": 2,
+ "progress_max": 20
+ },
+ "PRD_V": {
+ "constants": {
+ "POWER_UKP_1": 31,
+ "POWER_UKP_2": 63,
+ "DKM_BIT_4": 3,
+ "DKM_BIT_5": 4,
+ "BASE_ADDR_EMS_G": 288,
+ "ADDR_UG_LITERA_1": 262,
+ "ADDR_UG_LITERA_2": 264,
+ "ADDR_UG_LITERA_3": 266,
+ "TEMP_THRESHOLD": 70,
+ "POWER_THRESHOLD": 40,
+ "RAY_DOU_NUM": 3,
+ "ATT_UM_4": 2,
+ "ATT_UM_5": 3,
+ "POWER_UM": 100,
+ "TIMER_DELAY": 10.0,
+ "STATE_MASHINE_TIMER": 0.3
+ },
+ "pribor_config": {
+ "1в": {"angle": 0.0, "sectors": [12, 16]},
+ "2в": {"angle": 90.0, "sectors": [15, 19]},
+ "3в": {"angle": 180.0, "sectors": [14, 18]},
+ "4в": {"angle": 270.0, "sectors": [13, 17]}
+ },
+ "fs_params": {
+ "4": {"freq": 1227.0, "width": 100.0},
+ "5": {"freq": 1575.0, "width": 110.0}
+ },
+ "start_litera": 4,
+ "progress_max": 20
+ },
+ "PRD_K": {
+ "constants": {
+ "POWER_UKP_1": 31,
+ "POWER_UKP_2": 63,
+ "DKM_BIT_1": 0,
+ "DKM_BIT_6": 5,
+ "DKM_BIT_7": 6,
+ "BASE_ADDR_EMS_G": 288,
+ "ADDR_UG_LITERA_1": 262,
+ "ADDR_UG_LITERA_2": 264,
+ "ADDR_UG_LITERA_3": 266,
+ "TEMP_THRESHOLD": 40,
+ "POWER_THRESHOLD": 40,
+ "RAY_DOU_NUM": 3,
+ "ATT_UM_1": 0,
+ "ATT_UM_6": 3,
+ "ATT_UM_7": 2,
+ "POWER_UM": 100,
+ "TIMER_DELAY": 10.0,
+ "STATE_MASHINE_TIMER": 0.3
+ },
+ "pribor_config": {
+ "1к": {"angle": 0.0, "sectors": [0, 20, 24]},
+ "2к": {"angle": 90.0, "sectors": [3, 23, 27]},
+ "3к": {"angle": 180.0, "sectors": [2, 22, 26]},
+ "4к": {"angle": 270.0, "sectors": [1, 21, 25]}
+ },
+ "fs_params": {
+ "1": {"freq": 450.0, "width": 80.0},
+ "6": {"freq": 2450.0, "width": 110.0},
+ "7": {"freq": 4750.0, "width": 110.0}
+ },
+ "start_litera": 1,
+ "progress_max": 30
+ }
+ },
+ "base_configs": {
+ "block_ip": {
+ "maa2000_1": [0, false],
+ "maa2000_2": [1, false],
+ "ip9_50_1": [2, false],
+ "ip9_50_2": [3, false],
+ "ip12_50_1": [4, false],
+ "ip5_25": [7, false]
+ },
+ "block_kasseta": {
+ "yau07": false,
+ "ems": false,
+ "ug": false,
+ "ukp1": false,
+ "ukp2": false
+ }
+ },
+ "device_configs": {
+ "PRD_N": {
+ "block_ip": "base",
+ "block_kasseta": "base",
+ "control_results": {
+ "block_ip": false,
+ "temperature": true,
+ "dkm_2": false,
+ "dkm_3": false,
+ "dou_2": false,
+ "dou_3": false,
+ "fs_2": 0,
+ "fs_3": 0
+ }
+ },
+ "PRD_V": {
+ "block_ip": "base",
+ "block_kasseta": "base",
+ "control_results": {
+ "block_ip": false,
+ "temperature": true,
+ "dkm_4": false,
+ "dkm_5": false,
+ "dou_4": false,
+ "dou_5": false,
+ "fs_4": 0,
+ "fs_5": 0
+ }
+ },
+ "PRD_K": {
+ "block_ip": {
+ "maa2000_1": [0, false],
+ "maa2000_2": [1, false],
+ "ip9_50_1": [2, false],
+ "ip9_50_2": [3, false],
+ "ip12_50_1": [4, false],
+ "ip9_50_3": [5, false],
+ "ip12_50_2": [6, false],
+ "ip5_25": [7, false]
+ },
+ "block_kasseta": "base",
+ "control_results": {
+ "block_ip": false,
+ "temperature": true,
+ "dkm_1": false,
+ "dkm_6": false,
+ "dkm_7": false,
+ "dou_6": false,
+ "dou_7": false,
+ "fs_1": 0,
+ "fs_6": 0,
+ "fs_7": 0
+ }
+ }
+ },
+ "ray_types": ["RAY_m5", "RAY_5", "RAY_15", "RAY_25", "RAY_35", "RAY_45"],
+ "data_indices": {
+ "STATUS_BOARD": 0,
+ "IN_BLANK_PRD": 1,
+ "IN_IMPULS_PRD": 7,
+ "OUT_BLANK_PRD": 13,
+ "OUT_IMPULS_PRD": 19,
+ "DRY_CONTACT": 27,
+ "DKM": 28,
+ "POWER_UKP_1": 31,
+ "TEMPERATURE_UKP_1": 47,
+ "POWER_UKP_2": 63,
+ "TEMPERATURE_UKP_2": 79
+ },
+ "state_machine": {
+ "INIT": 0,
+ "FS_TURN_ON": 1,
+ "FS_WORK": 2,
+ "WRITE_ISA": 3,
+ "READ_ISA": 4,
+ "CHEK_KASSETA_Y5": 5,
+ "UG_SET_RAY": 6,
+ "UG_SET_RAY_0": 7,
+ "UG_SET_RAY_1": 8,
+ "UG_SET_RAY_2": 9,
+ "UG_SET_RAY_3": 10,
+ "UG_SET_RAY_4": 11,
+ "UG_SET_RAY_5": 12,
+ "IN_EMS_RUN": 13,
+ "IN_EMS_STOP": 14,
+ "FS_TURN_OFF": 15,
+ "STOP_CONTROL": 16,
+ "AWAIT": 17
+ },
+ "fs_keys": {
+ "1": "fs_1",
+ "2": "fs_2",
+ "3": "fs_3",
+ "4": "fs_4",
+ "5": "fs_5",
+ "6": "fs_6",
+ "7": "fs_7"
+ },
+ "temperature_constants": {
+ "CONST_MIN_TEMP": -25,
+ "MAXIMUM_CODE_ADC": 3796,
+ "MINIMUM_CODE_AD": 2660,
+ "TEMPERATURE_UKP_1": 47,
+ "TEMPERATURE_UKP_2": 79
+ },
+ "ems_input_bits_config": {
+ "PRD_N": {"bit1": 9, "bit2": 10},
+ "PRD_V": {"bit1": 11, "bit2": 12},
+ "PRD_K": {"bit1": 13, "bit2": 14, "bit_lit": 8}
+ },
+ "fs_rules":[
+ {"key": "fs_1", "min": 0, "max": 4},
+ {"key": "fs_2", "min": 4, "max": 8},
+ {"key": "fs_3", "min": 8, "max": 12},
+ {"key": "fs_4", "min": 12, "max": 16},
+ {"key": "fs_5", "min": 16, "max": 20},
+ {"key": "fs_6", "min": 20, "max": 24},
+ {"key": "fs_7", "min": 24, "max": 27}
+ ]
+}
From 04da0d0cfd8b7a735f929545b943013476b79dbc Mon Sep 17 00:00:00 2001
From: TotMaxim
Date: Sun, 16 Nov 2025 20:45:24 +0300
Subject: [PATCH 09/10] =?UTF-8?q?=D0=B8=D1=81=D0=BF=D1=80=D0=B0=D0=B2?=
=?UTF-8?q?=D0=BB=D0=B5=D0=BD=D0=B8=D1=8F=20=D0=BE=D0=B1=D1=80=D0=B0=D0=B1?=
=?UTF-8?q?=D0=BE=D1=82=D0=BA=D0=B8=20=D0=BA=D0=BD=D0=BE=D0=BF=D0=BA=D0=B8?=
=?UTF-8?q?=20"=D1=82=D1=80=D0=B5=D0=BD=D0=B0=D0=B6"?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
config/setting_prd_control.json | 20 --------------------
scenes/tabs-switch/tab-switch.tscn | 2 +-
2 files changed, 1 insertion(+), 21 deletions(-)
diff --git a/config/setting_prd_control.json b/config/setting_prd_control.json
index 2c331fb..31abe74 100644
--- a/config/setting_prd_control.json
+++ b/config/setting_prd_control.json
@@ -186,26 +186,6 @@
"POWER_UKP_2": 63,
"TEMPERATURE_UKP_2": 79
},
- "state_machine": {
- "INIT": 0,
- "FS_TURN_ON": 1,
- "FS_WORK": 2,
- "WRITE_ISA": 3,
- "READ_ISA": 4,
- "CHEK_KASSETA_Y5": 5,
- "UG_SET_RAY": 6,
- "UG_SET_RAY_0": 7,
- "UG_SET_RAY_1": 8,
- "UG_SET_RAY_2": 9,
- "UG_SET_RAY_3": 10,
- "UG_SET_RAY_4": 11,
- "UG_SET_RAY_5": 12,
- "IN_EMS_RUN": 13,
- "IN_EMS_STOP": 14,
- "FS_TURN_OFF": 15,
- "STOP_CONTROL": 16,
- "AWAIT": 17
- },
"fs_keys": {
"1": "fs_1",
"2": "fs_2",
diff --git a/scenes/tabs-switch/tab-switch.tscn b/scenes/tabs-switch/tab-switch.tscn
index 6836d83..1c958ec 100644
--- a/scenes/tabs-switch/tab-switch.tscn
+++ b/scenes/tabs-switch/tab-switch.tscn
@@ -126,4 +126,4 @@ script = ExtResource("8_tidwt")
metadata/_edit_lock_ = true
[connection signal="tab_changed" from="tab_switch" to="tab_switch" method="_on_tab_changed"]
-[connection signal="toggled" from="тренаж_режим" to="tab_switch" method="_on_button_trenaj_toggled"]
+[connection signal="toggled" from="тренаж_режим" to="tab_switch" method="_on_button_trenazh_toggled"]
From 5293313f0e6144d5b288343a589d94e01ec74a37 Mon Sep 17 00:00:00 2001
From: TotMaxim
Date: Sun, 16 Nov 2025 22:27:38 +0300
Subject: [PATCH 10/10] =?UTF-8?q?=D0=94=D0=BE=D1=80=D0=B0=D0=B1=D0=BE?=
=?UTF-8?q?=D1=82=D0=BA=D0=B0=20=D0=BE=D1=82=D0=BE=D0=B1=D1=80=D0=B0=D0=B6?=
=?UTF-8?q?=D0=B5=D0=BD=D0=B8=D1=8F=20=D0=BC=D0=BE=D1=89=D0=BD=D0=BE=D1=81?=
=?UTF-8?q?=D1=82=D0=B5=D0=B9=20=D0=B8=20=D0=BA=D0=BE=D0=BD=D1=84=D0=B5?=
=?UTF-8?q?=D1=80=D1=82=D0=B0=D1=86=D0=B8=D1=8E=20json=20=D0=BF=D0=B0?=
=?UTF-8?q?=D1=80=D1=81=D0=B5=D1=80=D0=B0?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
scenes/pribor-prd-k/pribor-prd-k.gd | 4 +-
scenes/pribor-prd-n/pribor-prd-n.gd | 2 +-
scenes/pribor-prd-v/pribor-prd-v.gd | 2 +-
scenes/pribor-prd-v/pribor-prd-v.tscn | 12 +-
scenes/контроль/контроль.tscn | 1 +
scripts/pribor-prd.gd | 164 ++++++++++++++++----------
6 files changed, 113 insertions(+), 72 deletions(-)
diff --git a/scenes/pribor-prd-k/pribor-prd-k.gd b/scenes/pribor-prd-k/pribor-prd-k.gd
index c4ef34c..a185a98 100644
--- a/scenes/pribor-prd-k/pribor-prd-k.gd
+++ b/scenes/pribor-prd-k/pribor-prd-k.gd
@@ -80,9 +80,9 @@ static func power_fill(pow_dic: Dictionary, fs_result: Dictionary, power_amplifi
if pow_dic[powamp_meta].size() < 6:
status = STATE_VAL.ERROR
else:
- if powamp_meta == 'um_7' and not fs_result.fs_1: return
+ 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_8', 'um_9', 'um_10', 'um_11', 'um_12', 'um_13'] and not fs_result.fs_7: return
+ if powamp_meta in ['um_9', 'um_10', 'um_11', 'um_12', 'um_13', 'um_14'] and not fs_result.fs_7: return
i_powapm.value0 = pow_dic[powamp_meta]
for i_p in pow_dic[powamp_meta]:
if i_p < POWER_THRESHOLD:
diff --git a/scenes/pribor-prd-n/pribor-prd-n.gd b/scenes/pribor-prd-n/pribor-prd-n.gd
index 8f7ad06..c8b7fd7 100644
--- a/scenes/pribor-prd-n/pribor-prd-n.gd
+++ b/scenes/pribor-prd-n/pribor-prd-n.gd
@@ -75,7 +75,7 @@ static func power_fill(pow_dic: Dictionary, fs_result: Dictionary, power_amplifi
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_2: return
- if powamp_meta in ['um_7', 'um_8', 'um_9', 'um_10', 'um_11', 'um_12'] and not fs_result.fs_3: 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]
for i_p in pow_dic[powamp_meta]:
if i_p < POWER_THRESHOLD:
diff --git a/scenes/pribor-prd-v/pribor-prd-v.gd b/scenes/pribor-prd-v/pribor-prd-v.gd
index b932aa2..6c32f5a 100644
--- a/scenes/pribor-prd-v/pribor-prd-v.gd
+++ b/scenes/pribor-prd-v/pribor-prd-v.gd
@@ -75,7 +75,7 @@ static func power_fill(pow_dic: Dictionary, fs_result: Dictionary, power_amplifi
status = STATE_VAL.ERROR
else:
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_7', 'um_8', 'um_9', 'um_10', 'um_11', 'um_12'] and not fs_result.fs_5: 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_powapm.value0 = pow_dic[powamp_meta]
for i_p in pow_dic[powamp_meta]:
if i_p < POWER_THRESHOLD:
diff --git a/scenes/pribor-prd-v/pribor-prd-v.tscn b/scenes/pribor-prd-v/pribor-prd-v.tscn
index 3d9bd2e..1910aa1 100644
--- a/scenes/pribor-prd-v/pribor-prd-v.tscn
+++ b/scenes/pribor-prd-v/pribor-prd-v.tscn
@@ -323,7 +323,7 @@ fname = "УМ1535А"
rname = "A13"
value0_info = "Мощность, Вт"
value1_info = "Температура,°C"
-metadata/um = "um_7"
+metadata/um = "um_9"
[node name="um1535_A14" parent="." groups=["power_amplifier"] instance=ExtResource("8_4e87c")]
layout_mode = 0
@@ -335,7 +335,7 @@ fname = "УМ1535А"
rname = "A14"
value0_info = "Мощность, Вт"
value1_info = "Температура,°C"
-metadata/um = "um_8"
+metadata/um = "um_10"
[node name="um1535_A15" parent="." groups=["power_amplifier"] instance=ExtResource("8_4e87c")]
layout_mode = 0
@@ -347,7 +347,7 @@ fname = "УМ1535А"
rname = "A15"
value0_info = "Мощность, Вт"
value1_info = "Температура,°C"
-metadata/um = "um_9"
+metadata/um = "um_11"
[node name="um1535_A16" parent="." groups=["power_amplifier"] instance=ExtResource("8_4e87c")]
layout_mode = 0
@@ -359,7 +359,7 @@ fname = "УМ1535А"
rname = "A16"
value0_info = "Мощность, Вт"
value1_info = "Температура,°C"
-metadata/um = "um_10"
+metadata/um = "um_12"
[node name="um1535_A17" parent="." groups=["power_amplifier"] instance=ExtResource("8_4e87c")]
layout_mode = 0
@@ -371,7 +371,7 @@ fname = "УМ1535А"
rname = "A17"
value0_info = "Мощность, Вт"
value1_info = "Температура,°C"
-metadata/um = "um_11"
+metadata/um = "um_13"
[node name="um1535_A18" parent="." groups=["power_amplifier"] instance=ExtResource("8_4e87c")]
layout_mode = 0
@@ -383,7 +383,7 @@ fname = "УМ1535А"
rname = "A18"
value0_info = "Мощность, Вт"
value1_info = "Температура,°C"
-metadata/um = "um_12"
+metadata/um = "um_14"
[node name="control_result" type="Label" parent="."]
layout_mode = 0
diff --git a/scenes/контроль/контроль.tscn b/scenes/контроль/контроль.tscn
index 5a3a92e..0b8d870 100644
--- a/scenes/контроль/контроль.tscn
+++ b/scenes/контроль/контроль.tscn
@@ -1689,6 +1689,7 @@ offset_bottom = 104.0
focus_mode = 0
text = "Запуск контроля"
script = ExtResource("18_lbx5w")
+metadata/_edit_lock_ = true
[connection signal="toggled" from="pribor_prd_n_1" to="pribor_prd_n_1" method="_on_toggled"]
[connection signal="toggled" from="pribor_uf" to="pribor_uf" method="_on_toggled"]
diff --git a/scripts/pribor-prd.gd b/scripts/pribor-prd.gd
index 23865d7..23c6476 100644
--- a/scripts/pribor-prd.gd
+++ b/scripts/pribor-prd.gd
@@ -11,6 +11,26 @@ const RAY_35: String = "RAY_35"
const RAY_45: String = "RAY_45"
const RAY_TYPES := [RAY_m5, RAY_5, RAY_15, RAY_25, RAY_35, RAY_45]
+enum STATE_MACHINE {
+ INIT,
+ FS_TURN_ON,
+ FS_WORK,
+ WRITE_ISA,
+ READ_ISA,
+ CHEK_KASSETA_Y5,
+ UG_SET_RAY,
+ UG_SET_RAY_0,
+ UG_SET_RAY_1,
+ UG_SET_RAY_2,
+ UG_SET_RAY_3,
+ UG_SET_RAY_4,
+ UG_SET_RAY_5,
+ IN_EMS_RUN,
+ IN_EMS_STOP,
+ FS_TURN_OFF,
+ STOP_CONTROL,
+ AWAIT
+ }
# Загруженные конфигурации
var config_data: Dictionary
@@ -18,7 +38,6 @@ var device_constants: Dictionary
var base_configs: Dictionary
var device_configs: Dictionary
var data_indices: Dictionary
-var state_machine_enum: Dictionary
var fs_keys: Dictionary
var temperature_constants: Dictionary
var ems_input_bits_config: Dictionary
@@ -35,7 +54,7 @@ var temperature_um: Dictionary
var control_results: Dictionary
var power_result: Dictionary
var self_name: String
-var state: int = 0
+var state: int = STATE_MACHINE.INIT
var current_litera: int
var flag_write_isa: bool = false
var flag_fs_status_ok: bool = false
@@ -108,25 +127,44 @@ func _load_configuration() -> void:
func _parse_config_data() -> void:
- device_constants = config_data.get("device_constants", {})
- base_configs = config_data.get("base_configs", {})
- device_configs = config_data.get("device_configs", {})
- data_indices = config_data.get("data_indices", {})
- state_machine_enum = config_data.get("state_machine", {})
- fs_keys = config_data.get("fs_keys", {})
- temperature_constants = config_data.get("temperature_constants", {})
- ems_input_bits_config = config_data.get("ems_input_bits_config", {})
- fs_rules = config_data.get("fs_rules", [])
+ 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", []))
+
+
+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 _initialize_ray_mapping() -> void:
_ray_state_mapping = {
- state_machine_enum.get("UG_SET_RAY_0", 7): RAY_m5,
- state_machine_enum.get("UG_SET_RAY_1", 8): RAY_5,
- state_machine_enum.get("UG_SET_RAY_2", 9): RAY_15,
- state_machine_enum.get("UG_SET_RAY_3", 10): RAY_25,
- state_machine_enum.get("UG_SET_RAY_4", 11): RAY_35,
- state_machine_enum.get("UG_SET_RAY_5", 12): RAY_45
+ STATE_MACHINE.UG_SET_RAY_0: "RAY_m5",
+ STATE_MACHINE.UG_SET_RAY_1: "RAY_5",
+ STATE_MACHINE.UG_SET_RAY_2: "RAY_15",
+ STATE_MACHINE.UG_SET_RAY_3: "RAY_25",
+ STATE_MACHINE.UG_SET_RAY_4: "RAY_35",
+ STATE_MACHINE.UG_SET_RAY_5: "RAY_45",
}
@@ -208,13 +246,13 @@ func on_fs_update_state(packet_type_7: Dictionary, fs_mapping: Dictionary) -> vo
##
func state_control_machine() -> void:
match state:
- state_machine_enum.INIT:
+ STATE_MACHINE.INIT:
print("Start control for %s device %s litera" % [self_name, current_litera])
_handle_init_state()
- state_machine_enum.FS_TURN_ON:
+ STATE_MACHINE.FS_TURN_ON:
_handle_fs_turn_on_state()
- state = state_machine_enum.FS_WORK
- state_machine_enum.FS_WORK:
+ state = STATE_MACHINE.FS_WORK
+ STATE_MACHINE.FS_WORK:
var flag_ecm: bool = false
for key in ecms:
var params = ecms[key].params.freq
@@ -225,74 +263,76 @@ func state_control_machine() -> void:
if flag_ecm and flag_fs_status_ok:
ems_6666_timer.start()
_handle_fs_work_state()
- state_machine_enum.CHEK_KASSETA_Y5:
+ STATE_MACHINE.CHEK_KASSETA_Y5:
if block_kasseta_y5_config['yau07']:
- state = state_machine_enum.WRITE_ISA
- state_machine_enum.WRITE_ISA:
+ state = STATE_MACHINE.WRITE_ISA
+ STATE_MACHINE.WRITE_ISA:
if not flag_write_isa:
_handle_ug_set_state(0x6)
- state = state_machine_enum.READ_ISA
- state_machine_enum.READ_ISA:
+ state = STATE_MACHINE.READ_ISA
+ STATE_MACHINE.READ_ISA:
if (unit_prd.cmd_state == unit_prd.CmdState.DONE) or (unit_prd.cmd_state == unit_prd.CmdState.FAIL):
_handle_read_isa(unit_prd, [constants.ADDR_UG_LITERA_1, constants.ADDR_UG_LITERA_2, constants.ADDR_UG_LITERA_3], cmd_array)
flag_write_isa = false
- state = state_machine_enum.UG_SET_RAY
- state_machine_enum.UG_SET_RAY:
+ state = STATE_MACHINE.UG_SET_RAY
+ STATE_MACHINE.UG_SET_RAY:
var addr: int = constants.ADDR_UG_LITERA_1
if current_litera == 3 or current_litera == 5 or current_litera == 7:
addr = constants.ADDR_UG_LITERA_2
if unit_prd.isa_ports.has(addr) and (unit_prd.cmd_state == unit_prd.CmdState.DONE):
if unit_prd.isa_ports[addr] & 0x07 == 0:
- state = state_machine_enum.UG_SET_RAY_1
+ state = STATE_MACHINE.UG_SET_RAY_1
elif unit_prd.isa_ports[addr] & 0x07 == 1:
- state = state_machine_enum.UG_SET_RAY_2
+ state = STATE_MACHINE.UG_SET_RAY_2
elif unit_prd.isa_ports[addr] & 0x07 == 2:
- state = state_machine_enum.UG_SET_RAY_3
+ state = STATE_MACHINE.UG_SET_RAY_3
elif unit_prd.isa_ports[addr] & 0x07 == 3:
- state = state_machine_enum.UG_SET_RAY_4
+ state = STATE_MACHINE.UG_SET_RAY_4
elif unit_prd.isa_ports[addr] & 0x07 == 4:
- state = state_machine_enum.UG_SET_RAY_5
+ state = STATE_MACHINE.UG_SET_RAY_5
elif unit_prd.isa_ports[addr] & 0x07 == 5:
if not current_litera == 1:
control_results = check_dou_result(control_results, power_for_litera, self_name, current_litera, constants)
- state = state_machine_enum.IN_EMS_STOP
+ state = STATE_MACHINE.IN_EMS_STOP
elif unit_prd.isa_ports[addr] & 0x07 == 6:
- state = state_machine_enum.UG_SET_RAY_0
+ state = STATE_MACHINE.UG_SET_RAY_0
+ if current_litera == 1:
+ state = STATE_MACHINE.UG_SET_RAY_5
- state_machine_enum.UG_SET_RAY_0:
+ STATE_MACHINE.UG_SET_RAY_0:
if flag_si_fs_input and not flag_write_isa:
control_timer.stop()
_handle_ug_set_state(0x0)
await get_tree().create_timer(0.5).timeout
- state = state_machine_enum.READ_ISA
- state_machine_enum.UG_SET_RAY_1:
+ state = STATE_MACHINE.READ_ISA
+ STATE_MACHINE.UG_SET_RAY_1:
if not flag_write_isa:
_handle_ug_set_state(0x1)
- state = state_machine_enum.READ_ISA
- state_machine_enum.UG_SET_RAY_2:
+ state = STATE_MACHINE.READ_ISA
+ STATE_MACHINE.UG_SET_RAY_2:
if not flag_write_isa:
_handle_ug_set_state(0x2)
- state = state_machine_enum.READ_ISA
- state_machine_enum.UG_SET_RAY_3:
+ state = STATE_MACHINE.READ_ISA
+ STATE_MACHINE.UG_SET_RAY_3:
if not flag_write_isa:
_handle_ug_set_state(0x3)
- state = state_machine_enum.READ_ISA
- state_machine_enum.UG_SET_RAY_4:
+ state = STATE_MACHINE.READ_ISA
+ STATE_MACHINE.UG_SET_RAY_4:
if not flag_write_isa:
_handle_ug_set_state(0x4)
- state = state_machine_enum.READ_ISA
- state_machine_enum.UG_SET_RAY_5:
+ state = STATE_MACHINE.READ_ISA
+ STATE_MACHINE.UG_SET_RAY_5:
if not flag_write_isa:
_handle_ug_set_state(0x5)
- state = state_machine_enum.READ_ISA
- state_machine_enum.IN_EMS_STOP:
+ state = STATE_MACHINE.READ_ISA
+ STATE_MACHINE.IN_EMS_STOP:
ems_6666_timer.stop()
- state = state_machine_enum.FS_TURN_OFF
- state_machine_enum.FS_TURN_OFF:
+ state = STATE_MACHINE.FS_TURN_OFF
+ STATE_MACHINE.FS_TURN_OFF:
ems_6666_timer.stop()
_handle_fs_turn_off_state()
- state = state_machine_enum.STOP_CONTROL
- state_machine_enum.STOP_CONTROL:
+ state = STATE_MACHINE.STOP_CONTROL
+ STATE_MACHINE.STOP_CONTROL:
_handle_stop_control_state()
## В машине состояний вызов изменения состояния прогресс бара контроля
progressbar_status()
@@ -302,7 +342,7 @@ func state_control_machine() -> void:
func _handle_init_state() -> void:
if current_litera in [1, 2, 3, 4, 5, 6, 7]:
if not ecms.size():
- state = state_machine_enum.FS_TURN_ON
+ state = STATE_MACHINE.FS_TURN_ON
else:
control_results = on_control_result(block_ip_config, control_results)
power_result = prep_power(power_for_litera, self_name)
@@ -326,7 +366,7 @@ func _handle_fs_work_state() -> void:
(current_litera == 6 and control_results.fs_6) or \
(current_litera == 7 and control_results.fs_7) or \
(current_litera == 1 and control_results.fs_1):
- state = state_machine_enum.CHEK_KASSETA_Y5
+ state = STATE_MACHINE.CHEK_KASSETA_Y5
func _handle_ug_set_state(RAY_DOU_NUM: int) -> void:
@@ -363,7 +403,7 @@ func on_state_mashine():
func progressbar_status() -> void:
match state:
- state_machine_enum.INIT:
+ STATE_MACHINE.INIT:
cc += 10 if current_litera in [3, 5, 6, 7] else 0
if control_timer.get_time_left() > 0:
progress_value = cc + control_timer.get_wait_time() - control_timer.get_time_left()
@@ -380,7 +420,7 @@ func _handle_fs_turn_off_state() -> void:
##'Выполняется завершение проверки ФС-%s' % current_litera
func _handle_stop_control_state() -> void:
_advance_to_next_fs()
- state = state_machine_enum.INIT
+ state = STATE_MACHINE.INIT
func _advance_to_next_fs() -> void:
@@ -420,7 +460,7 @@ func _on_start_contol_device()-> void:
func _determine_self_name() -> void:
cc = 0
- state = state_machine_enum.get("INIT", 0)
+ state = STATE_MACHINE.get("INIT", 0)
var current_unit = unit_prd.name
var parts = current_unit.split('-')
self_name = parts[-1]
@@ -486,7 +526,7 @@ func on_mode_changed(in_tree: bool) -> void:
if not in_tree: ## TODO: Дополнительная проверка если контроль идет, если нет, то смысла вызывать нет
progress_value = 0
machine_timer.stop()
- state = state_machine_enum.INIT
+ state = STATE_MACHINE.INIT
_handle_fs_turn_off_state()
#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]])
@@ -538,7 +578,7 @@ static func _get_dkm_bit_for_current_fs(litera: int, constants_dic: Dictionary)
func on_stop_control() -> void:
_handle_fs_turn_off_state()
- state = state_machine_enum.FS_TURN_OFF
+ state = STATE_MACHINE.FS_TURN_OFF
static func on_control_result(ip_config: Dictionary, ctrl_results: Dictionary) -> Dictionary:
@@ -813,13 +853,13 @@ static func prep_power(power_dic: Dictionary, prd_name: String)-> Dictionary:
if arr_litera.size() != 3:
um_names = [
['um_1', 'um_2', 'um_3', 'um_4', 'um_5', 'um_6'],
- ['um_7', 'um_8', 'um_9', 'um_10', 'um_11', 'um_12']
+ ['um_9', 'um_10', 'um_11', 'um_12', 'um_13', 'um_14']
]
else:
um_names = [
['um_1', 'um_2', 'um_3', 'um_4', 'um_5', 'um_6'],
- ['um_8', 'um_9', 'um_10', 'um_11', 'um_12', 'um_13'],
- ['um_7'] # Особый случай для третьего элемента
+ ['um_9', 'um_10', 'um_11', 'um_12', 'um_13', 'um_14'],
+ ['um_8']
]
for litera_index in arr_litera.size():