рефактор
This commit is contained in:
@@ -149,6 +149,7 @@ external_cu=false
|
||||
default_reset=""
|
||||
power_supply="Ноды источников питания прибора"
|
||||
fs_group="Группа модулей ФС"
|
||||
y-5=""
|
||||
|
||||
[gui]
|
||||
|
||||
|
||||
@@ -2,19 +2,6 @@
|
||||
extends 'res://scenes/контроль/прибор.gd'
|
||||
|
||||
const constants_k: Dictionary = {
|
||||
'IN_BLANK_PRD': 1,
|
||||
'OUT_BLANK_PRD': 13,
|
||||
'CI_1_OT_FS': 8,
|
||||
'CI_6_OT_FS': 13,
|
||||
'CI_7_OT_FS': 14,
|
||||
'CI_1_B_UF': 3,
|
||||
'CI_6_B_UF': 4,
|
||||
'CI_7_B_UF': 5,
|
||||
'CONST_MIN_TEMP': -25,
|
||||
'MAXIMUM_CODE_ADC': 3796,
|
||||
'MINIMUM_CODE_AD': 2660,
|
||||
'TEMPERATURE_UKP_1': 47,
|
||||
'TEMPERATURE_UKP_2': 79,
|
||||
'POWER_UKP_1': 31,
|
||||
'POWER_UKP_2': 63,
|
||||
'DKM_BIT_1': 0,
|
||||
@@ -35,36 +22,53 @@ const constants_k: Dictionary = {
|
||||
}
|
||||
# Конфигурация параметров для каждого прибора
|
||||
const 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]},
|
||||
'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]},
|
||||
}
|
||||
# Конфигурация частот и ширин для каждого ФС
|
||||
const FS_PARAMS := {
|
||||
1: {'freq': 450.0, 'width': 80.0},
|
||||
6: {'freq': 2450.0, 'width': 110.0},
|
||||
7: {'freq': 4750.0, 'width': 110.0}
|
||||
1: {'freq': 450.0, 'width': 80.0},
|
||||
6: {'freq': 2450.0, 'width': 110.0},
|
||||
7: {'freq': 4750.0, 'width': 110.0}
|
||||
}
|
||||
enum STATE_VAL { NONE = 0, GOOD = 1, ERROR = 2 }
|
||||
|
||||
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],
|
||||
}
|
||||
|
||||
'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],
|
||||
}
|
||||
# Проверка ДКМ
|
||||
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,
|
||||
'ug': false,
|
||||
'ukp1': false,
|
||||
'ukp2': false,
|
||||
}
|
||||
# Основные переменные
|
||||
var current_fs: int = 1
|
||||
var ug_work_1: int = 0
|
||||
var ug_work_2: int = 0
|
||||
var ug_work_3: int = 0
|
||||
# Флаги и таймеры
|
||||
var control_timer: Timer = Timer.new()
|
||||
var mashine_timer: Timer = Timer.new()
|
||||
var prd_k_module: Object
|
||||
var unit_prd_k: Object
|
||||
@@ -72,18 +76,13 @@ var unit_prd_k: Object
|
||||
var control_results_k: Dictionary = {
|
||||
'block_ip': false, # Проверка касет П1 и ИП МА2000
|
||||
'temperature': true, # Проверка температур УМ
|
||||
'dkm_1': false, # Проверка ДКМ 1
|
||||
'dkm_6': false, # Проверка ДКМ 6
|
||||
'dkm_7': false, # Проверка ДКМ 7
|
||||
'dkm': false,
|
||||
'power_um': false, # Мощность от УКП
|
||||
'fs_1': false, # Проверка ФС 1
|
||||
'fs_6': false, # Проверка ФС 6
|
||||
'fs_7': false, # Проверка ФС 7
|
||||
'fs': false,
|
||||
}
|
||||
|
||||
#static var node_common_func = load('res://scripts/pribor-prd.gd')
|
||||
var test = preload('res://scripts/pribor-prd.gd')
|
||||
var control_prd
|
||||
var control_prd_k: Object
|
||||
|
||||
|
||||
func _ready() -> void:
|
||||
@@ -96,37 +95,45 @@ func _ready() -> void:
|
||||
|
||||
|
||||
func on_state_mashine() -> void:
|
||||
control_prd.state_control_machine()
|
||||
|
||||
block_ip_config_k = control_prd.block_config
|
||||
control_prd_k.state_control_machine()
|
||||
|
||||
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')
|
||||
for node_y5 in nodes_y5:
|
||||
var meta_y5 = node_y5.get_meta('y5')
|
||||
if block_kasseta_y5_prd_config_k.has(meta_y5):
|
||||
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
|
||||
var node_ip_power_arr: Array = get_tree().get_nodes_in_group('power_supply')
|
||||
for power_supply in node_ip_power_arr:
|
||||
var meta_ip = power_supply.get_meta('ip')
|
||||
if block_ip_config_k.has(meta_ip) and control_prd.ug_online:
|
||||
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
|
||||
|
||||
control_results_k = control_prd.control_results
|
||||
if control_prd.current_fs == 1 and control_results_k.fs_1:
|
||||
$kasseta_fs_kd/ref_A2.state = STATE_VAL.GOOD if control_results_k.dkm_1 else STATE_VAL.ERROR
|
||||
elif control_prd.current_fs == 6 and control_results_k.fs_6:
|
||||
$kasseta_fs_kd/ref_A4.state = STATE_VAL.GOOD if control_results_k.dkm_6 else STATE_VAL.ERROR
|
||||
elif control_prd.current_fs == 7 and control_results_k.fs_7:
|
||||
$kasseta_fs_kd/ref_A7.state = STATE_VAL.GOOD if control_results_k.dkm_7 else STATE_VAL.ERROR
|
||||
var dkm: Dictionary = control_prd_k.block_dkm_config
|
||||
var fs: Dictionary = control_prd_k.block_fs_config
|
||||
if control_prd_k.current_fs == 1 and fs.fs_1:
|
||||
$kasseta_fs_kd/ref_A2.state = STATE_VAL.GOOD if dkm.dkm_1 else STATE_VAL.ERROR
|
||||
elif control_prd_k.current_fs == 6 and fs.fs_6:
|
||||
$kasseta_fs_kd/ref_A4.state = STATE_VAL.GOOD if dkm.dkm_6 else STATE_VAL.ERROR
|
||||
elif control_prd_k.current_fs == 7 and fs.fs_7:
|
||||
$kasseta_fs_kd/ref_A7.state = STATE_VAL.GOOD if dkm.dkm_7 else STATE_VAL.ERROR
|
||||
|
||||
if not control_prd.power_result['ray_25_1'] or not control_prd.power_result['ray_25_6'] or not control_prd.power_result['ray_25_7']:
|
||||
if not control_prd_k.power_result['ray_25_1'] or not control_prd_k.power_result['ray_25_6'] or not control_prd_k.power_result['ray_25_7']:
|
||||
return
|
||||
|
||||
var node_arr_power: Array = get_tree().get_nodes_in_group('power_amplifier')
|
||||
for i_pow in node_arr_power.size():
|
||||
if i_pow < 1:
|
||||
var pw = node_arr_power[i_pow]
|
||||
pw.value1 = str(control_prd.power_result['ray_25_1'][i_pow])
|
||||
pw.value1 = str(control_prd_k.power_result['ray_25_1'][i_pow])
|
||||
elif i_pow < 7:
|
||||
var pw = node_arr_power[i_pow]
|
||||
pw.value1 = str(control_prd.power_result['ray_25_6'][i_pow-1])
|
||||
pw.value1 = str(control_prd_k.power_result['ray_25_6'][i_pow-1])
|
||||
elif i_pow < 13:
|
||||
var pw = node_arr_power[i_pow]
|
||||
pw.value1 = str(control_prd.power_result['ray_25_7'][i_pow-7])
|
||||
pw.value1 = str(control_prd_k.power_result['ray_25_7'][i_pow-7])
|
||||
|
||||
|
||||
func initialize_connections() -> void:
|
||||
@@ -147,10 +154,14 @@ 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,
|
||||
}
|
||||
control_prd = test.TestPRD.new(init_data)
|
||||
add_child(control_prd)
|
||||
control_prd_k = test.TestPRD.new(init_data)
|
||||
add_child(control_prd_k)
|
||||
|
||||
|
||||
func setup_timer() -> void:
|
||||
@@ -177,6 +188,8 @@ func _enter_tree() -> void:
|
||||
|
||||
|
||||
func _exit_tree() -> void:
|
||||
if Engine.is_editor_hint():
|
||||
return
|
||||
prd_k_module.cmd_array.append([unit_prd_k.CmdCode.WRITE_ISA, [constants_k.ADDR_UG_LITERA_1, ug_work_1, constants_k.ADDR_UG_LITERA_2, ug_work_2, constants_k.ADDR_UG_LITERA_3, ug_work_3]])
|
||||
|
||||
|
||||
@@ -189,36 +202,36 @@ func on_mode_changed(in_tree: bool) -> void:
|
||||
if not in_tree:
|
||||
queue_free()
|
||||
|
||||
|
||||
func on_control_result() -> void:
|
||||
#Обновляем control_results['block_ip'] на основе block_config_k
|
||||
var all_blocks_ok = true
|
||||
for block in block_ip_config_k:
|
||||
if not block_ip_config_k[block][1]: # Если хоть один блок false
|
||||
all_blocks_ok = false
|
||||
break
|
||||
control_results_k['block_ip'] = all_blocks_ok
|
||||
|
||||
# Словарь соответствия ключей ошибок и нод
|
||||
var error_nodes := {
|
||||
'fs_1': $kasseta_fs_kd/ref_A3,
|
||||
'fs_6': $kasseta_fs_kd/ref_A6,
|
||||
'fs_7': $kasseta_fs_kd/ref_A5
|
||||
}
|
||||
# Проверка результатов и установка состояний
|
||||
var result: bool = true
|
||||
for key in control_results_k:
|
||||
if not control_results_k[key]:
|
||||
result = false
|
||||
if error_nodes.has(key):
|
||||
error_nodes[key].state = STATE_VAL.ERROR
|
||||
|
||||
# Установка текста и цвета результата
|
||||
#
|
||||
#func on_control_result() -> void:
|
||||
#var pribor = 'her'
|
||||
#var all_blocks_ok = true
|
||||
#for block in block_ip_config_k:
|
||||
#if not block_ip_config_k[block][1]:
|
||||
#all_blocks_ok = false
|
||||
#break
|
||||
#control_results_k['block_ip'] = all_blocks_ok
|
||||
#
|
||||
## Словарь соответствия ключей ошибок и нод
|
||||
#var error_nodes := {
|
||||
#'fs_1': $kasseta_fs_kd/ref_A3,
|
||||
#'fs_6': $kasseta_fs_kd/ref_A6,
|
||||
#'fs_7': $kasseta_fs_kd/ref_A5
|
||||
#}
|
||||
## Проверка результатов и установка состояний
|
||||
#var result: bool = true
|
||||
#for key in control_results_k:
|
||||
#if not control_results_k[key]:
|
||||
#result = false
|
||||
#if error_nodes.has(key):
|
||||
#error_nodes[key].state = STATE_VAL.ERROR
|
||||
#
|
||||
## Установка текста и цвета результата
|
||||
#var status_text := 'неисправен'
|
||||
var status_color := Color.RED
|
||||
#var status_color := Color.RED
|
||||
#if result:
|
||||
#status_text = 'исправен'
|
||||
#status_color = Color.GREEN
|
||||
|
||||
#
|
||||
#$control_result.text = 'Прибор ПРД-%s %s' % [pribor, status_text]
|
||||
$control_result.add_theme_color_override('font_color', status_color)
|
||||
#$control_result.add_theme_color_override('font_color', status_color)
|
||||
|
||||
@@ -1,10 +1,9 @@
|
||||
[gd_scene load_steps=16 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"]
|
||||
[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="Script" uid="uid://dow4nqi6hbak8" path="res://scenes/контроль/кассета-у-5.gd" id="3_wip3a"]
|
||||
[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"]
|
||||
@@ -51,8 +50,6 @@ offset_left = 175.0
|
||||
offset_top = 242.0
|
||||
offset_right = 485.0
|
||||
offset_bottom = 432.0
|
||||
script = ExtResource("3_wip3a")
|
||||
fname = "Кассета У5"
|
||||
|
||||
[node name="maa2000_A22" parent="." groups=["default_reset", "power_supply"] instance=ExtResource("1_8dmgr")]
|
||||
layout_mode = 0
|
||||
|
||||
@@ -34,21 +34,23 @@ offset_bottom = 182.0
|
||||
fname = "Блок ФС-3"
|
||||
rname = "A3"
|
||||
|
||||
[node name="ref_A3" parent="." instance=ExtResource("2_mkgdh")]
|
||||
[node name="ref_A3" parent="." groups=["fs_group"] instance=ExtResource("2_mkgdh")]
|
||||
offset_left = 105.0
|
||||
offset_top = 32.0
|
||||
offset_right = 155.0
|
||||
offset_bottom = 182.0
|
||||
fname = "Модуль ФС"
|
||||
rname = "A1"
|
||||
metadata/fs = "fs_4"
|
||||
|
||||
[node name="ref_A4" parent="." instance=ExtResource("2_mkgdh")]
|
||||
[node name="ref_A4" parent="." groups=["fs_group"] instance=ExtResource("2_mkgdh")]
|
||||
offset_left = 155.0
|
||||
offset_top = 32.0
|
||||
offset_right = 205.0
|
||||
offset_bottom = 182.0
|
||||
fname = "Модуль ФС"
|
||||
rname = "A2"
|
||||
metadata/fs = "fs_5"
|
||||
|
||||
[node name="ref_A6" parent="." instance=ExtResource("2_mkgdh")]
|
||||
offset_left = 205.0
|
||||
|
||||
@@ -1,13 +1,7 @@
|
||||
@tool
|
||||
extends 'res://scenes/контроль/прибор.gd'
|
||||
|
||||
const Constants = {
|
||||
'IN_BLANK_PRD': 1,
|
||||
'OUT_BLANK_PRD': 13,
|
||||
'CI_2_OT_FS': 9,
|
||||
'CI_3_OT_FS': 10,
|
||||
'CI_2_B_UF': 4,
|
||||
'CI_3_B_UF': 5,
|
||||
const constants_n = {
|
||||
'POWER_UKP_1': 31,
|
||||
'POWER_UKP_2': 63,
|
||||
'DKM_BIT_2': 1,
|
||||
@@ -15,122 +9,148 @@ const Constants = {
|
||||
'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': 3,
|
||||
'TIMER_DELAY': 5.0,
|
||||
'RAY_DOU_NUM': 0x3,
|
||||
'ATT_UM_2': 0x7,
|
||||
'ATT_UM_3': 0x7,
|
||||
'TIMER_DELAY': 5.0,
|
||||
'POWER_UM': 70,
|
||||
}
|
||||
# Конфигурация параметров для каждого прибора
|
||||
const PRIBOR_CONFIG_N := {
|
||||
'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]},
|
||||
}
|
||||
# Конфигурация частот и ширин для каждого ФС
|
||||
const FS_PARAMS_N := {
|
||||
2: {'freq': 900.0, 'width': 100.0},
|
||||
3: {'freq': 1157.0, 'width': 100.0}
|
||||
}
|
||||
enum STATE_VAL { NONE = 0, GOOD = 1, ERROR = 2 }
|
||||
enum STATE_MASHINE {
|
||||
INIT,
|
||||
FS_TURN_ON,
|
||||
FS_WORK,
|
||||
UG_SET,
|
||||
UM_RUN,
|
||||
FS_TURN_OFF,
|
||||
STOP_CONTROL,
|
||||
AWAIT
|
||||
}
|
||||
# Основные переменные
|
||||
var current_fs: int = 2
|
||||
var state: int = STATE_MASHINE.INIT
|
||||
var flag_check_dkm: bool = false
|
||||
var flag_timer_started: bool = false
|
||||
|
||||
var count_packet_2:int = 0
|
||||
var count_packet_3:int = 0
|
||||
var power_array_2: Array = []
|
||||
var power_array_3: Array = []
|
||||
var pribor: String
|
||||
var ug_work_2: int
|
||||
var ug_work_3: int
|
||||
# Флаги и таймеры
|
||||
var control_timer: Timer = Timer.new()
|
||||
var mashine_timer: Timer = Timer.new()
|
||||
|
||||
# Результаты контроля
|
||||
var _control_results: Dictionary = {
|
||||
'block_ip': false, # Проверка касет П1 и ИП МА2000
|
||||
'temperature': true, # Проверка температур УМ
|
||||
'dkm_2': false, # Проверка ДКМ
|
||||
'dkm_3': false, # Проверка ДКМ
|
||||
'power_ukp': false, # Мощность от УКП
|
||||
'fs_2': false, # Проверка ФС
|
||||
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],
|
||||
}
|
||||
# Проверка ДКМ
|
||||
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,
|
||||
'ug': false,
|
||||
'ukp1': false,
|
||||
'ukp2': false,
|
||||
}
|
||||
|
||||
# Основные переменные
|
||||
var current_fs: int = 2
|
||||
var ug_work_1: int = 0
|
||||
var ug_work_2: int = 0
|
||||
# Флаги и таймеры
|
||||
var mashine_timer: Timer = Timer.new()
|
||||
var prd_n_module: Object
|
||||
var unit_prd_n: Object
|
||||
var control_prd_n: Object
|
||||
# Результаты контроля
|
||||
var control_results_n: Dictionary = {
|
||||
'block_ip': false, # Проверка касет П1 и ИП МА2000
|
||||
'temperature': true, # Проверка температур УМ
|
||||
'dkm': false,
|
||||
'power_um': false, # Мощность от УКП
|
||||
'fs': false,
|
||||
}
|
||||
var test = preload('res://scripts/pribor-prd.gd')
|
||||
|
||||
|
||||
################################
|
||||
func on_state_mashine() -> void:
|
||||
control_prd_n.state_control_machine()
|
||||
|
||||
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')
|
||||
for node_y5 in nodes_y5:
|
||||
var meta_y5 = node_y5.get_meta('y5')
|
||||
if block_kasseta_y5_prd_config_n.has(meta_y5):
|
||||
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
|
||||
var node_ip_power_arr: Array = get_tree().get_nodes_in_group('power_supply')
|
||||
for power_supply in node_ip_power_arr:
|
||||
var meta_ip = power_supply.get_meta('ip')
|
||||
if block_ip_config_n.has(meta_ip) and block_kasseta_y5_prd_config_n.ug:
|
||||
power_supply.state = STATE_VAL.GOOD if block_ip_config_n[meta_ip][1] else STATE_VAL.ERROR
|
||||
|
||||
var dkm: Dictionary = control_prd_n.block_dkm_config
|
||||
var fs: Dictionary = control_prd_n.block_fs_config
|
||||
if control_prd_n.current_fs == 2 and fs.fs_2:
|
||||
$kasseta_FS_ND/ref_A4.state = STATE_VAL.GOOD if dkm.dkm_2 else STATE_VAL.ERROR
|
||||
elif control_prd_n.current_fs == 3 and fs.fs_3:
|
||||
$kasseta_FS_ND/ref_A3.state = STATE_VAL.GOOD if dkm.dkm_3 else STATE_VAL.ERROR
|
||||
|
||||
if not control_prd_n.power_result['ray_25_2'] or not control_prd_n.power_result['ray_25_3']:
|
||||
return
|
||||
|
||||
var node_arr_power: Array = get_tree().get_nodes_in_group('power_amplifier')
|
||||
for i_pow in node_arr_power.size():
|
||||
if i_pow < 6:
|
||||
var pw = node_arr_power[i_pow]
|
||||
pw.value1 = str(control_prd_n.power_result['ray_25_2'][i_pow])
|
||||
elif i_pow < 12:
|
||||
var pw = node_arr_power[i_pow]
|
||||
pw.value1 = str(control_prd_n.power_result['ray_25_3'][i_pow-6])
|
||||
|
||||
|
||||
func _ready() -> void:
|
||||
if Engine.is_editor_hint():
|
||||
return
|
||||
|
||||
initialize_connections()
|
||||
setup_timer()
|
||||
set_default_state()
|
||||
|
||||
|
||||
func on_state_mashine() -> void:
|
||||
match state:
|
||||
STATE_MASHINE.INIT:
|
||||
print_debug('Текущий запуск current_fs: ', current_fs)
|
||||
if current_fs == 2 or current_fs == 3:
|
||||
state = STATE_MASHINE.FS_TURN_ON
|
||||
else:
|
||||
on_control_result()
|
||||
state = STATE_MASHINE.AWAIT
|
||||
|
||||
STATE_MASHINE.FS_TURN_ON:
|
||||
print('FS_TURN_ON')
|
||||
_on_control_fs(true)
|
||||
control_timer.wait_time = Constants.TIMER_DELAY
|
||||
control_timer.start()
|
||||
state = STATE_MASHINE.FS_WORK
|
||||
|
||||
STATE_MASHINE.FS_WORK:
|
||||
print('FS_WORK')
|
||||
if (current_fs == 2 and flag_check_dkm and not flag_timer_started) or \
|
||||
(current_fs == 3 and flag_check_dkm and not flag_timer_started):
|
||||
state = STATE_MASHINE.UM_RUN
|
||||
|
||||
STATE_MASHINE.UM_RUN:
|
||||
print('UM_RUN')
|
||||
var unit_key = settings.get_unit_key(get_meta('unit_name')[0])
|
||||
var unit_prd = network.units[unit_key]
|
||||
var prd_module = prd.prd_dict[unit_prd.name]
|
||||
prd_module.cmd_array.append([unit_prd.CmdCode.WRITE_ISA, [Constants.BASE_ADDR_EMS_G, 6666]])
|
||||
flag_timer_started = true
|
||||
state = STATE_MASHINE.UG_SET
|
||||
|
||||
STATE_MASHINE.UG_SET:
|
||||
print('UG_SET')
|
||||
on_ug_setting()
|
||||
state = STATE_MASHINE.FS_WORK
|
||||
|
||||
STATE_MASHINE.FS_TURN_OFF:
|
||||
print('FS_TURN_OFF')
|
||||
_on_control_fs(false)
|
||||
power_control_result()
|
||||
state = STATE_MASHINE.STOP_CONTROL
|
||||
|
||||
STATE_MASHINE.STOP_CONTROL:
|
||||
print('STOP_CONTROL')
|
||||
flag_timer_started = false
|
||||
flag_check_dkm = false
|
||||
match current_fs:
|
||||
2: current_fs = 3
|
||||
3: current_fs = 0
|
||||
state = STATE_MASHINE.INIT
|
||||
|
||||
|
||||
func initialize_connections() -> void:
|
||||
signaller.conn(signaller.fs_update_state, Callable(self, 'on_fs_update_state'))
|
||||
var unit_name = get_meta('unit_name')[0]
|
||||
var unit_prd = network.get_unit_instance(unit_name)
|
||||
var current_unit = unit_prd.name
|
||||
var parts = current_unit.split('-')
|
||||
pribor = parts[-1]
|
||||
unit_prd.connect('data_received', Callable(self, 'on_data_received'))
|
||||
unit_prd.connect('line_changed', Callable(self, 'on_line_changed'))
|
||||
prd_n_module = prd.prd_dict[unit_name]
|
||||
unit_prd_n = prd_n_module.unit_yau07
|
||||
|
||||
unit_prd_n.connect('line_changed', Callable(self, 'on_line_changed'))
|
||||
var power_amplifiers: Array = get_tree().get_nodes_in_group('power_amplifier')
|
||||
var fs_nodes: Array = get_tree().get_nodes_in_group('fs_group')
|
||||
var init_data: Dictionary = {
|
||||
'control_label': $control_result,
|
||||
'power_amplifiers': power_amplifiers,
|
||||
'fs_nodes': fs_nodes,
|
||||
'unit_prd': unit_prd_n,
|
||||
'module_prd' : prd_n_module,
|
||||
'constants': constants_n,
|
||||
'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,
|
||||
}
|
||||
control_prd_n = test.TestPRD.new(init_data)
|
||||
add_child(control_prd_n)
|
||||
|
||||
|
||||
func setup_timer() -> void:
|
||||
@@ -139,12 +159,6 @@ func setup_timer() -> void:
|
||||
mashine_timer.wait_time = 0.5
|
||||
mashine_timer.start()
|
||||
|
||||
add_child(control_timer)
|
||||
control_timer.connect('timeout', Callable(self, 'on_stop_control'))
|
||||
control_timer.one_shot = true
|
||||
control_timer.wait_time = 10.0
|
||||
control_timer.start()
|
||||
|
||||
|
||||
func set_default_state() -> void:
|
||||
for group in get_tree().get_nodes_in_group('default_reset'):
|
||||
@@ -155,304 +169,48 @@ func set_default_state() -> void:
|
||||
|
||||
|
||||
func _enter_tree() -> void:
|
||||
$control_result.text = ''
|
||||
if Engine.is_editor_hint():
|
||||
return
|
||||
$control_result.text = 'Выполняется ...'
|
||||
$control_result.add_theme_color_override('font_color', Color.ALICE_BLUE)
|
||||
signaller.connect('режим_работа', Callable(self, 'on_mode_changed').bind(false))
|
||||
|
||||
|
||||
func _exit_tree() -> void:
|
||||
var unit_name = get_meta('unit_name')[0]
|
||||
var unit_prd = network.get_unit_instance(unit_name)
|
||||
var prd_module = prd.prd_dict[unit_prd.name]
|
||||
|
||||
prd_module.cmd_array.append([unit_prd.CmdCode.WRITE_ISA, [Constants.ADDR_UG_LITERA_1, ug_work_2, Constants.ADDR_UG_LITERA_2, ug_work_3]])
|
||||
|
||||
|
||||
func on_line_changed(unit_prd: Object) -> void:
|
||||
if not unit_prd.online:
|
||||
set_default_state()
|
||||
|
||||
|
||||
func on_data_received(unit_prd: Object) -> void:
|
||||
if not is_inside_tree():
|
||||
if Engine.is_editor_hint():
|
||||
return
|
||||
|
||||
var status = unit_prd.status
|
||||
check_block_ip(status)
|
||||
check_temperature_um(status)
|
||||
# Обработка данных ЭМС
|
||||
_process_ems_data(status)
|
||||
|
||||
if current_fs == 2 and _control_results.fs_2:
|
||||
flag_check_dkm = check_dkm(status, Constants.DKM_BIT_2)
|
||||
elif current_fs == 3 and _control_results.fs_3:
|
||||
flag_check_dkm = check_dkm(status, Constants.DKM_BIT_3)
|
||||
|
||||
if _control_results.fs_2 or _control_results.fs_3:
|
||||
# Обработка мощности от УКП
|
||||
_process_ukp_power(status)
|
||||
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]])
|
||||
|
||||
|
||||
# Обрабатывает данные ЭМС и обновляет UI панели
|
||||
func _process_ems_data(status: PackedByteArray) -> void:
|
||||
## Контроль ЭМС
|
||||
var in_blank: int = status.decode_u16(Constants.IN_BLANK_PRD)
|
||||
var out_blank: int = status.decode_u16(Constants.OUT_BLANK_PRD)
|
||||
|
||||
# Обновление фреймов для входных сигналов
|
||||
$Monitoring_panel/in_fs_1.frame = (in_blank >> Constants.CI_2_OT_FS) & 1
|
||||
$Monitoring_panel/in_fs_2.frame = (in_blank >> Constants.CI_3_OT_FS) & 1
|
||||
|
||||
# Обновление фреймов для выходных сигналов ЭМС
|
||||
$Monitoring_panel/out_ems_1.frame = (out_blank >> Constants.CI_2_B_UF) & 1
|
||||
$Monitoring_panel/out_ems_2.frame = (out_blank >> Constants.CI_3_B_UF) & 1
|
||||
|
||||
|
||||
## Проверка касет П1 и ИП МА2000
|
||||
func check_block_ip(status_prd: PackedByteArray) -> void :
|
||||
var ug_online: bool = (status_prd[0] >> 1) & 1
|
||||
if ug_online:
|
||||
const BYTE_DRY_CONTACT: int = 27
|
||||
const BIT_MAA2000_1: int = 0
|
||||
const BIT_MAA2000_2: int = 1
|
||||
const BIT_IP9_50_1: int = 2
|
||||
const BIT_IP9_50_2: int = 3
|
||||
const BIT_IP12_50_1: int = 4
|
||||
|
||||
var maa2000_1 = status_prd[BYTE_DRY_CONTACT] >> BIT_MAA2000_1 & 1
|
||||
var maa2000_2 = status_prd[BYTE_DRY_CONTACT] >> BIT_MAA2000_2 & 1
|
||||
var ip9_50_1 = status_prd[BYTE_DRY_CONTACT] >> BIT_IP9_50_1 & 1
|
||||
var ip9_50_2 = status_prd[BYTE_DRY_CONTACT] >> BIT_IP9_50_2 & 1
|
||||
var ip12_50_1 = status_prd[BYTE_DRY_CONTACT] >> BIT_IP12_50_1 & 1
|
||||
|
||||
$maa2000_A23.state = STATE_VAL.ERROR if maa2000_1 else STATE_VAL.GOOD
|
||||
$maa2000_A22.state = STATE_VAL.ERROR if maa2000_2 else STATE_VAL.GOOD
|
||||
$kasseta_P_1/ref_A20.state = STATE_VAL.ERROR if ip9_50_1 else STATE_VAL.GOOD
|
||||
$kasseta_P_1/ref_A21.state = STATE_VAL.ERROR if ip9_50_2 else STATE_VAL.GOOD
|
||||
$kasseta_P_1/ref_A19.state = STATE_VAL.ERROR if ip12_50_1 else STATE_VAL.GOOD
|
||||
else:
|
||||
$maa2000_A23.state = STATE_VAL.NONE
|
||||
$maa2000_A22.state = STATE_VAL.NONE
|
||||
$kasseta_P_1/ref_A19.state = STATE_VAL.NONE
|
||||
$kasseta_P_1/ref_A20.state = STATE_VAL.NONE
|
||||
$kasseta_P_1/ref_A21.state = STATE_VAL.NONE
|
||||
|
||||
_control_results['block_ip'] = (
|
||||
$maa2000_A23.state == STATE_VAL.GOOD and
|
||||
$maa2000_A22.state == STATE_VAL.GOOD and
|
||||
$kasseta_P_1/ref_A19.state == STATE_VAL.GOOD and
|
||||
$kasseta_P_1/ref_A20.state == STATE_VAL.GOOD and
|
||||
$kasseta_P_1/ref_A21.state == STATE_VAL.GOOD
|
||||
)
|
||||
|
||||
|
||||
## Проверка температур УМ от УКП
|
||||
func check_temperature_um(status_prd: PackedByteArray) -> void:
|
||||
const CONST_MIN_TEMP: int = -25
|
||||
const MAXIMUM_CODE_ADC: int = 3796
|
||||
const MINIMUM_CODE_AD: int = 2660
|
||||
const TEMP: float = 115.0 / (MAXIMUM_CODE_ADC - MINIMUM_CODE_AD)
|
||||
const TEMPERATURE_UKP_1: int = 47
|
||||
const TEMPERATURE_UKP_2: int = 79
|
||||
var power_amplifier: Array = get_tree().get_nodes_in_group('power_amplifier')
|
||||
|
||||
var ukp1_online: int = (status_prd[0] >> 2) & 1
|
||||
if ukp1_online:
|
||||
for i_temp in range(6):
|
||||
var temperature_ukp_1: int = status_prd.decode_u16(TEMPERATURE_UKP_1 + 2 * i_temp)
|
||||
var tmp_1: int = round(CONST_MIN_TEMP + (MAXIMUM_CODE_ADC - temperature_ukp_1) * TEMP + 3)
|
||||
power_amplifier[i_temp].value0 = tmp_1
|
||||
if tmp_1 > Constants.TEMP_THRESHOLD:
|
||||
_control_results['temperature'] = false
|
||||
var ukp2_online = (status_prd[0] >> 3) & 1
|
||||
if ukp2_online:
|
||||
for i_temp in range(6):
|
||||
var temperature_ukp_2: int = status_prd.decode_u16(TEMPERATURE_UKP_2 + 2 * i_temp)
|
||||
var tmp_2: int = round(CONST_MIN_TEMP + (MAXIMUM_CODE_ADC - temperature_ukp_2) * TEMP + 3)
|
||||
power_amplifier[i_temp+6].value0 = tmp_2
|
||||
if tmp_2 > Constants.TEMP_THRESHOLD:
|
||||
_control_results['temperature'] = false
|
||||
|
||||
|
||||
|
||||
## Проверка ДКМ
|
||||
func check_dkm(status_prd: PackedByteArray, bit_dkm: int) -> bool:
|
||||
const DKM: int = 28
|
||||
|
||||
var status_dkm = status_prd[DKM] >> bit_dkm & 1
|
||||
#print('^: ', status_prd[DKM])
|
||||
if bit_dkm == 1:
|
||||
$dou3_A5.state = STATE_VAL.GOOD if status_dkm else STATE_VAL.ERROR
|
||||
$kasseta_FS_ND/ref_A3.state = STATE_VAL.GOOD if status_dkm else STATE_VAL.ERROR
|
||||
_control_results['dkm_2'] = status_dkm
|
||||
elif bit_dkm == 2:
|
||||
$dou2_A6.state = STATE_VAL.GOOD if status_dkm else STATE_VAL.ERROR
|
||||
$kasseta_FS_ND/ref_A4.state = STATE_VAL.GOOD if status_dkm else STATE_VAL.ERROR
|
||||
_control_results['dkm_3'] = status_dkm
|
||||
return status_dkm
|
||||
|
||||
|
||||
func _process_ukp_power(status: PackedByteArray) -> void:
|
||||
var power_amplifier: Array = get_tree().get_nodes_in_group('power_amplifier')
|
||||
if current_fs == 2:
|
||||
## Мощность УМ от УКП 1
|
||||
var arr_power_ukp_1: Array = []
|
||||
if (status[0] >> 2) & 1:
|
||||
var power_ukp_1: int
|
||||
for i_power in range(6):
|
||||
power_ukp_1 = status.decode_u16(Constants.POWER_UKP_1 + 2 * i_power)
|
||||
arr_power_ukp_1.append(power_ukp_1)
|
||||
|
||||
if count_packet_2 == 0:
|
||||
power_array_2 = arr_power_ukp_1
|
||||
else:
|
||||
for i in arr_power_ukp_1.size():
|
||||
if arr_power_ukp_1[i] > power_array_2[i]:
|
||||
power_array_2[i] = arr_power_ukp_1[i]
|
||||
|
||||
for i in 6:
|
||||
power_amplifier[i].value1 = '%d' % power_array_2[i]
|
||||
power_amplifier[i].state = STATE_VAL.GOOD if power_array_2[i] > Constants.TEMP_THRESHOLD else STATE_VAL.ERROR
|
||||
count_packet_2 += 1
|
||||
|
||||
elif current_fs == 3:
|
||||
## Мощность УМ от УКП 2
|
||||
var arr_power_ukp_2: Array = []
|
||||
if (status[0] >> 2) & 1:
|
||||
for i_power in range(6):
|
||||
var power_ukp_2 = status.decode_u16(Constants.POWER_UKP_2 + 2 * i_power)
|
||||
arr_power_ukp_2.append(power_ukp_2)
|
||||
|
||||
if count_packet_3 == 0:
|
||||
power_array_3 = arr_power_ukp_2
|
||||
else:
|
||||
for i in arr_power_ukp_2.size():
|
||||
if arr_power_ukp_2[i] > power_array_3[i]:
|
||||
power_array_3[i] = arr_power_ukp_2[i]
|
||||
|
||||
for i in 6:
|
||||
power_amplifier[i+6].value1 = '%d' % power_array_3[i]
|
||||
power_amplifier[i+6].state = STATE_VAL.GOOD if power_array_3[i] > Constants.TEMP_THRESHOLD else STATE_VAL.ERROR
|
||||
|
||||
count_packet_3 += 1
|
||||
|
||||
|
||||
func _on_control_fs(mode: bool) -> void:
|
||||
# Конфигурация параметров для каждого прибора
|
||||
var 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]},
|
||||
}
|
||||
# Получаем конфигурацию для текущего прибора
|
||||
var config: Dictionary = pribor_config.get(pribor)
|
||||
var angle: float = config.angle
|
||||
var sectors: Array = config.sectors
|
||||
|
||||
# Конфигурация частот и ширин для каждого ФС
|
||||
var fs_params := {
|
||||
2: {'freq': 900.0, 'width': 100.0},
|
||||
3: {'freq': 1157.0, 'width': 100.0}
|
||||
}
|
||||
|
||||
# Формируем выходные данные
|
||||
var interfer_name: String = 'k1' if mode else 'off'
|
||||
var fs_arr: Array = []
|
||||
|
||||
if (state == STATE_MASHINE.FS_TURN_ON or state == STATE_MASHINE.FS_TURN_OFF):
|
||||
if current_fs in fs_params:
|
||||
var params = fs_params[current_fs]
|
||||
fs_arr.append([
|
||||
angle,
|
||||
params.freq,
|
||||
params.width,
|
||||
sectors[current_fs - 2]
|
||||
])
|
||||
signaller.emit_signal('interfer_init', interfer_name, fs_arr, Constants.POWER_UM)
|
||||
|
||||
|
||||
func power_control_result() -> void:
|
||||
var power_amplifier: Array = get_tree().get_nodes_in_group('power_amplifier')
|
||||
_control_results['power_ukp'] = true
|
||||
for amp in power_amplifier:
|
||||
if amp.state != STATE_VAL.GOOD:
|
||||
_control_results['power_ukp'] = false
|
||||
break
|
||||
|
||||
|
||||
func on_stop_control() -> void:
|
||||
state = STATE_MASHINE.FS_TURN_OFF
|
||||
|
||||
|
||||
func on_fs_update_state(packet_type_7: Dictionary) -> void:
|
||||
# Словарь для маппинга: ключ - номер FS, значение - целевая нода и условие прибора
|
||||
var fs_mapping = {
|
||||
4: { 'node': $kasseta_FS_ND/ref_A1, 'condition': pribor == '1н' },
|
||||
5: { 'node': $kasseta_FS_ND/ref_A1, 'condition': pribor == '4н' },
|
||||
6: { 'node': $kasseta_FS_ND/ref_A1, 'condition': pribor == '3н' },
|
||||
7: { 'node': $kasseta_FS_ND/ref_A1, 'condition': pribor == '2н' },
|
||||
8: { 'node': $kasseta_FS_ND/ref_A2, 'condition': pribor == '1н' },
|
||||
9: { 'node': $kasseta_FS_ND/ref_A2, 'condition': pribor == '4н' },
|
||||
10: { 'node': $kasseta_FS_ND/ref_A2, 'condition': pribor == '3н' },
|
||||
11: { 'node': $kasseta_FS_ND/ref_A2, 'condition': pribor == '2н' }
|
||||
}
|
||||
for fs in packet_type_7:
|
||||
if fs in fs_mapping and fs_mapping[fs]['condition']:
|
||||
var data = packet_type_7[fs]
|
||||
if fs < 8 and current_fs == 2:
|
||||
_control_results['fs_2'] = (data.isg == 1)
|
||||
var state_fs = STATE_VAL.GOOD if data.isg == 1 else STATE_VAL.ERROR if data.isg == 0 else STATE_VAL.NONE
|
||||
fs_mapping[fs]['node'].state = state_fs
|
||||
elif fs > 7 and current_fs == 3:
|
||||
_control_results['fs_3'] = (data.isg == 1)
|
||||
var state_fs = STATE_VAL.GOOD if data.isg == 1 else STATE_VAL.ERROR if data.isg == 0 else STATE_VAL.NONE
|
||||
fs_mapping[fs]['node'].state = state_fs
|
||||
|
||||
|
||||
func on_ug_setting() -> void:
|
||||
var unit_name = get_meta('unit_name')[0]
|
||||
var unit_prd = network.get_unit_instance(unit_name)
|
||||
|
||||
|
||||
if unit_prd.isa_ports.has(Constants.ADDR_UG_LITERA_1):
|
||||
ug_work_2 = unit_prd.isa_ports[Constants.ADDR_UG_LITERA_1]
|
||||
if unit_prd.isa_ports.has(Constants.ADDR_UG_LITERA_2):
|
||||
ug_work_3 = unit_prd.isa_ports[Constants.ADDR_UG_LITERA_2]
|
||||
|
||||
var result_1 = ((Constants.ATT_UM_2 & 0x07) << 3) | (Constants.RAY_DOU & 0x07)
|
||||
var result_2 = ((Constants.ATT_UM_3 & 0x07) << 3) | (Constants.RAY_DOU & 0x07)
|
||||
var prd_module = prd.prd_dict[unit_prd.name]
|
||||
prd_module.cmd_array.append([unit_prd.CmdCode.WRITE_ISA, [Constants.ADDR_UG_LITERA_1, result_1,
|
||||
Constants.ADDR_UG_LITERA_2, result_2]])
|
||||
|
||||
prd_module.cmd_array.append([unit_prd.CmdCode.READ_ISA, [Constants.ADDR_UG_LITERA_1, Constants.ADDR_UG_LITERA_2]])
|
||||
func on_line_changed(unit_pribor: Object) -> void:
|
||||
if not unit_pribor.online:
|
||||
set_default_state()
|
||||
|
||||
|
||||
func on_mode_changed(in_tree: bool) -> void:
|
||||
if not in_tree:
|
||||
queue_free()
|
||||
|
||||
|
||||
func on_control_result() -> void:
|
||||
# Словарь соответствия ключей ошибок и нод
|
||||
var error_nodes := {
|
||||
'fs_2': $kasseta_FS_ND/ref_A2,
|
||||
'fs_3': $kasseta_FS_ND/ref_A1,
|
||||
}
|
||||
# Проверка результатов и установка состояний
|
||||
var result: bool = true
|
||||
for key in _control_results:
|
||||
if not _control_results[key]:
|
||||
result = false
|
||||
if error_nodes.has(key):
|
||||
error_nodes[key].state = STATE_VAL.ERROR
|
||||
|
||||
# Установка текста и цвета результата
|
||||
var status_text := 'неисправен'
|
||||
var status_color := Color.CRIMSON
|
||||
if result:
|
||||
status_text = 'исправен'
|
||||
status_color = Color.AQUAMARINE
|
||||
|
||||
$control_result.text = 'Прибор ПРД-%s %s' % [pribor, status_text]
|
||||
$control_result.add_theme_color_override('font_color', status_color)
|
||||
#
|
||||
#func on_control_result() -> void:
|
||||
#var result: bool = true
|
||||
#
|
||||
#for key in _control_results:
|
||||
#if not _control_results[key]:
|
||||
#if key == 'fs_1':
|
||||
#$kasseta_FS_VD/ref_A3.state = STATE_VAL.ERROR
|
||||
#if key == 'fs_2':
|
||||
#$kasseta_FS_VD/ref_A4.state = STATE_VAL.ERROR
|
||||
#result = false
|
||||
#print_debug('%s false' % key)
|
||||
#
|
||||
#var parts = currecnt_unit.split('-')
|
||||
#var last_part = parts[-1] # Прибор
|
||||
#if result:
|
||||
#$control_result.text = 'Прибор ПРД-%s исправен' % last_part
|
||||
#$control_result.add_theme_color_override('font_color', Color.AQUAMARINE)
|
||||
#else:
|
||||
#$control_result.text = 'Прибор ПРД-%s неисправен' % last_part
|
||||
#$control_result.add_theme_color_override('font_color', Color.CRIMSON)
|
||||
#await get_tree().create_timer(Constants.TIMER_DELAY).timeout
|
||||
#flag_timer_started = false
|
||||
|
||||
@@ -1,10 +1,9 @@
|
||||
[gd_scene load_steps=14 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"]
|
||||
[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://dow4nqi6hbak8" path="res://scenes/контроль/кассета-у-5.gd" id="5_1wf07"]
|
||||
[ext_resource type="Script" uid="uid://crpedygm3gohi" path="res://scenes/контроль/кассета.gd" id="6_b5wvk"]
|
||||
[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"]
|
||||
@@ -43,7 +42,7 @@ offset_right = 15.0
|
||||
offset_bottom = 30.0
|
||||
script = ExtResource("1_bnnv3")
|
||||
|
||||
[node name="maa2000_A23" parent="." groups=["default_reset"] instance=ExtResource("2_is25t")]
|
||||
[node name="maa2000_A23" parent="." groups=["default_reset", "power_supply"] instance=ExtResource("2_is25t")]
|
||||
layout_mode = 2
|
||||
offset_left = 8.0
|
||||
offset_top = 877.0
|
||||
@@ -51,8 +50,9 @@ offset_right = 175.0
|
||||
offset_bottom = 949.0
|
||||
fname = "MAA2000"
|
||||
rname = "A23"
|
||||
metadata/ip = "maa2000_2"
|
||||
|
||||
[node name="maa2000_A22" parent="." groups=["default_reset"] instance=ExtResource("2_is25t")]
|
||||
[node name="maa2000_A22" parent="." groups=["default_reset", "power_supply"] instance=ExtResource("2_is25t")]
|
||||
layout_mode = 2
|
||||
offset_left = 485.0
|
||||
offset_top = 877.0
|
||||
@@ -60,6 +60,7 @@ offset_right = 652.0
|
||||
offset_bottom = 949.0
|
||||
fname = "MAA2000"
|
||||
rname = "A22"
|
||||
metadata/ip = "maa2000_1"
|
||||
|
||||
[node name="dou3_A5" parent="." groups=["default_reset"] instance=ExtResource("2_is25t")]
|
||||
layout_mode = 2
|
||||
@@ -109,8 +110,6 @@ offset_left = 175.0
|
||||
offset_top = 242.0
|
||||
offset_right = 485.0
|
||||
offset_bottom = 432.0
|
||||
script = ExtResource("5_1wf07")
|
||||
fname = "Кассета У5"
|
||||
|
||||
[node name="kasseta_FS_ND" type="NinePatchRect" parent="."]
|
||||
layout_mode = 0
|
||||
@@ -146,21 +145,23 @@ offset_bottom = 182.0
|
||||
fname = "Блок ФС-2"
|
||||
rname = "A3"
|
||||
|
||||
[node name="ref_A1" parent="kasseta_FS_ND" groups=["default_reset"] instance=ExtResource("7_eoqf2")]
|
||||
[node name="ref_A1" parent="kasseta_FS_ND" groups=["default_reset", "fs_group"] instance=ExtResource("7_eoqf2")]
|
||||
offset_left = 105.0
|
||||
offset_top = 32.0
|
||||
offset_right = 155.0
|
||||
offset_bottom = 182.0
|
||||
fname = "Модуль ФС"
|
||||
rname = "A1"
|
||||
metadata/fs = "fs_3"
|
||||
|
||||
[node name="ref_A2" parent="kasseta_FS_ND" groups=["default_reset"] instance=ExtResource("7_eoqf2")]
|
||||
[node name="ref_A2" parent="kasseta_FS_ND" groups=["default_reset", "fs_group"] instance=ExtResource("7_eoqf2")]
|
||||
offset_left = 155.0
|
||||
offset_top = 32.0
|
||||
offset_right = 205.0
|
||||
offset_bottom = 182.0
|
||||
fname = "Модуль ФС"
|
||||
rname = "A2"
|
||||
metadata/fs = "fs_2"
|
||||
|
||||
[node name="ref_A4" parent="kasseta_FS_ND" groups=["default_reset"] instance=ExtResource("7_eoqf2")]
|
||||
offset_left = 205.0
|
||||
@@ -184,29 +185,32 @@ patch_margin_bottom = 16
|
||||
script = ExtResource("6_b5wvk")
|
||||
fname = "Кассета П-1"
|
||||
|
||||
[node name="ref_A21" parent="kasseta_P_1" groups=["default_reset"] instance=ExtResource("7_eoqf2")]
|
||||
[node name="ref_A21" parent="kasseta_P_1" groups=["default_reset", "power_supply"] instance=ExtResource("7_eoqf2")]
|
||||
offset_left = 9.0
|
||||
offset_top = 33.0
|
||||
offset_right = 59.0
|
||||
offset_bottom = 183.0
|
||||
fname = "ИП12-50"
|
||||
rname = "A21"
|
||||
metadata/ip = "ip12_50_1"
|
||||
|
||||
[node name="ref_A20" parent="kasseta_P_1" groups=["default_reset"] instance=ExtResource("7_eoqf2")]
|
||||
[node name="ref_A20" parent="kasseta_P_1" groups=["default_reset", "power_supply"] instance=ExtResource("7_eoqf2")]
|
||||
offset_left = 59.0
|
||||
offset_top = 33.0
|
||||
offset_right = 109.0
|
||||
offset_bottom = 183.0
|
||||
fname = "ИП9-50"
|
||||
rname = "A20"
|
||||
metadata/ip = "ip9_50_1"
|
||||
|
||||
[node name="ref_A19" parent="kasseta_P_1" groups=["default_reset"] instance=ExtResource("7_eoqf2")]
|
||||
[node name="ref_A19" parent="kasseta_P_1" groups=["default_reset", "power_supply"] instance=ExtResource("7_eoqf2")]
|
||||
offset_left = 109.0
|
||||
offset_top = 33.0
|
||||
offset_right = 159.0
|
||||
offset_bottom = 183.0
|
||||
fname = "ИП9-50"
|
||||
rname = "A19"
|
||||
metadata/ip = "ip9_50_2"
|
||||
|
||||
[node name="lbl_fname" type="Label" parent="kasseta_P_1"]
|
||||
self_modulate = Color(1, 1, 1, 0.62)
|
||||
|
||||
@@ -1,84 +1,162 @@
|
||||
@tool
|
||||
extends 'res://scenes/контроль/прибор.gd'
|
||||
|
||||
const Constants = {
|
||||
'IN_BLANK_PRD': 1,
|
||||
'OUT_BLANK_PRD': 13,
|
||||
'CI_4_OT_FS': 11,
|
||||
'CI_5_OT_FS': 12,
|
||||
'CI_4_B_UF': 4,
|
||||
'CI_5_B_UF': 5,
|
||||
const constants_v = {
|
||||
'POWER_UKP_1': 31,
|
||||
'POWER_UKP_2': 63,
|
||||
'DKM_BIT_3': 3,
|
||||
'DKM_BIT_4': 4,
|
||||
'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,
|
||||
'TIMER_DELAY': 1.4,
|
||||
'TIMER_DELAY': 5.0,
|
||||
'RAY_DOU_NUM': 0x3,
|
||||
'ATT_UM_4': 0x7,
|
||||
'ATT_UM_5': 0x7,
|
||||
'POWER_UM': 70,
|
||||
}
|
||||
# Конфигурация параметров для каждого прибора
|
||||
const PRIBOR_CONFIG_V := {
|
||||
'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]},
|
||||
}
|
||||
# Конфигурация частот и ширин для каждого ФС
|
||||
const FS_PARAMS_V := {
|
||||
4: {'freq': 1227.0, 'width': 110.0},
|
||||
5: {'freq': 1575.0, 'width': 110.0},
|
||||
}
|
||||
enum STATE_VAL { NONE = 0, GOOD = 1, ERROR = 2 }
|
||||
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_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,
|
||||
'ug': false,
|
||||
'ukp1': false,
|
||||
'ukp2': false,
|
||||
}
|
||||
|
||||
# Основные переменные
|
||||
var count_packet_1:int = 0
|
||||
var count_packet_2:int = 0
|
||||
var power_array_1: Array = []
|
||||
var power_array_2: Array = []
|
||||
var currecnt_unit: String
|
||||
var ug_work_1: int
|
||||
var ug_work_2: int
|
||||
var current_fs: int = 4
|
||||
var ug_work_1: int = 0
|
||||
var ug_work_2: int = 0
|
||||
# Флаги и таймеры
|
||||
var control_timer: Timer = Timer.new()
|
||||
var flag_timer_started: bool = false
|
||||
var mashine_timer: Timer = Timer.new()
|
||||
var prd_v_module: Object
|
||||
var unit_prd_v: Object
|
||||
var control_prd_v: Object
|
||||
# Результаты контроля
|
||||
var _control_results: Dictionary = {
|
||||
var control_results_v: Dictionary = {
|
||||
'block_ip': false, # Проверка касет П1 и ИП МА2000
|
||||
'temperature': true, # Проверка температур УМ
|
||||
'dkm_1': false, # Проверка ДКМ
|
||||
'dkm_2': false, # Проверка ДКМ
|
||||
'power_ukp': false, # Мощность от УКП
|
||||
'fs_1': false, # Проверка ФС
|
||||
'fs_2': false,
|
||||
'dkm': false,
|
||||
'power_um': false, # Мощность от УКП
|
||||
'fs': false,
|
||||
}
|
||||
var test = preload('res://scripts/pribor-prd.gd')
|
||||
|
||||
|
||||
func on_state_mashine() -> void:
|
||||
control_prd_v.state_control_machine()
|
||||
|
||||
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')
|
||||
for node_y5 in nodes_y5:
|
||||
var meta_y5 = node_y5.get_meta('y5')
|
||||
if block_kasseta_y5_prd_config_v.has(meta_y5):
|
||||
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
|
||||
var node_ip_power_arr: Array = get_tree().get_nodes_in_group('power_supply')
|
||||
for power_supply in node_ip_power_arr:
|
||||
var meta_ip = power_supply.get_meta('ip')
|
||||
if block_ip_config_v.has(meta_ip) and block_kasseta_y5_prd_config_v.ug:
|
||||
power_supply.state = STATE_VAL.GOOD if block_ip_config_v[meta_ip][1] else STATE_VAL.ERROR
|
||||
|
||||
control_results_v = control_prd_v.control_results
|
||||
var dkm: Dictionary = control_prd_v.block_dkm_config
|
||||
var fs: Dictionary = control_prd_v.block_fs_config
|
||||
if control_prd_v.current_fs == 4 and fs.fs_4:
|
||||
$kasseta_FS_VD/ref_A2.state = STATE_VAL.GOOD if dkm.dkm_4 else STATE_VAL.ERROR
|
||||
elif control_prd_v.current_fs == 5 and fs.fs_5:
|
||||
$kasseta_FS_VD/ref_A6.state = STATE_VAL.GOOD if dkm.dkm_5 else STATE_VAL.ERROR
|
||||
|
||||
if not control_prd_v.power_result['ray_25_4'] or not control_prd_v.power_result['ray_25_5']:
|
||||
return
|
||||
|
||||
var node_arr_power: Array = get_tree().get_nodes_in_group('power_amplifier')
|
||||
for i_pow in node_arr_power.size():
|
||||
if i_pow < 6:
|
||||
var pw = node_arr_power[i_pow]
|
||||
pw.value1 = str(control_prd_v.power_result['ray_25_4'][i_pow])
|
||||
elif i_pow < 12:
|
||||
var pw = node_arr_power[i_pow]
|
||||
pw.value1 = str(control_prd_v.power_result['ray_25_5'][i_pow-6])
|
||||
|
||||
|
||||
func _ready() -> void:
|
||||
if Engine.is_editor_hint():
|
||||
return
|
||||
|
||||
initialize_connections()
|
||||
setup_timer()
|
||||
set_default_state()
|
||||
|
||||
|
||||
func initialize_connections() -> void:
|
||||
signaller.conn(signaller.fs_update_state, Callable(self, 'on_fs_update_state'))
|
||||
var unit_name = get_meta('unit_name')[0]
|
||||
var unit_prd = network.get_unit_instance(unit_name)
|
||||
currecnt_unit = unit_prd.name
|
||||
unit_prd.connect('data_received', Callable(self, 'on_data_received'))
|
||||
unit_prd.connect('line_changed', Callable(self, 'on_line_changed'))
|
||||
prd_v_module = prd.prd_dict[unit_name]
|
||||
unit_prd_v = prd_v_module.unit_yau07
|
||||
|
||||
unit_prd_v.connect('line_changed', Callable(self, 'on_line_changed'))
|
||||
var power_amplifiers: Array = get_tree().get_nodes_in_group('power_amplifier')
|
||||
var fs_nodes: Array = get_tree().get_nodes_in_group('fs_group')
|
||||
var init_data: Dictionary = {
|
||||
'control_label': $control_result,
|
||||
'power_amplifiers': power_amplifiers,
|
||||
'fs_nodes': fs_nodes,
|
||||
'unit_prd': unit_prd_v,
|
||||
'module_prd' : prd_v_module,
|
||||
'constants': constants_v,
|
||||
'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,
|
||||
}
|
||||
control_prd_v = test.TestPRD.new(init_data)
|
||||
add_child(control_prd_v)
|
||||
|
||||
|
||||
func setup_timer() -> void:
|
||||
add_child(control_timer)
|
||||
control_timer.connect('timeout', Callable(self, 'on_stop_control'))
|
||||
control_timer.one_shot = true
|
||||
control_timer.wait_time = 10.0
|
||||
control_timer.start()
|
||||
|
||||
|
||||
func _enter_tree() -> void:
|
||||
$control_result.text = ''
|
||||
signaller.connect('режим_работа', Callable(self, 'on_mode_changed').bind(false))
|
||||
signaller.emit_signal('interfer_off_all')
|
||||
await get_tree().create_timer(2.0).timeout
|
||||
_on_control_fs(true)
|
||||
|
||||
|
||||
func _exit_tree() -> void:
|
||||
var unit_name = get_meta('unit_name')[0]
|
||||
var unit_prd = network.get_unit_instance(unit_name)
|
||||
var prd_module = prd.prd_dict[unit_prd.name]
|
||||
prd_module.cmd_array.append([unit_prd.CmdCode.WRITE_ISA, [Constants.ADDR_UG_LITERA_1, ug_work_1, Constants.ADDR_UG_LITERA_2, ug_work_2]])
|
||||
add_child(mashine_timer)
|
||||
mashine_timer.connect('timeout', Callable(self, 'on_state_mashine'))
|
||||
mashine_timer.wait_time = 0.5
|
||||
mashine_timer.start()
|
||||
|
||||
|
||||
func set_default_state() -> void:
|
||||
@@ -89,286 +167,49 @@ func set_default_state() -> void:
|
||||
group.state = STATE_VAL.NONE
|
||||
|
||||
|
||||
func on_line_changed(unit_prd: Object) -> void:
|
||||
if not unit_prd.online:
|
||||
func _enter_tree() -> void:
|
||||
if Engine.is_editor_hint():
|
||||
return
|
||||
$control_result.text = 'Выполняется ...'
|
||||
$control_result.add_theme_color_override('font_color', Color.ALICE_BLUE)
|
||||
signaller.connect('режим_работа', Callable(self, 'on_mode_changed').bind(false))
|
||||
|
||||
|
||||
func _exit_tree() -> void:
|
||||
if Engine.is_editor_hint():
|
||||
return
|
||||
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]])
|
||||
|
||||
|
||||
func on_line_changed(unit_pribor: Object) -> void:
|
||||
if not unit_pribor.online:
|
||||
set_default_state()
|
||||
|
||||
|
||||
# Основной процесс по принятию и обработки пакетов
|
||||
func on_data_received(unit_prd: Object) -> void:
|
||||
if not is_inside_tree():
|
||||
return
|
||||
|
||||
var status = unit_prd.status
|
||||
check_block_ip(status)
|
||||
check_temperature_um(status)
|
||||
# Обработка данных ЭМС
|
||||
_process_ems_data(status)
|
||||
|
||||
if flag_timer_started:
|
||||
check_dkm(status, Constants.DKM_BIT_3)
|
||||
check_dkm(status, Constants.DKM_BIT_4)
|
||||
# Обработка мощности от УКП
|
||||
_process_ukp_power(status)
|
||||
|
||||
|
||||
## Проверка касет П1 и ИП МА2000
|
||||
func check_block_ip(status_prd: PackedByteArray) -> void:
|
||||
var ug_online: bool = (status_prd[0] >> 1) & 1
|
||||
if not ug_online:
|
||||
for node in [$maa2000_A23, $maa2000_A22, $kasseta_P_1/ref_A19, $kasseta_P_1/ref_A20, $kasseta_P_1/ref_A21]:
|
||||
node.state = STATE_VAL.NONE
|
||||
return
|
||||
|
||||
const BYTE_DRY_CONTACT: int = 27
|
||||
const BIT_MAA2000_1: int = 0
|
||||
const BIT_MAA2000_2: int = 1
|
||||
const BIT_IP9_50_1: int = 2
|
||||
const BIT_IP9_50_2: int = 3
|
||||
const BIT_IP12_50_1: int = 4
|
||||
|
||||
var maa2000_1 = status_prd[BYTE_DRY_CONTACT] >> BIT_MAA2000_1 & 1
|
||||
var maa2000_2 = status_prd[BYTE_DRY_CONTACT] >> BIT_MAA2000_2 & 1
|
||||
var ip9_50_1 = status_prd[BYTE_DRY_CONTACT] >> BIT_IP9_50_1 & 1
|
||||
var ip9_50_2 = status_prd[BYTE_DRY_CONTACT] >> BIT_IP9_50_2 & 1
|
||||
var ip12_50_1 = status_prd[BYTE_DRY_CONTACT] >> BIT_IP12_50_1 & 1
|
||||
|
||||
$maa2000_A23.state = STATE_VAL.ERROR if maa2000_1 else STATE_VAL.GOOD
|
||||
$maa2000_A22.state = STATE_VAL.ERROR if maa2000_2 else STATE_VAL.GOOD
|
||||
$kasseta_P_1/ref_A19.state = STATE_VAL.ERROR if ip9_50_1 else STATE_VAL.GOOD
|
||||
$kasseta_P_1/ref_A20.state = STATE_VAL.ERROR if ip9_50_2 else STATE_VAL.GOOD
|
||||
$kasseta_P_1/ref_A21.state = STATE_VAL.ERROR if ip12_50_1 else STATE_VAL.GOOD
|
||||
|
||||
_control_results['block_ip'] = (
|
||||
$maa2000_A23.state == STATE_VAL.GOOD and
|
||||
$maa2000_A22.state == STATE_VAL.GOOD and
|
||||
$kasseta_P_1/ref_A19.state == STATE_VAL.GOOD and
|
||||
$kasseta_P_1/ref_A20.state == STATE_VAL.GOOD and
|
||||
$kasseta_P_1/ref_A21.state == STATE_VAL.GOOD
|
||||
)
|
||||
|
||||
|
||||
## Проверка температур УМ от УКП
|
||||
func check_temperature_um(status_prd: PackedByteArray) -> void:
|
||||
const TEMP_CONSTANTS = {
|
||||
'min_temp': -25,
|
||||
'max_code': 3796,
|
||||
'min_code': 2660,
|
||||
'temp_factor': 115.0 / (3796 - 2660),
|
||||
'offset': 3 # Корректировка температуры
|
||||
}
|
||||
const TEMPERATURE_UKP_1: int = 47
|
||||
const TEMPERATURE_UKP_2: int = 79
|
||||
var power_amplifier: Array = get_tree().get_nodes_in_group('power_amplifier')
|
||||
|
||||
# Сбрас флагов перед проверкой
|
||||
_control_results['temperature'] = true
|
||||
|
||||
var ukp1_online: int = (status_prd[0] >> 2) & 1
|
||||
if ukp1_online:
|
||||
for i_temp in range(6):
|
||||
var temperature_ukp_1: int = status_prd.decode_u16(TEMPERATURE_UKP_1 + 2 * i_temp)
|
||||
var tmp_1: int = round(TEMP_CONSTANTS['min_temp'] + (TEMP_CONSTANTS['max_code'] - temperature_ukp_1) * TEMP_CONSTANTS['temp_factor'] + TEMP_CONSTANTS['offset'])
|
||||
power_amplifier[i_temp].value0 = tmp_1
|
||||
if tmp_1 > Constants.TEMP_THRESHOLD:
|
||||
_control_results['temperature'] = false
|
||||
|
||||
var ukp2_online = (status_prd[0] >> 3) & 1
|
||||
if ukp2_online:
|
||||
for i_temp in range(6):
|
||||
var temperature_ukp_2: int = status_prd.decode_u16(TEMPERATURE_UKP_2 + 2 * i_temp)
|
||||
var tmp_2: int = round(TEMP_CONSTANTS['min_temp'] + (TEMP_CONSTANTS['max_code'] - temperature_ukp_2) * TEMP_CONSTANTS['temp_factor'] + TEMP_CONSTANTS['offset'])
|
||||
power_amplifier[i_temp+6].value0 = tmp_2
|
||||
if tmp_2 > Constants.TEMP_THRESHOLD:
|
||||
_control_results['temperature'] = false
|
||||
|
||||
|
||||
## Проверка ДКМ
|
||||
func check_dkm(status_prd: PackedByteArray, bit_dkm: int) -> void:
|
||||
const DKM: int = 28
|
||||
var status_dkm = status_prd[DKM] >> bit_dkm & 1
|
||||
if bit_dkm == Constants.DKM_BIT_3:
|
||||
$dou5_A6.state = STATE_VAL.GOOD if status_dkm else STATE_VAL.ERROR
|
||||
$kasseta_FS_VD/ref_A2.state = STATE_VAL.GOOD if status_dkm else STATE_VAL.ERROR
|
||||
_control_results['dkm_1'] = status_dkm
|
||||
elif bit_dkm == Constants.DKM_BIT_4:
|
||||
$dou4_A5.state = STATE_VAL.GOOD if status_dkm else STATE_VAL.ERROR
|
||||
$kasseta_FS_VD/ref_A6.state = STATE_VAL.GOOD if status_dkm else STATE_VAL.ERROR
|
||||
_control_results['dkm_2'] = status_dkm
|
||||
|
||||
|
||||
# Обрабатывает данные ЭМС и обновляет UI панели
|
||||
func _process_ems_data(status: PackedByteArray) -> void:
|
||||
## Контроль ЭМС
|
||||
var in_blank: int = status.decode_u16(Constants.IN_BLANK_PRD)
|
||||
var out_blank: int = status.decode_u16(Constants.OUT_BLANK_PRD)
|
||||
|
||||
# Обновление фреймов для входных сигналов
|
||||
$Monitoring_panel/in_fs_1.frame = (in_blank >> Constants.CI_4_OT_FS) & 1
|
||||
$Monitoring_panel/in_fs_2.frame = (in_blank >> Constants.CI_5_OT_FS) & 1
|
||||
|
||||
# Обновление фреймов для выходных сигналов ЭМС
|
||||
$Monitoring_panel/out_ems_1.frame = (out_blank >> Constants.CI_4_B_UF) & 1
|
||||
$Monitoring_panel/out_ems_2.frame = (out_blank >> Constants.CI_5_B_UF) & 1
|
||||
|
||||
|
||||
func _process_ukp_power(status: PackedByteArray) -> void:
|
||||
## Мощность УМ от УКП 1
|
||||
var arr_power_ukp_1: Array = []
|
||||
|
||||
if (status[0] >> 2) & 1:
|
||||
for i_power in range(6):
|
||||
var power_ukp_1 = status.decode_u16(Constants.POWER_UKP_1 + 2 * i_power)
|
||||
arr_power_ukp_1.append(power_ukp_1)
|
||||
|
||||
if count_packet_1 == 0:
|
||||
power_array_1 = arr_power_ukp_1
|
||||
else:
|
||||
for i in arr_power_ukp_1.size():
|
||||
if arr_power_ukp_1[i] > power_array_1[i]:
|
||||
power_array_1[i] = arr_power_ukp_1[i]
|
||||
|
||||
var power_amplifier: Array = get_tree().get_nodes_in_group('power_amplifier')
|
||||
for i in 6:
|
||||
power_amplifier[i].value1 = '%d' % power_array_1[i]
|
||||
power_amplifier[i].state = STATE_VAL.GOOD if power_array_1[i] > Constants.POWER_THRESHOLD else STATE_VAL.ERROR
|
||||
count_packet_1 += 1
|
||||
|
||||
## Мощность УМ от УКП 2
|
||||
var arr_power_ukp_2: Array = []
|
||||
|
||||
if (status[0] >> 2) & 1:
|
||||
for i_power in range(6):
|
||||
var power_ukp_2 = status.decode_u16(Constants.POWER_UKP_2 + 2 * i_power)
|
||||
arr_power_ukp_2.append(power_ukp_2)
|
||||
|
||||
if count_packet_2 == 0:
|
||||
power_array_2 = arr_power_ukp_2
|
||||
else:
|
||||
for i in arr_power_ukp_2.size():
|
||||
if arr_power_ukp_2[i] > power_array_2[i]:
|
||||
power_array_2[i] = arr_power_ukp_2[i]
|
||||
|
||||
for i in 6:
|
||||
power_amplifier[i+6].value1 = '%d' % power_array_2[i]
|
||||
power_amplifier[i+6].state = STATE_VAL.GOOD if power_array_2[i] > Constants.POWER_THRESHOLD else STATE_VAL.ERROR
|
||||
|
||||
count_packet_2 += 1
|
||||
|
||||
_control_results['power_ukp'] = true
|
||||
for amp in power_amplifier:
|
||||
if amp.state != STATE_VAL.GOOD:
|
||||
_control_results['power_ukp'] = false
|
||||
break
|
||||
|
||||
|
||||
func _on_control_fs(mode: bool) -> void:
|
||||
var parts = currecnt_unit.split('-')
|
||||
var last_part = parts[-1]
|
||||
var angle: float = 0.0 # -> ПРД-В1; 90.0 -> ПРД-В2; 180.0 -> ПРД-В3; 270.0 -> ПРД-В4
|
||||
var sector_1: float = 12 # -> ПРД-В1; 15 -> ПРД-В2; 14 -> ПРД-В3; 13 -> ПРД-В4;
|
||||
var sector_2: float = 16 # -> ПРД-В1; 19 -> ПРД-В2; 18 -> ПРД-В3; 17 -> ПРД-В4;
|
||||
if last_part == '2в':
|
||||
angle = 90.0
|
||||
sector_1 = 15
|
||||
sector_2 = 19
|
||||
elif last_part == '3в':
|
||||
angle = 180.0
|
||||
sector_1 = 14
|
||||
sector_2 = 18
|
||||
elif last_part == '4в':
|
||||
angle = 270.0
|
||||
sector_1 = 13
|
||||
sector_2 = 17
|
||||
|
||||
var interfer_name: String = 'k1' if mode else 'off'
|
||||
var freq_1: float = 1227.0 # ФС_1
|
||||
var freq_2: float = 1575.0 # ФС_2
|
||||
var width_1: float = 110.0 # ФС_1
|
||||
var width_2: float = 110.0 # ФС_2
|
||||
|
||||
var fs_arr: Array = [[angle, freq_1, width_1, sector_1], [angle, freq_2, width_2, sector_2]]
|
||||
signaller.emit_signal('interfer_init', interfer_name, fs_arr, Constants.POWER_UM)
|
||||
|
||||
|
||||
func on_stop_control() -> void:
|
||||
print_debug('Остановка контроля ПРД')
|
||||
_on_control_fs(false)
|
||||
on_control_result()
|
||||
|
||||
|
||||
func on_fs_update_state(packet_type_7: Dictionary) -> void:
|
||||
var parts = currecnt_unit.split('-')
|
||||
var last_part = parts[-1] # Прибор
|
||||
|
||||
# Словарь для маппинга: ключ - номер FS, значение - целевая нода и условие прибора
|
||||
var fs_mapping = {
|
||||
12: { 'node': $kasseta_FS_VD/ref_A3, 'condition': last_part == '1в' },
|
||||
13: { 'node': $kasseta_FS_VD/ref_A3, 'condition': last_part == '4в' },
|
||||
14: { 'node': $kasseta_FS_VD/ref_A3, 'condition': last_part == '3в' },
|
||||
15: { 'node': $kasseta_FS_VD/ref_A3, 'condition': last_part == '2в' },
|
||||
16: { 'node': $kasseta_FS_VD/ref_A4, 'condition': last_part == '1в' },
|
||||
17: { 'node': $kasseta_FS_VD/ref_A4, 'condition': last_part == '4в' },
|
||||
18: { 'node': $kasseta_FS_VD/ref_A4, 'condition': last_part == '3в' },
|
||||
19: { 'node': $kasseta_FS_VD/ref_A4, 'condition': last_part == '2в' }
|
||||
}
|
||||
for fs in packet_type_7:
|
||||
if fs in fs_mapping and fs_mapping[fs]['condition']:
|
||||
var data = packet_type_7[fs]
|
||||
var state = STATE_VAL.GOOD if data.isg == 1 else STATE_VAL.ERROR if data.isg == 0 else STATE_VAL.NONE
|
||||
fs_mapping[fs]['node'].state = state
|
||||
if fs < 16:
|
||||
_control_results['fs_1'] = (data.isg == 1)
|
||||
else:
|
||||
_control_results['fs_2'] = (data.isg == 1)
|
||||
if _control_results['fs_1'] and _control_results['fs_2'] and not flag_timer_started:
|
||||
on_ug_setting()
|
||||
control_timer.wait_time = Constants.TIMER_DELAY
|
||||
control_timer.start()
|
||||
flag_timer_started = true
|
||||
|
||||
|
||||
func on_ug_setting() -> void:
|
||||
var unit_name = get_meta('unit_name')[0]
|
||||
var unit_prd = network.units[unit_name]
|
||||
|
||||
if unit_prd.isa_ports.has(Constants.ADDR_UG_LITERA_1):
|
||||
ug_work_1 = unit_prd.isa_ports[Constants.ADDR_UG_LITERA_1]
|
||||
if unit_prd.isa_ports.has(Constants.ADDR_UG_LITERA_2):
|
||||
ug_work_2 = unit_prd.isa_ports[Constants.ADDR_UG_LITERA_2]
|
||||
|
||||
const dou = 0x3
|
||||
const att = 0x7
|
||||
var result = ((att & 0x07) << 3) | (dou & 0x07)
|
||||
|
||||
var prd_module = prd.prd_dict[unit_prd.name]
|
||||
prd_module.cmd_array.append([unit_prd.CmdCode.WRITE_ISA, [Constants.ADDR_UG_LITERA_1, result, Constants.ADDR_UG_LITERA_2, result, 0x120, 6666]])
|
||||
|
||||
|
||||
func on_mode_changed(in_tree: bool) -> void:
|
||||
if not in_tree:
|
||||
queue_free()
|
||||
|
||||
|
||||
func on_control_result() -> void:
|
||||
var result: bool = true
|
||||
|
||||
for key in _control_results:
|
||||
if not _control_results[key]:
|
||||
if key == 'fs_1':
|
||||
$kasseta_FS_VD/ref_A3.state = STATE_VAL.ERROR
|
||||
if key == 'fs_2':
|
||||
$kasseta_FS_VD/ref_A4.state = STATE_VAL.ERROR
|
||||
result = false
|
||||
print_debug('%s false' % key)
|
||||
|
||||
var parts = currecnt_unit.split('-')
|
||||
var last_part = parts[-1] # Прибор
|
||||
if result:
|
||||
$control_result.text = 'Прибор ПРД-%s исправен' % last_part
|
||||
$control_result.add_theme_color_override('font_color', Color.AQUAMARINE)
|
||||
else:
|
||||
$control_result.text = 'Прибор ПРД-%s неисправен' % last_part
|
||||
$control_result.add_theme_color_override('font_color', Color.CRIMSON)
|
||||
await get_tree().create_timer(Constants.TIMER_DELAY).timeout
|
||||
flag_timer_started = false
|
||||
#
|
||||
#func on_control_result() -> void:
|
||||
#var result: bool = true
|
||||
#
|
||||
#for key in _control_results:
|
||||
#if not _control_results[key]:
|
||||
#if key == 'fs_1':
|
||||
#$kasseta_FS_VD/ref_A3.state = STATE_VAL.ERROR
|
||||
#if key == 'fs_2':
|
||||
#$kasseta_FS_VD/ref_A4.state = STATE_VAL.ERROR
|
||||
#result = false
|
||||
#print_debug('%s false' % key)
|
||||
#
|
||||
#var parts = currecnt_unit.split('-')
|
||||
#var last_part = parts[-1] # Прибор
|
||||
#if result:
|
||||
#$control_result.text = 'Прибор ПРД-%s исправен' % last_part
|
||||
#$control_result.add_theme_color_override('font_color', Color.AQUAMARINE)
|
||||
#else:
|
||||
#$control_result.text = 'Прибор ПРД-%s неисправен' % last_part
|
||||
#$control_result.add_theme_color_override('font_color', Color.CRIMSON)
|
||||
#await get_tree().create_timer(Constants.TIMER_DELAY).timeout
|
||||
#flag_timer_started = false
|
||||
|
||||
@@ -44,7 +44,7 @@ offset_right = 15.0
|
||||
offset_bottom = 30.0
|
||||
script = ExtResource("1_c20s6")
|
||||
|
||||
[node name="maa2000_A22" parent="." groups=["default_reset"] instance=ExtResource("2_xpo4b")]
|
||||
[node name="maa2000_A22" parent="." groups=["default_reset", "power_supply"] instance=ExtResource("2_xpo4b")]
|
||||
layout_mode = 2
|
||||
offset_left = 485.0
|
||||
offset_top = 877.0
|
||||
@@ -52,6 +52,7 @@ offset_right = 652.0
|
||||
offset_bottom = 949.0
|
||||
fname = "MAA2000"
|
||||
rname = "A22"
|
||||
metadata/ip = "maa2000_1"
|
||||
|
||||
[node name="dou4_A5" parent="." groups=["default_reset"] instance=ExtResource("2_xpo4b")]
|
||||
layout_mode = 2
|
||||
@@ -62,7 +63,7 @@ offset_bottom = 877.0
|
||||
fname = "ДОУ-4"
|
||||
rname = "A5"
|
||||
|
||||
[node name="maa2000_A23" parent="." groups=["default_reset"] instance=ExtResource("2_xpo4b")]
|
||||
[node name="maa2000_A23" parent="." groups=["default_reset", "power_supply"] instance=ExtResource("2_xpo4b")]
|
||||
layout_mode = 2
|
||||
offset_left = 8.0
|
||||
offset_top = 877.0
|
||||
@@ -70,6 +71,7 @@ offset_right = 175.0
|
||||
offset_bottom = 949.0
|
||||
fname = "MAA2000"
|
||||
rname = "A23"
|
||||
metadata/ip = "maa2000_2"
|
||||
|
||||
[node name="dou5_A6" parent="." groups=["default_reset"] instance=ExtResource("2_xpo4b")]
|
||||
layout_mode = 2
|
||||
@@ -135,29 +137,32 @@ patch_margin_bottom = 16
|
||||
script = ExtResource("6_os4mt")
|
||||
fname = "Кассета П-1В"
|
||||
|
||||
[node name="ref_A19" parent="kasseta_P_1" groups=["default_reset"] instance=ExtResource("7_38u2b")]
|
||||
[node name="ref_A19" parent="kasseta_P_1" groups=["default_reset", "power_supply"] instance=ExtResource("7_38u2b")]
|
||||
offset_left = 9.0
|
||||
offset_top = 33.0
|
||||
offset_right = 59.0
|
||||
offset_bottom = 183.0
|
||||
fname = "ИП9-50"
|
||||
rname = "A19"
|
||||
metadata/ip = "ip9_50_1"
|
||||
|
||||
[node name="ref_A20" parent="kasseta_P_1" groups=["default_reset"] instance=ExtResource("7_38u2b")]
|
||||
[node name="ref_A20" parent="kasseta_P_1" groups=["default_reset", "power_supply"] instance=ExtResource("7_38u2b")]
|
||||
offset_left = 59.0
|
||||
offset_top = 33.0
|
||||
offset_right = 109.0
|
||||
offset_bottom = 183.0
|
||||
fname = "ИП9-50"
|
||||
rname = "A20"
|
||||
metadata/ip = "ip9_50_2"
|
||||
|
||||
[node name="ref_A21" parent="kasseta_P_1" groups=["default_reset"] instance=ExtResource("7_38u2b")]
|
||||
[node name="ref_A21" parent="kasseta_P_1" groups=["default_reset", "power_supply"] instance=ExtResource("7_38u2b")]
|
||||
offset_left = 109.0
|
||||
offset_top = 33.0
|
||||
offset_right = 159.0
|
||||
offset_bottom = 183.0
|
||||
fname = "ИП12-50"
|
||||
rname = "A21"
|
||||
metadata/ip = "ip12_50_1"
|
||||
|
||||
[node name="lbl_fname" type="Label" parent="kasseta_P_1"]
|
||||
self_modulate = Color(1, 1, 1, 0.62)
|
||||
|
||||
@@ -25,50 +25,56 @@ text = "Кассета У5"
|
||||
horizontal_alignment = 1
|
||||
vertical_alignment = 1
|
||||
|
||||
[node name="ref_A24" parent="." instance=ExtResource("3_wtlpi")]
|
||||
[node name="ref_A24" parent="." groups=["power_supply"] instance=ExtResource("3_wtlpi")]
|
||||
offset_left = 5.0
|
||||
offset_top = 32.0
|
||||
offset_right = 55.0
|
||||
offset_bottom = 182.0
|
||||
fname = "ИП5-25"
|
||||
rname = "A31"
|
||||
metadata/ip = "ip5_25"
|
||||
|
||||
[node name="ref_A30" parent="." instance=ExtResource("3_wtlpi")]
|
||||
[node name="ref_A30" parent="." groups=["y-5"] instance=ExtResource("3_wtlpi")]
|
||||
offset_left = 55.0
|
||||
offset_top = 32.0
|
||||
offset_right = 105.0
|
||||
offset_bottom = 182.0
|
||||
fname = "ЯУ-07Б"
|
||||
rname = "A37"
|
||||
metadata/y5 = "yau07"
|
||||
|
||||
[node name="ref_A26" parent="." instance=ExtResource("3_wtlpi")]
|
||||
[node name="ref_A26" parent="." groups=["y-5"] instance=ExtResource("3_wtlpi")]
|
||||
offset_left = 105.0
|
||||
offset_top = 32.0
|
||||
offset_right = 155.0
|
||||
offset_bottom = 182.0
|
||||
fname = "ЭМС-Г"
|
||||
rname = "A33"
|
||||
metadata/y5 = "ems"
|
||||
|
||||
[node name="ref_A27" parent="." instance=ExtResource("3_wtlpi")]
|
||||
[node name="ref_A27" parent="." groups=["y-5"] instance=ExtResource("3_wtlpi")]
|
||||
offset_left = 155.0
|
||||
offset_top = 32.0
|
||||
offset_right = 205.0
|
||||
offset_bottom = 182.0
|
||||
fname = "УГ"
|
||||
rname = "A34"
|
||||
metadata/y5 = "ug"
|
||||
|
||||
[node name="ref_A28" parent="." instance=ExtResource("3_wtlpi")]
|
||||
[node name="ref_A28" parent="." groups=["y-5"] instance=ExtResource("3_wtlpi")]
|
||||
offset_left = 205.0
|
||||
offset_top = 32.0
|
||||
offset_right = 255.0
|
||||
offset_bottom = 182.0
|
||||
fname = "УКП"
|
||||
rname = "A35"
|
||||
metadata/y5 = "ukp1"
|
||||
|
||||
[node name="ref_A29" parent="." instance=ExtResource("3_wtlpi")]
|
||||
[node name="ref_A29" parent="." groups=["y-5"] instance=ExtResource("3_wtlpi")]
|
||||
offset_left = 254.0
|
||||
offset_top = 32.0
|
||||
offset_right = 304.0
|
||||
offset_bottom = 182.0
|
||||
fname = "УКП"
|
||||
rname = "A36"
|
||||
metadata/y5 = "ukp2"
|
||||
|
||||
@@ -25,50 +25,56 @@ text = "Кассета У5"
|
||||
horizontal_alignment = 1
|
||||
vertical_alignment = 1
|
||||
|
||||
[node name="ref_A24" parent="." instance=ExtResource("3_picsk")]
|
||||
[node name="ref_A24" parent="." groups=["power_supply"] instance=ExtResource("3_picsk")]
|
||||
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="." instance=ExtResource("3_picsk")]
|
||||
[node name="ref_A30" parent="." groups=["y-5"] instance=ExtResource("3_picsk")]
|
||||
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="." instance=ExtResource("3_picsk")]
|
||||
[node name="ref_A26" parent="." groups=["y-5"] instance=ExtResource("3_picsk")]
|
||||
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="." instance=ExtResource("3_picsk")]
|
||||
[node name="ref_A27" parent="." groups=["y-5"] instance=ExtResource("3_picsk")]
|
||||
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="." instance=ExtResource("3_picsk")]
|
||||
[node name="ref_A28" parent="." groups=["y-5"] instance=ExtResource("3_picsk")]
|
||||
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="." instance=ExtResource("3_picsk")]
|
||||
[node name="ref_A29" parent="." groups=["y-5"] instance=ExtResource("3_picsk")]
|
||||
offset_left = 254.0
|
||||
offset_top = 32.0
|
||||
offset_right = 304.0
|
||||
offset_bottom = 182.0
|
||||
fname = "УКП"
|
||||
rname = "A29"
|
||||
metadata/y5 = "ukp2"
|
||||
|
||||
@@ -1,5 +1,9 @@
|
||||
class TestPRD extends Node:
|
||||
const RAY_25_1:= 'ray_25_1'
|
||||
const RAY_25_2:= 'ray_25_2'
|
||||
const RAY_25_3:= 'ray_25_3'
|
||||
const RAY_25_4:= 'ray_25_4'
|
||||
const RAY_25_5:= 'ray_25_5'
|
||||
const RAY_25_6:= 'ray_25_6'
|
||||
const RAY_25_7:= 'ray_25_7'
|
||||
enum STATE_VAL { NONE = 0, GOOD = 1, ERROR = 2 }
|
||||
@@ -7,7 +11,14 @@ class TestPRD extends Node:
|
||||
INIT,
|
||||
FS_TURN_ON,
|
||||
FS_WORK,
|
||||
UG_SET,
|
||||
CHEK_KASSETA_Y5,
|
||||
UG_SET_RAY_0,
|
||||
UG_SET_RAY_1,
|
||||
UG_SET_RAY_2,
|
||||
UG_SET_RAY_3,
|
||||
UG_SET_RAY_4,
|
||||
UG_SET_RAY_5,
|
||||
UG_SET_RAY_6,
|
||||
UM_RUN,
|
||||
FS_TURN_OFF,
|
||||
STOP_CONTROL,
|
||||
@@ -32,28 +43,36 @@ class TestPRD extends Node:
|
||||
|
||||
var power_result: Dictionary = {
|
||||
RAY_25_1: [],
|
||||
RAY_25_2: [],
|
||||
RAY_25_3: [],
|
||||
RAY_25_4: [],
|
||||
RAY_25_5: [],
|
||||
RAY_25_6: [],
|
||||
RAY_25_7: [],
|
||||
}
|
||||
var constants: Dictionary
|
||||
var pribor_config: Dictionary
|
||||
var fs_parameters: Dictionary
|
||||
var block_config: 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 = 1
|
||||
var current_fs: int
|
||||
var flag_check_dkm: bool
|
||||
var flag_timer_started: bool
|
||||
var ug_online: bool
|
||||
#var ug_online: bool
|
||||
var unit_prd: Object
|
||||
var module_prd: Object
|
||||
var power_amplify: Array
|
||||
var fs_array_node: Array
|
||||
var control_label: Label
|
||||
|
||||
var control_timer: Timer = Timer.new()
|
||||
|
||||
|
||||
## Инициализация аргуметнов
|
||||
func _init(init_data: Dictionary) -> void:
|
||||
control_label = init_data['control_label']
|
||||
power_amplify = init_data['power_amplifiers']
|
||||
@@ -63,28 +82,36 @@ class TestPRD extends Node:
|
||||
constants = init_data['constants']
|
||||
pribor_config = init_data['prd_config']
|
||||
fs_parameters = init_data['fs_params']
|
||||
block_config = init_data['block_ip_prd_config']
|
||||
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']
|
||||
control_results = init_data['control_results']
|
||||
current_fs = init_data['current_fs']
|
||||
block_kasseta_y5_config = init_data['block_kasseta_y5_prd_config']
|
||||
|
||||
|
||||
func _ready() -> void:
|
||||
initialize_connections()
|
||||
setup_timer()
|
||||
|
||||
|
||||
func _process(_delta: float) -> void:
|
||||
pass
|
||||
|
||||
|
||||
## Пакеты от ЯУ-07
|
||||
func on_data_received(unit_pribor: Object) -> void:
|
||||
if not is_inside_tree():
|
||||
return
|
||||
|
||||
var status: PackedByteArray = unit_pribor.status
|
||||
ug_online = (status[0] >> 1) & 1
|
||||
|
||||
block_config = check_block_ip(status, block_config)
|
||||
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)
|
||||
_process_dkm_status(status)
|
||||
|
||||
|
||||
## Пакеты от MP550Service
|
||||
func on_fs_update_state(packet_type_7: Dictionary, fs_mapping: Dictionary, fs_array: Array) -> void:
|
||||
var fs_key: String = FS_KEYS.get(current_fs, '')
|
||||
if fs_key.is_empty():
|
||||
@@ -94,17 +121,32 @@ class TestPRD extends Node:
|
||||
fs_result = on_fs_state(packet_type_7, fs_mapping, fs_result)
|
||||
_update_fs_states(fs_result, fs_array)
|
||||
|
||||
|
||||
##
|
||||
func state_control_machine() -> void:
|
||||
match state:
|
||||
STATE_MASHINE.INIT:
|
||||
_handle_init_state()
|
||||
STATE_MASHINE.FS_TURN_ON:
|
||||
_handle_fs_turn_on_state()
|
||||
STATE_MASHINE.CHEK_KASSETA_Y5:
|
||||
pass
|
||||
|
||||
STATE_MASHINE.FS_WORK:
|
||||
_handle_fs_work_state()
|
||||
STATE_MASHINE.UG_SET:
|
||||
_handle_ug_set_state()
|
||||
STATE_MASHINE.UG_SET_RAY_0:
|
||||
_handle_ug_set_state(0x0)
|
||||
STATE_MASHINE.UG_SET_RAY_1:
|
||||
_handle_ug_set_state(0x1)
|
||||
STATE_MASHINE.UG_SET_RAY_2:
|
||||
_handle_ug_set_state(0x2)
|
||||
STATE_MASHINE.UG_SET_RAY_3:
|
||||
_handle_ug_set_state(0x3)
|
||||
STATE_MASHINE.UG_SET_RAY_4:
|
||||
_handle_ug_set_state(0x4)
|
||||
STATE_MASHINE.UG_SET_RAY_5:
|
||||
_handle_ug_set_state(0x5)
|
||||
STATE_MASHINE.UG_SET_RAY_6:
|
||||
_handle_ug_set_state(0x6)
|
||||
STATE_MASHINE.UM_RUN:
|
||||
flag_timer_started = _handle_um_run_state()
|
||||
STATE_MASHINE.FS_TURN_OFF:
|
||||
@@ -118,38 +160,57 @@ class TestPRD extends Node:
|
||||
if current_fs in [1, 2, 3, 4, 5, 6, 7]:
|
||||
state = STATE_MASHINE.FS_TURN_ON
|
||||
else:
|
||||
on_control_result()
|
||||
control_results = on_control_result(block_ip_config, block_dkm_config, block_fs_config, control_results)
|
||||
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_timer.wait_time = constants.TIMER_DELAY
|
||||
control_timer.start()
|
||||
#control_timer.wait_time = constants.TIMER_DELAY
|
||||
#control_timer.start()
|
||||
state = STATE_MASHINE.FS_WORK
|
||||
|
||||
|
||||
func _handle_fs_work_state() -> void:
|
||||
control_label.text = 'Выполняется проверка ФС-%s' % current_fs
|
||||
if (current_fs == 2 and flag_check_dkm and not flag_timer_started) or \
|
||||
(current_fs == 3 and flag_check_dkm and not flag_timer_started) or \
|
||||
(current_fs == 4 and flag_check_dkm and not flag_timer_started) or \
|
||||
(current_fs == 5 and flag_check_dkm and not flag_timer_started) or \
|
||||
(current_fs == 6 and flag_check_dkm and not flag_timer_started) or \
|
||||
(current_fs == 7 and flag_check_dkm and not flag_timer_started) or \
|
||||
(current_fs == 1 and not flag_timer_started):
|
||||
state = STATE_MASHINE.UG_SET
|
||||
if not module_prd.unit_yau07.online:
|
||||
return
|
||||
if (current_fs == 2 and block_fs_config.fs_2 and not flag_timer_started) or \
|
||||
(current_fs == 3 and block_fs_config.fs_3 and not flag_timer_started) or \
|
||||
(current_fs == 4 and block_fs_config.fs_4 and not flag_timer_started) or \
|
||||
(current_fs == 5 and block_fs_config.fs_5 and not flag_timer_started) or \
|
||||
(current_fs == 6 and block_fs_config.fs_6 and not flag_timer_started) or \
|
||||
(current_fs == 7 and block_fs_config.fs_7 and not flag_timer_started) or \
|
||||
(current_fs == 1 and block_fs_config.fs_1 and not flag_timer_started):
|
||||
state = STATE_MASHINE.UG_SET_RAY_6
|
||||
|
||||
|
||||
func _handle_ug_set_state() -> void:
|
||||
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,
|
||||
}
|
||||
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
|
||||
control_label.text = 'Выполняется настройка угла (%s) и атт (%s, %s, %s)' % [
|
||||
constants.RAY_DOU_NUM,
|
||||
constants.ATT_UM_1,
|
||||
constants.ATT_UM_6,
|
||||
constants.ATT_UM_7,
|
||||
dic_att.RAY_DOU_NUM,
|
||||
dic_att.ATT_UM_1,
|
||||
dic_att.ATT_UM_2,
|
||||
dic_att.ATT_UM_3,
|
||||
]
|
||||
on_ug_setting(module_prd, unit_prd, constants)
|
||||
on_ug_setting(module_prd, unit_prd, dic_att)
|
||||
state = STATE_MASHINE.UM_RUN
|
||||
|
||||
|
||||
@@ -209,12 +270,12 @@ class TestPRD extends Node:
|
||||
|
||||
|
||||
func _process_dkm_status(status: PackedByteArray) -> void:
|
||||
if not control_results.has(_get_current_fs_key()):
|
||||
if not block_fs_config.has(_get_current_fs_key()):
|
||||
return
|
||||
var dkm_bit = _get_dkm_bit_for_current_fs()
|
||||
control_results = check_dkm(status, dkm_bit, control_results)
|
||||
block_dkm_config = check_dkm(status, dkm_bit, block_dkm_config)
|
||||
|
||||
flag_check_dkm = control_results[_get_dkm_key_for_current_fs()]
|
||||
flag_check_dkm = block_dkm_config[_get_dkm_key_for_current_fs()]
|
||||
if flag_check_dkm:
|
||||
power_result[_get_ray_key_for_current_fs()] = power_um_ukp(status, current_fs, power_result[_get_ray_key_for_current_fs()])
|
||||
|
||||
@@ -250,6 +311,10 @@ class TestPRD extends Node:
|
||||
func _get_ray_key_for_current_fs() -> String:
|
||||
match current_fs:
|
||||
1: return RAY_25_1
|
||||
2: return RAY_25_2
|
||||
3: return RAY_25_3
|
||||
4: return RAY_25_4
|
||||
5: return RAY_25_5
|
||||
6: return RAY_25_6
|
||||
7: return RAY_25_7
|
||||
_: return ''
|
||||
@@ -261,30 +326,56 @@ class TestPRD extends Node:
|
||||
if fs_result.has(fs_meta):
|
||||
var new_state = fs_result[fs_meta]
|
||||
fs.state = new_state
|
||||
control_results[fs_meta] = new_state
|
||||
block_fs_config[fs_meta] = new_state
|
||||
|
||||
|
||||
func on_stop_control() -> void:
|
||||
state = STATE_MASHINE.FS_TURN_OFF
|
||||
|
||||
|
||||
static func on_control_result() -> void:
|
||||
print('on_control_result')
|
||||
static func on_control_result(ip_config: Dictionary, dkm_config: Dictionary, fs_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
|
||||
|
||||
|
||||
## Установка угла и аттенюации для УМ
|
||||
static func on_ug_setting(prd_module: Object, prd_unit: Object, settings_ug: Dictionary) -> void:
|
||||
var result_1 = ((settings_ug.ATT_UM_6 & 0x07) << 3) | (settings_ug.RAY_DOU_NUM & 0x07)
|
||||
var result_2 = ((settings_ug.ATT_UM_7 & 0x07) << 3) | (settings_ug.RAY_DOU_NUM & 0x07)
|
||||
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_module.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_1]])
|
||||
settings_ug.ADDR_UG_LITERA_2, result_2,
|
||||
settings_ug.ADDR_UG_LITERA_3, settings_ug.ATT_UM_3]])
|
||||
|
||||
prd_module.cmd_array.append([prd_unit.CmdCode.READ_ISA, [settings_ug.ADDR_UG_LITERA_1, settings_ug.ADDR_UG_LITERA_2, settings_ug.ADDR_UG_LITERA_3]])
|
||||
|
||||
|
||||
static func power_um_control_result(ctrl_results: Dictionary, constan: Dictionary, pwr_result: Dictionary) -> Dictionary:
|
||||
ctrl_results['power_um'] = true
|
||||
|
||||
for amp_array in pwr_result.values():
|
||||
if amp_array.size() == 0:
|
||||
ctrl_results['power_um'] = false
|
||||
return ctrl_results
|
||||
|
||||
for amp_array in pwr_result.values():
|
||||
for value in amp_array:
|
||||
if value < constan.TEMP_THRESHOLD:
|
||||
@@ -310,22 +401,33 @@ class TestPRD extends Node:
|
||||
angle,
|
||||
params.freq,
|
||||
params.width,
|
||||
sectors[cur_fs - 1] if cur_fs == 1 else sectors[cur_fs - 5]
|
||||
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]
|
||||
])
|
||||
|
||||
signaller.emit_signal('interfer_init', interfer_name, fs_arr, power_um)
|
||||
|
||||
|
||||
## Проверка касет П1 и ИП МА2000
|
||||
static func check_block_ip(status_prd: PackedByteArray, block_ip_config: Dictionary) -> Dictionary:
|
||||
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 block_ip_config:
|
||||
var bit: int = block_ip_config[block][0]
|
||||
for block in ip_config:
|
||||
var bit: int = ip_config[block][0]
|
||||
if ug_valid:
|
||||
var status = status_prd[byte_dry] >> bit & 1
|
||||
block_ip_config[block][1] = false if status else true
|
||||
return block_ip_config
|
||||
ip_config[block][1] = false if status else true
|
||||
return ip_config
|
||||
|
||||
|
||||
## Проверка кассеты у-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_temperature_um(status_prd: PackedByteArray, power_amplifier: Array) -> void:
|
||||
@@ -338,6 +440,8 @@ 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
|
||||
|
||||
if ukp1_online:
|
||||
var tmp_1: int
|
||||
var temperature_ukp_1: int
|
||||
@@ -345,17 +449,21 @@ class TestPRD extends Node:
|
||||
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
|
||||
# Темпуратура от УМ литеры 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
|
||||
|
||||
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
|
||||
|
||||
var ukp2_online = (status_prd[0] >> 3) & 1
|
||||
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)
|
||||
power_amplifier[i_temp+7].value0 = tmp_2
|
||||
if power_amplifier.size() > 12:
|
||||
power_amplifier[i_temp+7].value0 = tmp_2
|
||||
else:
|
||||
power_amplifier[i_temp+6].value0 = tmp_2
|
||||
|
||||
|
||||
## Проверка ДКМ
|
||||
static func check_dkm(status_prd: PackedByteArray, bit_dkm: int, dkm_result: Dictionary) -> Dictionary:
|
||||
@@ -363,6 +471,14 @@ class TestPRD extends Node:
|
||||
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:
|
||||
@@ -373,53 +489,49 @@ class TestPRD extends Node:
|
||||
##
|
||||
static func _create_fs_mapping(s_name: String) -> Dictionary:
|
||||
var suffixes: Dictionary = {
|
||||
0: 'к', 1: 'к', 2: 'к', 3: 'к',
|
||||
4: 'н', 5: 'н', 6: 'н', 7: 'н',
|
||||
8: 'н', 9: 'н', 10: 'н', 11: 'н',
|
||||
12: 'в', 13: 'в', 14: 'в', 15: 'в',
|
||||
16: 'в', 17: 'в', 18: 'в', 19: 'в',
|
||||
20: 'к', 21: 'к', 22: 'к', 23: 'к',
|
||||
24: 'к', 25: 'к', 26: 'к', 27: 'к',
|
||||
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:
|
||||
var num_part = str((fs_num % 4) + 1)
|
||||
mapping[fs_num] = {'condition': s_name == num_part + suffixes[fs_num]}
|
||||
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}
|
||||
{'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]
|
||||
|
||||
# Проверяем все правила для текущего FS
|
||||
for rule_key in FS_RULES:
|
||||
var rule = FS_RULES[rule_key]
|
||||
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.range[0] and fs_num < rule.range[1]) and results.has(rule.key)
|
||||
return bool(fs_num >= rule.min and fs_num < rule.max) and results.has(rule.key)
|
||||
|
||||
|
||||
##
|
||||
@@ -436,6 +548,30 @@ class TestPRD extends Node:
|
||||
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
|
||||
|
||||
Reference in New Issue
Block a user