diff --git a/scenes/frame-ecm-list/scroll-ecm-list.gd b/scenes/frame-ecm-list/scroll-ecm-list.gd index e437417..7acaa67 100644 --- a/scenes/frame-ecm-list/scroll-ecm-list.gd +++ b/scenes/frame-ecm-list/scroll-ecm-list.gd @@ -121,6 +121,7 @@ func on_interfer_new(ecm, table_index): func on_interfer_off(ecm, ecms, thrs, table_index): + var sz = ecms.size() $table.remove_row(table_index[ecm.ispp]) rehash(table_index) ecms.erase(ecm.ispp) @@ -132,6 +133,8 @@ func on_interfer_off(ecm, ecms, thrs, table_index): $table.get_selected_rows(sel_rows) if not len(sel_rows): signaller.emit_signal('interfer_selected', null) + if sz != ecms.size(): + interfer.call_deferred('emit_signal', 'interfer_resized', ecms) ## Перестраивает индекс таблицы. Вызывать при удалении строки diff --git a/scenes/pribor-prd-k/pribor-prd-k.gd b/scenes/pribor-prd-k/pribor-prd-k.gd index 13408b9..18a4a23 100644 --- a/scenes/pribor-prd-k/pribor-prd-k.gd +++ b/scenes/pribor-prd-k/pribor-prd-k.gd @@ -13,12 +13,13 @@ const constants_k: Dictionary = { 'ADDR_UG_LITERA_3': 0x10A, 'TEMP_THRESHOLD': 40, 'POWER_THRESHOLD': 40, - 'TIMER_DELAY': 5.0, 'RAY_DOU_NUM': 0x3, 'ATT_UM_1': 0x0, 'ATT_UM_6': 0x7, 'ATT_UM_7': 0x7, - 'POWER_UM': 75, + 'POWER_UM': 85, + 'TIMER_DELAY': 5.0, + 'STATE_MASHINE_TIMER': 0.3, } # Конфигурация параметров для каждого прибора const PRIBOR_CONFIG := { @@ -45,18 +46,6 @@ var block_ip_config_k := { 'ip12_50_2': [6, false], 'ip5_25': [7, false], } -# Проверка ДКМ -var block_dkm_config_k: = { - 'dkm_1': false, - 'dkm_6': false, - 'dkm_7': false, -} -# Проверка ФС -var block_fs_prd_config_k: = { - 'fs_1': false, - 'fs_6': false, - 'fs_7': false, -} var block_kasseta_y5_prd_config_k: = { 'yau07': false, 'ems': false, @@ -65,25 +54,29 @@ var block_kasseta_y5_prd_config_k: = { 'ukp2': false, } # Основные переменные -var current_fs: int = 1 +var start_litera: int = 1 var ug_work_1: int = 0 var ug_work_2: int = 0 var ug_work_3: int = 0 var mashine_timer: Timer = Timer.new() var prd_k_module: Object var unit_prd_k: Object +var control_prd_k: Object # Результаты контроля var control_results_k: Dictionary = { 'block_ip': false, # Проверка касет П1 и ИП МА2000 - 'temperature': true, # Проверка температур УМ - 'dkm': false, + 'temperature': true, + 'dkm_1': false, + 'dkm_6': false, + 'dkm_7': false, 'dou_6': false, - 'dou_7': false, # Мощность от УКП - 'fs': false, + 'dou_7': false, + 'fs_1': 2, + 'fs_6': 2, + 'fs_7': 2, } -var test = preload('res://scripts/pribor-prd.gd') -var control_prd_k: Object +var test_control_k = preload('res://scripts/pribor-prd.gd') func _ready() -> void: @@ -97,11 +90,6 @@ func _ready() -> void: func on_state_mashine() -> void: control_prd_k.state_control_machine() - $um1535_A10.value0 = [10, 20, 30, 40, 50, 60] - $um1535_A11.value0 = [60, 50, 40, 30, 20, 10] - $um1535_A12.set_value0_by_index(5, 100) - $um1535_A13.set_value0_by_index(2, 0) - $um1535_A13.value1 = -20 func initialize_connections() -> void: @@ -120,13 +108,11 @@ func initialize_connections() -> void: 'prd_config': PRIBOR_CONFIG, 'fs_params': FS_PARAMS, 'block_ip_prd_config': block_ip_config_k, - 'block_dkm_prd_config': block_dkm_config_k, - 'block_fs_prd_config': block_fs_prd_config_k, 'block_kasseta_y5_prd_config': block_kasseta_y5_prd_config_k, 'control_results': control_results_k, - 'current_fs': current_fs, + 'current_litera': start_litera, } - control_prd_k = test.TestPRD.new(init_data) + control_prd_k = test_control_k.TestPRD.new(init_data) add_child(control_prd_k) control_prd_k.connect('control_is_over', Callable(self, 'on_control_result')) @@ -134,7 +120,7 @@ func initialize_connections() -> void: func setup_timer() -> void: add_child(mashine_timer) mashine_timer.connect('timeout', Callable(self, 'on_state_mashine')) - mashine_timer.wait_time = 0.5 + mashine_timer.wait_time = constants_k.STATE_MASHINE_TIMER mashine_timer.start() @@ -152,6 +138,10 @@ func _enter_tree() -> void: $control_result.text = 'Выполняется ...' $control_result.add_theme_color_override('font_color', Color.ALICE_BLUE) 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 _exit_tree() -> void: @@ -171,10 +161,32 @@ func on_mode_changed(in_tree: bool) -> 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]]) signaller.emit_signal('interfer_off_all') else: + set_default_state() + control_prd_k.state = control_prd_k.STATE_MASHINE.INIT mashine_timer.start() -func on_control_result(result_dic: Dictionary) -> void: +func power_fill(pow_dic: Dictionary) -> void: + #if not control_prd_k.block_kasseta_y5_config.yau07 or not control_prd_k.block_kasseta_y5_config.ukp1 or not control_prd_k.block_kasseta_y5_config.ukp2: + #return + var power_amplifier: Array = get_tree().get_nodes_in_group('power_amplifier') + for i_powapm in power_amplifier: + var powamp_meta: String = i_powapm.get_meta('um') + var status = STATE_VAL.GOOD if pow_dic else STATE_VAL.NONE + if pow_dic: + if not pow_dic.has(powamp_meta): + break + if pow_dic[powamp_meta].size() < 6: + status = STATE_VAL.ERROR + else: + i_powapm.value0 = pow_dic[powamp_meta] + for i_p in pow_dic[powamp_meta]: + if i_p < constants_k.POWER_THRESHOLD: + status = STATE_VAL.ERROR + i_powapm.state = status + + +func on_control_result(result_dic: Dictionary, power_dic: Dictionary) -> void: mashine_timer.stop() block_kasseta_y5_prd_config_k = control_prd_k.block_kasseta_y5_config var nodes_y5: Array = get_tree().get_nodes_in_group('y-5') @@ -183,7 +195,7 @@ func on_control_result(result_dic: Dictionary) -> void: if block_kasseta_y5_prd_config_k.has(meta_y5): if block_kasseta_y5_prd_config_k['yau07'] == false: node_y5.state = STATE_VAL.ERROR if meta_y5 == 'yau07' else STATE_VAL.NONE - return + break node_y5.state = STATE_VAL.GOOD if block_kasseta_y5_prd_config_k[meta_y5] else STATE_VAL.ERROR block_ip_config_k = control_prd_k.block_ip_config @@ -193,24 +205,30 @@ func on_control_result(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 - var fs_results: Dictionary = control_prd_k.block_fs_config var fs_nodes: Array = get_tree().get_nodes_in_group('fs_group') for f in fs_nodes: var fs_meta: String = f.get_meta('fs') - if fs_results.has(fs_meta): - var new_state = fs_results[fs_meta] + if result_dic.has(fs_meta): + var new_state = result_dic[fs_meta] f.state = new_state - fs_results[fs_meta] = new_state + result_dic[fs_meta] = new_state - var dkm: Dictionary = control_prd_k.block_dkm_config - if fs_results.fs_1: - $kasseta_fs_kd/ref_A2.state = STATE_VAL.GOOD if dkm.dkm_1 else STATE_VAL.ERROR - if fs_results.fs_6: - $kasseta_fs_kd/ref_A4.state = STATE_VAL.GOOD if dkm.dkm_6 else STATE_VAL.ERROR + if result_dic.fs_1 == 1: + $kasseta_fs_kd/ref_A2.state = STATE_VAL.GOOD if result_dic.dkm_1 else STATE_VAL.ERROR + else: + result_dic.fs_1 = false + if result_dic.fs_6 == 1: + $kasseta_fs_kd/ref_A4.state = STATE_VAL.GOOD if result_dic.dkm_6 else STATE_VAL.ERROR $dou6_A7.state = STATE_VAL.GOOD if result_dic.dou_6 else STATE_VAL.ERROR - if fs_results.fs_7: - $kasseta_fs_kd/ref_A7.state = STATE_VAL.GOOD if dkm.dkm_7 else STATE_VAL.ERROR + else: + result_dic.fs_6 = false + if result_dic.fs_7 == 1: + $kasseta_fs_kd/ref_A7.state = STATE_VAL.GOOD if result_dic.dkm_7 else STATE_VAL.ERROR $dou7_A8.state = STATE_VAL.GOOD if result_dic.dou_7 else STATE_VAL.ERROR + else: + result_dic.fs_7 = false + + power_fill(power_dic) var result = true for device in result_dic.values(): @@ -220,7 +238,7 @@ func on_control_result(result_dic: Dictionary) -> void: var name_prd = control_prd_k.self_name if result: $control_result.text = 'Прибор ПРД-%s исправен' % name_prd - $control_result.add_theme_color_override('font_color', Color.AQUAMARINE) + $control_result.add_theme_color_override('font_color', Color.GREEN) else: $control_result.text = 'Прибор ПРД-%s неисправен' % name_prd - $control_result.add_theme_color_override('font_color', Color.CRIMSON) + $control_result.add_theme_color_override('font_color', Color.RED) diff --git a/scenes/pribor-prd-k/pribor-prd-k.tscn b/scenes/pribor-prd-k/pribor-prd-k.tscn index a3601a7..b56036d 100644 --- a/scenes/pribor-prd-k/pribor-prd-k.tscn +++ b/scenes/pribor-prd-k/pribor-prd-k.tscn @@ -1,40 +1,14 @@ -[gd_scene load_steps=16 format=3 uid="uid://m5s87q7m66lj"] +[gd_scene load_steps=10 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="PackedScene" uid="uid://bkxblfoj7ejv0" path="res://scenes/контроль/блок-а.tscn" id="6_fmhtx"] [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://belwchvdktrw0" path="res://data/эмс-бланк.png" id="11_c7lv8"] -[ext_resource type="Texture2D" uid="uid://bwddxs24es81u" path="res://data/эмс-бланк-пост.png" id="12_wd1vi"] -[ext_resource type="Texture2D" uid="uid://pfoscstbm025" path="res://data/эмс-бланк-перем.png" id="13_bjebg"] - -[sub_resource type="StyleBoxTexture" id="StyleBoxTexture_kc77u"] - -[sub_resource type="SpriteFrames" id="SpriteFrames_di0aa"] -animations = [{ -"frames": [{ -"duration": 1.0, -"texture": ExtResource("11_c7lv8") -}, { -"duration": 1.0, -"texture": ExtResource("12_wd1vi") -}, { -"duration": 1.0, -"texture": ExtResource("13_bjebg") -}, { -"duration": 1.0, -"texture": null -}], -"loop": true, -"name": &"default", -"speed": 5.0 -}] [node name="pribor_prd_k" type="Control"] layout_mode = 3 @@ -120,10 +94,12 @@ offset_left = 485.0 offset_top = 242.0 offset_right = 652.0 offset_bottom = 337.0 +value0 = [0.0, 0.0, 0.0, 0.0, 0.0, 0.0] fname = "УМ1535Б" rname = "A10" value0_info = "Мощность, Вт" value1_info = "Температура,°C" +metadata/um = "um_1" [node name="um1535_A11" parent="." groups=["power_amplifier"] instance=ExtResource("5_c7lv8")] layout_mode = 0 @@ -135,6 +111,7 @@ fname = "УМ1535Б" rname = "A11" value0_info = "Мощность, Вт" value1_info = "Температура,°C" +metadata/um = "um_2" [node name="um1535_A12" parent="." groups=["power_amplifier"] instance=ExtResource("5_c7lv8")] layout_mode = 0 @@ -146,6 +123,7 @@ fname = "УМ1535Б" rname = "A12" value0_info = "Мощность, Вт" value1_info = "Температура,°C" +metadata/um = "um_3" [node name="um1535_A13" parent="." groups=["power_amplifier"] instance=ExtResource("5_c7lv8")] layout_mode = 0 @@ -157,6 +135,7 @@ fname = "УМ1535Б" rname = "A13" value0_info = "Мощность, Вт" value1_info = "Температура,°C" +metadata/um = "um_4" [node name="um1535_A14" parent="." groups=["power_amplifier"] instance=ExtResource("5_c7lv8")] layout_mode = 0 @@ -168,6 +147,7 @@ fname = "УМ1535Б" rname = "A14" value0_info = "Мощность, Вт" value1_info = "Температура,°C" +metadata/um = "um_5" [node name="um1535_A15" parent="." groups=["power_amplifier"] instance=ExtResource("5_c7lv8")] layout_mode = 0 @@ -179,17 +159,19 @@ fname = "УМ1535Б" rname = "A15" value0_info = "Мощность, Вт" value1_info = "Температура,°C" +metadata/um = "um_6" -[node name="utm80_A9" parent="." groups=["power_amplifier"] instance=ExtResource("6_fmhtx")] +[node name="utm80_A9" parent="." groups=["power_amplifier"] instance=ExtResource("5_c7lv8")] layout_mode = 0 offset_left = 485.0 offset_top = 812.0 offset_right = 652.0 offset_bottom = 907.0 -value_name0 = "°C" -value_name1 = "P, %" fname = "УТМ80" rname = "A9" +value0_info = "Мощность, Вт" +value1_info = "Температура,°C" +metadata/um = "um_7" [node name="rm1620m_A16" parent="." groups=["power_amplifier"] instance=ExtResource("5_c7lv8")] layout_mode = 0 @@ -197,10 +179,11 @@ offset_left = 8.0 offset_top = 242.0 offset_right = 175.0 offset_bottom = 337.0 -fname = "РМ16-20М" +fname = "УМ1535Б" rname = "A16" value0_info = "Мощность, Вт" value1_info = "Температура,°C" +metadata/um = "um_8" [node name="rm1620m_A17" parent="." groups=["power_amplifier"] instance=ExtResource("5_c7lv8")] layout_mode = 0 @@ -208,10 +191,11 @@ offset_left = 8.0 offset_top = 337.0 offset_right = 173.0 offset_bottom = 432.0 -fname = "РМ16-20М" +fname = "УМ1535Б" rname = "A17" value0_info = "Мощность, Вт" value1_info = "Температура,°C" +metadata/um = "um_9" [node name="rm1620m_A18" parent="." groups=["power_amplifier"] instance=ExtResource("5_c7lv8")] layout_mode = 0 @@ -219,10 +203,11 @@ offset_left = 8.0 offset_top = 432.0 offset_right = 175.0 offset_bottom = 527.0 -fname = "РМ16-20М" +fname = "УМ1535Б" rname = "A18" value0_info = "Мощность, Вт" value1_info = "Температура,°C" +metadata/um = "um_10" [node name="rm1620m_A19" parent="." groups=["power_amplifier"] instance=ExtResource("5_c7lv8")] layout_mode = 0 @@ -230,10 +215,11 @@ offset_left = 8.0 offset_top = 527.0 offset_right = 175.0 offset_bottom = 622.0 -fname = "РМ16-20М" +fname = "УМ1535Б" rname = "A19" value0_info = "Мощность, Вт" value1_info = "Температура,°C" +metadata/um = "um_11" [node name="rm1620m_A20" parent="." groups=["power_amplifier"] instance=ExtResource("5_c7lv8")] layout_mode = 0 @@ -241,10 +227,11 @@ offset_left = 8.0 offset_top = 622.0 offset_right = 175.0 offset_bottom = 717.0 -fname = "РМ16-20М" +fname = "УМ1535Б" rname = "A20" value0_info = "Мощность, Вт" value1_info = "Температура,°C" +metadata/um = "um_12" [node name="rm1620m_A21" parent="." groups=["power_amplifier"] instance=ExtResource("5_c7lv8")] layout_mode = 0 @@ -252,10 +239,11 @@ offset_left = 8.0 offset_top = 717.0 offset_right = 175.0 offset_bottom = 812.0 -fname = "РМ16-20М" +fname = "УМ1535Б" rname = "A21" value0_info = "Мощность, Вт" value1_info = "Температура,°C" +metadata/um = "um_13" [node name="kasseta_fs_kd" parent="." instance=ExtResource("7_ia27q")] layout_mode = 0 @@ -331,122 +319,6 @@ offset_left = 9.0 offset_top = 960.0 offset_right = 649.0 offset_bottom = 1003.0 -theme_override_colors/font_color = Color(0.862745, 0.0784314, 0.235294, 1) -theme_override_font_sizes/font_size = 28 text = "Прибор ПРД- неисправен" horizontal_alignment = 1 metadata/_edit_lock_ = true - -[node name="Monitoring_panel" type="Panel" parent="."] -visible = false -layout_mode = 0 -offset_left = 496.0 -offset_top = 8.0 -offset_right = 496.0 -offset_bottom = 8.0 -theme_override_styles/panel = SubResource("StyleBoxTexture_kc77u") - -[node name="in_fs_1" type="AnimatedSprite2D" parent="Monitoring_panel"] -position = Vector2(206, 577) -scale = Vector2(1.2, 1.2) -sprite_frames = SubResource("SpriteFrames_di0aa") - -[node name="in_fs_1" type="Label" parent="Monitoring_panel/in_fs_1"] -offset_left = -15.1667 -offset_top = 14.0 -offset_right = 14.8333 -offset_bottom = 33.0 -theme_override_colors/font_color = Color(0.890196, 0.486275, 0.196078, 1) -theme_override_font_sizes/font_size = 10 -text = "In FS 1" -horizontal_alignment = 1 -metadata/_edit_use_anchors_ = true - -[node name="in_fs_2" type="AnimatedSprite2D" parent="Monitoring_panel"] -position = Vector2(319, 577) -scale = Vector2(1.2, 1.2) -sprite_frames = SubResource("SpriteFrames_di0aa") - -[node name="in_fs_3" type="Label" parent="Monitoring_panel/in_fs_2"] -offset_left = -15.1667 -offset_top = 14.0 -offset_right = 14.8333 -offset_bottom = 33.0 -theme_override_colors/font_color = Color(0.890196, 0.486275, 0.196078, 1) -theme_override_font_sizes/font_size = 10 -text = "In FS 3" -horizontal_alignment = 1 - -[node name="out_ems_1" type="AnimatedSprite2D" parent="Monitoring_panel"] -position = Vector2(206, 465) -scale = Vector2(1.2, 1.2) -sprite_frames = SubResource("SpriteFrames_di0aa") - -[node name="Out_ems_1" type="Label" parent="Monitoring_panel/out_ems_1"] -anchors_preset = -1 -anchor_left = 0.0185185 -anchor_right = 0.0185185 -anchor_bottom = 0.555556 -offset_left = -18.5 -offset_top = 14.0 -offset_right = 17.5 -offset_bottom = 33.0 -theme_override_colors/font_color = Color(0.890196, 0.486275, 0.196078, 1) -theme_override_font_sizes/font_size = 10 -text = "Out -ems 1" -horizontal_alignment = 1 -metadata/_edit_use_anchors_ = true - -[node name="out_ems_2" type="AnimatedSprite2D" parent="Monitoring_panel"] -position = Vector2(319, 465) -scale = Vector2(1.2, 1.2) -sprite_frames = SubResource("SpriteFrames_di0aa") - -[node name="Out_ems_1" type="Label" parent="Monitoring_panel/out_ems_2"] -offset_left = -15.1667 -offset_top = 14.0 -offset_right = 14.8333 -offset_bottom = 33.0 -theme_override_colors/font_color = Color(0.890196, 0.486275, 0.196078, 1) -theme_override_font_sizes/font_size = 10 -text = "Out -ems 2" -horizontal_alignment = 1 - -[node name="in_fs_3" type="AnimatedSprite2D" parent="Monitoring_panel"] -position = Vector2(264, 577) -scale = Vector2(1.2, 1.2) -sprite_frames = SubResource("SpriteFrames_di0aa") - -[node name="in_fs_2" type="Label" parent="Monitoring_panel/in_fs_3"] -offset_left = -15.1667 -offset_top = 14.0 -offset_right = 14.8333 -offset_bottom = 33.0 -theme_override_colors/font_color = Color(0.890196, 0.486275, 0.196078, 1) -theme_override_font_sizes/font_size = 10 -text = "In FS 2" -horizontal_alignment = 1 -metadata/_edit_use_anchors_ = true - -[node name="out_ems_3" type="AnimatedSprite2D" parent="Monitoring_panel"] -position = Vector2(264, 465) -scale = Vector2(1.2, 1.2) -sprite_frames = SubResource("SpriteFrames_di0aa") - -[node name="Out_ems_1" type="Label" parent="Monitoring_panel/out_ems_3"] -anchors_preset = -1 -anchor_left = 0.0185185 -anchor_right = 0.0185185 -anchor_bottom = 0.555556 -offset_left = -18.5 -offset_top = 14.0 -offset_right = 17.5 -offset_bottom = 33.0 -theme_override_colors/font_color = Color(0.890196, 0.486275, 0.196078, 1) -theme_override_font_sizes/font_size = 10 -text = "Out -ems 3" -horizontal_alignment = 1 -metadata/_edit_use_anchors_ = true diff --git a/scenes/pribor-prd-n/pribor-prd-n.gd b/scenes/pribor-prd-n/pribor-prd-n.gd index 9e9ceb8..6e177be 100644 --- a/scenes/pribor-prd-n/pribor-prd-n.gd +++ b/scenes/pribor-prd-n/pribor-prd-n.gd @@ -12,11 +12,12 @@ const constants_n = { 'ADDR_UG_LITERA_3': 0x10A, 'TEMP_THRESHOLD': 70, 'POWER_THRESHOLD': 40, - 'TIMER_DELAY': 5.0, 'RAY_DOU_NUM': 0x3, 'ATT_UM_2': 0x7, 'ATT_UM_3': 0x7, 'POWER_UM': 70, + 'TIMER_DELAY': 5.0, + 'STATE_MASHINE_TIMER': 0.3, } # Конфигурация параметров для каждого прибора const PRIBOR_CONFIG_N := { @@ -39,17 +40,6 @@ var block_ip_config_n:= { 'ip12_50_1': [4, false], 'ip5_25': [7, false], } -# Проверка ДКМ -var block_dkm_config_n: = { - 'dkm_2': false, - 'dkm_3': false, -} -# Проверка ФС -var block_fs_prd_config_n: = { - 'fs_2': false, - 'fs_3': false, -} - var block_kasseta_y5_prd_config_n: = { 'yau07': false, 'ems': false, @@ -59,7 +49,7 @@ var block_kasseta_y5_prd_config_n: = { } # Основные переменные -var current_fs: int = 2 +var start_litera: int = 2 var ug_work_1: int = 0 var ug_work_2: int = 0 # Флаги и таймеры @@ -71,12 +61,14 @@ var control_prd_n: Object var control_results_n: Dictionary = { 'block_ip': false, # Проверка касет П1 и ИП МА2000 'temperature': true, # Проверка температур УМ - 'dkm': false, + 'dkm_2': false, + 'dkm_3': false, 'dou_2': false, 'dou_3': false, - 'fs': false, + 'fs_2': 2, + 'fs_3': 2, } -var test = preload('res://scripts/pribor-prd.gd') +var test_control_n = preload('res://scripts/pribor-prd.gd') ################################ @@ -109,13 +101,11 @@ func initialize_connections() -> void: 'prd_config': PRIBOR_CONFIG_N, 'fs_params': FS_PARAMS_N, 'block_ip_prd_config': block_ip_config_n, - 'block_dkm_prd_config': block_dkm_config_n, - 'block_fs_prd_config': block_fs_prd_config_n, 'block_kasseta_y5_prd_config': block_kasseta_y5_prd_config_n, 'control_results': control_results_n, - 'current_fs': current_fs, + 'current_litera': start_litera, } - control_prd_n = test.TestPRD.new(init_data) + control_prd_n = test_control_n.TestPRD.new(init_data) add_child(control_prd_n) control_prd_n.connect('control_is_over', Callable(self, 'on_control_result')) @@ -123,7 +113,7 @@ func initialize_connections() -> void: func setup_timer() -> void: add_child(mashine_timer) mashine_timer.connect('timeout', Callable(self, 'on_state_mashine')) - mashine_timer.wait_time = 0.5 + mashine_timer.wait_time = constants_n.STATE_MASHINE_TIMER mashine_timer.start() @@ -141,6 +131,10 @@ func _enter_tree() -> void: $control_result.text = 'Выполняется ...' $control_result.add_theme_color_override('font_color', Color.ALICE_BLUE) 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 _exit_tree() -> void: @@ -160,10 +154,29 @@ func on_mode_changed(in_tree: bool) -> void: signaller.emit_signal('interfer_off_all') 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]]) else: + set_default_state() + control_prd_n.state = control_prd_n.STATE_MASHINE.INIT mashine_timer.start() -func on_control_result(result_dic: Dictionary) -> void: +func power_fill(pow_dic: Dictionary) -> void: + #if not control_prd_n.block_kasseta_y5_config.yau07 or not control_prd_n.block_kasseta_y5_config.ukp1 or not control_prd_n.block_kasseta_y5_config.ukp2: + #return + var power_amplifier: Array = get_tree().get_nodes_in_group('power_amplifier') + for i_powapm in power_amplifier: + var powamp_meta: String = i_powapm.get_meta('um') + var status = STATE_VAL.GOOD if pow_dic else STATE_VAL.NONE + if pow_dic[powamp_meta].size() < 6: + status = STATE_VAL.ERROR + else: + i_powapm.value0 = pow_dic[powamp_meta] + for i_p in pow_dic[powamp_meta]: + if i_p < constants_n.POWER_THRESHOLD: + status = STATE_VAL.ERROR + i_powapm.state = status + + +func on_control_result(result_dic: Dictionary, power_dic: Dictionary) -> void: mashine_timer.stop() block_kasseta_y5_prd_config_n = control_prd_n.block_kasseta_y5_config var nodes_y5: Array = get_tree().get_nodes_in_group('y-5') @@ -172,7 +185,7 @@ func on_control_result(result_dic: Dictionary) -> void: if block_kasseta_y5_prd_config_n.has(meta_y5): if block_kasseta_y5_prd_config_n['yau07'] == false: node_y5.state = STATE_VAL.ERROR if meta_y5 == 'yau07' else STATE_VAL.NONE - return + break node_y5.state = STATE_VAL.GOOD if block_kasseta_y5_prd_config_n[meta_y5] else STATE_VAL.ERROR block_ip_config_n = control_prd_n.block_ip_config @@ -182,22 +195,26 @@ func on_control_result(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 - var fs_results: Dictionary = control_prd_n.block_fs_config var fs_nodes: Array = get_tree().get_nodes_in_group('fs_group') for f in fs_nodes: var fs_meta: String = f.get_meta('fs') - if fs_results.has(fs_meta): - var new_state = fs_results[fs_meta] + if result_dic.has(fs_meta): + var new_state = result_dic[fs_meta] f.state = new_state - fs_results[fs_meta] = new_state + result_dic[fs_meta] = new_state - var dkm: Dictionary = control_prd_n.block_dkm_config - if fs_results.fs_2: - $kasseta_FS_ND/ref_A4.state = STATE_VAL.GOOD if dkm.dkm_2 else STATE_VAL.ERROR + if result_dic.fs_2 == 1: + $kasseta_FS_ND/ref_A4.state = STATE_VAL.GOOD if result_dic.dkm_2 else STATE_VAL.ERROR $dou2_A5.state = STATE_VAL.GOOD if result_dic.dou_2 else STATE_VAL.ERROR - if fs_results.fs_3: - $kasseta_FS_ND/ref_A3.state = STATE_VAL.GOOD if dkm.dkm_3 else STATE_VAL.ERROR + else: + result_dic.fs_2 = false + if result_dic.fs_3 == 1: + $kasseta_FS_ND/ref_A3.state = STATE_VAL.GOOD if result_dic.dkm_3 else STATE_VAL.ERROR $dou3_A6.state = STATE_VAL.GOOD if result_dic.dou_3 else STATE_VAL.ERROR + else: + result_dic.fs_3 = false + + power_fill(power_dic) var result = true for device in result_dic.values(): @@ -207,7 +224,7 @@ func on_control_result(result_dic: Dictionary) -> void: var name_prd = control_prd_n.self_name if result: $control_result.text = 'Прибор ПРД-%s исправен' % name_prd - $control_result.add_theme_color_override('font_color', Color.AQUAMARINE) + $control_result.add_theme_color_override('font_color', Color.GREEN) else: $control_result.text = 'Прибор ПРД-%s неисправен' % name_prd - $control_result.add_theme_color_override('font_color', Color.CRIMSON) + $control_result.add_theme_color_override('font_color', Color.RED) diff --git a/scenes/pribor-prd-n/pribor-prd-n.tscn b/scenes/pribor-prd-n/pribor-prd-n.tscn index 151bb06..a52ce38 100644 --- a/scenes/pribor-prd-n/pribor-prd-n.tscn +++ b/scenes/pribor-prd-n/pribor-prd-n.tscn @@ -1,37 +1,12 @@ -[gd_scene load_steps=13 format=3 uid="uid://dnuexoef2nnv5"] +[gd_scene load_steps=8 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"] -[ext_resource type="PackedScene" uid="uid://bkxblfoj7ejv0" path="res://scenes/контроль/блок-а.tscn" id="8_sia5h"] -[ext_resource type="Texture2D" uid="uid://belwchvdktrw0" path="res://data/эмс-бланк.png" id="9_k1x0o"] -[ext_resource type="Texture2D" uid="uid://bwddxs24es81u" path="res://data/эмс-бланк-пост.png" id="10_7dcjd"] -[ext_resource type="Texture2D" uid="uid://pfoscstbm025" path="res://data/эмс-бланк-перем.png" id="11_ius1v"] - -[sub_resource type="StyleBoxTexture" id="StyleBoxTexture_bnnv3"] - -[sub_resource type="SpriteFrames" id="SpriteFrames_xkifg"] -animations = [{ -"frames": [{ -"duration": 1.0, -"texture": ExtResource("9_k1x0o") -}, { -"duration": 1.0, -"texture": ExtResource("10_7dcjd") -}, { -"duration": 1.0, -"texture": ExtResource("11_ius1v") -}, { -"duration": 1.0, -"texture": null -}], -"loop": true, -"name": &"default", -"speed": 5.0 -}] [node name="pribor_prd_n" type="Control"] layout_mode = 3 @@ -142,7 +117,7 @@ offset_left = 55.0 offset_top = 32.0 offset_right = 105.0 offset_bottom = 182.0 -fname = "Блок ФС-2" +fname = "Блок ФС-3" rname = "A3" [node name="ref_A1" parent="kasseta_FS_ND" groups=["default_reset", "fs_group"] instance=ExtResource("7_eoqf2")] @@ -168,7 +143,7 @@ offset_left = 205.0 offset_top = 32.0 offset_right = 255.0 offset_bottom = 182.0 -fname = "Блок ФС-3" +fname = "Блок ФС-2" rname = "A4" [node name="kasseta_P_1" type="NinePatchRect" parent="."] @@ -223,234 +198,149 @@ text = "Кассета П-1" horizontal_alignment = 1 vertical_alignment = 1 -[node name="um1535_A7" parent="." groups=["power_amplifier"] instance=ExtResource("8_sia5h")] +[node name="um1535_A7" parent="." groups=["power_amplifier"] instance=ExtResource("7_bnnv3")] layout_mode = 0 offset_left = 485.0 offset_top = 242.0 offset_right = 652.0 offset_bottom = 337.0 -value_name0 = "°C" -value_name1 = "P, %" -name_min_size0 = Vector2i(35, 20) -name_min_size1 = Vector2i(35, 20) -fname = "УМ1535А" +fname = "УМ1535Б" rname = "A7" +value0_info = "Мощность, Вт" +value1_info = "Температура,°C" +metadata/um = "um_1" -[node name="um1535_A8" parent="." groups=["power_amplifier"] instance=ExtResource("8_sia5h")] +[node name="um1535_A8" parent="." groups=["power_amplifier"] instance=ExtResource("7_bnnv3")] layout_mode = 0 offset_left = 485.0 offset_top = 337.0 offset_right = 652.0 offset_bottom = 432.0 -value_name0 = "°C" -value_name1 = "P, %" -name_min_size0 = Vector2i(35, 20) -name_min_size1 = Vector2i(35, 20) fname = "УМ1535А" rname = "A8" +value0_info = "Мощность, Вт" +value1_info = "Температура,°C" +metadata/um = "um_2" -[node name="um1535_A9" parent="." groups=["power_amplifier"] instance=ExtResource("8_sia5h")] +[node name="um1535_A9" parent="." groups=["power_amplifier"] instance=ExtResource("7_bnnv3")] layout_mode = 0 offset_left = 485.0 offset_top = 432.0 offset_right = 652.0 offset_bottom = 527.0 -value_name0 = "°C" -value_name1 = "P, %" -name_min_size0 = Vector2i(35, 20) -name_min_size1 = Vector2i(35, 20) fname = "УМ1535А" rname = "A9" +value0_info = "Мощность, Вт" +value1_info = "Температура,°C" +metadata/um = "um_3" -[node name="um1535_A10" parent="." groups=["power_amplifier"] instance=ExtResource("8_sia5h")] +[node name="um1535_A10" parent="." groups=["power_amplifier"] instance=ExtResource("7_bnnv3")] layout_mode = 0 offset_left = 485.0 offset_top = 527.0 offset_right = 652.0 offset_bottom = 622.0 -value_name0 = "°C" -value_name1 = "P, %" -name_min_size0 = Vector2i(35, 20) -name_min_size1 = Vector2i(35, 20) fname = "УМ1535А" rname = "A10" +value0_info = "Мощность, Вт" +value1_info = "Температура,°C" +metadata/um = "um_4" -[node name="um1535_A11" parent="." groups=["power_amplifier"] instance=ExtResource("8_sia5h")] +[node name="um1535_A11" parent="." groups=["power_amplifier"] instance=ExtResource("7_bnnv3")] layout_mode = 0 offset_left = 485.0 offset_top = 622.0 offset_right = 652.0 offset_bottom = 717.0 -value_name0 = "°C" -value_name1 = "P, %" -name_min_size0 = Vector2i(35, 20) -name_min_size1 = Vector2i(35, 20) fname = "УМ1535А" rname = "A11" +value0_info = "Мощность, Вт" +value1_info = "Температура,°C" +metadata/um = "um_5" -[node name="um1535_A12" parent="." groups=["power_amplifier"] instance=ExtResource("8_sia5h")] +[node name="um1535_A12" parent="." groups=["power_amplifier"] instance=ExtResource("7_bnnv3")] layout_mode = 0 offset_left = 485.0 offset_top = 717.0 offset_right = 652.0 offset_bottom = 812.0 -value_name0 = "°C" -value_name1 = "P, %" -name_min_size0 = Vector2i(35, 20) -name_min_size1 = Vector2i(35, 20) fname = "УМ1535А" rname = "A12" +value0_info = "Мощность, Вт" +value1_info = "Температура,°C" +metadata/um = "um_6" -[node name="um1535_A13" parent="." groups=["power_amplifier"] instance=ExtResource("8_sia5h")] +[node name="um1535_A13" parent="." groups=["power_amplifier"] instance=ExtResource("7_bnnv3")] layout_mode = 0 offset_left = 8.0 offset_top = 242.0 offset_right = 175.0 offset_bottom = 337.0 -value_name0 = "°C" -value_name1 = "P, %" -name_min_size0 = Vector2i(35, 20) -name_min_size1 = Vector2i(35, 20) fname = "УМ1535А" rname = "A13" +value0_info = "Мощность, Вт" +value1_info = "Температура,°C" +metadata/um = "um_7" -[node name="um1535_A14" parent="." groups=["power_amplifier"] instance=ExtResource("8_sia5h")] +[node name="um1535_A14" parent="." groups=["power_amplifier"] instance=ExtResource("7_bnnv3")] layout_mode = 0 offset_left = 8.0 offset_top = 337.0 offset_right = 175.0 offset_bottom = 432.0 -value_name0 = "°C" -value_name1 = "P, %" -name_min_size0 = Vector2i(35, 20) -name_min_size1 = Vector2i(35, 20) fname = "УМ1535А" rname = "A14" +value0_info = "Мощность, Вт" +value1_info = "Температура,°C" +metadata/um = "um_8" -[node name="um1535_A15" parent="." groups=["power_amplifier"] instance=ExtResource("8_sia5h")] +[node name="um1535_A15" parent="." groups=["power_amplifier"] instance=ExtResource("7_bnnv3")] layout_mode = 0 offset_left = 8.0 offset_top = 432.0 offset_right = 175.0 offset_bottom = 527.0 -value_name0 = "°C" -value_name1 = "P, %" -name_min_size0 = Vector2i(35, 20) -name_min_size1 = Vector2i(35, 20) fname = "УМ1535А" rname = "A15" +value0_info = "Мощность, Вт" +value1_info = "Температура,°C" +metadata/um = "um_9" -[node name="um1535_A16" parent="." groups=["power_amplifier"] instance=ExtResource("8_sia5h")] +[node name="um1535_A16" parent="." groups=["power_amplifier"] instance=ExtResource("7_bnnv3")] layout_mode = 0 offset_left = 8.0 offset_top = 527.0 offset_right = 175.0 offset_bottom = 622.0 -value_name0 = "°C" -value_name1 = "P, %" -name_min_size0 = Vector2i(35, 20) -name_min_size1 = Vector2i(35, 20) fname = "УМ1535А" rname = "A16" +value0_info = "Мощность, Вт" +value1_info = "Температура,°C" +metadata/um = "um_10" -[node name="um1535_A17" parent="." groups=["power_amplifier"] instance=ExtResource("8_sia5h")] +[node name="um1535_A17" parent="." groups=["power_amplifier"] instance=ExtResource("7_bnnv3")] layout_mode = 0 offset_left = 8.0 offset_top = 622.0 offset_right = 175.0 offset_bottom = 717.0 -value_name0 = "°C" -value_name1 = "P, %" -name_min_size0 = Vector2i(35, 20) -name_min_size1 = Vector2i(35, 20) fname = "УМ1535А" rname = "A17" +value0_info = "Мощность, Вт" +value1_info = "Температура,°C" +metadata/um = "um_11" -[node name="um1535_A18" parent="." groups=["power_amplifier"] instance=ExtResource("8_sia5h")] +[node name="um1535_A18" parent="." groups=["power_amplifier"] instance=ExtResource("7_bnnv3")] layout_mode = 0 offset_left = 8.0 offset_top = 717.0 offset_right = 175.0 offset_bottom = 812.0 -value_name0 = "°C" -value_name1 = "P, %" -name_min_size0 = Vector2i(35, 20) -name_min_size1 = Vector2i(35, 20) fname = "УМ1535А" rname = "A18" - -[node name="Monitoring_panel" type="Panel" parent="."] -visible = false -layout_mode = 0 -theme_override_styles/panel = SubResource("StyleBoxTexture_bnnv3") - -[node name="in_fs_1" type="AnimatedSprite2D" parent="Monitoring_panel"] -position = Vector2(454, 577) -scale = Vector2(1.2, 1.2) -sprite_frames = SubResource("SpriteFrames_xkifg") - -[node name="in_fs_1" type="Label" parent="Monitoring_panel/in_fs_1"] -offset_left = -15.1667 -offset_top = 14.0 -offset_right = 14.8333 -offset_bottom = 33.0 -theme_override_colors/font_color = Color(0.890196, 0.486275, 0.196078, 1) -theme_override_font_sizes/font_size = 10 -text = "In FS 1" -horizontal_alignment = 1 -metadata/_edit_use_anchors_ = true - -[node name="in_fs_2" type="AnimatedSprite2D" parent="Monitoring_panel"] -position = Vector2(207, 577) -scale = Vector2(1.2, 1.2) -sprite_frames = SubResource("SpriteFrames_xkifg") - -[node name="in_fs_2" type="Label" parent="Monitoring_panel/in_fs_2"] -offset_left = -15.1667 -offset_top = 14.0 -offset_right = 14.8333 -offset_bottom = 33.0 -theme_override_colors/font_color = Color(0.890196, 0.486275, 0.196078, 1) -theme_override_font_sizes/font_size = 10 -text = "In FS 2" -horizontal_alignment = 1 - -[node name="out_ems_1" type="AnimatedSprite2D" parent="Monitoring_panel"] -position = Vector2(454, 465) -scale = Vector2(1.2, 1.2) -sprite_frames = SubResource("SpriteFrames_xkifg") - -[node name="Out_ems_1" type="Label" parent="Monitoring_panel/out_ems_1"] -anchors_preset = -1 -anchor_left = 0.0185185 -anchor_right = 0.0185185 -anchor_bottom = 0.555556 -offset_left = -18.5 -offset_top = 14.0 -offset_right = 17.5 -offset_bottom = 33.0 -theme_override_colors/font_color = Color(0.890196, 0.486275, 0.196078, 1) -theme_override_font_sizes/font_size = 10 -text = "Out -ems 1" -horizontal_alignment = 1 -metadata/_edit_use_anchors_ = true - -[node name="out_ems_2" type="AnimatedSprite2D" parent="Monitoring_panel"] -position = Vector2(207, 465) -scale = Vector2(1.2, 1.2) -sprite_frames = SubResource("SpriteFrames_xkifg") - -[node name="Out_ems_1" type="Label" parent="Monitoring_panel/out_ems_2"] -offset_left = -15.1667 -offset_top = 14.0 -offset_right = 14.8333 -offset_bottom = 33.0 -theme_override_colors/font_color = Color(0.890196, 0.486275, 0.196078, 1) -theme_override_font_sizes/font_size = 10 -text = "Out -ems 2" -horizontal_alignment = 1 +value0_info = "Мощность, Вт" +value1_info = "Температура,°C" +metadata/um = "um_12" [node name="control_result" type="Label" parent="."] layout_mode = 0 @@ -458,7 +348,5 @@ offset_left = 9.0 offset_top = 960.0 offset_right = 649.0 offset_bottom = 1003.0 -theme_override_colors/font_color = Color(0.862745, 0.0784314, 0.235294, 1) -theme_override_font_sizes/font_size = 28 horizontal_alignment = 1 metadata/_edit_lock_ = true diff --git a/scenes/pribor-prd-v/pribor-prd-v.gd b/scenes/pribor-prd-v/pribor-prd-v.gd index e8d3619..ff1e90f 100644 --- a/scenes/pribor-prd-v/pribor-prd-v.gd +++ b/scenes/pribor-prd-v/pribor-prd-v.gd @@ -12,11 +12,12 @@ const constants_v = { 'ADDR_UG_LITERA_3': 0x10A, 'TEMP_THRESHOLD': 70, 'POWER_THRESHOLD': 40, - 'TIMER_DELAY': 5.0, 'RAY_DOU_NUM': 0x3, 'ATT_UM_4': 0x7, 'ATT_UM_5': 0x7, - 'POWER_UM': 70, + 'POWER_UM': 75, + 'TIMER_DELAY': 5.0, + 'STATE_MASHINE_TIMER': 0.3, } # Конфигурация параметров для каждого прибора const PRIBOR_CONFIG_V := { @@ -27,7 +28,7 @@ const PRIBOR_CONFIG_V := { } # Конфигурация частот и ширин для каждого ФС const FS_PARAMS_V := { - 4: {'freq': 1227.0, 'width': 110.0}, + 4: {'freq': 1227.0, 'width': 100.0}, 5: {'freq': 1575.0, 'width': 110.0}, } enum STATE_VAL { NONE = 0, GOOD = 1, ERROR = 2 } @@ -39,16 +40,6 @@ var block_ip_config_v := { 'ip12_50_1': [4, false], 'ip5_25': [7, false], } -# Проверка ДКМ -var block_dkm_config_v: = { - 'dkm_4': false, - 'dkm_5': false, -} -# Проверка ФС -var block_fs_prd_config_v: = { - 'fs_4': false, - 'fs_5': false, -} var block_kasseta_y5_prd_config_v: = { 'yau07': false, 'ems': false, @@ -58,7 +49,7 @@ var block_kasseta_y5_prd_config_v: = { } # Основные переменные -var current_fs: int = 4 +var start_litera: int = 4 var ug_work_1: int = 0 var ug_work_2: int = 0 # Флаги и таймеры @@ -70,12 +61,14 @@ var control_prd_v: Object var control_results_v: Dictionary = { 'block_ip': false, # Проверка касет П1 и ИП МА2000 'temperature': true, # Проверка температур УМ - 'dkm': false, + 'dkm_4': false, + 'dkm_5': false, 'dou_4': false, 'dou_5': false, - 'fs': false, + 'fs_4': 2, + 'fs_5': 2, } -var test = preload('res://scripts/pribor-prd.gd') +var test_control_v = preload('res://scripts/pribor-prd.gd') func on_state_mashine() -> void: @@ -107,13 +100,11 @@ func initialize_connections() -> void: 'prd_config': PRIBOR_CONFIG_V, 'fs_params': FS_PARAMS_V, 'block_ip_prd_config': block_ip_config_v, - 'block_dkm_prd_config': block_dkm_config_v, - 'block_fs_prd_config': block_fs_prd_config_v, 'block_kasseta_y5_prd_config': block_kasseta_y5_prd_config_v, 'control_results': control_results_v, - 'current_fs': current_fs, + 'current_litera': start_litera, } - control_prd_v = test.TestPRD.new(init_data) + control_prd_v = test_control_v.TestPRD.new(init_data) add_child(control_prd_v) control_prd_v.connect('control_is_over', Callable(self, 'on_control_result')) @@ -121,7 +112,7 @@ func initialize_connections() -> void: func setup_timer() -> void: add_child(mashine_timer) mashine_timer.connect('timeout', Callable(self, 'on_state_mashine')) - mashine_timer.wait_time = 0.5 + mashine_timer.wait_time = constants_v.STATE_MASHINE_TIMER mashine_timer.start() @@ -139,6 +130,11 @@ func _enter_tree() -> void: $control_result.text = 'Выполняется ...' $control_result.add_theme_color_override('font_color', Color.ALICE_BLUE) 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 _exit_tree() -> void: @@ -158,10 +154,29 @@ func on_mode_changed(in_tree: bool) -> 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]]) signaller.emit_signal('interfer_off_all') else: + set_default_state() + control_prd_v.state = control_prd_v.STATE_MASHINE.INIT mashine_timer.start() -func on_control_result(result_dic: Dictionary) -> void: +func power_fill(pow_dic: Dictionary) -> void: + #if not control_prd_v.block_kasseta_y5_config.yau07 or not control_prd_v.block_kasseta_y5_config.ukp1 or not control_prd_v.block_kasseta_y5_config.ukp2: + #return + var power_amplifier: Array = get_tree().get_nodes_in_group('power_amplifier') + for i_powapm in power_amplifier: + var powamp_meta: String = i_powapm.get_meta('um') + var status = STATE_VAL.GOOD if pow_dic else STATE_VAL.NONE + if pow_dic[powamp_meta].size() < 6: + status = STATE_VAL.ERROR + else: + i_powapm.value0 = pow_dic[powamp_meta] + for i_p in pow_dic[powamp_meta]: + if i_p < constants_v.POWER_THRESHOLD: + status = STATE_VAL.ERROR + i_powapm.state = status + + +func on_control_result(result_dic: Dictionary, power_dic: Dictionary) -> void: mashine_timer.stop() block_kasseta_y5_prd_config_v = control_prd_v.block_kasseta_y5_config var nodes_y5: Array = get_tree().get_nodes_in_group('y-5') @@ -170,7 +185,7 @@ func on_control_result(result_dic: Dictionary) -> void: if block_kasseta_y5_prd_config_v.has(meta_y5): if block_kasseta_y5_prd_config_v['yau07'] == false: node_y5.state = STATE_VAL.ERROR if meta_y5 == 'yau07' else STATE_VAL.NONE - return + break node_y5.state = STATE_VAL.GOOD if block_kasseta_y5_prd_config_v[meta_y5] else STATE_VAL.ERROR block_ip_config_v = control_prd_v.block_ip_config @@ -180,22 +195,25 @@ func on_control_result(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 - var fs_results: Dictionary = control_prd_v.block_fs_config - var dkm: Dictionary = control_prd_v.block_dkm_config var fs_nodes: Array = get_tree().get_nodes_in_group('fs_group') for f in fs_nodes: var fs_meta: String = f.get_meta('fs') - if fs_results.has(fs_meta): - var new_state = fs_results[fs_meta] + if result_dic.has(fs_meta): + var new_state = result_dic[fs_meta] f.state = new_state - fs_results[fs_meta] = new_state + result_dic[fs_meta] = new_state - if fs_results.fs_4: - $kasseta_FS_VD/ref_A2.state = STATE_VAL.GOOD if dkm.dkm_4 else STATE_VAL.ERROR - $dou4_A5.state = STATE_VAL.GOOD if result_dic.dou_4 else STATE_VAL.ERROR - if fs_results.fs_5: - $kasseta_FS_VD/ref_A6.state = STATE_VAL.GOOD if dkm.dkm_5 else STATE_VAL.ERROR + if result_dic.fs_5 == 1: + $kasseta_FS_VD/ref_A2.state = STATE_VAL.GOOD if result_dic.dkm_5 else STATE_VAL.ERROR $dou5_A6.state = STATE_VAL.GOOD if result_dic.dou_5 else STATE_VAL.ERROR + else: + result_dic.fs_5 = false + if result_dic.fs_4 == 1: + $kasseta_FS_VD/ref_A6.state = STATE_VAL.GOOD if result_dic.dkm_4 else STATE_VAL.ERROR + $dou4_A5.state = STATE_VAL.GOOD if result_dic.dou_4 else STATE_VAL.ERROR + else: + result_dic.fs_4 = false + power_fill(power_dic) var result = true for device in result_dic.values(): @@ -205,7 +223,7 @@ func on_control_result(result_dic: Dictionary) -> void: var name_prd = control_prd_v.self_name if result: $control_result.text = 'Прибор ПРД-%s исправен' % name_prd - $control_result.add_theme_color_override('font_color', Color.AQUAMARINE) + $control_result.add_theme_color_override('font_color', Color.GREEN) else: $control_result.text = 'Прибор ПРД-%s неисправен' % name_prd - $control_result.add_theme_color_override('font_color', Color.CRIMSON) + $control_result.add_theme_color_override('font_color', Color.RED) diff --git a/scenes/pribor-prd-v/pribor-prd-v.tscn b/scenes/pribor-prd-v/pribor-prd-v.tscn index 38702ac..bf501cb 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=14 format=3 uid="uid://cvskpe1ti3p45"] +[gd_scene load_steps=9 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"] @@ -7,32 +7,7 @@ [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"] -[ext_resource type="PackedScene" uid="uid://bkxblfoj7ejv0" path="res://scenes/контроль/блок-а.tscn" id="7_e22c6"] -[ext_resource type="Texture2D" uid="uid://belwchvdktrw0" path="res://data/эмс-бланк.png" id="10_4e87c"] -[ext_resource type="Texture2D" uid="uid://bwddxs24es81u" path="res://data/эмс-бланк-пост.png" id="11_g8fvp"] -[ext_resource type="Texture2D" uid="uid://pfoscstbm025" path="res://data/эмс-бланк-перем.png" id="12_gsby4"] - -[sub_resource type="StyleBoxTexture" id="StyleBoxTexture_vxfkm"] - -[sub_resource type="SpriteFrames" id="SpriteFrames_s5gcy"] -animations = [{ -"frames": [{ -"duration": 1.0, -"texture": ExtResource("10_4e87c") -}, { -"duration": 1.0, -"texture": ExtResource("11_g8fvp") -}, { -"duration": 1.0, -"texture": ExtResource("12_gsby4") -}, { -"duration": 1.0, -"texture": null -}], -"loop": true, -"name": &"default", -"speed": 5.0 -}] +[ext_resource type="PackedScene" uid="uid://bcyxqni7gxvtq" path="res://scenes/контроль/блок-в.tscn" id="8_4e87c"] [node name="pribor_prd_v" type="Control"] layout_mode = 3 @@ -172,236 +147,149 @@ text = "Кассета П-1В" horizontal_alignment = 1 vertical_alignment = 1 -[node name="um1535_A7" parent="." groups=["power_amplifier"] instance=ExtResource("7_e22c6")] +[node name="um1535_A7" parent="." groups=["power_amplifier"] instance=ExtResource("8_4e87c")] layout_mode = 0 offset_left = 485.0 offset_top = 242.0 offset_right = 652.0 offset_bottom = 337.0 -step0 = 1.0 -step1 = 1.0 -value_name0 = "°C" -value_name1 = "P, %" -name_min_size0 = Vector2i(35, 20) -name_min_size1 = Vector2i(35, 20) -fname = "УМ1535А" +fname = "УМ1535Б" rname = "A7" +value0_info = "Мощность, Вт" +value1_info = "Температура,°C" +metadata/um = "um_1" -[node name="um1535_A8" parent="." groups=["power_amplifier"] instance=ExtResource("7_e22c6")] +[node name="um1535_A8" parent="." groups=["power_amplifier"] instance=ExtResource("8_4e87c")] layout_mode = 0 offset_left = 485.0 offset_top = 337.0 offset_right = 652.0 offset_bottom = 432.0 -value_name0 = "°C" -value_name1 = "P, %" -name_min_size0 = Vector2i(35, 20) -name_min_size1 = Vector2i(35, 20) fname = "УМ1535А" rname = "A8" +value0_info = "Мощность, Вт" +value1_info = "Температура,°C" +metadata/um = "um_2" -[node name="um1535_A9" parent="." groups=["power_amplifier"] instance=ExtResource("7_e22c6")] +[node name="um1535_A9" parent="." groups=["power_amplifier"] instance=ExtResource("8_4e87c")] layout_mode = 0 offset_left = 485.0 offset_top = 432.0 offset_right = 652.0 offset_bottom = 527.0 -value_name0 = "°C" -value_name1 = "P, %" -name_min_size0 = Vector2i(35, 20) -name_min_size1 = Vector2i(35, 20) fname = "УМ1535А" rname = "A9" +value0_info = "Мощность, Вт" +value1_info = "Температура,°C" +metadata/um = "um_3" -[node name="um1535_A10" parent="." groups=["power_amplifier"] instance=ExtResource("7_e22c6")] +[node name="um1535_A10" parent="." groups=["power_amplifier"] instance=ExtResource("8_4e87c")] layout_mode = 0 offset_left = 485.0 offset_top = 527.0 offset_right = 652.0 offset_bottom = 622.0 -value_name0 = "°C" -value_name1 = "P, %" -name_min_size0 = Vector2i(35, 20) -name_min_size1 = Vector2i(35, 20) fname = "УМ1535А" rname = "A10" +value0_info = "Мощность, Вт" +value1_info = "Температура,°C" +metadata/um = "um_4" -[node name="um1535_A11" parent="." groups=["power_amplifier"] instance=ExtResource("7_e22c6")] +[node name="um1535_A11" parent="." groups=["power_amplifier"] instance=ExtResource("8_4e87c")] layout_mode = 0 offset_left = 485.0 offset_top = 622.0 offset_right = 652.0 offset_bottom = 717.0 -value_name0 = "°C" -value_name1 = "P, %" -name_min_size0 = Vector2i(35, 20) -name_min_size1 = Vector2i(35, 20) fname = "УМ1535А" rname = "A11" +value0_info = "Мощность, Вт" +value1_info = "Температура,°C" +metadata/um = "um_5" -[node name="um1535_A12" parent="." groups=["power_amplifier"] instance=ExtResource("7_e22c6")] +[node name="um1535_A12" parent="." groups=["power_amplifier"] instance=ExtResource("8_4e87c")] layout_mode = 0 offset_left = 485.0 offset_top = 717.0 offset_right = 652.0 offset_bottom = 812.0 -value_name0 = "°C" -value_name1 = "P, %" -name_min_size0 = Vector2i(35, 20) -name_min_size1 = Vector2i(35, 20) fname = "УМ1535А" rname = "A12" +value0_info = "Мощность, Вт" +value1_info = "Температура,°C" +metadata/um = "um_6" -[node name="um1535_A13" parent="." groups=["power_amplifier"] instance=ExtResource("7_e22c6")] +[node name="um1535_A13" parent="." groups=["power_amplifier"] instance=ExtResource("8_4e87c")] layout_mode = 0 offset_left = 8.0 offset_top = 242.0 offset_right = 175.0 offset_bottom = 337.0 -value_name0 = "°C" -value_name1 = "P, %" -name_min_size0 = Vector2i(35, 20) -name_min_size1 = Vector2i(35, 20) fname = "УМ1535А" rname = "A13" +value0_info = "Мощность, Вт" +value1_info = "Температура,°C" +metadata/um = "um_7" -[node name="um1535_A14" parent="." groups=["power_amplifier"] instance=ExtResource("7_e22c6")] +[node name="um1535_A14" parent="." groups=["power_amplifier"] instance=ExtResource("8_4e87c")] layout_mode = 0 offset_left = 8.0 offset_top = 337.0 offset_right = 175.0 offset_bottom = 432.0 -value_name0 = "°C" -value_name1 = "P, %" -name_min_size0 = Vector2i(35, 20) -name_min_size1 = Vector2i(35, 20) fname = "УМ1535А" rname = "A14" +value0_info = "Мощность, Вт" +value1_info = "Температура,°C" +metadata/um = "um_8" -[node name="um1535_A15" parent="." groups=["power_amplifier"] instance=ExtResource("7_e22c6")] +[node name="um1535_A15" parent="." groups=["power_amplifier"] instance=ExtResource("8_4e87c")] layout_mode = 0 offset_left = 8.0 offset_top = 432.0 offset_right = 175.0 offset_bottom = 527.0 -value_name0 = "°C" -value_name1 = "P, %" -name_min_size0 = Vector2i(35, 20) -name_min_size1 = Vector2i(35, 20) fname = "УМ1535А" rname = "A15" +value0_info = "Мощность, Вт" +value1_info = "Температура,°C" +metadata/um = "um_9" -[node name="um1535_A16" parent="." groups=["power_amplifier"] instance=ExtResource("7_e22c6")] +[node name="um1535_A16" parent="." groups=["power_amplifier"] instance=ExtResource("8_4e87c")] layout_mode = 0 offset_left = 8.0 offset_top = 527.0 offset_right = 175.0 offset_bottom = 622.0 -value_name0 = "°C" -value_name1 = "P, %" -name_min_size0 = Vector2i(35, 20) -name_min_size1 = Vector2i(35, 20) fname = "УМ1535А" rname = "A16" +value0_info = "Мощность, Вт" +value1_info = "Температура,°C" +metadata/um = "um_10" -[node name="um1535_A17" parent="." groups=["power_amplifier"] instance=ExtResource("7_e22c6")] +[node name="um1535_A17" parent="." groups=["power_amplifier"] instance=ExtResource("8_4e87c")] layout_mode = 0 offset_left = 8.0 offset_top = 622.0 offset_right = 175.0 offset_bottom = 717.0 -value_name0 = "°C" -value_name1 = "P, %" -name_min_size0 = Vector2i(35, 20) -name_min_size1 = Vector2i(35, 20) fname = "УМ1535А" rname = "A17" +value0_info = "Мощность, Вт" +value1_info = "Температура,°C" +metadata/um = "um_11" -[node name="um1535_A18" parent="." groups=["power_amplifier"] instance=ExtResource("7_e22c6")] +[node name="um1535_A18" parent="." groups=["power_amplifier"] instance=ExtResource("8_4e87c")] layout_mode = 0 offset_left = 8.0 offset_top = 717.0 offset_right = 175.0 offset_bottom = 812.0 -value_name0 = "°C" -value_name1 = "P, %" -name_min_size0 = Vector2i(35, 20) -name_min_size1 = Vector2i(35, 20) fname = "УМ1535А" rname = "A18" - -[node name="Monitoring_panel" type="Panel" parent="."] -visible = false -layout_mode = 0 -theme_override_styles/panel = SubResource("StyleBoxTexture_vxfkm") - -[node name="in_fs_1" type="AnimatedSprite2D" parent="Monitoring_panel"] -position = Vector2(454, 577) -scale = Vector2(1.2, 1.2) -sprite_frames = SubResource("SpriteFrames_s5gcy") - -[node name="in_fs_1" type="Label" parent="Monitoring_panel/in_fs_1"] -offset_left = -15.1667 -offset_top = 14.0 -offset_right = 14.8333 -offset_bottom = 33.0 -theme_override_colors/font_color = Color(0.890196, 0.486275, 0.196078, 1) -theme_override_font_sizes/font_size = 10 -text = "In FS 1" -horizontal_alignment = 1 -metadata/_edit_use_anchors_ = true - -[node name="in_fs_2" type="AnimatedSprite2D" parent="Monitoring_panel"] -position = Vector2(207, 577) -scale = Vector2(1.2, 1.2) -sprite_frames = SubResource("SpriteFrames_s5gcy") - -[node name="in_fs_2" type="Label" parent="Monitoring_panel/in_fs_2"] -offset_left = -15.1667 -offset_top = 14.0 -offset_right = 14.8333 -offset_bottom = 33.0 -theme_override_colors/font_color = Color(0.890196, 0.486275, 0.196078, 1) -theme_override_font_sizes/font_size = 10 -text = "In FS 2" -horizontal_alignment = 1 - -[node name="out_ems_1" type="AnimatedSprite2D" parent="Monitoring_panel"] -position = Vector2(454, 465) -scale = Vector2(1.2, 1.2) -sprite_frames = SubResource("SpriteFrames_s5gcy") - -[node name="Out_ems_1" type="Label" parent="Monitoring_panel/out_ems_1"] -anchors_preset = -1 -anchor_left = 0.0185185 -anchor_right = 0.0185185 -anchor_bottom = 0.555556 -offset_left = -18.5 -offset_top = 14.0 -offset_right = 17.5 -offset_bottom = 33.0 -theme_override_colors/font_color = Color(0.890196, 0.486275, 0.196078, 1) -theme_override_font_sizes/font_size = 10 -text = "Out -ems 1" -horizontal_alignment = 1 -metadata/_edit_use_anchors_ = true - -[node name="out_ems_2" type="AnimatedSprite2D" parent="Monitoring_panel"] -position = Vector2(207, 465) -scale = Vector2(1.2, 1.2) -sprite_frames = SubResource("SpriteFrames_s5gcy") - -[node name="Out_ems_1" type="Label" parent="Monitoring_panel/out_ems_2"] -offset_left = -15.1667 -offset_top = 14.0 -offset_right = 14.8333 -offset_bottom = 33.0 -theme_override_colors/font_color = Color(0.890196, 0.486275, 0.196078, 1) -theme_override_font_sizes/font_size = 10 -text = "Out -ems 2" -horizontal_alignment = 1 +value0_info = "Мощность, Вт" +value1_info = "Температура,°C" +metadata/um = "um_12" [node name="control_result" type="Label" parent="."] layout_mode = 0 @@ -409,7 +297,5 @@ offset_left = 9.0 offset_top = 960.0 offset_right = 649.0 offset_bottom = 1003.0 -theme_override_colors/font_color = Color(0.862745, 0.0784314, 0.235294, 1) -theme_override_font_sizes/font_size = 28 horizontal_alignment = 1 metadata/_edit_lock_ = true diff --git a/scenes/контроль/блок-в.tscn b/scenes/контроль/блок-в.tscn index 4426c9c..12673c7 100644 --- a/scenes/контроль/блок-в.tscn +++ b/scenes/контроль/блок-в.tscn @@ -14,7 +14,7 @@ script/source = "@tool class_name blok_v extends PanelContainer @export var textures: Array - +@export var animation_duration: float = 1.5 signal pressed(control: PanelContainer) @@ -25,7 +25,7 @@ signal pressed(control: PanelContainer) var items: Array = get_level_nodes() var count: int = min(items.size(), v.size()) for i in count: - items[i].value = v[i] + set_value0_animated(items[i], v[i]) ## Значение уровня @@ -35,6 +35,8 @@ 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 + @export var min_value0: float: @@ -175,9 +177,8 @@ func _enter_tree_defered(): var items: Array = get_level_nodes() var count: int = min(items.size(), value0.size()) for i in count: - items[i].value = value0[i] items[i].min_value = min_value0 - items[i].max_value = max_value0 + items[i].max_value = 1400 # max_value0: TODO для отладки items[i].step = step0 items = get_name_nodes() set_group_param(items, 'text', value_name0) @@ -221,6 +222,14 @@ func get_name_nodes() -> Array: $margin/vbox/grid2/lbl4, $margin/vbox/grid2/lbl5, $margin/vbox/grid2/lbl6 ] + + +func set_value0_animated(target_node, target_value: float) -> void: + var 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"] @@ -349,10 +358,10 @@ layout_mode = 2 size_flags_horizontal = 3 size_flags_vertical = 3 tooltip_text = " -Текущее: 20.00 -Диапазон: 0.00…100.00" +Текущее: 0.00 +Диапазон: 0.00…1400.00" mouse_filter = 0 -value = 20.0 +max_value = 1400.0 fill_mode = 3 nine_patch_stretch = true stretch_margin_left = 8 @@ -369,10 +378,10 @@ layout_mode = 2 size_flags_horizontal = 3 size_flags_vertical = 3 tooltip_text = " -Текущее: 30.00 -Диапазон: 0.00…100.00" +Текущее: 0.00 +Диапазон: 0.00…1400.00" mouse_filter = 0 -value = 30.0 +max_value = 1400.0 fill_mode = 3 nine_patch_stretch = true stretch_margin_left = 8 @@ -389,10 +398,10 @@ layout_mode = 2 size_flags_horizontal = 3 size_flags_vertical = 3 tooltip_text = " -Текущее: 40.00 -Диапазон: 0.00…100.00" +Текущее: 0.00 +Диапазон: 0.00…1400.00" mouse_filter = 0 -value = 40.0 +max_value = 1400.0 fill_mode = 3 nine_patch_stretch = true stretch_margin_left = 8 @@ -409,10 +418,10 @@ layout_mode = 2 size_flags_horizontal = 3 size_flags_vertical = 3 tooltip_text = " -Текущее: 50.00 -Диапазон: 0.00…100.00" +Текущее: 0.00 +Диапазон: 0.00…1400.00" mouse_filter = 0 -value = 50.0 +max_value = 1400.0 fill_mode = 3 nine_patch_stretch = true stretch_margin_left = 8 @@ -429,10 +438,10 @@ layout_mode = 2 size_flags_horizontal = 3 size_flags_vertical = 3 tooltip_text = " -Текущее: 60.00 -Диапазон: 0.00…100.00" +Текущее: 0.00 +Диапазон: 0.00…1400.00" mouse_filter = 0 -value = 60.0 +max_value = 1400.0 fill_mode = 3 nine_patch_stretch = true stretch_margin_left = 8 @@ -449,10 +458,10 @@ layout_mode = 2 size_flags_horizontal = 3 size_flags_vertical = 3 tooltip_text = " -Текущее: 70.00 -Диапазон: 0.00…100.00" +Текущее: 0.00 +Диапазон: 0.00…1400.00" mouse_filter = 0 -value = 70.0 +max_value = 1400.0 fill_mode = 3 nine_patch_stretch = true stretch_margin_left = 8 diff --git a/scenes/контроль/контроль.tscn b/scenes/контроль/контроль.tscn index 330c624..4fccfce 100644 --- a/scenes/контроль/контроль.tscn +++ b/scenes/контроль/контроль.tscn @@ -268,6 +268,16 @@ patch_margin_top = 16 patch_margin_right = 16 patch_margin_bottom = 16 +[node name="label" type="Label" parent="pribor_rtr"] +layout_mode = 0 +offset_left = 12.0 +offset_top = -54.0 +offset_right = 95.0 +offset_bottom = -35.0 +text = "РТР" +horizontal_alignment = 1 +vertical_alignment = 1 + [node name="connect_pribor" type="AnimatedSprite2D" parent="pribor_rtr"] modulate = Color(0.498039, 0.498039, 0.498039, 1) light_mask = 3 @@ -322,6 +332,17 @@ patch_margin_top = 16 patch_margin_right = 16 patch_margin_bottom = 16 +[node name="label" type="Label" parent="pribor_afsp_1"] +layout_mode = 0 +offset_left = 165.0 +offset_top = -245.0 +offset_right = 262.0 +offset_bottom = -225.0 +scale = Vector2(5, 5) +text = "АФСП 1" +horizontal_alignment = 1 +vertical_alignment = 1 + [node name="connect_pribor" type="AnimatedSprite2D" parent="pribor_afsp_1"] modulate = Color(0.498039, 0.498039, 0.498039, 1) light_mask = 3 @@ -377,6 +398,17 @@ patch_margin_top = 16 patch_margin_right = 16 patch_margin_bottom = 16 +[node name="label" type="Label" parent="pribor_afsp_2"] +layout_mode = 0 +offset_left = 200.0 +offset_top = -240.0 +offset_right = 297.0 +offset_bottom = -220.0 +scale = Vector2(5, 5) +text = "АФСП 2" +horizontal_alignment = 1 +vertical_alignment = 1 + [node name="connect_pribor" type="AnimatedSprite2D" parent="pribor_afsp_2"] modulate = Color(0.498039, 0.498039, 0.498039, 1) light_mask = 3 diff --git a/scripts/interfer.gd b/scripts/interfer.gd index f3c38ef..c1ca8c5 100644 --- a/scripts/interfer.gd +++ b/scripts/interfer.gd @@ -206,7 +206,6 @@ func on_data_capsrpb_received(unit0: capsrpb.CapsRpb, ecms: Dictionary) -> void: if not unit0.json_dic.has('msvk'): return if not (unit0.json_dic['msvk'] is Array): return var msvk = unit0.json_dic['msvk'] - var sz: = ecms.size() for dic_msvk in msvk: if not (dic_msvk is Dictionary): continue if dic_msvk.has('ispp'): @@ -220,8 +219,6 @@ func on_data_capsrpb_received(unit0: capsrpb.CapsRpb, ecms: Dictionary) -> void: ecm.set_from_dic(dic_msvk) ecm.krp = INTERFER_OFF send_ecm(ecm, unit0) - if sz != ecms.size(): - call_deferred('emit_signal', 'interfer_resized', ecms) ## Вызыватся, когда пользователь выбрал помеху и выбраны цели. @@ -282,6 +279,7 @@ func on_interfer_rcv(interfer_params: Array, unit0, ecms) -> void: func interfer_create(u, interfer_name, ecms, param, kni, id, dict, source_interfer, power) -> void: + var sz = ecms.size() var ispp: int = 0 if interfer_name == 'k1': param['dur'] = 1.0 # Необходимо добавить параметры управления @@ -326,6 +324,8 @@ func interfer_create(u, interfer_name, ecms, param, kni, id, dict, source_interf thrs.erase(ispp) ecm.tick_tx = Time.get_ticks_msec() send_ecm(ecm, u) + if sz != ecms.size(): + call_deferred('emit_signal', 'interfer_resized', ecms) func send_ecm(ecm, unit0) -> void: diff --git a/scripts/prd.gd b/scripts/prd.gd index ec28c23..ebc97a3 100644 --- a/scripts/prd.gd +++ b/scripts/prd.gd @@ -118,6 +118,7 @@ class Fs: var pow_caps_rx: float = 0.0 ## Мощность излучения принятая от КАПС РПБ var freq_caps_rx: float = 0.0 ## Частота принятая от КАПС РПБ var width_caps_rx: float = 0.0 ## Ширина полосы принятая от КАПС РПБ + var msvk: Array signal update_modulation(index) @@ -329,6 +330,7 @@ func update_fs_state(ecms): for prd_module in prd_dict.values(): ## Отправка команды на исполнение в ПРД if prd_module.state != PrdState.WORK: continue if not prd_module.unit_yau07.online: continue + prd_module.cmd_array.append([prd_module.unit_yau07.CmdCode.WRITE_ISA, [prd_module.yemsg_board.base_addr_isa, 6666]]) var um_data_array: Array = [] for fs in prd_module.fs_dic.values(): if not prd_module.ug_online: continue @@ -352,9 +354,9 @@ func check_dir(): ## Производит приём состояния модулей ФС. func on_data_capsrpb_received(unit0: capsrpb.CapsRpb): - if not unit0.json_dic.has('ts'): return - if unit0.json_dic['ts'] != 7: return - if not unit0.json_dic.has('msfs'): return + if not unit0.json_dic.has('ts'): return + if not unit0.json_dic['ts'] == 7: return + if not unit0.json_dic.has('msfs'): return var msfs = unit0.json_dic['msfs'] for fs in msfs: @@ -376,6 +378,7 @@ func on_data_capsrpb_received(unit0: capsrpb.CapsRpb): fs_module.freq_caps_rx = int(fs['freq']) if fs.has('width'): fs_module.width_caps_rx = int(fs['width']) + signaller.emit_signal('fs_update_state', fs_dict) diff --git a/scripts/pribor-prd.gd b/scripts/pribor-prd.gd index 0cd595c..57b145c 100644 --- a/scripts/pribor-prd.gd +++ b/scripts/pribor-prd.gd @@ -5,7 +5,6 @@ class TestPRD extends Node: const RAY_25:= 'RAY_25' const RAY_35:= 'RAY_35' const RAY_45:= 'RAY_45' - enum STATE_VAL { NONE = 0, GOOD = 1, ERROR = 2 } enum STATE_MASHINE { INIT, FS_TURN_ON, @@ -56,13 +55,11 @@ class TestPRD extends Node: var pribor_config: Dictionary var fs_parameters: Dictionary var block_ip_config: Dictionary - var block_dkm_config: Dictionary - var block_fs_config: Dictionary var block_kasseta_y5_config: Dictionary var control_results: Dictionary var self_name: String var state: int = STATE_MASHINE.INIT - var current_fs: int + var current_litera: int var flag_timer_started: bool = false var unit_prd: Object var module_prd: Object @@ -70,8 +67,10 @@ class TestPRD extends Node: var control_label: Label var control_timer: Timer = Timer.new() var ems_6666_timer: Timer = Timer.new() - signal control_is_over(control_results) + signal control_is_over(control_results, power_result) + + var ecms: Dictionary ## Словарь помеховых воздействий ## Инициализация аргуметнов func _init(init_data: Dictionary) -> void: @@ -83,11 +82,9 @@ class TestPRD extends Node: pribor_config = init_data['prd_config'] fs_parameters = init_data['fs_params'] block_ip_config = init_data['block_ip_prd_config'] - block_dkm_config = init_data['block_dkm_prd_config'] - block_fs_config = init_data['block_fs_prd_config'] block_kasseta_y5_config = init_data['block_kasseta_y5_prd_config'] control_results = init_data['control_results'] - current_fs = init_data['current_fs'] + current_litera = init_data['current_litera'] func _ready() -> void: @@ -107,25 +104,25 @@ class TestPRD extends Node: 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) - check_temperature_um(status, power_amplify) + control_results.temperature = check_temperature_um(status, power_amplify) _process_dkm_status(status) - if current_fs != 0: - var tek_litera: Dictionary = power_result[current_fs] + if current_litera != 0: + var tek_litera: Dictionary = power_result[current_litera] var interes = _get_ray_key(state) if interes != '': - tek_litera[_get_ray_key(state)] = power_um_ukp(status, current_fs, tek_litera[_get_ray_key(state)]) - power_result[current_fs] = tek_litera + tek_litera[_get_ray_key(state)] = power_um_ukp(status, current_litera, tek_litera[_get_ray_key(state)]) + power_result[current_litera] = tek_litera ## Пакеты от MP550Service func on_fs_update_state(packet_type_7: Dictionary, fs_mapping: Dictionary) -> void: - var fs_key: String = FS_KEYS.get(current_fs, '') + var fs_key: String = FS_KEYS.get(current_litera, '') if fs_key.is_empty(): return - var fs_result := {fs_key: STATE_VAL.NONE} + var fs_result := {fs_key: 0} fs_result = on_fs_state(packet_type_7, fs_mapping, fs_result) - block_fs_config[fs_key] = fs_result[fs_key] + control_results[fs_key] = fs_result[fs_key] ## @@ -137,7 +134,7 @@ class TestPRD extends Node: _handle_fs_turn_on_state() state = STATE_MASHINE.FS_WORK STATE_MASHINE.FS_WORK: - if not flag_timer_started: + if ecms.size(): _handle_fs_work_state() STATE_MASHINE.CHEK_KASSETA_Y5: if block_kasseta_y5_config['yau07']: @@ -151,12 +148,12 @@ class TestPRD extends Node: #ems_6666_timer.start() #state = STATE_MASHINE.READ_ISA STATE_MASHINE.READ_ISA: - if (unit_prd.cmd_state == unit_prd.CmdState.DONE) or (unit_prd.cmd_state == unit_prd.CmdState.FALSE): + if (unit_prd.cmd_state == unit_prd.CmdState.DONE) or (unit_prd.cmd_state == unit_prd.CmdState.FAIL): _handle_read_isa(module_prd, unit_prd, [constants.ADDR_UG_LITERA_1, constants.ADDR_UG_LITERA_2, constants.ADDR_UG_LITERA_3]) state = STATE_MASHINE.UG_SET_RAY STATE_MASHINE.UG_SET_RAY: var addr: int = constants.ADDR_UG_LITERA_1 - if current_fs == 3 or current_fs == 5 or current_fs == 7: + 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): control_timer.stop() @@ -171,8 +168,8 @@ class TestPRD extends Node: elif unit_prd.isa_ports[addr] & 0x07 == 4: state = STATE_MASHINE.UG_SET_RAY_5 elif unit_prd.isa_ports[addr] & 0x07 == 5: - if not current_fs == 1: - control_results = check_dou_result(control_results, power_result, self_name, current_fs, constants) + if not current_litera == 1: + control_results = check_dou_result(control_results, power_result, self_name, current_litera, constants) state = STATE_MASHINE.IN_EMS_STOP elif unit_prd.isa_ports[addr] & 0x07 == 6: state = STATE_MASHINE.UG_SET_RAY_0 @@ -201,39 +198,39 @@ class TestPRD extends Node: state = STATE_MASHINE.FS_TURN_OFF STATE_MASHINE.FS_TURN_OFF: _handle_fs_turn_off_state() + state = STATE_MASHINE.STOP_CONTROL STATE_MASHINE.STOP_CONTROL: _handle_stop_control_state() func _handle_init_state() -> void: - control_label.text = 'Выполняется инициализация ФС-%s' % current_fs - if current_fs in [1, 2, 3, 4, 5, 6, 7]: - state = STATE_MASHINE.FS_TURN_ON - #state = STATE_MASHINE.STOP_CONTROL + control_label.text = 'Выполняется инициализация ФС-%s' % current_litera + if current_litera in [1, 2, 3, 4, 5, 6, 7]: + if not ecms.size(): + state = STATE_MASHINE.FS_TURN_ON else: - control_results = on_control_result(block_ip_config, block_dkm_config, block_fs_config, control_results) - emit_signal('control_is_over', control_results) + control_results = on_control_result(block_ip_config, control_results) + var send_power_pack = prep_power(power_result, self_name) + emit_signal('control_is_over', control_results, send_power_pack) state = STATE_MASHINE.AWAIT func _handle_fs_turn_on_state() -> void: - control_label.text = 'Выполняется включение ФС-%s' % current_fs - manage_fs(true, self_name, pribor_config, fs_parameters, current_fs, constants.POWER_UM) + control_label.text = 'Выполняется включение ФС-%s' % current_litera + manage_fs(true, self_name, pribor_config, fs_parameters, current_litera, constants.POWER_UM) control_timer.wait_time = constants.TIMER_DELAY control_timer.start() func _handle_fs_work_state() -> void: - control_label.text = 'Выполняется проверка ФС-%s' % current_fs - if not module_prd.unit_yau07.online: - return - if (current_fs == 2 and block_fs_config.fs_2) or \ - (current_fs == 3 and block_fs_config.fs_3) or \ - (current_fs == 4 and block_fs_config.fs_4) or \ - (current_fs == 5 and block_fs_config.fs_5) or \ - (current_fs == 6 and block_fs_config.fs_6) or \ - (current_fs == 7 and block_fs_config.fs_7) or \ - (current_fs == 1 and block_fs_config.fs_1): + control_label.text = 'Выполняется проверка ФС-%s' % current_litera + 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_MASHINE.CHEK_KASSETA_Y5 @@ -271,27 +268,26 @@ class TestPRD extends Node: func _handle_fs_turn_off_state() -> void: - control_label.text = 'Выполняется отключение ФС-%s' % current_fs - manage_fs(false, self_name, pribor_config, fs_parameters, current_fs, constants.POWER_UM) - state = STATE_MASHINE.STOP_CONTROL + control_label.text = 'Выполняется отключение ФС-%s' % current_litera + manage_fs(false, self_name, pribor_config, fs_parameters, current_litera, constants.POWER_UM) func _handle_stop_control_state() -> void: - control_label.text = 'Выполняется завершение проверки ФС-%s' % current_fs + control_label.text = 'Выполняется завершение проверки ФС-%s' % current_litera flag_timer_started = false _advance_to_next_fs() state = STATE_MASHINE.INIT func _advance_to_next_fs() -> void: - match current_fs: - 1: current_fs = 6 - 2: current_fs = 3 - 3: current_fs = 0 - 4: current_fs = 5 - 5: current_fs = 0 - 6: current_fs = 7 - 7: current_fs = 0 + 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 ###################################### @@ -299,9 +295,14 @@ class TestPRD extends Node: _determine_self_name() var fs_mapping = _create_fs_mapping(self_name) signaller.conn(signaller.fs_update_state, Callable(self, 'on_fs_update_state').bind(fs_mapping)) + interfer.connect('interfer_resized', Callable(self, 'on_interfer_resized')) unit_prd.connect('data_received', Callable(self, 'on_data_received')) + func on_interfer_resized(ecms_dic: Dictionary) -> void: + ecms = ecms_dic + + func _determine_self_name() -> void: var current_unit = unit_prd.name var parts = current_unit.split('-') @@ -321,25 +322,38 @@ class TestPRD extends Node: func _process_dkm_status(status: PackedByteArray) -> void: - if not block_fs_config.has(_get_current_fs_key()): + if not control_results.has(_get_current_fs_key()): return - var dkm_bit = _get_dkm_bit_for_current_fs() - block_dkm_config = check_dkm(status, dkm_bit, block_dkm_config) + 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) + elif 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_fs, '') + return FS_KEYS.get(current_litera, '') - func _get_dkm_bit_for_current_fs() -> int: - match current_fs: - 1: return constants.DKM_BIT_1 - 2: return constants.DKM_BIT_2 - 3: return constants.DKM_BIT_3 - 4: return constants.DKM_BIT_4 - 5: return constants.DKM_BIT_5 - 6: return constants.DKM_BIT_6 - 7: return constants.DKM_BIT_7 + 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 @@ -355,28 +369,17 @@ class TestPRD extends Node: func on_stop_control() -> void: + _handle_fs_turn_off_state() state = STATE_MASHINE.FS_TURN_OFF - static func on_control_result(ip_config: Dictionary, dkm_config: Dictionary, fs_config: Dictionary, ctrl_results: Dictionary) -> Dictionary: + static func on_control_result(ip_config: Dictionary, ctrl_results: Dictionary) -> Dictionary: var all_blocks_ip_ok = true - var all_blocks_dkm_ok = true - var all_blocks_fs_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 - - for block in dkm_config: - if not dkm_config[block]: - all_blocks_dkm_ok = false - ctrl_results['dkm'] = all_blocks_dkm_ok - - for block in fs_config: - if not fs_config[block]: - all_blocks_fs_ok = false - ctrl_results['fs'] = all_blocks_fs_ok return ctrl_results @@ -398,7 +401,7 @@ class TestPRD extends Node: ## Управаление модулем фс (включить/отключить излучение) - static func manage_fs(mode: bool, pribor: String, p_conf: Dictionary, fs_params: Dictionary, cur_fs: int, power_um: int) -> void: + 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 @@ -408,13 +411,13 @@ class TestPRD extends Node: var interfer_name: String = 'k1' if mode else 'off' var fs_arr: Array = [] - if cur_fs in fs_params: - var params = fs_params[cur_fs] + if litera in fs_params: + var params = fs_params[litera] fs_arr.append([ angle, params.freq, params.width, - sectors[cur_fs - 1] if cur_fs == 1 else sectors[cur_fs - 5] if cur_fs > 5 else sectors[cur_fs - 4] if cur_fs > 3 else sectors[cur_fs - 2] + 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('interfer_init', interfer_name, fs_arr, power_um) @@ -443,7 +446,7 @@ class TestPRD extends Node: ## Проверка температур УМ от УКП - static func check_temperature_um(status_prd: PackedByteArray, power_amplifier: Array) -> void: + static func check_temperature_um(status_prd: PackedByteArray, power_amplifier: Array) -> bool: const Constants: Dictionary = { 'CONST_MIN_TEMP': -25, 'MAXIMUM_CODE_ADC': 3796, @@ -454,6 +457,7 @@ class TestPRD extends Node: 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 @@ -461,42 +465,36 @@ class TestPRD extends Node: 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].value0 = tmp_1 + 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].value0 = tmp_1 + 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].value0 = tmp_2 + power_amplifier[i_temp+7].value1 = tmp_2 + if tmp_2>70: + all_temp_is_ok = false else: - power_amplifier[i_temp+6].value0 = tmp_2 - + 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, dkm_result: Dictionary) -> Dictionary: + static func check_dkm(status_prd: PackedByteArray, bit_dkm: int) -> bool: var dkm: int = 28 - var status_dkm = status_prd[dkm] >> bit_dkm & 1 - if bit_dkm == 0: - dkm_result['dkm_1'] = status_dkm - elif bit_dkm == 1: - dkm_result['dkm_2'] = status_dkm - elif bit_dkm == 2: - dkm_result['dkm_3'] = status_dkm - elif bit_dkm == 3: - dkm_result['dkm_4'] = status_dkm - elif bit_dkm == 4: - dkm_result['dkm_5'] = status_dkm - elif bit_dkm == 5: - dkm_result['dkm_6'] = status_dkm - elif bit_dkm == 6: - dkm_result['dkm_7'] = status_dkm - return dkm_result + var status_dkm: bool = status_prd[dkm] >> bit_dkm & 1 + return status_dkm ## @@ -548,14 +546,14 @@ class TestPRD extends Node: ## - static func power_um_ukp(status: PackedByteArray, crnt_fs: int, pwr_result: Array) -> Array: + 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 crnt_fs: + match litera: 1: # Обработка для current_fs = 1 (одно значение) var value = status.decode_u16(Constants.POWER_UKP_1 + 2 * 7) @@ -621,15 +619,15 @@ class TestPRD extends Node: return max_power_values.duplicate() - static func check_dou_result(control_dic: Dictionary, power_dic: Dictionary, pribor: String, cur_prd: int, cnst: Dictionary) -> Dictionary: + 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 cur_prd == 2 else 'dou_3' + 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 cur_prd == 6 else 'dou_7' + 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 cur_prd == 5 else 'dou_5' + dou = 'dou_4' if litera == 4 else 'dou_5' - var ray_dic: Dictionary = power_dic[cur_prd] + 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 \ @@ -642,10 +640,62 @@ class TestPRD extends Node: 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: - print_debug('dou_%s: false' % cur_prd) + #print_debug('dou_%s: false' % litera) all_dou_ok = false - print([cur_prd, ray_dic]) control_dic[dou] = all_dou_ok return control_dic + + + 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 = {} + + 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] + + 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 diff --git a/scripts/spt25.gd b/scripts/spt25.gd index 632a38f..5e826f2 100644 --- a/scripts/spt25.gd +++ b/scripts/spt25.gd @@ -13,6 +13,32 @@ class SPT25 extends unit.Unit: func _to_string() -> String: return String('СПТ-25 %s %s' % [self.name, ['отключен', 'на связи'][int(online)]]) + ##Вычисление контрольной суммы + func sciCalcFCS(src: PackedByteArray) -> int: + var P_DIV = 0 + var ln = src[0] + var FCS = ~((src[2]<<8) + src[1]) + for i in range(3, ln): + var C = src[i] + for j in 8: + if C & 1: + if FCS & 1: + FCS = ((FCS >> 1) | 0x8000)^P_DIV + else: + FCS = ((FCS >> 1) | 0x8000) + else: + if FCS & 1: + FCS = (FCS >> 1) ^ P_DIV + else: + FCS = FCS >> 1 + C >>= 1 + for j in 16: + if FCS & 1: + FCS = (FCS >> 1) ^ P_DIV + else: + FCS = FCS >> 1 + return ~FCS + func _init(nm) -> void: self.name = nm tx_data.resize(5)