Compare commits
40 Commits
0670bf4b09
...
master
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
de876c9a76 | ||
|
|
d51c16b98e | ||
|
|
185b940433 | ||
|
|
a4fe9409c7 | ||
|
|
c8f125b1a1 | ||
|
|
30dc8a2592 | ||
|
|
a8b085a514 | ||
|
|
3fb2601aca | ||
|
|
38c2aa9f80 | ||
|
|
f3f593a597 | ||
|
|
f39212232a | ||
|
|
2d23772546 | ||
|
|
f0685d70e0 | ||
|
|
e509f85f5c | ||
|
|
dc362ad26f | ||
|
|
208406971f | ||
|
|
9eb31c0d4a | ||
|
|
033e9869f1 | ||
|
|
5e78e06626 | ||
|
|
56a0fd8af8 | ||
|
|
28fea4035c | ||
|
|
e1cd37bcfd | ||
|
|
dcd806309c | ||
|
|
3915bd59d1 | ||
|
|
ae96a8aa97 | ||
|
|
9aeacea4d7 | ||
|
|
22fe43a062 | ||
|
|
cee75d02cf | ||
|
|
4f3f4ff7f8 | ||
|
|
3cbba93658 | ||
|
|
9d476859b1 | ||
|
|
64cbf59ac6 | ||
|
|
77b822f3b8 | ||
|
|
eb0978599a | ||
|
|
51f3e961c1 | ||
|
|
5657892887 | ||
|
|
606f5ea689 | ||
|
|
6c62419bdb | ||
|
|
5991a079c7 | ||
|
|
2a29e4bd54 |
@@ -36,4 +36,4 @@
|
||||
- После клонирования запустить скрипт `git-hooks-config.sh`
|
||||
- В среде **Windows** запуск скрипта `git-hooks-config.sh` производить из оболочки `git bash`
|
||||
- Нужно обновить `settings.json`
|
||||
- поиск циклических зависимостей
|
||||
- поиск циклических зависимостей (не реализованно)
|
||||
|
||||
@@ -28,7 +28,7 @@ interfer/center_offset=Vector2(200, 225)
|
||||
interfer/default_color0=Color(0.38, 0.47, 0.51, 1)
|
||||
interfer/default_color1=Color(0.39, 0.44, 0.5, 1)
|
||||
interfer/select_color=Color(1, 1, 1, 1)
|
||||
interfer/interfer_color=Color(0.92379, 0.0965192, 0.249261, 1)
|
||||
interfer/interfer_color=Color(0.9, 0.1, 0.25, 0.9)
|
||||
interfer/resend_timeout=1000.0
|
||||
config/external_cu=false
|
||||
config/unit_rr_request_period=20.0
|
||||
@@ -36,7 +36,7 @@ config/kems_files_path="user://kems/"
|
||||
config/emsg_files_path="user://emsg/"
|
||||
config/settings_path="user://settings.json"
|
||||
config/unit_bpo_request_period=20.0
|
||||
interfer/emit_color=Color(0.92549, 0.0980392, 0.25098, 0.509804)
|
||||
interfer/emit_color=Color(0.9, 0.1, 0.25, 0.5)
|
||||
interfer/closed_sectors=Color(0, 0, 0, 1)
|
||||
|
||||
[autoload]
|
||||
|
||||
@@ -35,8 +35,10 @@ func get_radius_outter() -> float: return material.get('shader_parameter/radius
|
||||
func get_radius_inner_0() -> float: return material.get('shader_parameter/radius_inner_0')
|
||||
func get_radius_inner_1() -> float: return material.get('shader_parameter/radius_inner_1')
|
||||
|
||||
func get_band_colors(val: Array): return material.get('shader_parameter/ant_band_c')
|
||||
func get_band_failures(val: Array): return material.get('shader_parameter/ant_band_m')
|
||||
func set_band_colors(val: Array): material.set('shader_parameter/ant_band_c', val)
|
||||
|
||||
func set_band_failures(val: Array): material.set('shader_parameter/ant_band_m', val)
|
||||
|
||||
## Добавляет сектор запрета[br]
|
||||
## [param id] - Индекс сектора запрета.[br]
|
||||
|
||||
@@ -8,7 +8,7 @@ const TableHeader = preload('res://table/header.tscn') ## Ячейка за
|
||||
const TABLE_HEADER = [ TableHeader, TableHeader, TableHeader , TableHeader ] ## Описание ряда заголовка.
|
||||
const TABLE_ROW = [ CellLineEdit, CellLineEdit, CellLineEdit , CellLineEdit ] ## Описание ряда.
|
||||
const TABLE_HEADERS_TEXT = ['№', 'Название', 'Пеленг', 'Состояние' ] ## Заголовки таблицы.
|
||||
const TABLE_COLUMN_SIZE = [ 65, 100, 90, 195 ] ## Ширины колонок.
|
||||
const TABLE_COLUMN_SIZE = [ 65, 100, 90, 170 ] ## Ширины колонок.
|
||||
|
||||
## Состояние выполнения сеанса помехи
|
||||
const INTERFER_STATE = {
|
||||
@@ -122,7 +122,8 @@ func on_interfer_new(ecm, table_index):
|
||||
# Будем надеяться, что отложенные вызовы производятся в том же порядке
|
||||
$table.call_deferred('clear_rows_selected')
|
||||
$table.call_deferred('set_row_selected', i_row, true)
|
||||
signaller.emit_signal('interfer_selected', ecm)
|
||||
if not interfer.auto_enabled:
|
||||
signaller.emit_signal('interfer_selected', ecm)
|
||||
|
||||
|
||||
func on_interfer_off(ecm, table_index):
|
||||
|
||||
@@ -49,7 +49,7 @@ offset_top = 33.0
|
||||
offset_right = 155.0
|
||||
offset_bottom = 183.0
|
||||
fname = "Блок ФС-2"
|
||||
rname = "A6"
|
||||
rname = "A2"
|
||||
|
||||
[node name="ref_A6" parent="." groups=["default_reset", "fs_group"] instance=ExtResource("3_kqnvt")]
|
||||
offset_left = 155.0
|
||||
@@ -57,7 +57,7 @@ offset_top = 33.0
|
||||
offset_right = 205.0
|
||||
offset_bottom = 183.0
|
||||
fname = "Модуль ФС"
|
||||
rname = "A3"
|
||||
rname = "A5"
|
||||
metadata/fs = "fs_6"
|
||||
|
||||
[node name="ref_A5" parent="." groups=["default_reset", "fs_group"] instance=ExtResource("3_kqnvt")]
|
||||
@@ -66,7 +66,7 @@ offset_top = 33.0
|
||||
offset_right = 255.0
|
||||
offset_bottom = 183.0
|
||||
fname = "Модуль ФС"
|
||||
rname = "A2"
|
||||
rname = "A3"
|
||||
metadata/fs = "fs_7"
|
||||
|
||||
[node name="ref_A7" parent="." groups=["default_reset"] instance=ExtResource("3_kqnvt")]
|
||||
@@ -75,4 +75,4 @@ offset_top = 33.0
|
||||
offset_right = 305.0
|
||||
offset_bottom = 183.0
|
||||
fname = "Блок ФС-6"
|
||||
rname = "A5"
|
||||
rname = "A6"
|
||||
|
||||
@@ -1,46 +1,131 @@
|
||||
@tool
|
||||
extends 'res://scenes/контроль/прибор.gd'
|
||||
|
||||
const constants_k: Dictionary = {
|
||||
'POWER_UKP_1': 31,
|
||||
'POWER_UKP_2': 63,
|
||||
'DKM_BIT_1': 0,
|
||||
'DKM_BIT_6': 5,
|
||||
'DKM_BIT_7': 6,
|
||||
'BASE_ADDR_EMS_G': 0x120,
|
||||
'ADDR_UG_LITERA_1': 0x106,
|
||||
'ADDR_UG_LITERA_2': 0x108,
|
||||
'ADDR_UG_LITERA_3': 0x10A,
|
||||
'TEMP_THRESHOLD': 40,
|
||||
'POWER_THRESHOLD': 40,
|
||||
'RAY_DOU_NUM': 0x3,
|
||||
'ATT_UM_1': 0x0,
|
||||
'ATT_UM_6': 0x3,
|
||||
'ATT_UM_7': 0x2,
|
||||
'POWER_UM': 100,
|
||||
'TIMER_DELAY': 10.0,
|
||||
'STATE_MASHINE_TIMER': 0.3,
|
||||
}
|
||||
# Конфигурация параметров для каждого прибора
|
||||
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]},
|
||||
}
|
||||
# Конфигурация частот и ширин для каждого ФС
|
||||
const FS_PARAMS := {
|
||||
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],
|
||||
'ip5_25': [7, false],
|
||||
}
|
||||
var block_kasseta_y5_prd_config_k: = {
|
||||
'yau07': false,
|
||||
'ems': false,
|
||||
'ug': false,
|
||||
'ukp1': false,
|
||||
'ukp2': false,
|
||||
}
|
||||
# Основные переменные
|
||||
var start_litera: int = 1
|
||||
var ug_work_1: int = 3 ## Аттенюация усилителей мощности
|
||||
var ug_work_2: int = 2 ## Аттенюация усилителей мощности
|
||||
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_1': false,
|
||||
'dkm_6': false,
|
||||
'dkm_7': false,
|
||||
'dou_6': false,
|
||||
'dou_7': false,
|
||||
'fs_1': 2,
|
||||
'fs_6': 2,
|
||||
'fs_7': 2,
|
||||
}
|
||||
|
||||
var test_control_k = preload('res://scripts/pribor-prd.gd')
|
||||
var ctrl_pos = 30
|
||||
|
||||
|
||||
func _ready() -> void:
|
||||
if Engine.is_editor_hint():
|
||||
return
|
||||
var unit_name = get_meta('unit_name')[0]
|
||||
var prd_k_module = prd.prd_dict[unit_name]
|
||||
unit_prd_k = prd_k_module.unit_control
|
||||
var power_amplifier: Array = get_tree().get_nodes_in_group('power_amplifier')
|
||||
for temp in power_amplifier:
|
||||
temp.value1 = -70
|
||||
unit_prd_k.connect('control_is_over', Callable(self, 'on_press_device'))
|
||||
#unit_prd_k.power_amplify = power_amplifier
|
||||
on_press_device()
|
||||
|
||||
|
||||
func _process(_delta: float) -> void:
|
||||
if Engine.is_editor_hint():
|
||||
return
|
||||
set_frame($input_0, unit_prd_k.ems_input_1)
|
||||
set_frame($input_1, unit_prd_k.ems_input_2)
|
||||
set_frame($input_2, unit_prd_k.ems_input_lit_1)
|
||||
set_frame($output_0, unit_prd_k.ems_output_1)
|
||||
set_frame($output_1, unit_prd_k.ems_output_2)
|
||||
set_frame($output_2, unit_prd_k.ems_output_lit_1)
|
||||
|
||||
|
||||
func set_frame(node_frame: Node, val: int): node_frame.set_frame(val)
|
||||
|
||||
|
||||
func start_control() -> void:
|
||||
initialize_connections()
|
||||
setup_timer()
|
||||
set_default_state()
|
||||
find_labels(self)
|
||||
|
||||
|
||||
func on_state_mashine() -> void:
|
||||
control_prd_k.state_control_machine()
|
||||
|
||||
|
||||
func initialize_connections() -> void:
|
||||
var unit_name = get_meta('unit_name')[0]
|
||||
prd_k_module = prd.prd_dict[unit_name]
|
||||
unit_prd_k = prd_k_module.unit_yau07
|
||||
|
||||
unit_prd_k.connect('line_changed', Callable(self, 'on_line_changed'))
|
||||
var power_amplifiers: Array = get_tree().get_nodes_in_group('power_amplifier')
|
||||
var init_data: Dictionary = {
|
||||
'control_label': $control_result,
|
||||
'power_amplifiers': power_amplifiers,
|
||||
'unit_prd': unit_prd_k,
|
||||
'module_prd' : prd_k_module,
|
||||
'constants': constants_k,
|
||||
'prd_config': PRIBOR_CONFIG,
|
||||
'fs_params': FS_PARAMS,
|
||||
'block_ip_prd_config': block_ip_config_k,
|
||||
'block_kasseta_y5_prd_config': block_kasseta_y5_prd_config_k,
|
||||
'control_results': control_results_k,
|
||||
'current_litera': start_litera,
|
||||
}
|
||||
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'))
|
||||
|
||||
|
||||
func setup_timer() -> void:
|
||||
add_child(mashine_timer)
|
||||
mashine_timer.connect('timeout', Callable(self, 'on_state_mashine'))
|
||||
mashine_timer.wait_time = constants_k.STATE_MASHINE_TIMER
|
||||
mashine_timer.start()
|
||||
|
||||
|
||||
func set_default_state() -> void:
|
||||
for group in get_tree().get_nodes_in_group('default_reset'):
|
||||
group.state = STATE_VAL.NONE
|
||||
@@ -52,121 +137,116 @@ func set_default_state() -> void:
|
||||
func _enter_tree() -> void:
|
||||
if Engine.is_editor_hint():
|
||||
return
|
||||
$control_result.text = 'Ожидается запуск контроля ...' # TODO: Необходимо сделать пулл сообщений
|
||||
$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:
|
||||
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]])
|
||||
prd_k_module.cmd_array.append([unit_prd_k.CmdCode.WRITE_ISA, [constants_k.ADDR_UG_LITERA_1, ug_work_1, constants_k.ADDR_UG_LITERA_2, ug_work_2, constants_k.ADDR_UG_LITERA_3, ug_work_3]])
|
||||
|
||||
|
||||
static func temperature_fill(temperature_arr_node: Array, temperature_dic: Dictionary)->void:
|
||||
for i_node_temperature in temperature_arr_node:
|
||||
var temperature_meta: String = i_node_temperature.get_meta('um')
|
||||
if not temperature_dic.has(temperature_meta): return
|
||||
i_node_temperature.value1 = temperature_dic[temperature_meta]
|
||||
func on_line_changed(unit_pribor: Object) -> void:
|
||||
if not unit_pribor.online:
|
||||
set_default_state()
|
||||
|
||||
|
||||
static func power_fill(pow_dic: Dictionary, fs_result: Dictionary, power_amplifier: Array, POWER_THRESHOLD: int) -> void:
|
||||
func on_mode_changed(in_tree: bool) -> void:
|
||||
if not in_tree:
|
||||
mashine_timer.stop()
|
||||
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 power_fill(pow_dic: Dictionary, fs_result: 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 not pow_dic.has(powamp_meta): return
|
||||
if pow_dic:
|
||||
if not pow_dic.has(powamp_meta):
|
||||
break
|
||||
if pow_dic[powamp_meta].size() < 6:
|
||||
status = STATE_VAL.ERROR
|
||||
else:
|
||||
if powamp_meta == 'um_8' and not fs_result.fs_1: return
|
||||
if powamp_meta == 'um_7' and not fs_result.fs_1: return
|
||||
if powamp_meta in ['um_1', 'um_2', 'um_3', 'um_4', 'um_5', 'um_6'] and not fs_result.fs_6: return
|
||||
if powamp_meta in ['um_9', 'um_10', 'um_11', 'um_12', 'um_13', 'um_14'] and not fs_result.fs_7: return
|
||||
if powamp_meta in ['um_8', 'um_9', 'um_10', 'um_11', 'um_12', 'um_13'] and not fs_result.fs_7: return
|
||||
i_powapm.value0 = pow_dic[powamp_meta]
|
||||
for i_p in pow_dic[powamp_meta]:
|
||||
if i_p < POWER_THRESHOLD:
|
||||
if i_p < constants_k.POWER_THRESHOLD:
|
||||
status = STATE_VAL.ERROR
|
||||
i_powapm.state = status
|
||||
|
||||
|
||||
func on_press_device() -> void:
|
||||
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')
|
||||
var node_ip_power_arr: Array = get_tree().get_nodes_in_group('power_supply')
|
||||
var fs_nodes: Array = get_tree().get_nodes_in_group('fs_group')
|
||||
var power_amplifier: Array = get_tree().get_nodes_in_group('power_amplifier')
|
||||
var module_fs_1: Node = $kasseta_fs_kd/ref_A2
|
||||
var module_fs_6: Node = $kasseta_fs_kd/ref_A4
|
||||
var dou_6: Node = $dou6_A7
|
||||
var module_fs_7: Node = $kasseta_fs_kd/ref_A7
|
||||
var dou_7: Node = $dou7_A8
|
||||
var for_control_result: Dictionary = {
|
||||
'result_dic': unit_prd_k.control_results,
|
||||
'power_dic': unit_prd_k.power_result,
|
||||
'block_kasseta_y5_config': unit_prd_k.block_kasseta_y5_config,
|
||||
'block_ip_config': unit_prd_k.block_ip_config,
|
||||
'temperature_um' : unit_prd_k.temperature_um,
|
||||
'nodes_y5': nodes_y5,
|
||||
'node_ip_power_arr': node_ip_power_arr,
|
||||
'fs_nodes': fs_nodes,
|
||||
'power_amplifier': power_amplifier,
|
||||
'POWER_THRESHOLD': unit_prd_k.constants.POWER_THRESHOLD,
|
||||
'name_prd': unit_prd_k.self_name,
|
||||
'module_fs_1': module_fs_1,
|
||||
'module_fs_6': module_fs_6,
|
||||
'dou_6': dou_6,
|
||||
'module_fs_7': module_fs_7,
|
||||
'dou_7': dou_7,
|
||||
}
|
||||
on_control_result(for_control_result)
|
||||
|
||||
|
||||
func on_control_result(for_result_dic: Dictionary) -> void:
|
||||
temperature_fill(for_result_dic.power_amplifier, for_result_dic.temperature_um)
|
||||
|
||||
var block_kasseta_y5_prd_config_k: Dictionary = for_result_dic.block_kasseta_y5_config
|
||||
var nodes_y5: Array = for_result_dic.nodes_y5
|
||||
for node_y5 in nodes_y5:
|
||||
var meta_y5 = node_y5.get_meta('y5')
|
||||
if block_kasseta_y5_prd_config_k.has(meta_y5):
|
||||
if not block_kasseta_y5_prd_config_k['yau07']:
|
||||
if block_kasseta_y5_prd_config_k['yau07'] == false:
|
||||
node_y5.state = STATE_VAL.ERROR if meta_y5 == 'yau07' else STATE_VAL.NONE
|
||||
break
|
||||
node_y5.state = STATE_VAL.GOOD if block_kasseta_y5_prd_config_k[meta_y5] else STATE_VAL.ERROR
|
||||
|
||||
var block_ip_config_k: Dictionary = unit_prd_k.block_ip_config
|
||||
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 block_kasseta_y5_prd_config_k.ug:
|
||||
power_supply.state = STATE_VAL.GOOD if block_ip_config_k[meta_ip][1] else STATE_VAL.ERROR
|
||||
|
||||
## If control is end
|
||||
var result_dic: Dictionary = for_result_dic.result_dic
|
||||
for f in for_result_dic.fs_nodes:
|
||||
var fs_nodes: Array = get_tree().get_nodes_in_group('fs_group')
|
||||
for f in fs_nodes:
|
||||
var fs_meta: String = f.get_meta('fs')
|
||||
if result_dic.has(fs_meta):
|
||||
f.state = result_dic[fs_meta]
|
||||
var new_state = result_dic[fs_meta]
|
||||
f.state = new_state
|
||||
result_dic[fs_meta] = new_state
|
||||
|
||||
if result_dic.fs_1 == 1 and block_kasseta_y5_prd_config_k['yau07']:
|
||||
for_result_dic.module_fs_1.state = STATE_VAL.GOOD if result_dic.dkm_1 else STATE_VAL.ERROR
|
||||
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
|
||||
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
|
||||
|
||||
if result_dic.fs_6 == 1 and block_kasseta_y5_prd_config_k['yau07']:
|
||||
for_result_dic.module_fs_6.state = STATE_VAL.GOOD if result_dic.dkm_6 else STATE_VAL.ERROR
|
||||
for_result_dic.dou_6.state = STATE_VAL.GOOD if result_dic.dou_6 else STATE_VAL.ERROR
|
||||
power_fill(power_dic, result_dic)
|
||||
|
||||
if result_dic.fs_7 == 1 and block_kasseta_y5_prd_config_k['yau07']:
|
||||
for_result_dic.module_fs_7.state = STATE_VAL.GOOD if result_dic.dkm_7 else STATE_VAL.ERROR
|
||||
for_result_dic.dou_7.state = STATE_VAL.GOOD if result_dic.dou_7 else STATE_VAL.ERROR
|
||||
|
||||
if block_kasseta_y5_prd_config_k['yau07']:
|
||||
power_fill(for_result_dic.power_dic, for_result_dic.result_dic, for_result_dic.power_amplifier, for_result_dic.POWER_THRESHOLD)
|
||||
|
||||
var result: bool = true
|
||||
var result = true
|
||||
for device in result_dic.values():
|
||||
if not device:
|
||||
result = false
|
||||
log.message(Logger.INFO, 'Прибор ПРД-%s %s' % [for_result_dic.name_prd, ['неисправен', 'исправен'][int(result)]])
|
||||
|
||||
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.GREEN)
|
||||
else:
|
||||
$control_result.text = 'Прибор ПРД-%s неисправен' % name_prd
|
||||
$control_result.add_theme_color_override('font_color', Color.RED)
|
||||
|
||||
|
||||
func find_labels(node1: Node):
|
||||
|
||||
@@ -1,39 +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://ffi1njkjceb5" path="res://scenes/контроль/блок-к.tscn" id="6_wd1vi"]
|
||||
[ext_resource type="PackedScene" uid="uid://bmagw8nd0ulhj" path="res://scenes/pribor-prd-k/kasseta-fs-kd.tscn" id="7_ia27q"]
|
||||
[ext_resource type="Script" uid="uid://crpedygm3gohi" path="res://scenes/контроль/кассета.gd" id="7_xpa2n"]
|
||||
[ext_resource type="PackedScene" uid="uid://dq31j24gv5vi4" path="res://scenes/контроль/кассета-п-2.tscn" id="8_6fdp7"]
|
||||
[ext_resource type="PackedScene" uid="uid://p2suppildvq0" path="res://scenes/контроль/элемент-в.tscn" id="8_la5yt"]
|
||||
[ext_resource type="Texture2D" uid="uid://belwchvdktrw0" path="res://data/эмс-бланк.png" id="10_c7lv8"]
|
||||
[ext_resource type="Texture2D" uid="uid://bwddxs24es81u" path="res://data/эмс-бланк-пост.png" id="11_wd1vi"]
|
||||
[ext_resource type="Texture2D" uid="uid://pfoscstbm025" path="res://data/эмс-бланк-перем.png" id="12_bjebg"]
|
||||
[ext_resource type="Texture2D" uid="uid://dvl3sq036gn75" path="res://data/эмс-бланк-замыкание.png" id="13_kc77u"]
|
||||
|
||||
[sub_resource type="SpriteFrames" id="SpriteFrames_di0aa"]
|
||||
animations = [{
|
||||
"frames": [{
|
||||
"duration": 1.0,
|
||||
"texture": ExtResource("10_c7lv8")
|
||||
}, {
|
||||
"duration": 1.0,
|
||||
"texture": ExtResource("11_wd1vi")
|
||||
}, {
|
||||
"duration": 1.0,
|
||||
"texture": ExtResource("12_bjebg")
|
||||
}, {
|
||||
"duration": 1.0,
|
||||
"texture": ExtResource("13_kc77u")
|
||||
}],
|
||||
"loop": true,
|
||||
"name": &"default",
|
||||
"speed": 5.0
|
||||
}]
|
||||
|
||||
[node name="pribor_prd_k" type="Control"]
|
||||
layout_mode = 3
|
||||
@@ -186,7 +161,7 @@ value0_info = "Мощность, Вт"
|
||||
value1_info = "Температура,°C"
|
||||
metadata/um = "um_6"
|
||||
|
||||
[node name="блок-к" parent="." groups=["power_amplifier"] instance=ExtResource("6_wd1vi")]
|
||||
[node name="utm80_A9" parent="." groups=["power_amplifier"] instance=ExtResource("5_c7lv8")]
|
||||
layout_mode = 0
|
||||
offset_left = 485.0
|
||||
offset_top = 812.0
|
||||
@@ -194,7 +169,9 @@ offset_right = 652.0
|
||||
offset_bottom = 907.0
|
||||
fname = "УТМ80"
|
||||
rname = "A9"
|
||||
metadata/um = "um_8"
|
||||
value0_info = "Мощность, Вт"
|
||||
value1_info = "Температура,°C"
|
||||
metadata/um = "um_7"
|
||||
|
||||
[node name="rm1620m_A16" parent="." groups=["power_amplifier"] instance=ExtResource("5_c7lv8")]
|
||||
layout_mode = 0
|
||||
@@ -202,11 +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_9"
|
||||
metadata/um = "um_8"
|
||||
|
||||
[node name="rm1620m_A17" parent="." groups=["power_amplifier"] instance=ExtResource("5_c7lv8")]
|
||||
layout_mode = 0
|
||||
@@ -214,11 +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_10"
|
||||
metadata/um = "um_9"
|
||||
|
||||
[node name="rm1620m_A18" parent="." groups=["power_amplifier"] instance=ExtResource("5_c7lv8")]
|
||||
layout_mode = 0
|
||||
@@ -226,11 +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_11"
|
||||
metadata/um = "um_10"
|
||||
|
||||
[node name="rm1620m_A19" parent="." groups=["power_amplifier"] instance=ExtResource("5_c7lv8")]
|
||||
layout_mode = 0
|
||||
@@ -238,11 +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_12"
|
||||
metadata/um = "um_11"
|
||||
|
||||
[node name="rm1620m_A20" parent="." groups=["power_amplifier"] instance=ExtResource("5_c7lv8")]
|
||||
layout_mode = 0
|
||||
@@ -250,11 +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_13"
|
||||
metadata/um = "um_12"
|
||||
|
||||
[node name="rm1620m_A21" parent="." groups=["power_amplifier"] instance=ExtResource("5_c7lv8")]
|
||||
layout_mode = 0
|
||||
@@ -262,11 +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_14"
|
||||
metadata/um = "um_13"
|
||||
|
||||
[node name="kasseta_fs_kd" parent="." instance=ExtResource("7_ia27q")]
|
||||
layout_mode = 0
|
||||
@@ -320,9 +297,9 @@ metadata/ip = "ip12_50_1"
|
||||
[node name="lbl_fname" type="Label" parent="kasseta_p_1"]
|
||||
self_modulate = Color(1, 1, 1, 0.62)
|
||||
layout_mode = 0
|
||||
offset_left = 2.0
|
||||
offset_left = 7.0
|
||||
offset_top = 8.0
|
||||
offset_right = 162.0
|
||||
offset_right = 159.0
|
||||
offset_bottom = 33.0
|
||||
text = "Кассета П-1"
|
||||
horizontal_alignment = 1
|
||||
@@ -345,42 +322,3 @@ offset_bottom = 1003.0
|
||||
text = "Прибор ПРД- неисправен"
|
||||
horizontal_alignment = 1
|
||||
metadata/_edit_lock_ = true
|
||||
|
||||
[node name="input_0" type="AnimatedSprite2D" parent="."]
|
||||
position = Vector2(234, 177)
|
||||
sprite_frames = SubResource("SpriteFrames_di0aa")
|
||||
|
||||
[node name="Label" type="Label" parent="input_0"]
|
||||
offset_left = -38.0
|
||||
offset_top = 16.0
|
||||
offset_right = 30.0
|
||||
offset_bottom = 35.0
|
||||
text = "Вход ЕМС"
|
||||
|
||||
[node name="input_1" type="AnimatedSprite2D" parent="."]
|
||||
position = Vector2(277, 177)
|
||||
sprite_frames = SubResource("SpriteFrames_di0aa")
|
||||
|
||||
[node name="input_2" type="AnimatedSprite2D" parent="."]
|
||||
position = Vector2(188, 177)
|
||||
sprite_frames = SubResource("SpriteFrames_di0aa")
|
||||
|
||||
[node name="output_0" type="AnimatedSprite2D" parent="."]
|
||||
position = Vector2(421, 177)
|
||||
sprite_frames = SubResource("SpriteFrames_di0aa")
|
||||
|
||||
[node name="Label" type="Label" parent="output_0"]
|
||||
offset_left = -40.0
|
||||
offset_top = 14.0
|
||||
offset_right = 36.0
|
||||
offset_bottom = 33.0
|
||||
text = "Модуляция"
|
||||
metadata/_edit_use_anchors_ = true
|
||||
|
||||
[node name="output_1" type="AnimatedSprite2D" parent="."]
|
||||
position = Vector2(462, 177)
|
||||
sprite_frames = SubResource("SpriteFrames_di0aa")
|
||||
|
||||
[node name="output_2" type="AnimatedSprite2D" parent="."]
|
||||
position = Vector2(383, 177)
|
||||
sprite_frames = SubResource("SpriteFrames_di0aa")
|
||||
|
||||
@@ -1,46 +1,122 @@
|
||||
@tool
|
||||
extends 'res://scenes/контроль/прибор.gd'
|
||||
|
||||
const constants_n = {
|
||||
'POWER_UKP_1': 31,
|
||||
'POWER_UKP_2': 63,
|
||||
'DKM_BIT_2': 1,
|
||||
'DKM_BIT_3': 2,
|
||||
'BASE_ADDR_EMS_G': 0x120,
|
||||
'ADDR_UG_LITERA_1': 0x106,
|
||||
'ADDR_UG_LITERA_2': 0x108,
|
||||
'ADDR_UG_LITERA_3': 0x10A,
|
||||
'TEMP_THRESHOLD': 70,
|
||||
'POWER_THRESHOLD': 40,
|
||||
'RAY_DOU_NUM': 0x3,
|
||||
'ATT_UM_2': 0x2,
|
||||
'ATT_UM_3': 0x3,
|
||||
'POWER_UM': 100,
|
||||
'TIMER_DELAY': 10.0,
|
||||
'STATE_MASHINE_TIMER': 0.3,
|
||||
}
|
||||
# Конфигурация параметров для каждого прибора
|
||||
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': 932.0, 'width': 100.0},
|
||||
3: {'freq': 1157.0, 'width': 100.0}
|
||||
}
|
||||
enum STATE_VAL { NONE = 0, GOOD = 1, ERROR = 2 }
|
||||
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_kasseta_y5_prd_config_n: = {
|
||||
'yau07': false,
|
||||
'ems': false,
|
||||
'ug': false,
|
||||
'ukp1': false,
|
||||
'ukp2': false,
|
||||
}
|
||||
|
||||
# Основные переменные
|
||||
var start_litera: int = 2
|
||||
var ug_work_1: int = 2 ## Аттенюация усилителей мощности
|
||||
var ug_work_2: int = 3 ## Аттенюация усилителей мощности
|
||||
# Флаги и таймеры
|
||||
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_2': false,
|
||||
'dkm_3': false,
|
||||
'dou_2': false,
|
||||
'dou_3': false,
|
||||
'fs_2': 2,
|
||||
'fs_3': 2,
|
||||
}
|
||||
var test_control_n = preload('res://scripts/pribor-prd.gd')
|
||||
var ctrl_pos = 0
|
||||
################################
|
||||
func on_state_mashine() -> void:
|
||||
control_prd_n.state_control_machine()
|
||||
|
||||
|
||||
func _ready() -> void:
|
||||
if Engine.is_editor_hint():
|
||||
return
|
||||
var unit_name = get_meta('unit_name')[0]
|
||||
var prd_n_module = prd.prd_dict[unit_name]
|
||||
unit_prd_n = prd_n_module.unit_control
|
||||
var power_amplifier: Array = get_tree().get_nodes_in_group('power_amplifier')
|
||||
for temp in power_amplifier:
|
||||
temp.value1 = -70
|
||||
temp.max_value1 = 70
|
||||
temp.min_value1 = -40
|
||||
unit_prd_n.connect('control_is_over', Callable(self, 'on_press_device'))
|
||||
#unit_prd_n.power_amplify = power_amplifier
|
||||
on_press_device()
|
||||
|
||||
|
||||
func _process(_delta: float) -> void:
|
||||
if Engine.is_editor_hint():
|
||||
return
|
||||
set_frame($input_0, unit_prd_n.ems_input_1)
|
||||
set_frame($input_1, unit_prd_n.ems_input_2)
|
||||
set_frame($output_0, unit_prd_n.ems_output_1)
|
||||
set_frame($output_1, unit_prd_n.ems_output_2)
|
||||
|
||||
|
||||
func set_frame(node_frame: Node, val: int): node_frame.set_frame(val)
|
||||
|
||||
|
||||
func start_control() -> void:
|
||||
initialize_connections()
|
||||
setup_timer()
|
||||
set_default_state()
|
||||
find_labels(self)
|
||||
|
||||
|
||||
func initialize_connections() -> void:
|
||||
var unit_name = get_meta('unit_name')[0]
|
||||
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 init_data: Dictionary = {
|
||||
'control_label': $control_result,
|
||||
'power_amplifiers': power_amplifiers,
|
||||
'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_kasseta_y5_prd_config': block_kasseta_y5_prd_config_n,
|
||||
'control_results': control_results_n,
|
||||
'current_litera': start_litera,
|
||||
}
|
||||
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'))
|
||||
|
||||
|
||||
func setup_timer() -> void:
|
||||
add_child(mashine_timer)
|
||||
mashine_timer.connect('timeout', Callable(self, 'on_state_mashine'))
|
||||
mashine_timer.wait_time = constants_n.STATE_MASHINE_TIMER
|
||||
mashine_timer.start()
|
||||
|
||||
|
||||
func set_default_state() -> void:
|
||||
for group in get_tree().get_nodes_in_group('default_reset'):
|
||||
group.state = STATE_VAL.NONE
|
||||
@@ -52,109 +128,108 @@ func set_default_state() -> void:
|
||||
func _enter_tree() -> void:
|
||||
if Engine.is_editor_hint():
|
||||
return
|
||||
$control_result.text = 'Ожидается запуск контроля ...' # TODO: Необходимо сделать пулл сообщений
|
||||
$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:
|
||||
if Engine.is_editor_hint():
|
||||
return
|
||||
#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]])
|
||||
prd_n_module.cmd_array.append([unit_prd_n.CmdCode.WRITE_ISA, [constants_n.ADDR_UG_LITERA_1, ug_work_1, constants_n.ADDR_UG_LITERA_2, ug_work_2]])
|
||||
|
||||
|
||||
static func temperature_fill(temperature_arr_node: Array, temperature_dic: Dictionary)->void:
|
||||
for i_node_temperature in temperature_arr_node:
|
||||
var temperature_meta: String = i_node_temperature.get_meta('um')
|
||||
if not temperature_dic.has(temperature_meta): return
|
||||
i_node_temperature.value1 = temperature_dic[temperature_meta]
|
||||
func on_line_changed(unit_pribor: Object) -> void:
|
||||
if not unit_pribor.online:
|
||||
set_default_state()
|
||||
|
||||
|
||||
static func power_fill(pow_dic: Dictionary, fs_result: Dictionary, power_amplifier_arr_node: Array, POWER_THRESHOLD: int) -> void:
|
||||
for i_node_powapm in power_amplifier_arr_node:
|
||||
var powamp_meta: String = i_node_powapm.get_meta('um')
|
||||
func on_mode_changed(in_tree: bool) -> void:
|
||||
if not in_tree:
|
||||
mashine_timer.stop()
|
||||
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 power_fill(pow_dic: Dictionary, fs_result: 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 not pow_dic.has(powamp_meta): return
|
||||
if powamp_meta in ['um_1', 'um_2', 'um_3', 'um_4', 'um_5', 'um_6'] and not fs_result.fs_2: return
|
||||
if powamp_meta in ['um_9', 'um_10', 'um_11', 'um_12', 'um_13', 'um_14'] and not fs_result.fs_3: return
|
||||
i_node_powapm.value0 = pow_dic[powamp_meta]
|
||||
for i_p in pow_dic[powamp_meta]:
|
||||
if i_p < POWER_THRESHOLD:
|
||||
status = STATE_VAL.ERROR
|
||||
i_node_powapm.state = status
|
||||
if pow_dic[powamp_meta].size() < 6:
|
||||
status = STATE_VAL.ERROR
|
||||
else:
|
||||
if powamp_meta in ['um_1', 'um_2', 'um_3', 'um_4', 'um_5', 'um_6'] and not fs_result.fs_2: return
|
||||
if powamp_meta in ['um_7', 'um_8', 'um_9', 'um_10', 'um_11', 'um_12'] and not fs_result.fs_3: return
|
||||
i_powapm.value0 = pow_dic[powamp_meta]
|
||||
for i_p in pow_dic[powamp_meta]:
|
||||
if i_p < constants_n.POWER_THRESHOLD:
|
||||
status = STATE_VAL.ERROR
|
||||
i_powapm.state = status
|
||||
|
||||
|
||||
func on_press_device() -> void:
|
||||
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')
|
||||
var node_ip_power_arr: Array = get_tree().get_nodes_in_group('power_supply')
|
||||
var fs_nodes: Array = get_tree().get_nodes_in_group('fs_group')
|
||||
var power_amplifier_arr_node: Array = get_tree().get_nodes_in_group('power_amplifier')
|
||||
var module_fs_2: Node = $kasseta_FS_ND/ref_A4
|
||||
var dou_2: Node = $dou2_A5
|
||||
var module_fs_3: Node = $kasseta_FS_ND/ref_A3
|
||||
var dou_3: Node = $dou3_A6
|
||||
var for_control_result: Dictionary = {
|
||||
'result_dic': unit_prd_n.control_results,
|
||||
'power_dic': unit_prd_n.power_result,
|
||||
'block_kasseta_y5_config': unit_prd_n.block_kasseta_y5_config,
|
||||
'block_ip_config': unit_prd_n.block_ip_config,
|
||||
'temperature_um' : unit_prd_n.temperature_um,
|
||||
'nodes_y5': nodes_y5,
|
||||
'node_ip_power_arr': node_ip_power_arr,
|
||||
'fs_nodes': fs_nodes,
|
||||
'power_amplifier': power_amplifier_arr_node,
|
||||
'POWER_THRESHOLD': unit_prd_n.constants.POWER_THRESHOLD,
|
||||
'name_prd': unit_prd_n.self_name,
|
||||
'module_fs_2': module_fs_2,
|
||||
'dou_2': dou_2,
|
||||
'module_fs_3': module_fs_3,
|
||||
'dou_3': dou_3,
|
||||
}
|
||||
on_control_result(for_control_result)
|
||||
|
||||
|
||||
func on_control_result(for_result_dic: Dictionary) -> void:
|
||||
temperature_fill(for_result_dic.power_amplifier, for_result_dic.temperature_um)
|
||||
|
||||
var block_kasseta_y5_prd_config_n: Dictionary = for_result_dic.block_kasseta_y5_config
|
||||
var nodes_y5: Array = for_result_dic.nodes_y5
|
||||
for node_y5 in nodes_y5:
|
||||
var meta_y5 = node_y5.get_meta('y5')
|
||||
if block_kasseta_y5_prd_config_n.has(meta_y5):
|
||||
if not block_kasseta_y5_prd_config_n['yau07']:
|
||||
if block_kasseta_y5_prd_config_n['yau07'] == false:
|
||||
node_y5.state = STATE_VAL.ERROR if meta_y5 == 'yau07' else STATE_VAL.NONE
|
||||
break
|
||||
node_y5.state = STATE_VAL.GOOD if block_kasseta_y5_prd_config_n[meta_y5] else STATE_VAL.ERROR
|
||||
|
||||
var block_ip_config_n: Dictionary = unit_prd_n.block_ip_config
|
||||
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
|
||||
|
||||
## If control is end
|
||||
var result_dic: Dictionary = for_result_dic.result_dic
|
||||
for f in for_result_dic.fs_nodes:
|
||||
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 result_dic.has(fs_meta):
|
||||
f.state = result_dic[fs_meta]
|
||||
var new_state = result_dic[fs_meta]
|
||||
f.state = new_state
|
||||
result_dic[fs_meta] = new_state
|
||||
|
||||
if result_dic.fs_2 == 1 and block_kasseta_y5_prd_config_n['yau07']:
|
||||
for_result_dic.module_fs_2.state = STATE_VAL.GOOD if result_dic.dkm_2 else STATE_VAL.ERROR
|
||||
for_result_dic.dou_2.state = STATE_VAL.GOOD if result_dic.dou_2 else STATE_VAL.ERROR
|
||||
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
|
||||
else:
|
||||
result_dic.fs_2 = 0
|
||||
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 = 0
|
||||
|
||||
if result_dic.fs_3 == 1 and block_kasseta_y5_prd_config_n['yau07']:
|
||||
for_result_dic.module_fs_3.state = STATE_VAL.GOOD if result_dic.dkm_3 else STATE_VAL.ERROR
|
||||
for_result_dic.dou_3.state = STATE_VAL.GOOD if result_dic.dou_3 else STATE_VAL.ERROR
|
||||
|
||||
if block_kasseta_y5_prd_config_n['yau07']:
|
||||
power_fill(for_result_dic.power_dic, for_result_dic.result_dic, for_result_dic.power_amplifier, for_result_dic.POWER_THRESHOLD)
|
||||
var result: bool = true
|
||||
power_fill(power_dic, result_dic)
|
||||
|
||||
var result = true
|
||||
for device in result_dic.values():
|
||||
if not device:
|
||||
result = false
|
||||
|
||||
log.message(Logger.INFO, 'Прибор ПРД-%s %s' % [for_result_dic.name_prd, ['неисправен', 'исправен'][int(result)]])
|
||||
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.GREEN)
|
||||
else:
|
||||
$control_result.text = 'Прибор ПРД-%s неисправен' % name_prd
|
||||
$control_result.add_theme_color_override('font_color', Color.RED)
|
||||
|
||||
|
||||
func find_labels(node1: Node):
|
||||
|
||||
@@ -1,35 +1,12 @@
|
||||
[gd_scene load_steps=12 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="Texture2D" uid="uid://belwchvdktrw0" path="res://data/эмс-бланк.png" id="8_bnnv3"]
|
||||
[ext_resource type="Texture2D" uid="uid://bwddxs24es81u" path="res://data/эмс-бланк-пост.png" id="9_is25t"]
|
||||
[ext_resource type="Texture2D" uid="uid://pfoscstbm025" path="res://data/эмс-бланк-перем.png" id="10_meukj"]
|
||||
[ext_resource type="Texture2D" uid="uid://dvl3sq036gn75" path="res://data/эмс-бланк-замыкание.png" id="11_xkifg"]
|
||||
|
||||
[sub_resource type="SpriteFrames" id="SpriteFrames_1wf07"]
|
||||
animations = [{
|
||||
"frames": [{
|
||||
"duration": 1.0,
|
||||
"texture": ExtResource("8_bnnv3")
|
||||
}, {
|
||||
"duration": 1.0,
|
||||
"texture": ExtResource("9_is25t")
|
||||
}, {
|
||||
"duration": 1.0,
|
||||
"texture": ExtResource("10_meukj")
|
||||
}, {
|
||||
"duration": 1.0,
|
||||
"texture": ExtResource("11_xkifg")
|
||||
}],
|
||||
"loop": true,
|
||||
"name": &"default",
|
||||
"speed": 5.0
|
||||
}]
|
||||
|
||||
[node name="pribor_prd_n" type="Control"]
|
||||
layout_mode = 3
|
||||
@@ -102,83 +79,12 @@ text = "Панель
|
||||
horizontal_alignment = 1
|
||||
vertical_alignment = 1
|
||||
|
||||
[node name="kasseta_U5" type="NinePatchRect" parent="."]
|
||||
[node name="kasseta_U5" parent="." instance=ExtResource("4_xkifg")]
|
||||
layout_mode = 0
|
||||
offset_left = 175.0
|
||||
offset_top = 242.0
|
||||
offset_right = 485.0
|
||||
offset_bottom = 432.0
|
||||
texture = ExtResource("3_meukj")
|
||||
patch_margin_left = 16
|
||||
patch_margin_top = 16
|
||||
patch_margin_right = 16
|
||||
patch_margin_bottom = 16
|
||||
script = ExtResource("6_b5wvk")
|
||||
|
||||
[node name="lbl_fname" type="Label" parent="kasseta_U5"]
|
||||
self_modulate = Color(1, 1, 1, 0.62)
|
||||
layout_mode = 0
|
||||
offset_left = 5.0
|
||||
offset_top = 7.0
|
||||
offset_right = 305.0
|
||||
offset_bottom = 35.0
|
||||
text = "Кассета У5"
|
||||
horizontal_alignment = 1
|
||||
vertical_alignment = 1
|
||||
|
||||
[node name="ref_A24" parent="kasseta_U5" groups=["power_supply"] instance=ExtResource("7_eoqf2")]
|
||||
offset_left = 5.0
|
||||
offset_top = 32.0
|
||||
offset_right = 55.0
|
||||
offset_bottom = 182.0
|
||||
fname = "ИП5-25"
|
||||
rname = "A24"
|
||||
metadata/ip = "ip5_25"
|
||||
|
||||
[node name="ref_A30" parent="kasseta_U5" groups=["y-5"] instance=ExtResource("7_eoqf2")]
|
||||
offset_left = 55.0
|
||||
offset_top = 32.0
|
||||
offset_right = 105.0
|
||||
offset_bottom = 182.0
|
||||
fname = "ЯУ-07Б"
|
||||
rname = "A30"
|
||||
metadata/y5 = "yau07"
|
||||
|
||||
[node name="ref_A26" parent="kasseta_U5" groups=["y-5"] instance=ExtResource("7_eoqf2")]
|
||||
offset_left = 105.0
|
||||
offset_top = 32.0
|
||||
offset_right = 155.0
|
||||
offset_bottom = 182.0
|
||||
fname = "ЭМС-Г"
|
||||
rname = "A26"
|
||||
metadata/y5 = "ems"
|
||||
|
||||
[node name="ref_A27" parent="kasseta_U5" groups=["y-5"] instance=ExtResource("7_eoqf2")]
|
||||
offset_left = 155.0
|
||||
offset_top = 32.0
|
||||
offset_right = 205.0
|
||||
offset_bottom = 182.0
|
||||
fname = "УГ"
|
||||
rname = "A27"
|
||||
metadata/y5 = "ug"
|
||||
|
||||
[node name="ref_A28" parent="kasseta_U5" groups=["y-5"] instance=ExtResource("7_eoqf2")]
|
||||
offset_left = 205.0
|
||||
offset_top = 32.0
|
||||
offset_right = 255.0
|
||||
offset_bottom = 182.0
|
||||
fname = "УКП"
|
||||
rname = "A28"
|
||||
metadata/y5 = "ukp1"
|
||||
|
||||
[node name="ref_A29" parent="kasseta_U5" groups=["y-5"] instance=ExtResource("7_eoqf2")]
|
||||
offset_left = 254.0
|
||||
offset_top = 32.0
|
||||
offset_right = 304.0
|
||||
offset_bottom = 182.0
|
||||
fname = "УКП"
|
||||
rname = "A29"
|
||||
metadata/y5 = "ukp2"
|
||||
|
||||
[node name="kasseta_FS_ND" type="NinePatchRect" parent="."]
|
||||
layout_mode = 0
|
||||
@@ -212,7 +118,7 @@ offset_top = 32.0
|
||||
offset_right = 105.0
|
||||
offset_bottom = 182.0
|
||||
fname = "Блок ФС-3"
|
||||
rname = "A4"
|
||||
rname = "A3"
|
||||
|
||||
[node name="ref_A1" parent="kasseta_FS_ND" groups=["default_reset", "fs_group"] instance=ExtResource("7_eoqf2")]
|
||||
offset_left = 105.0
|
||||
@@ -220,7 +126,7 @@ offset_top = 32.0
|
||||
offset_right = 155.0
|
||||
offset_bottom = 182.0
|
||||
fname = "Модуль ФС"
|
||||
rname = "A2"
|
||||
rname = "A1"
|
||||
metadata/fs = "fs_3"
|
||||
|
||||
[node name="ref_A2" parent="kasseta_FS_ND" groups=["default_reset", "fs_group"] instance=ExtResource("7_eoqf2")]
|
||||
@@ -229,7 +135,7 @@ offset_top = 32.0
|
||||
offset_right = 205.0
|
||||
offset_bottom = 182.0
|
||||
fname = "Модуль ФС"
|
||||
rname = "A1"
|
||||
rname = "A2"
|
||||
metadata/fs = "fs_2"
|
||||
|
||||
[node name="ref_A4" parent="kasseta_FS_ND" groups=["default_reset"] instance=ExtResource("7_eoqf2")]
|
||||
@@ -238,7 +144,7 @@ offset_top = 32.0
|
||||
offset_right = 255.0
|
||||
offset_bottom = 182.0
|
||||
fname = "Блок ФС-2"
|
||||
rname = "A3"
|
||||
rname = "A4"
|
||||
|
||||
[node name="kasseta_P_1" type="NinePatchRect" parent="."]
|
||||
layout_mode = 0
|
||||
@@ -298,7 +204,7 @@ offset_left = 485.0
|
||||
offset_top = 242.0
|
||||
offset_right = 652.0
|
||||
offset_bottom = 337.0
|
||||
fname = "УМ1535А"
|
||||
fname = "УМ1535Б"
|
||||
rname = "A7"
|
||||
value0_info = "Мощность, Вт"
|
||||
value1_info = "Температура,°C"
|
||||
@@ -374,7 +280,7 @@ fname = "УМ1535А"
|
||||
rname = "A13"
|
||||
value0_info = "Мощность, Вт"
|
||||
value1_info = "Температура,°C"
|
||||
metadata/um = "um_9"
|
||||
metadata/um = "um_7"
|
||||
|
||||
[node name="um1535_A14" parent="." groups=["power_amplifier"] instance=ExtResource("7_bnnv3")]
|
||||
layout_mode = 0
|
||||
@@ -386,7 +292,7 @@ fname = "УМ1535А"
|
||||
rname = "A14"
|
||||
value0_info = "Мощность, Вт"
|
||||
value1_info = "Температура,°C"
|
||||
metadata/um = "um_10"
|
||||
metadata/um = "um_8"
|
||||
|
||||
[node name="um1535_A15" parent="." groups=["power_amplifier"] instance=ExtResource("7_bnnv3")]
|
||||
layout_mode = 0
|
||||
@@ -398,7 +304,7 @@ fname = "УМ1535А"
|
||||
rname = "A15"
|
||||
value0_info = "Мощность, Вт"
|
||||
value1_info = "Температура,°C"
|
||||
metadata/um = "um_11"
|
||||
metadata/um = "um_9"
|
||||
|
||||
[node name="um1535_A16" parent="." groups=["power_amplifier"] instance=ExtResource("7_bnnv3")]
|
||||
layout_mode = 0
|
||||
@@ -410,7 +316,7 @@ fname = "УМ1535А"
|
||||
rname = "A16"
|
||||
value0_info = "Мощность, Вт"
|
||||
value1_info = "Температура,°C"
|
||||
metadata/um = "um_12"
|
||||
metadata/um = "um_10"
|
||||
|
||||
[node name="um1535_A17" parent="." groups=["power_amplifier"] instance=ExtResource("7_bnnv3")]
|
||||
layout_mode = 0
|
||||
@@ -422,7 +328,7 @@ fname = "УМ1535А"
|
||||
rname = "A17"
|
||||
value0_info = "Мощность, Вт"
|
||||
value1_info = "Температура,°C"
|
||||
metadata/um = "um_13"
|
||||
metadata/um = "um_11"
|
||||
|
||||
[node name="um1535_A18" parent="." groups=["power_amplifier"] instance=ExtResource("7_bnnv3")]
|
||||
layout_mode = 0
|
||||
@@ -434,7 +340,7 @@ fname = "УМ1535А"
|
||||
rname = "A18"
|
||||
value0_info = "Мощность, Вт"
|
||||
value1_info = "Температура,°C"
|
||||
metadata/um = "um_14"
|
||||
metadata/um = "um_12"
|
||||
|
||||
[node name="control_result" type="Label" parent="."]
|
||||
layout_mode = 0
|
||||
@@ -444,33 +350,3 @@ offset_right = 649.0
|
||||
offset_bottom = 1003.0
|
||||
horizontal_alignment = 1
|
||||
metadata/_edit_lock_ = true
|
||||
|
||||
[node name="input_0" type="AnimatedSprite2D" parent="."]
|
||||
position = Vector2(234, 177)
|
||||
sprite_frames = SubResource("SpriteFrames_1wf07")
|
||||
|
||||
[node name="Label" type="Label" parent="input_0"]
|
||||
offset_left = -15.0
|
||||
offset_top = 15.0
|
||||
offset_right = 53.0
|
||||
offset_bottom = 34.0
|
||||
text = "Вход ЕМС"
|
||||
|
||||
[node name="input_1" type="AnimatedSprite2D" parent="."]
|
||||
position = Vector2(277, 177)
|
||||
sprite_frames = SubResource("SpriteFrames_1wf07")
|
||||
|
||||
[node name="output_0" type="AnimatedSprite2D" parent="."]
|
||||
position = Vector2(381, 177)
|
||||
sprite_frames = SubResource("SpriteFrames_1wf07")
|
||||
|
||||
[node name="Label" type="Label" parent="output_0"]
|
||||
offset_left = -19.0
|
||||
offset_top = 14.0
|
||||
offset_right = 57.0
|
||||
offset_bottom = 33.0
|
||||
text = "Модуляция"
|
||||
|
||||
[node name="output_1" type="AnimatedSprite2D" parent="."]
|
||||
position = Vector2(422, 177)
|
||||
sprite_frames = SubResource("SpriteFrames_1wf07")
|
||||
|
||||
@@ -1,43 +1,123 @@
|
||||
@tool
|
||||
extends 'res://scenes/контроль/прибор.gd'
|
||||
|
||||
const constants_v = {
|
||||
'POWER_UKP_1': 31,
|
||||
'POWER_UKP_2': 63,
|
||||
'DKM_BIT_4': 3,
|
||||
'DKM_BIT_5': 4,
|
||||
'BASE_ADDR_EMS_G': 0x120,
|
||||
'ADDR_UG_LITERA_1': 0x106,
|
||||
'ADDR_UG_LITERA_2': 0x108,
|
||||
'ADDR_UG_LITERA_3': 0x10A,
|
||||
'TEMP_THRESHOLD': 70,
|
||||
'POWER_THRESHOLD': 40,
|
||||
'RAY_DOU_NUM': 0x3,
|
||||
'ATT_UM_4': 0x2,
|
||||
'ATT_UM_5': 0x3,
|
||||
'POWER_UM': 100,
|
||||
'TIMER_DELAY': 10.0,
|
||||
'STATE_MASHINE_TIMER': 0.3,
|
||||
}
|
||||
# Конфигурация параметров для каждого прибора
|
||||
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': 100.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_kasseta_y5_prd_config_v: = {
|
||||
'yau07': false,
|
||||
'ems': false,
|
||||
'ug': false,
|
||||
'ukp1': false,
|
||||
'ukp2': false,
|
||||
}
|
||||
|
||||
# Основные переменные
|
||||
var start_litera: int = 4
|
||||
var ug_work_1: int = 2 ## Аттенюация усилителей мощности
|
||||
var ug_work_2: int = 3 ## Аттенюация усилителей мощности
|
||||
# Флаги и таймеры
|
||||
var mashine_timer: Timer = Timer.new()
|
||||
var prd_v_module: Object
|
||||
var unit_prd_v: Object
|
||||
var control_prd_v: Object
|
||||
# Результаты контроля
|
||||
var control_results_v: Dictionary = {
|
||||
'block_ip': false, # Проверка касет П1 и ИП МА2000
|
||||
'temperature': true, # Проверка температур УМ
|
||||
'dkm_4': false,
|
||||
'dkm_5': false,
|
||||
'dou_4': false,
|
||||
'dou_5': false,
|
||||
'fs_4': 2,
|
||||
'fs_5': 2,
|
||||
}
|
||||
var test_control_v = preload('res://scripts/pribor-prd.gd')
|
||||
var ctrl_pos = 70
|
||||
|
||||
|
||||
func on_state_mashine() -> void:
|
||||
control_prd_v.state_control_machine()
|
||||
|
||||
|
||||
func _ready() -> void:
|
||||
if Engine.is_editor_hint():
|
||||
return
|
||||
var unit_name = get_meta('unit_name')[0]
|
||||
var prd_v_module = prd.prd_dict[unit_name]
|
||||
unit_prd_v = prd_v_module.unit_control
|
||||
var power_amplifier: Array = get_tree().get_nodes_in_group('power_amplifier')
|
||||
for temp in power_amplifier:
|
||||
temp.value1 = -70
|
||||
unit_prd_v.connect('control_is_over', Callable(self, 'on_press_device'))
|
||||
on_press_device()
|
||||
|
||||
|
||||
func _process(_delta: float) -> void:
|
||||
if Engine.is_editor_hint():
|
||||
return
|
||||
set_frame($input_0, unit_prd_v.ems_input_1)
|
||||
set_frame($input_1, unit_prd_v.ems_input_2)
|
||||
set_frame($output_0, unit_prd_v.ems_output_1)
|
||||
set_frame($output_1, unit_prd_v.ems_output_2)
|
||||
|
||||
|
||||
func set_frame(node_frame: Node, val: int): node_frame.set_frame(val)
|
||||
|
||||
|
||||
func start_control() -> void:
|
||||
initialize_connections()
|
||||
setup_timer()
|
||||
set_default_state()
|
||||
find_labels(self)
|
||||
|
||||
|
||||
func initialize_connections() -> void:
|
||||
var unit_name = get_meta('unit_name')[0]
|
||||
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 init_data: Dictionary = {
|
||||
'control_label': $control_result,
|
||||
'power_amplifiers': power_amplifiers,
|
||||
'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_kasseta_y5_prd_config': block_kasseta_y5_prd_config_v,
|
||||
'control_results': control_results_v,
|
||||
'current_litera': start_litera,
|
||||
}
|
||||
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'))
|
||||
|
||||
|
||||
func setup_timer() -> void:
|
||||
add_child(mashine_timer)
|
||||
mashine_timer.connect('timeout', Callable(self, 'on_state_mashine'))
|
||||
mashine_timer.wait_time = constants_v.STATE_MASHINE_TIMER
|
||||
mashine_timer.start()
|
||||
|
||||
|
||||
func set_default_state() -> void:
|
||||
for group in get_tree().get_nodes_in_group('default_reset'):
|
||||
group.state = STATE_VAL.NONE
|
||||
@@ -49,121 +129,59 @@ func set_default_state() -> void:
|
||||
func _enter_tree() -> void:
|
||||
if Engine.is_editor_hint():
|
||||
return
|
||||
$control_result.text = 'Ожидается запуск контроля ...' # TODO: Необходимо сделать пулл сообщений
|
||||
$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:
|
||||
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]])
|
||||
prd_v_module.cmd_array.append([unit_prd_v.CmdCode.WRITE_ISA, [constants_v.ADDR_UG_LITERA_1, ug_work_1, constants_v.ADDR_UG_LITERA_2, ug_work_2]])
|
||||
|
||||
|
||||
static func temperature_fill(temperature_arr_node: Array, temperature_dic: Dictionary)->void:
|
||||
for i_node_temperature in temperature_arr_node:
|
||||
var temperature_meta: String = i_node_temperature.get_meta('um')
|
||||
if not temperature_dic.has(temperature_meta): return
|
||||
i_node_temperature.value1 = temperature_dic[temperature_meta]
|
||||
func on_line_changed(unit_pribor: Object) -> void:
|
||||
if not unit_pribor.online:
|
||||
set_default_state()
|
||||
|
||||
|
||||
static func power_fill(pow_dic: Dictionary, fs_result: Dictionary, power_amplifier: Array, POWER_THRESHOLD: int) -> void:
|
||||
func on_mode_changed(in_tree: bool) -> void:
|
||||
if not in_tree:
|
||||
mashine_timer.stop()
|
||||
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 power_fill(pow_dic: Dictionary, fs_result: Dictionary) -> void:
|
||||
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 not pow_dic.has(powamp_meta): return
|
||||
if pow_dic[powamp_meta].size() < 6:
|
||||
status = STATE_VAL.ERROR
|
||||
else:
|
||||
if powamp_meta in ['um_1', 'um_2', 'um_3', 'um_4', 'um_5', 'um_6'] and not fs_result.fs_4: return
|
||||
if powamp_meta in ['um_9', 'um_10', 'um_11', 'um_12', 'um_13', 'um_14'] and not fs_result.fs_5: return
|
||||
if powamp_meta in ['um_7', 'um_8', 'um_9', 'um_10', 'um_11', 'um_12'] and not fs_result.fs_5: return
|
||||
i_powapm.value0 = pow_dic[powamp_meta]
|
||||
for i_p in pow_dic[powamp_meta]:
|
||||
if i_p < POWER_THRESHOLD:
|
||||
if i_p < constants_v.POWER_THRESHOLD:
|
||||
status = STATE_VAL.ERROR
|
||||
i_powapm.state = status
|
||||
|
||||
|
||||
## Проверка температур УМ от УКП
|
||||
static func check_temperature_um(status_prd: PackedByteArray, power_amplifier: Array) -> bool:
|
||||
if power_amplifier.size() < 1: return false
|
||||
const Constants: Dictionary = {
|
||||
'CONST_MIN_TEMP': -25,
|
||||
'MAXIMUM_CODE_ADC': 3796,
|
||||
'MINIMUM_CODE_AD': 2660,
|
||||
'TEMPERATURE_UKP_1': 47,
|
||||
'TEMPERATURE_UKP_2': 79,
|
||||
}
|
||||
const TEMP: float = 115.0 / (Constants.MAXIMUM_CODE_ADC - Constants.MINIMUM_CODE_AD)
|
||||
var ukp1_online: int = (status_prd[0] >> 2) & 1
|
||||
var ukp2_online = (status_prd[0] >> 3) & 1
|
||||
var all_temp_is_ok: bool = true
|
||||
|
||||
if ukp1_online:
|
||||
var tmp_1: int
|
||||
var temperature_ukp_1: int
|
||||
for i_temp in 6:
|
||||
temperature_ukp_1 = status_prd.decode_u16(Constants.TEMPERATURE_UKP_1 + 2 * i_temp)
|
||||
tmp_1 = round(Constants.CONST_MIN_TEMP + (Constants.MAXIMUM_CODE_ADC - temperature_ukp_1) * TEMP + 3)
|
||||
power_amplifier[i_temp].value1 = tmp_1
|
||||
if tmp_1>70:
|
||||
all_temp_is_ok = false
|
||||
|
||||
if power_amplifier.size() > 12: # Темпуратура от УМ литеры 1
|
||||
temperature_ukp_1 = status_prd.decode_u16(Constants.TEMPERATURE_UKP_1 + 2 * 7)
|
||||
tmp_1 = round(Constants.CONST_MIN_TEMP + (Constants.MAXIMUM_CODE_ADC - temperature_ukp_1) * TEMP + 3)
|
||||
power_amplifier[6].value1 = tmp_1
|
||||
if tmp_1>70:
|
||||
all_temp_is_ok = false
|
||||
|
||||
if ukp2_online:
|
||||
for i_temp in 6:
|
||||
var temperature_ukp_2: int = status_prd.decode_u16(Constants.TEMPERATURE_UKP_2 + 2 * i_temp)
|
||||
var tmp_2: int = round(Constants.CONST_MIN_TEMP + (Constants.MAXIMUM_CODE_ADC - temperature_ukp_2) * TEMP + 3)
|
||||
if power_amplifier.size() > 12:
|
||||
power_amplifier[i_temp+7].value1 = tmp_2
|
||||
if tmp_2>70:
|
||||
all_temp_is_ok = false
|
||||
else:
|
||||
power_amplifier[i_temp+6].value1 = tmp_2
|
||||
if tmp_2>70:
|
||||
all_temp_is_ok = false
|
||||
return all_temp_is_ok
|
||||
|
||||
|
||||
func on_press_device() -> void:
|
||||
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')
|
||||
var node_ip_power_arr: Array = get_tree().get_nodes_in_group('power_supply')
|
||||
var fs_nodes: Array = get_tree().get_nodes_in_group('fs_group')
|
||||
var power_amplifier: Array = get_tree().get_nodes_in_group('power_amplifier')
|
||||
var module_fs_4: Node = $kasseta_FS_VD/ref_A6
|
||||
var dou_4: Node = $dou4_A5
|
||||
var module_fs_5: Node = $kasseta_FS_VD/ref_A2
|
||||
var dou_5: Node = $dou5_A6
|
||||
var for_control_result: Dictionary = {
|
||||
'result_dic': unit_prd_v.control_results,
|
||||
'power_dic': unit_prd_v.power_result,
|
||||
'block_kasseta_y5_config': unit_prd_v.block_kasseta_y5_config,
|
||||
'block_ip_config': unit_prd_v.block_ip_config,
|
||||
'temperature_um' : unit_prd_v.temperature_um,
|
||||
'nodes_y5': nodes_y5,
|
||||
'node_ip_power_arr': node_ip_power_arr,
|
||||
'fs_nodes': fs_nodes,
|
||||
'power_amplifier': power_amplifier,
|
||||
'POWER_THRESHOLD': unit_prd_v.constants.POWER_THRESHOLD,
|
||||
'name_prd': unit_prd_v.self_name,
|
||||
'module_fs_4': module_fs_4,
|
||||
'dou_4': dou_4,
|
||||
'module_fs_5': module_fs_5,
|
||||
'dou_5': dou_5,
|
||||
}
|
||||
on_control_result(for_control_result)
|
||||
|
||||
|
||||
static func on_control_result(for_result_dic: Dictionary) -> void:
|
||||
temperature_fill(for_result_dic.power_amplifier, for_result_dic.temperature_um)
|
||||
|
||||
var block_kasseta_y5_prd_config_v: Dictionary = for_result_dic.block_kasseta_y5_config
|
||||
var nodes_y5: Array = for_result_dic.nodes_y5
|
||||
for node_y5 in nodes_y5:
|
||||
var meta_y5 = node_y5.get_meta('y5')
|
||||
if block_kasseta_y5_prd_config_v.has(meta_y5):
|
||||
@@ -172,36 +190,45 @@ static func on_control_result(for_result_dic: Dictionary) -> void:
|
||||
break
|
||||
node_y5.state = STATE_VAL.GOOD if block_kasseta_y5_prd_config_v[meta_y5] else STATE_VAL.ERROR
|
||||
|
||||
var block_ip_config_v: Dictionary = for_result_dic.block_ip_config
|
||||
for power_supply in for_result_dic.node_ip_power_arr:
|
||||
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
|
||||
|
||||
## If control is end
|
||||
var result_dic: Dictionary = for_result_dic.result_dic
|
||||
for f in for_result_dic.fs_nodes:
|
||||
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 result_dic.has(fs_meta):
|
||||
f.state = result_dic[fs_meta]
|
||||
var new_state = result_dic[fs_meta]
|
||||
f.state = new_state
|
||||
result_dic[fs_meta] = new_state
|
||||
|
||||
if result_dic.fs_5 == 1 and block_kasseta_y5_prd_config_v['yau07']:
|
||||
for_result_dic.module_fs_5.state = STATE_VAL.GOOD if result_dic.dkm_5 else STATE_VAL.ERROR
|
||||
for_result_dic.dou_5.state = STATE_VAL.GOOD if result_dic.dou_5 else STATE_VAL.ERROR
|
||||
|
||||
if result_dic.fs_4 == 1 and block_kasseta_y5_prd_config_v['yau07']:
|
||||
for_result_dic.module_fs_4.state = STATE_VAL.GOOD if result_dic.dkm_4 else STATE_VAL.ERROR
|
||||
for_result_dic.dou_4.state = STATE_VAL.GOOD if result_dic.dou_4 else STATE_VAL.ERROR
|
||||
|
||||
if block_kasseta_y5_prd_config_v['yau07']:
|
||||
power_fill(for_result_dic.power_dic, for_result_dic.result_dic, for_result_dic.power_amplifier, for_result_dic.POWER_THRESHOLD)
|
||||
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 = 0
|
||||
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 = 0
|
||||
power_fill(power_dic, result_dic)
|
||||
|
||||
var result: bool = true
|
||||
var result = true
|
||||
for device in result_dic.values():
|
||||
if not device:
|
||||
result = false
|
||||
|
||||
log.message(Logger.INFO, 'Прибор ПРД-%s %s' % [for_result_dic.name_prd, ['неисправен', 'исправен'][int(result)]])
|
||||
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.GREEN)
|
||||
else:
|
||||
$control_result.text = 'Прибор ПРД-%s неисправен' % name_prd
|
||||
$control_result.add_theme_color_override('font_color', Color.RED)
|
||||
|
||||
|
||||
func find_labels(node1: Node):
|
||||
|
||||
@@ -1,36 +1,13 @@
|
||||
[gd_scene load_steps=13 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"]
|
||||
[ext_resource type="Texture2D" uid="uid://c4mdrmk7h638f" path="res://data/nine-patch-round.png" id="3_wyy1b"]
|
||||
[ext_resource type="PackedScene" uid="uid://bk1655p4e8y4u" path="res://scenes/контроль/кассета-у-5-нв.tscn" id="4_gl2bl"]
|
||||
[ext_resource type="PackedScene" uid="uid://cd5sue1e8iyrv" path="res://scenes/pribor-prd-n/kasseta-fs-nd.tscn" id="5_nhd2k"]
|
||||
[ext_resource type="Script" uid="uid://crpedygm3gohi" path="res://scenes/контроль/кассета.gd" id="6_os4mt"]
|
||||
[ext_resource type="PackedScene" uid="uid://p2suppildvq0" path="res://scenes/контроль/элемент-в.tscn" id="7_38u2b"]
|
||||
[ext_resource type="PackedScene" uid="uid://bcyxqni7gxvtq" path="res://scenes/контроль/блок-в.tscn" id="8_4e87c"]
|
||||
[ext_resource type="Texture2D" uid="uid://belwchvdktrw0" path="res://data/эмс-бланк.png" id="9_4e87c"]
|
||||
[ext_resource type="Texture2D" uid="uid://bwddxs24es81u" path="res://data/эмс-бланк-пост.png" id="10_g8fvp"]
|
||||
[ext_resource type="Texture2D" uid="uid://pfoscstbm025" path="res://data/эмс-бланк-перем.png" id="11_gsby4"]
|
||||
[ext_resource type="Texture2D" uid="uid://dvl3sq036gn75" path="res://data/эмс-бланк-замыкание.png" id="12_vxfkm"]
|
||||
|
||||
[sub_resource type="SpriteFrames" id="SpriteFrames_s5gcy"]
|
||||
animations = [{
|
||||
"frames": [{
|
||||
"duration": 1.0,
|
||||
"texture": ExtResource("9_4e87c")
|
||||
}, {
|
||||
"duration": 1.0,
|
||||
"texture": ExtResource("10_g8fvp")
|
||||
}, {
|
||||
"duration": 1.0,
|
||||
"texture": ExtResource("11_gsby4")
|
||||
}, {
|
||||
"duration": 1.0,
|
||||
"texture": ExtResource("12_vxfkm")
|
||||
}],
|
||||
"loop": true,
|
||||
"name": &"default",
|
||||
"speed": 5.0
|
||||
}]
|
||||
|
||||
[node name="pribor_prd_v" type="Control"]
|
||||
layout_mode = 3
|
||||
@@ -103,83 +80,12 @@ text = "Панель
|
||||
horizontal_alignment = 1
|
||||
vertical_alignment = 1
|
||||
|
||||
[node name="kasseta_U5" type="NinePatchRect" parent="."]
|
||||
[node name="kasseta_U5" parent="." instance=ExtResource("4_gl2bl")]
|
||||
layout_mode = 0
|
||||
offset_left = 175.0
|
||||
offset_top = 242.0
|
||||
offset_right = 485.0
|
||||
offset_bottom = 432.0
|
||||
texture = ExtResource("3_wyy1b")
|
||||
patch_margin_left = 16
|
||||
patch_margin_top = 16
|
||||
patch_margin_right = 16
|
||||
patch_margin_bottom = 16
|
||||
script = ExtResource("6_os4mt")
|
||||
|
||||
[node name="lbl_fname" type="Label" parent="kasseta_U5"]
|
||||
self_modulate = Color(1, 1, 1, 0.62)
|
||||
layout_mode = 0
|
||||
offset_left = 5.0
|
||||
offset_top = 7.0
|
||||
offset_right = 305.0
|
||||
offset_bottom = 35.0
|
||||
text = "Кассета У5"
|
||||
horizontal_alignment = 1
|
||||
vertical_alignment = 1
|
||||
|
||||
[node name="ref_A24" parent="kasseta_U5" groups=["power_supply"] instance=ExtResource("7_38u2b")]
|
||||
offset_left = 5.0
|
||||
offset_top = 32.0
|
||||
offset_right = 55.0
|
||||
offset_bottom = 182.0
|
||||
fname = "ИП5-25"
|
||||
rname = "A24"
|
||||
metadata/ip = "ip5_25"
|
||||
|
||||
[node name="ref_A30" parent="kasseta_U5" groups=["y-5"] instance=ExtResource("7_38u2b")]
|
||||
offset_left = 55.0
|
||||
offset_top = 32.0
|
||||
offset_right = 105.0
|
||||
offset_bottom = 182.0
|
||||
fname = "ЯУ-07Б"
|
||||
rname = "A30"
|
||||
metadata/y5 = "yau07"
|
||||
|
||||
[node name="ref_A26" parent="kasseta_U5" groups=["y-5"] instance=ExtResource("7_38u2b")]
|
||||
offset_left = 105.0
|
||||
offset_top = 32.0
|
||||
offset_right = 155.0
|
||||
offset_bottom = 182.0
|
||||
fname = "ЭМС-Г"
|
||||
rname = "A26"
|
||||
metadata/y5 = "ems"
|
||||
|
||||
[node name="ref_A27" parent="kasseta_U5" groups=["y-5"] instance=ExtResource("7_38u2b")]
|
||||
offset_left = 155.0
|
||||
offset_top = 32.0
|
||||
offset_right = 205.0
|
||||
offset_bottom = 182.0
|
||||
fname = "УГ"
|
||||
rname = "A27"
|
||||
metadata/y5 = "ug"
|
||||
|
||||
[node name="ref_A28" parent="kasseta_U5" groups=["y-5"] instance=ExtResource("7_38u2b")]
|
||||
offset_left = 205.0
|
||||
offset_top = 32.0
|
||||
offset_right = 255.0
|
||||
offset_bottom = 182.0
|
||||
fname = "УКП"
|
||||
rname = "A28"
|
||||
metadata/y5 = "ukp1"
|
||||
|
||||
[node name="ref_A29" parent="kasseta_U5" groups=["y-5"] instance=ExtResource("7_38u2b")]
|
||||
offset_left = 254.0
|
||||
offset_top = 32.0
|
||||
offset_right = 304.0
|
||||
offset_bottom = 182.0
|
||||
fname = "УКП"
|
||||
rname = "A29"
|
||||
metadata/y5 = "ukp2"
|
||||
|
||||
[node name="kasseta_FS_VD" parent="." instance=ExtResource("5_nhd2k")]
|
||||
layout_mode = 0
|
||||
@@ -247,7 +153,7 @@ offset_left = 485.0
|
||||
offset_top = 242.0
|
||||
offset_right = 652.0
|
||||
offset_bottom = 337.0
|
||||
fname = "УМ1535А"
|
||||
fname = "УМ1535Б"
|
||||
rname = "A7"
|
||||
value0_info = "Мощность, Вт"
|
||||
value1_info = "Температура,°C"
|
||||
@@ -323,7 +229,7 @@ fname = "УМ1535А"
|
||||
rname = "A13"
|
||||
value0_info = "Мощность, Вт"
|
||||
value1_info = "Температура,°C"
|
||||
metadata/um = "um_9"
|
||||
metadata/um = "um_7"
|
||||
|
||||
[node name="um1535_A14" parent="." groups=["power_amplifier"] instance=ExtResource("8_4e87c")]
|
||||
layout_mode = 0
|
||||
@@ -335,7 +241,7 @@ fname = "УМ1535А"
|
||||
rname = "A14"
|
||||
value0_info = "Мощность, Вт"
|
||||
value1_info = "Температура,°C"
|
||||
metadata/um = "um_10"
|
||||
metadata/um = "um_8"
|
||||
|
||||
[node name="um1535_A15" parent="." groups=["power_amplifier"] instance=ExtResource("8_4e87c")]
|
||||
layout_mode = 0
|
||||
@@ -347,7 +253,7 @@ fname = "УМ1535А"
|
||||
rname = "A15"
|
||||
value0_info = "Мощность, Вт"
|
||||
value1_info = "Температура,°C"
|
||||
metadata/um = "um_11"
|
||||
metadata/um = "um_9"
|
||||
|
||||
[node name="um1535_A16" parent="." groups=["power_amplifier"] instance=ExtResource("8_4e87c")]
|
||||
layout_mode = 0
|
||||
@@ -359,7 +265,7 @@ fname = "УМ1535А"
|
||||
rname = "A16"
|
||||
value0_info = "Мощность, Вт"
|
||||
value1_info = "Температура,°C"
|
||||
metadata/um = "um_12"
|
||||
metadata/um = "um_10"
|
||||
|
||||
[node name="um1535_A17" parent="." groups=["power_amplifier"] instance=ExtResource("8_4e87c")]
|
||||
layout_mode = 0
|
||||
@@ -371,7 +277,7 @@ fname = "УМ1535А"
|
||||
rname = "A17"
|
||||
value0_info = "Мощность, Вт"
|
||||
value1_info = "Температура,°C"
|
||||
metadata/um = "um_13"
|
||||
metadata/um = "um_11"
|
||||
|
||||
[node name="um1535_A18" parent="." groups=["power_amplifier"] instance=ExtResource("8_4e87c")]
|
||||
layout_mode = 0
|
||||
@@ -383,7 +289,7 @@ fname = "УМ1535А"
|
||||
rname = "A18"
|
||||
value0_info = "Мощность, Вт"
|
||||
value1_info = "Температура,°C"
|
||||
metadata/um = "um_14"
|
||||
metadata/um = "um_12"
|
||||
|
||||
[node name="control_result" type="Label" parent="."]
|
||||
layout_mode = 0
|
||||
@@ -393,33 +299,3 @@ offset_right = 649.0
|
||||
offset_bottom = 1003.0
|
||||
horizontal_alignment = 1
|
||||
metadata/_edit_lock_ = true
|
||||
|
||||
[node name="input_0" type="AnimatedSprite2D" parent="."]
|
||||
position = Vector2(234, 177)
|
||||
sprite_frames = SubResource("SpriteFrames_s5gcy")
|
||||
|
||||
[node name="Label" type="Label" parent="input_0"]
|
||||
offset_left = -15.0
|
||||
offset_top = 15.0
|
||||
offset_right = 53.0
|
||||
offset_bottom = 34.0
|
||||
text = "Вход ЕМС"
|
||||
|
||||
[node name="input_1" type="AnimatedSprite2D" parent="."]
|
||||
position = Vector2(277, 177)
|
||||
sprite_frames = SubResource("SpriteFrames_s5gcy")
|
||||
|
||||
[node name="output_0" type="AnimatedSprite2D" parent="."]
|
||||
position = Vector2(381, 177)
|
||||
sprite_frames = SubResource("SpriteFrames_s5gcy")
|
||||
|
||||
[node name="Label" type="Label" parent="output_0"]
|
||||
offset_left = -19.0
|
||||
offset_top = 14.0
|
||||
offset_right = 57.0
|
||||
offset_bottom = 33.0
|
||||
text = "Модуляция"
|
||||
|
||||
[node name="output_1" type="AnimatedSprite2D" parent="."]
|
||||
position = Vector2(422, 177)
|
||||
sprite_frames = SubResource("SpriteFrames_s5gcy")
|
||||
|
||||
@@ -4,7 +4,7 @@ const STATUS_GOOD := {"text": "Исправно", "color": Color.GREEN, "font_co
|
||||
const STATUS_BAD := {"text": "Отказ", "color": Color.RED, "font_color": Color.WHITE}
|
||||
var _is_uf_status_initialized: bool = false
|
||||
var is_prd_operational: bool = true
|
||||
var is_uf_operational: bool = true
|
||||
var is_uf_operational: bool = false
|
||||
|
||||
|
||||
func _ready() -> void:
|
||||
|
||||
@@ -79,10 +79,25 @@ visible = false
|
||||
layout_mode = 2
|
||||
metadata/_tab_index = 5
|
||||
|
||||
[node name="lbl_ready" type="Label" parent="."]
|
||||
layout_mode = 0
|
||||
offset_left = 1503.0
|
||||
offset_right = 1600.0
|
||||
offset_bottom = 27.0
|
||||
tooltip_text = "Готовность аппаратуры к работе"
|
||||
mouse_filter = 0
|
||||
theme_override_font_sizes/font_size = 14
|
||||
theme_override_styles/normal = SubResource("StyleBoxFlat_o1r22")
|
||||
text = "Нет связи"
|
||||
horizontal_alignment = 1
|
||||
vertical_alignment = 1
|
||||
script = ExtResource("8_tidwt")
|
||||
metadata/_edit_lock_ = true
|
||||
|
||||
[node name="remote_control" type="Label" parent="."]
|
||||
layout_mode = 2
|
||||
offset_left = 1242.0
|
||||
offset_right = 1402.0
|
||||
offset_left = 1244.0
|
||||
offset_right = 1401.0
|
||||
offset_bottom = 27.0
|
||||
tooltip_text = "Комплекс находится под внешним управлением"
|
||||
mouse_filter = 0
|
||||
@@ -94,7 +109,7 @@ vertical_alignment = 1
|
||||
|
||||
[node name="тренаж_режим" type="Button" parent="."]
|
||||
layout_mode = 0
|
||||
offset_left = 1405.0
|
||||
offset_left = 1404.0
|
||||
offset_right = 1501.0
|
||||
offset_bottom = 27.0
|
||||
tooltip_text = "Задействовать режим Тренаж"
|
||||
@@ -110,20 +125,5 @@ toggle_mode = true
|
||||
text = "Тренаж"
|
||||
script = ExtResource("9_41d34")
|
||||
|
||||
[node name="lbl_ready" type="Label" parent="."]
|
||||
layout_mode = 0
|
||||
offset_left = 1504.0
|
||||
offset_right = 1600.0
|
||||
offset_bottom = 27.0
|
||||
tooltip_text = "Готовность аппаратуры к работе"
|
||||
mouse_filter = 0
|
||||
theme_override_font_sizes/font_size = 14
|
||||
theme_override_styles/normal = SubResource("StyleBoxFlat_o1r22")
|
||||
text = "Нет связи"
|
||||
horizontal_alignment = 1
|
||||
vertical_alignment = 1
|
||||
script = ExtResource("8_tidwt")
|
||||
metadata/_edit_lock_ = true
|
||||
|
||||
[connection signal="tab_changed" from="tab_switch" to="tab_switch" method="_on_tab_changed"]
|
||||
[connection signal="toggled" from="тренаж_режим" to="tab_switch" method="_on_button_trenazh_toggled"]
|
||||
[connection signal="toggled" from="тренаж_режим" to="tab_switch" method="_on_button_trenaj_toggled"]
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
[gd_scene load_steps=2 format=3 uid="uid://ce5mtxqd1ndru"]
|
||||
|
||||
[ext_resource type="Texture2D" uid="uid://cgqo5gucd2be0" path="res://scenes/tilemap/dot.png" id="2_rq0y0"]
|
||||
[ext_resource type="Texture2D" uid="uid://cgqo5gucd2be0" path="res://data/dot.png" id="2_rq0y0"]
|
||||
|
||||
[node name="rect" type="TextureRect"]
|
||||
offset_left = -16.0
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
[gd_scene load_steps=2 format=3 uid="uid://c2523fcn14gn4"]
|
||||
|
||||
[ext_resource type="Texture2D" uid="uid://cj1f2uy6qfvki" path="res://scenes/tilemap/23900.png" id="1_v0nwa"]
|
||||
[ext_resource type="Texture2D" uid="uid://cj1f2uy6qfvki" path="res://data/23900.png" id="1_v0nwa"]
|
||||
|
||||
[node name="23900" type="Sprite2D"]
|
||||
scale = Vector2(0.496934, 0.496934)
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
[gd_scene load_steps=2 format=3 uid="uid://cv342kc1jj5hb"]
|
||||
|
||||
[ext_resource type="Texture2D" uid="uid://mobingoxskg1" path="res://scenes/tilemap/threat.png" id="1_pvxsy"]
|
||||
[ext_resource type="Texture2D" uid="uid://mobingoxskg1" path="res://data/threat.png" id="1_pvxsy"]
|
||||
|
||||
[node name="Threat" type="Sprite2D"]
|
||||
scale = Vector2(0.0244268, 0.0244268)
|
||||
|
||||
@@ -373,7 +373,7 @@ func _process(delta) -> void:
|
||||
remove_child(req)
|
||||
req.queue_free()
|
||||
_req_count -= 1
|
||||
push_error('запрос \"%s\" не отправлен' % tile.url) #TODO: For Deugs
|
||||
push_error('запрос \"%s\" не отправлен' % tile.url)
|
||||
if _queue.is_empty():
|
||||
emit_signal('load_completed')
|
||||
|
||||
@@ -727,7 +727,7 @@ func blend_mask(val: bool) -> void:
|
||||
|
||||
|
||||
func update_coordinates_label(lon: float, lat: float) -> void:
|
||||
coordinates_label = 'Координаты:\nNS:%f\nEW:%f' % [lat, lon]
|
||||
coordinates_label = 'Координаты: NS:%f, EW:%f' % [lat, lon]
|
||||
signaller.emit_signal('update_coordinates_map', coordinates_label)
|
||||
|
||||
|
||||
|
||||
@@ -68,6 +68,7 @@ func _stop_pulse():
|
||||
pulsing = false
|
||||
disabled = false
|
||||
text = original_text
|
||||
tooltip_text = ''
|
||||
|
||||
|
||||
func _on_status_change():
|
||||
|
||||
@@ -35,7 +35,7 @@ signal pressed(control: PanelContainer)
|
||||
if not is_inside_tree():
|
||||
return
|
||||
$margin/vbox/grid1/level7.value = v
|
||||
$margin/vbox/grid1/level7.tint_progress = Color.RED if v >= 70 else Color.GOLD if v >= 60 else Color.WHITE
|
||||
$margin/vbox/grid1/level7.tint_progress = Color.RED if v > 70 else Color.WHITE
|
||||
|
||||
|
||||
@export var min_value0: float:
|
||||
@@ -191,8 +191,8 @@ func _enter_tree_defered():
|
||||
$margin/vbox/grid0/rname.text = rname
|
||||
$margin/vbox/grid0/fname.text = fname
|
||||
$margin/vbox/grid0/state.texture = textures[state]
|
||||
#else:
|
||||
#push_warning('обращение к %s вне дерева' % self) TODO: пишеться только когда заходишь в проект а дальше не используется
|
||||
else:
|
||||
push_warning('обращение к %s вне дерева' % self)
|
||||
|
||||
|
||||
func get_level_nodes() -> Array:
|
||||
@@ -273,8 +273,10 @@ theme_override_styles/panel = SubResource("StyleBoxEmpty_3nd2u")
|
||||
script = SubResource("GDScript_oj3k3")
|
||||
textures = [ExtResource("1_n1aqt"), ExtResource("2_rim3u"), ExtResource("3_3w8fg")]
|
||||
value0 = [20.0, 30.0, 40.0, 50.0, 60.0, 70.0]
|
||||
max_value0 = 1400.0
|
||||
max_value1 = 70.0
|
||||
value1 = 56.0
|
||||
min_value1 = -50.0
|
||||
max_value0 = 100.0
|
||||
max_value1 = 120.0
|
||||
step0 = 1.0
|
||||
step1 = 1.0
|
||||
value_name0 = "P,%"
|
||||
@@ -474,10 +476,12 @@ layout_mode = 2
|
||||
size_flags_horizontal = 3
|
||||
size_flags_vertical = 3
|
||||
tooltip_text = "
|
||||
Текущее: 0.00
|
||||
Диапазон: 0.00…70.00"
|
||||
Текущее: 56.00
|
||||
Диапазон: -50.00…120.00"
|
||||
mouse_filter = 0
|
||||
max_value = 70.0
|
||||
min_value = -50.0
|
||||
max_value = 120.0
|
||||
value = 56.0
|
||||
fill_mode = 3
|
||||
nine_patch_stretch = true
|
||||
stretch_margin_left = 8
|
||||
|
||||
@@ -35,7 +35,7 @@ signal pressed(control: PanelContainer)
|
||||
if not is_inside_tree():
|
||||
return
|
||||
$margin/vbox/grid1/level7.value = v
|
||||
$margin/vbox/grid1/level7.tint_progress = Color.RED if v >= 70 else Color.GOLD if v >= 60 else Color.WHITE
|
||||
$margin/vbox/grid1/level7.tint_progress = Color.RED if v >= 50 else Color.GOLD if v >= 40 else Color.WHITE
|
||||
|
||||
|
||||
@export var min_value0: float:
|
||||
@@ -259,8 +259,10 @@ theme_override_styles/panel = SubResource("StyleBoxEmpty_3nd2u")
|
||||
script = SubResource("GDScript_oj3k3")
|
||||
textures = [ExtResource("1_uojqc"), ExtResource("2_a8ar3"), ExtResource("3_xwd13")]
|
||||
value0 = [20.0, 30.0, 40.0, 50.0, 60.0, 70.0]
|
||||
value1 = -40.0
|
||||
min_value1 = -40.0
|
||||
max_value0 = 1400.0
|
||||
max_value1 = 70.0
|
||||
max_value1 = 55.0
|
||||
step0 = 1.0
|
||||
step1 = 1.0
|
||||
value_name0 = "P,%"
|
||||
@@ -363,10 +365,12 @@ layout_mode = 2
|
||||
size_flags_horizontal = 3
|
||||
size_flags_vertical = 3
|
||||
tooltip_text = "
|
||||
Текущее: 0.00
|
||||
Диапазон: 0.00…70.00"
|
||||
Текущее: -40.00
|
||||
Диапазон: -40.00…60.00"
|
||||
mouse_filter = 0
|
||||
max_value = 70.0
|
||||
min_value = -40.0
|
||||
max_value = 55.0
|
||||
value = -40.0
|
||||
fill_mode = 3
|
||||
nine_patch_stretch = true
|
||||
stretch_margin_left = 8
|
||||
|
||||
@@ -35,10 +35,9 @@ metadata/ip = "ip12_50_2"
|
||||
[node name="lbl_fname" type="Label" parent="."]
|
||||
self_modulate = Color(1, 1, 1, 0.62)
|
||||
layout_mode = 0
|
||||
offset_left = 8.0
|
||||
offset_left = 5.0
|
||||
offset_top = 5.0
|
||||
offset_right = 112.0
|
||||
offset_right = 105.0
|
||||
offset_bottom = 30.0
|
||||
text = "Касета П-2"
|
||||
horizontal_alignment = 1
|
||||
vertical_alignment = 1
|
||||
|
||||
@@ -31,7 +31,7 @@ offset_top = 32.0
|
||||
offset_right = 55.0
|
||||
offset_bottom = 182.0
|
||||
fname = "ИП5-25"
|
||||
rname = "A31"
|
||||
rname = "A24"
|
||||
metadata/ip = "ip5_25"
|
||||
|
||||
[node name="ref_A30" parent="." groups=["y-5"] instance=ExtResource("3_picsk")]
|
||||
@@ -40,7 +40,7 @@ offset_top = 32.0
|
||||
offset_right = 105.0
|
||||
offset_bottom = 182.0
|
||||
fname = "ЯУ-07Б"
|
||||
rname = "A37"
|
||||
rname = "A30"
|
||||
metadata/y5 = "yau07"
|
||||
|
||||
[node name="ref_A26" parent="." groups=["y-5"] instance=ExtResource("3_picsk")]
|
||||
@@ -49,7 +49,7 @@ offset_top = 32.0
|
||||
offset_right = 155.0
|
||||
offset_bottom = 182.0
|
||||
fname = "ЭМС-Г"
|
||||
rname = "A33"
|
||||
rname = "A26"
|
||||
metadata/y5 = "ems"
|
||||
|
||||
[node name="ref_A27" parent="." groups=["y-5"] instance=ExtResource("3_picsk")]
|
||||
@@ -58,7 +58,7 @@ offset_top = 32.0
|
||||
offset_right = 205.0
|
||||
offset_bottom = 182.0
|
||||
fname = "УГ"
|
||||
rname = "A34"
|
||||
rname = "A27"
|
||||
metadata/y5 = "ug"
|
||||
|
||||
[node name="ref_A28" parent="." groups=["y-5"] instance=ExtResource("3_picsk")]
|
||||
@@ -67,7 +67,7 @@ offset_top = 32.0
|
||||
offset_right = 255.0
|
||||
offset_bottom = 182.0
|
||||
fname = "УКП"
|
||||
rname = "A36"
|
||||
rname = "A28"
|
||||
metadata/y5 = "ukp1"
|
||||
|
||||
[node name="ref_A29" parent="." groups=["y-5"] instance=ExtResource("3_picsk")]
|
||||
@@ -76,5 +76,5 @@ offset_top = 32.0
|
||||
offset_right = 304.0
|
||||
offset_bottom = 182.0
|
||||
fname = "УКП"
|
||||
rname = "A35"
|
||||
rname = "A29"
|
||||
metadata/y5 = "ukp2"
|
||||
|
||||
@@ -1,85 +1,39 @@
|
||||
@tool
|
||||
|
||||
extends TextureButton
|
||||
|
||||
@onready var tween: Tween
|
||||
@export var state_colors: Array
|
||||
|
||||
|
||||
func _ready():
|
||||
toggle_mode = true
|
||||
focus_mode = Control.FOCUS_ALL
|
||||
connect("focus_entered", _on_focus_entered)
|
||||
connect("focus_exited", _on_focus_exited)
|
||||
func _on_toggled(toggled_on): $frame.visible = toggled_on
|
||||
|
||||
|
||||
func _enter_tree() -> void:
|
||||
if has_node("label"):
|
||||
$label.self_modulate = state_colors[state]
|
||||
$label.self_modulate = state_colors[state]
|
||||
ProjectSettings.connect('settings_changed', _on_settings_changed)
|
||||
|
||||
|
||||
func update_progress_bar(target_value) -> void:
|
||||
if tween:
|
||||
tween.kill()
|
||||
tween = create_tween()
|
||||
tween.tween_property($control_progress, "value", target_value, 0.3)
|
||||
func _exit_tree() -> void:
|
||||
ProjectSettings.disconnect('settings_changed', _on_settings_changed)
|
||||
|
||||
|
||||
func _on_toggled(toggled_on):
|
||||
if has_node("frame"):
|
||||
$frame.visible = toggled_on
|
||||
|
||||
|
||||
func _on_focus_entered():
|
||||
button_pressed = true
|
||||
#enter_press() TODO: Пока что без выбора прибора
|
||||
|
||||
|
||||
func _on_focus_exited():
|
||||
pass
|
||||
|
||||
|
||||
func enter_press():
|
||||
var enter_event = InputEventAction.new()
|
||||
enter_event.action = "ui_accept"
|
||||
enter_event.pressed = true
|
||||
Input.parse_input_event(enter_event)
|
||||
func _on_settings_changed():
|
||||
if not is_inside_tree(): return
|
||||
var white_color = ProjectSettings.get_setting('Схема прибора. Белый цвет', Color.DIM_GRAY)
|
||||
var black_color = ProjectSettings.get_setting('Схема прибора. Чёрный цвет', Color.CORAL)
|
||||
$pic_functional.material.set('shader_parameter/white', white_color)
|
||||
$pic_functional.material.set('shader_parameter/black', black_color)
|
||||
|
||||
|
||||
@export var state: int:
|
||||
set(v):
|
||||
v = 0 if v < 0 else v % state_colors.size()
|
||||
state = v
|
||||
if is_inside_tree() and has_node("label"):
|
||||
if is_inside_tree():
|
||||
$label.self_modulate = state_colors[v]
|
||||
|
||||
|
||||
@export var progress_value: float = 0.0:
|
||||
@export var show_functional: bool:
|
||||
set(v):
|
||||
progress_value = v
|
||||
|
||||
show_functional = v
|
||||
if is_inside_tree():
|
||||
update_progress_bar(v)
|
||||
var max_val = $control_progress.get('max_value')
|
||||
var percentage = (v / max_val) * 100.0
|
||||
$control_progress.tooltip_text = 'Процесс контроля %01d%%' % percentage
|
||||
|
||||
|
||||
@export var progress_visible: bool:
|
||||
set(v):
|
||||
progress_visible = v
|
||||
if is_inside_tree():
|
||||
$control_progress.visible = v
|
||||
|
||||
|
||||
@export var progress_max_value: int:
|
||||
set(v):
|
||||
progress_max_value = v
|
||||
if is_inside_tree():
|
||||
$control_progress.max_value = v
|
||||
|
||||
|
||||
@export var progress_min_value: int:
|
||||
set(v):
|
||||
progress_min_value = v
|
||||
if is_inside_tree():
|
||||
$control_progress.min_value = v
|
||||
$pic_functional.visible = v
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -9,6 +9,7 @@ script/source = "class_name configure extends Panel
|
||||
const TableHeader = preload('res://table/header.tscn')
|
||||
const TableToggle = preload('res://table/settings-toggle.tscn')
|
||||
const TableEdit = preload('res://table/ячейка-2.tscn')
|
||||
const TableColor = preload('res://table/color-picker.tscn')
|
||||
|
||||
const ALIGNMENT = [HORIZONTAL_ALIGNMENT_CENTER, HORIZONTAL_ALIGNMENT_CENTER]
|
||||
const HEADER_ROW = [TableHeader, TableHeader]
|
||||
@@ -64,9 +65,11 @@ const SETTING_TABLE = [
|
||||
['Адрес БПО правого борта', TableEdit, TableEdit, 'http-адрес для запроса состояния прибора БПО'],
|
||||
['Период опроса состояния БПО, секунды', TableEdit, TableEdit, 'Время в секундах' ],
|
||||
['Период опроса состояния АФСП, секунды', TableEdit, TableEdit, 'Время в секундах' ],
|
||||
['уареп-трасса', TableEdit, TableEdit, 'IP-адрес для связи с Трассой [<адрес этого узла>, <адрес удалённого узла>, <порт этого узла>, <порт удалённого узла>]'],
|
||||
['уарэп-трасса', TableEdit, TableEdit, 'IP-адрес для связи с Трассой [<адрес этого узла>, <адрес удалённого узла>, <порт этого узла>, <порт удалённого узла>]'],
|
||||
['Включить работу по своим целям', TableEdit, TableToggle, 'Разрешает работу в секторе со своей целью'],
|
||||
['Список своих протоколов', TableEdit, TableEdit, 'Список протоколов целей, по которым запрещено работать' ], ]
|
||||
['Список своих протоколов', TableEdit, TableEdit, 'Список протоколов целей, по которым запрещено работать' ],
|
||||
['Схема прибора. Белый цвет', TableEdit, TableColor, 'Настройка отображаемого цвета фона' ],
|
||||
['Схема прибора. Чёрный цвет', TableEdit, TableColor, 'Настройка отображаемого цвета схемы' ], ]
|
||||
|
||||
const EXTERNAL_CU = 16 ## Внешнее целеуказание
|
||||
const TRASSA = 17
|
||||
|
||||
@@ -31,7 +31,8 @@ var strob_band_begin: float ## Ширина строба в моме
|
||||
var strob_dir_begin: float ## Направление антенны в момент начала перетаскивания.
|
||||
var strob_width_begin: float ## Ширина строба по углу в момент начала перетаскивания.
|
||||
var view_mode: MapViewMode ## Режим отображения карты
|
||||
var thrs_dict: Dictionary ## Ссылка на словарь целей
|
||||
var thrs_dict: Dictionary ## Ссылка на словарь целей
|
||||
var gos_flag = true ## Флаг работать по своим целям
|
||||
var color_ecm: Color
|
||||
var color_select: Color
|
||||
var color_emit: Color
|
||||
@@ -55,6 +56,7 @@ var fs_selected: Dictionary ## Словарь выбранных сектор
|
||||
var fs_active: Dictionary ## Словарь секторов назначенных на подавление
|
||||
var fs_emit: Dictionary ## Словарь секторов назначенных на подавление
|
||||
var fs_closed: Dictionary ## Словарь для секторов запрета
|
||||
var fs_failed: Array ## Индикация сломанных секторов (модули ФС). AntBandState.ANT_BAND_READY - исправен, AntBandState.ANT_BAND_FAILURE - сломан.
|
||||
|
||||
## Состояние перетаскивания.
|
||||
enum DragFSM {
|
||||
@@ -78,6 +80,11 @@ enum MapViewMode {
|
||||
}
|
||||
|
||||
|
||||
enum AntBandState {
|
||||
ANT_BAND_READY = 1,
|
||||
ANT_BAND_FAILED = 0
|
||||
}
|
||||
|
||||
const VAL_TO_EVENT = {
|
||||
false: 'manual_control', ## Выбор целей и установка помех вручную.
|
||||
true: 'full_auto' } ## Выбор целей и установка помех автоматически.
|
||||
@@ -91,7 +98,14 @@ func on_threat_selected(th, ecm_btns): on_rto_threat_sel(th.id, ecm_btns)
|
||||
func on_enter_tree() -> void: call_deferred('on_button_strobe_pressed')
|
||||
|
||||
|
||||
func clear_all_klaster(): $canvas.clear_all_seczap()
|
||||
|
||||
|
||||
func on_user_panning(): $btn_center.button_pressed = false
|
||||
|
||||
|
||||
func on_settings_changed():
|
||||
gos_flag = ProjectSettings.get_setting('application/config/Включить работу по своим целям', true)
|
||||
color_emit = ProjectSettings.get_setting('application/interfer/emit_color', Color(0.58, 0.47, 0.51, 1.0))
|
||||
color_ecm = ProjectSettings.get_setting('application/interfer/interfer_color', Color(0.58, 0.47, 0.51, 1.0))
|
||||
color_select = ProjectSettings.get_setting('application/interfer/select_color', Color(1.0, 1.0, 1.0, 1.0))
|
||||
@@ -109,9 +123,7 @@ func on_settings_changed():
|
||||
|
||||
## Обработчик сигнала изменения списка целей.
|
||||
func on_threats_resized(ths: Dictionary):
|
||||
$count_all_pad/count_all.text = '%02d' % ths.size()
|
||||
var c: int = ths.values().filter(func(th: threats.Threat): return th.proto != '').size()
|
||||
$count_danger_pad/count_danger.text = '%02d' % c
|
||||
count_threats(ths)
|
||||
thrs_dict = ths
|
||||
|
||||
|
||||
@@ -144,10 +156,18 @@ func _exit_tree() -> void:
|
||||
timer1.queue_free()
|
||||
|
||||
|
||||
func init_fs_failed():
|
||||
var sectors_count = $canvas.fs_default_colors.size()
|
||||
fs_failed.resize(sectors_count)
|
||||
for i in fs_failed.size():
|
||||
fs_failed[i] = AntBandState.ANT_BAND_READY
|
||||
|
||||
|
||||
## Производит инициализацию.
|
||||
func _ready():
|
||||
ProjectSettings.connect('settings_changed', on_settings_changed)
|
||||
on_settings_changed()
|
||||
init_fs_failed()
|
||||
min_zoom = ProjectSettings.get_setting('application/config/map_minimum_zoom', 5)
|
||||
max_zoom = ProjectSettings.get_setting('application/config/map_maximum_zoom', 19)
|
||||
drag_fsm = DragFSM.OFF
|
||||
@@ -188,16 +208,13 @@ func _ready():
|
||||
|
||||
|
||||
func sector_klaster(sector_data):
|
||||
if sector_data["draw"]:
|
||||
var rect: Rect2 = sector_data["rect"]
|
||||
var color: Color = sector_data["color"]
|
||||
var id: int = sector_data["index"]
|
||||
if sector_data['draw']:
|
||||
var rect: Rect2 = sector_data['rect']
|
||||
var color: Color = sector_data['color']
|
||||
var id: int = sector_data['index']
|
||||
$canvas.add_seczap(id, Vector4(rect.position.x, rect.position.y, rect.size.x, rect.size.y))
|
||||
$canvas.set_seczap_color(id, color)
|
||||
else:
|
||||
pass
|
||||
|
||||
func clear_all_klaster(): $canvas.clear_all_seczap()
|
||||
|
||||
func on_navi_data_received(data: Dictionary):
|
||||
var k = data.get('k', 0.0)
|
||||
@@ -205,10 +222,6 @@ func on_navi_data_received(data: Dictionary):
|
||||
course = k
|
||||
|
||||
|
||||
func on_user_panning():
|
||||
$btn_center.button_pressed = false
|
||||
|
||||
|
||||
func on_chk_interfer_prinuditelno(_interfer_sectors):
|
||||
$chk_auto.set_pressed_no_signal(false)
|
||||
on_value_changed(false)
|
||||
@@ -522,6 +535,7 @@ func update_fs_colors():
|
||||
else:
|
||||
fs_colors[key] = color_select
|
||||
$canvas.set_band_colors(fs_colors)
|
||||
$canvas.set_band_failures(fs_failed)
|
||||
if fs_emit.size():
|
||||
if $btn_activate.pressed:
|
||||
$btn_activate.self_modulate = Color.RED
|
||||
@@ -531,7 +545,6 @@ func update_fs_colors():
|
||||
$btn_activate.self_modulate = Color.WHITE
|
||||
|
||||
|
||||
|
||||
func unsel_fs_all(need_btns_off: bool):
|
||||
fs_selected.clear()
|
||||
update_fs_colors()
|
||||
@@ -565,7 +578,7 @@ func set_btns_disabled(value: bool, btn):
|
||||
btn.set_disabled(value)
|
||||
|
||||
|
||||
func on_interfer_prinuditelno(prenuditelno_sectors, btns):
|
||||
func on_interfer_prinuditelno (prenuditelno_sectors, btns):
|
||||
for key in prenuditelno_sectors:
|
||||
var sectors = []
|
||||
for sector in prenuditelno_sectors[key]:
|
||||
@@ -578,8 +591,9 @@ func on_interfer_prinuditelno(prenuditelno_sectors, btns):
|
||||
|
||||
|
||||
## Вызывается при получении информации о состоянии модулей ФС от КАПС РПБ.
|
||||
func on_fs_update_state(_fs_dict: Dictionary):
|
||||
pass
|
||||
func on_fs_update_state(fs_dict: Dictionary):
|
||||
for key in fs_dict.keys():
|
||||
fs_failed[key] = fs_dict[key].isg
|
||||
|
||||
|
||||
func on_btn_center_toggled(toggled_on: bool) -> void:
|
||||
@@ -625,6 +639,14 @@ func _on_btn_all_work_pressed() -> void:
|
||||
|
||||
|
||||
func on_th_aoa_update(ths):
|
||||
count_threats(ths)
|
||||
|
||||
|
||||
func count_threats(ths):
|
||||
$count_all_pad/count_all.text = '%02d' % ths.size()
|
||||
var c: int = ths.values().filter(func(th: threats.Threat): return th.proto != '').size()
|
||||
var c: int = 0
|
||||
if gos_flag:
|
||||
c = ths.values().filter(func(th: threats.Threat): return th.proto != '').size()
|
||||
else:
|
||||
c = ths.values().filter(func(th: threats.Threat): return ((th.proto != '') and th.proto not in interfer.gos_protocols)).size()
|
||||
$count_danger_pad/count_danger.text = '%02d' % c
|
||||
|
||||
@@ -306,18 +306,18 @@ vertical_alignment = 1
|
||||
|
||||
[node name="coordinates_map" type="Label" parent="."]
|
||||
layout_mode = 0
|
||||
offset_left = 999.0
|
||||
offset_top = 128.0
|
||||
offset_right = 1111.0
|
||||
offset_bottom = 147.0
|
||||
offset_left = 660.0
|
||||
offset_top = -24.0
|
||||
offset_right = 772.0
|
||||
offset_bottom = -5.0
|
||||
text = "Координаты:"
|
||||
|
||||
[node name="scale_map" type="Label" parent="."]
|
||||
layout_mode = 0
|
||||
offset_left = 999.0
|
||||
offset_top = 202.0
|
||||
offset_right = 1109.0
|
||||
offset_bottom = 223.0
|
||||
offset_left = 1003.0
|
||||
offset_top = -24.0
|
||||
offset_right = 1113.0
|
||||
offset_bottom = -3.0
|
||||
text = "Масштаб:"
|
||||
|
||||
[node name="zoom_plus" type="Button" parent="."]
|
||||
@@ -379,8 +379,8 @@ texture_normal = ExtResource("14_ggrwd")
|
||||
[connection signal="drag_continue" from="." to="." method="_on_drag_continue"]
|
||||
[connection signal="toggled" from="btn_view" to="." method="on_button_view_toggled"]
|
||||
[connection signal="toggled" from="chk_auto" to="." method="on_value_changed"]
|
||||
[connection signal="toggled" from="btn_activate" to="." method="on_btn_activate_toggled"]
|
||||
[connection signal="toggled" from="btn_activate" to="." method="on_btn_activate"]
|
||||
[connection signal="toggled" from="btn_activate" to="." method="on_btn_activate_toggled"]
|
||||
[connection signal="toggled" from="btn_center" to="." method="on_btn_center_toggled"]
|
||||
[connection signal="button_down" from="zoom_plus" to="tilemap" method="_on_zoom_plus_button_down"]
|
||||
[connection signal="button_up" from="zoom_plus" to="tilemap" method="_on_zoom_plus_button_up"]
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
extends Panel
|
||||
|
||||
|
||||
func _ready() -> void:
|
||||
var unit_trassa = network.get_unit_instance('уарэп-трасса')
|
||||
unit_trassa.connect('line_changed', Callable(self, 'on_trassa_line_changed'))
|
||||
@@ -8,30 +9,30 @@ func _ready() -> void:
|
||||
|
||||
func on_trassa_line_changed(unit_trassa):
|
||||
if unit_trassa.online:
|
||||
$"454/СостояниеРэс3".self_modulate = Color.WEB_GREEN
|
||||
$"СкруглённыйПрямоугольникБелый/Label3".text = 'Трасса'
|
||||
$"СкруглённыйПрямоугольникБелый/Label4".text = 'Трасса'
|
||||
$"СкруглённыйПрямоугольникБелый/Label5".text = 'Активный'
|
||||
$"СкруглённыйПрямоугольникБелый/Label6".text = str(unit_trassa.daa)
|
||||
$"СкруглённыйПрямоугольникБелый/Label7".text = str(unit_trassa.dap)
|
||||
$"СкруглённыйПрямоугольникБелый/Label8".text = '1'
|
||||
$"СкруглённыйПрямоугольникБелый/Label9".text = str(unit_trassa.lfb)
|
||||
$"СкруглённыйПрямоугольникБелый/Label10".text = str(unit_trassa.lfb)
|
||||
$'454/СостояниеРэс3'.self_modulate = Color.WEB_GREEN
|
||||
$'СкруглённыйПрямоугольникБелый/Label3'.text = 'Трасса'
|
||||
$'СкруглённыйПрямоугольникБелый/Label4'.text = 'Трасса'
|
||||
$'СкруглённыйПрямоугольникБелый/Label5'.text = 'Активный'
|
||||
$'СкруглённыйПрямоугольникБелый/Label6'.text = str(unit_trassa.daa)
|
||||
$'СкруглённыйПрямоугольникБелый/Label7'.text = str(unit_trassa.dap)
|
||||
$'СкруглённыйПрямоугольникБелый/Label8'.text = '1'
|
||||
$'СкруглённыйПрямоугольникБелый/Label9'.text = str(unit_trassa.lfb)
|
||||
$'СкруглённыйПрямоугольникБелый/Label10'.text = str(unit_trassa.lfb)
|
||||
else:
|
||||
$"454/СостояниеРэс3".self_modulate = Color.WHITE
|
||||
$"СкруглённыйПрямоугольникБелый/Label3".text = '-'
|
||||
$"СкруглённыйПрямоугольникБелый/Label4".text = '-'
|
||||
$"СкруглённыйПрямоугольникБелый/Label5".text = '-'
|
||||
$"СкруглённыйПрямоугольникБелый/Label6".text = '-'
|
||||
$"СкруглённыйПрямоугольникБелый/Label7".text = '-'
|
||||
$"СкруглённыйПрямоугольникБелый/Label8".text = '-'
|
||||
$"СкруглённыйПрямоугольникБелый/Label9".text = '-'
|
||||
$"СкруглённыйПрямоугольникБелый/Label10".text = '-'
|
||||
$'454/СостояниеРэс3'.self_modulate = Color.WHITE
|
||||
$'СкруглённыйПрямоугольникБелый/Label3'.text = '-'
|
||||
$'СкруглённыйПрямоугольникБелый/Label4'.text = '-'
|
||||
$'СкруглённыйПрямоугольникБелый/Label5'.text = '-'
|
||||
$'СкруглённыйПрямоугольникБелый/Label6'.text = '-'
|
||||
$'СкруглённыйПрямоугольникБелый/Label7'.text = '-'
|
||||
$'СкруглённыйПрямоугольникБелый/Label8'.text = '-'
|
||||
$'СкруглённыйПрямоугольникБелый/Label9'.text = '-'
|
||||
$'СкруглённыйПрямоугольникБелый/Label10'.text = '-'
|
||||
|
||||
|
||||
func on_sector_klaster(_data, unit_trassa):
|
||||
$"СкруглённыйПрямоугольникБелый/Label6".text = str(unit_trassa.dap)
|
||||
$"СкруглённыйПрямоугольникБелый/Label7".text = str(unit_trassa.daa)
|
||||
$"СкруглённыйПрямоугольникБелый/Label8".text = '1'
|
||||
$"СкруглённыйПрямоугольникБелый/Label9".text = str(unit_trassa.lfb)
|
||||
$"СкруглённыйПрямоугольникБелый/Label10".text = str(unit_trassa.hfb)
|
||||
func on_sector_klaster(data, unit_trassa):
|
||||
$'СкруглённыйПрямоугольникБелый/Label6'.text = str(unit_trassa.dap)
|
||||
$'СкруглённыйПрямоугольникБелый/Label7'.text = str(unit_trassa.daa)
|
||||
$'СкруглённыйПрямоугольникБелый/Label8'.text = '1'
|
||||
$'СкруглённыйПрямоугольникБелый/Label9'.text = str(unit_trassa.lfb)
|
||||
$'СкруглённыйПрямоугольникБелый/Label10'.text = str(unit_trassa.hfb)
|
||||
|
||||
@@ -93,6 +93,7 @@ const ID_INTERFERS_LEN = 63 ## Размер пула номеров целе
|
||||
const INTERFER_OFF = 'off'
|
||||
const INTERFER_IQFILE = 'IQ-файл'
|
||||
const POW_DEFAULT: float = 50.0
|
||||
const PERIOD_DEFAULT = 7.5
|
||||
var msg6_num: int = 0 ## Счётчик сообщений "тип 6"
|
||||
var msg8_num: int = 0 ## Счётчик сообщений "тип 8"
|
||||
var id_array: Array ## Массив id воздействий.
|
||||
@@ -125,6 +126,7 @@ class Interfer:
|
||||
var modulation: bool ## Модуляция для включения усилителей
|
||||
var um: float ## Угол места для помехи.
|
||||
var nmfs: int = 0 ## Номер модуля ФС в нумерации СТЦ
|
||||
var priority: int = 0 ## Приоритет помехи
|
||||
|
||||
func _to_string() -> String:
|
||||
return 'номер: %d название: %s частота: %0.1f МГц пеленг: %0.1f гр.' % [ispp, ITERFER_MODE[krp][0], params['freq'], kni]
|
||||
@@ -214,7 +216,7 @@ func _ready() -> void:
|
||||
threats.connect('threats_resized', Callable(self, 'on_threats_resized'))
|
||||
threats.connect('threat_update', Callable(self, 'on_threats_update').bind(ecms, unit_caps))
|
||||
ProjectSettings.connect('settings_changed', on_settings_changed)
|
||||
var unit_nav = network.get_unit_instance('навигация')
|
||||
var unit_nav: = network.get_unit_instance('навигация')
|
||||
unit_nav.connect('data_received', on_nav_data_received.bind(unit_caps))
|
||||
|
||||
|
||||
@@ -366,22 +368,29 @@ func map_mpchf_to_seczaps(unit_instance: unit.Unit, _seczaps: Dictionary):
|
||||
## Вызыватся, когда пользователь выбрал помеху и выбраны цели.
|
||||
func on_interfer_create(interfer_name, sel_threats, fs_arr, power, u, ecms) -> void:
|
||||
for item in sel_threats:
|
||||
if auto_enabled:
|
||||
var need_continue = false
|
||||
for ecm in ecms.values():
|
||||
if ecm.nmfs == item.nmfs:
|
||||
if item.priority > ecm.priority:
|
||||
interfer_off(ecm, u)
|
||||
elif item.priority < ecm.priority:
|
||||
need_continue = true
|
||||
break
|
||||
if need_continue: continue
|
||||
var param: Dictionary = {}
|
||||
var kni: float = item.aoa - course
|
||||
if kni < 0:
|
||||
kni += 360.0
|
||||
var id = item.id
|
||||
param['freq'] = item.freq
|
||||
param['width'] = item.width
|
||||
param['width'] = item.width * 1.5
|
||||
if (item.rkrp != '') and item.fflags.rkrp and auto_enabled:
|
||||
var krp = get_krp(item)
|
||||
if krp != '':
|
||||
interfer_name = krp
|
||||
set_rparams(item, param)
|
||||
if (param['width'] < settings.WIDTH_MIN):
|
||||
param['width'] = settings.WIDTH_MIN
|
||||
elif (param['width'] > settings.WIDTH_MAX):
|
||||
param['width'] = settings.WIDTH_MAX
|
||||
check_width(param)
|
||||
interfer_create(u, interfer_name, ecms, param, kni, id, thrs, SOURCE_INTERFER[0], power)
|
||||
|
||||
for item in fs_arr:
|
||||
@@ -390,10 +399,7 @@ func on_interfer_create(interfer_name, sel_threats, fs_arr, power, u, ecms) -> v
|
||||
var id = item[3]
|
||||
param['freq'] = item[1]
|
||||
param['width'] = item[2]
|
||||
if (param['width'] < settings.WIDTH_MIN):
|
||||
param['width'] = settings.WIDTH_MIN
|
||||
elif (param['width'] > settings.WIDTH_MAX):
|
||||
param['width'] = settings.WIDTH_MAX
|
||||
check_width(param)
|
||||
interfer_create(u, interfer_name, ecms, param, kni, id, fs, SOURCE_INTERFER[1], power)
|
||||
|
||||
|
||||
@@ -433,7 +439,7 @@ func interfer_create(u, interfer_name, ecms, param, kni, id, dict, source_interf
|
||||
var sz = ecms.size()
|
||||
var ispp: int = 0
|
||||
param['dur'] = 1.0 # Необходимо добавить параметры управления
|
||||
param['period'] = 1.0 # Необходимо добавить параметры управления
|
||||
param['period'] = param.get('period', PERIOD_DEFAULT)
|
||||
var key = dict.find_key(id)
|
||||
if source_interfer != SOURCE_INTERFER[2]:
|
||||
if key != null:
|
||||
@@ -454,13 +460,16 @@ func interfer_create(u, interfer_name, ecms, param, kni, id, dict, source_interf
|
||||
ecm = Interfer.new()
|
||||
ecm.ispp = ispp
|
||||
ecms[ispp] = ecm
|
||||
ecm.modulation = emit_enable
|
||||
ecm.kni = kni
|
||||
ecm.krp = interfer_name
|
||||
ecm.params = param
|
||||
ecm.powp = power
|
||||
ecm.source_interfer = source_interfer
|
||||
ecm.modulation = emit_enable
|
||||
ecm.um = param.get('um', 15.0) # Значение по умолчанию
|
||||
if source_interfer == SOURCE_INTERFER[0]:
|
||||
if thrs_dict.has(dict[ispp]):
|
||||
ecm.priority = thrs_dict[dict[ispp]].priority
|
||||
call_ecm_proc(ecm)
|
||||
var set_nmfs_ok = set_nmfs(ecm)
|
||||
if set_nmfs_ok != Error.OK:
|
||||
@@ -477,7 +486,7 @@ func interfer_create(u, interfer_name, ecms, param, kni, id, dict, source_interf
|
||||
|
||||
func send_ecm(ecm, unit0) -> void:
|
||||
if ecm.krp != INTERFER_OFF:
|
||||
if not emit_enable:
|
||||
if not ecm.modulation:
|
||||
ecm.svk = 0
|
||||
call_deferred('emit_signal', 'interfer_update', ecm)
|
||||
return
|
||||
@@ -512,8 +521,10 @@ func push_id(id: int) -> void:
|
||||
id_array.sort()
|
||||
|
||||
|
||||
func on_emit_changed(state, _ecms) -> void:
|
||||
func on_emit_changed(state, ecms) -> void:
|
||||
emit_enable = state
|
||||
for ecm in ecms.values():
|
||||
ecm.modulation = state
|
||||
|
||||
|
||||
func call_all_diap(ecm, ecm_params: Dictionary):
|
||||
@@ -561,8 +572,11 @@ func on_threats_update(threat, ecms, unit_caps):
|
||||
for ecm_i in thrs.keys():
|
||||
if thrs[ecm_i] == th_id:
|
||||
ecm = ecms[ecm_i]
|
||||
ecm.priority = threat.priority
|
||||
ecm.params['freq'] = threat.freq
|
||||
ecm.params['width'] = threat.width
|
||||
var width = threat.width * 1.5
|
||||
ecm.params['width'] = width
|
||||
check_width(ecm.params)
|
||||
if (threat.rkrp != '') and threat.fflags.rkrp and auto_enabled:
|
||||
var krp = get_krp(threat)
|
||||
if krp != '':
|
||||
@@ -599,12 +613,11 @@ func set_rparams(threat: threats.Threat, params: Dictionary):
|
||||
params['freq'] = threat.rparams['freq']
|
||||
else:
|
||||
params['freq'] = threat.freq
|
||||
if threat.rparams.has('period'):
|
||||
params['period'] = threat.rparams['period']
|
||||
if threat.rparams.has('width'):
|
||||
params['width'] = threat.rparams['width']
|
||||
params['width'] = threat.rparams['width'] * 1.5
|
||||
else:
|
||||
params['width'] = threat.width
|
||||
params['width'] = threat.width * 1.5
|
||||
check_width(params)
|
||||
if threat.rparams.has('filename'):
|
||||
params['filename'] = threat.rparams['filename']
|
||||
|
||||
@@ -675,3 +688,8 @@ func set_th_emit(th: threats.Threat, ecm: Interfer):
|
||||
return
|
||||
else:
|
||||
th.emit_state = 1
|
||||
|
||||
|
||||
func check_width(param: Dictionary):
|
||||
if (param['width'] < settings.WIDTH_MIN): param['width'] = settings.WIDTH_MIN
|
||||
elif (param['width'] > settings.WIDTH_MAX): param['width'] = settings.WIDTH_MAX
|
||||
|
||||
@@ -153,7 +153,6 @@ class Fs:
|
||||
class PRD:
|
||||
var prd_name: String ## Имя прибора
|
||||
var unit_yau07 ## Юнит эмс
|
||||
var unit_control: Object ## Класс проверки прибора ПРД
|
||||
var fs_dic: Dictionary ## Массив блоков ФС
|
||||
var yemsg_board: yemsboards.EmsBoard ## Плата ЭМС-Г
|
||||
var state = PrdState.WORK
|
||||
@@ -168,7 +167,6 @@ class PRD:
|
||||
unit_yau07 = u_yau07
|
||||
init_ems_g()
|
||||
|
||||
|
||||
func init_ems_g():
|
||||
var in_tbl: Array = []
|
||||
var out_tbl: Array = []
|
||||
@@ -285,9 +283,6 @@ func _ready() -> void:
|
||||
var unit_prd = network.get_unit_instance(prd_name)
|
||||
var new_prd = PRD.new(prd_name, unit_prd)
|
||||
prd_dict[prd_name] = new_prd
|
||||
var unit_control = TestPRD.new({'unit_prd': unit_prd}, new_prd.cmd_array)
|
||||
add_child(unit_control)
|
||||
new_prd.unit_control = unit_control
|
||||
for key in FS_PRD.keys():
|
||||
var fs = Fs.new(key, FS_PRD[key][0])
|
||||
fs_dict[key] = fs
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -51,7 +51,7 @@ var UnitProfiles: Dictionary[StringName, Array] = { \
|
||||
const FREQ_MAX: = 6000.0
|
||||
const FREQ_MIN: = 400.0
|
||||
const WIDTH_MAX: = 120.0
|
||||
const WIDTH_MIN: = 0.0
|
||||
const WIDTH_MIN: = 5.0
|
||||
const DUR_MAX: = 1000000.0
|
||||
const PERIOD_MAX: = 1000000.0
|
||||
const UM_MIN: = -5.0
|
||||
|
||||
@@ -216,10 +216,6 @@ signal sector_klaster (new_sector_data)
|
||||
signal clear_klaster ()
|
||||
|
||||
|
||||
## Вызывается при нажатии на кнопку "Запуск контроля".[br]
|
||||
signal start_contol_device()
|
||||
|
||||
|
||||
## Вызывается при программном отключении помехи.[br]
|
||||
## [param ecm] - выключаемая помеха ([b]true[/b]
|
||||
signal on_prog_ecm_off(ecm: interfer.Interfer)
|
||||
|
||||
@@ -29,7 +29,8 @@ class Threat:
|
||||
var selected: bool ## Флаг, что цель выбрана.
|
||||
var auto_selected: bool = false ## Флаг автомата для целей
|
||||
var emit_state: int = 0 ## 0 - подавление не назначено, 1 - назначено, 2 - выполняется
|
||||
var nmfs:int ## Индекс модуля ФС, в зону действия которого попала цель
|
||||
var nmfs: int ## Индекс модуля ФС, в зону действия которого попала цель
|
||||
var priority: int ## Приоритет опасности цели
|
||||
|
||||
func _init(): clear_fflags()
|
||||
func _to_string() -> String: return 'номер: %d пеленг: %0.1f частота: %0.1f МГц' % [id, aoa, freq]
|
||||
@@ -142,6 +143,10 @@ func on_data_capsrpb_received(unit: capsrpb.CapsRpb, threats: Dictionary):
|
||||
th.clear_fflags()
|
||||
th.set_from_dic(dic_th)
|
||||
th.tick_rx = unit.tick
|
||||
if th.fflags.proto and th.proto != '':
|
||||
th.priority = 1
|
||||
else:
|
||||
th.priority = 0
|
||||
call_deferred('emit_signal', 'threat_update', th)
|
||||
else:
|
||||
var th: = Threat.new()
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
"Адрес БПО левого борта": "http://172.22.246.13:8081/selftest?presetType=bpo&400000000",
|
||||
"Адрес БПО правого борта": "http://172.22.246.11:8082/selftest?presetType=bpo&400000000",
|
||||
"Виртуальная клавиатура": false,
|
||||
"Включить работу по своим целям": true,
|
||||
"Внешнее указание Трасса": false,
|
||||
"Внешнее управление": false,
|
||||
"Кнопка «JTIDS»": false,
|
||||
@@ -26,29 +27,31 @@
|
||||
"Период опроса состояния АФСП, секунды": "30",
|
||||
"Период опроса состояния БПО, секунды": "30",
|
||||
"Скрыть вкладку ЭМС 2": true,
|
||||
"Список своих протоколов": "j11",
|
||||
"Схема прибора. Белый цвет": [1.0, 1.0, 1.0],
|
||||
"Схема прибора. Чёрный цвет": [0.0, 0.0, 0.0],
|
||||
"Текущая версия ПО УАРЭП": "master b2633d8 Thu Sep 11 16:26:39 2025 +0300",
|
||||
"Шаблон адреса сервера карт": "http://10.1.1.2:8001/osm_tiles/{z}/{x}/{y}.png",
|
||||
"Шаблон адреса сервера карт": "http://169.254.27.71:8001/osm_tiles/{z}/{x}/{y}.png",
|
||||
"навигация": [
|
||||
"*",
|
||||
60000,
|
||||
true,
|
||||
true
|
||||
],
|
||||
"уареп-трасса": "127.0.0.1,127.0.0.1,50200,10004",
|
||||
"уарэп-5п28": [
|
||||
"127.0.0.1",
|
||||
50777
|
||||
],
|
||||
"уарэп-капсрпб": [
|
||||
"192.168.11.102",
|
||||
"192.168.11.105",
|
||||
"127.0.0.1",
|
||||
"127.0.0.1",
|
||||
42023,
|
||||
42022,
|
||||
false,
|
||||
true
|
||||
],
|
||||
"уарэп-спт25-1": [
|
||||
"/home/user/tty0",
|
||||
"/home/sasha/dev/tty0",
|
||||
0,
|
||||
19200,
|
||||
"N",
|
||||
@@ -56,15 +59,23 @@
|
||||
1
|
||||
],
|
||||
"уарэп-спт25-2": [
|
||||
"/home/user/tty1",
|
||||
"/home/sasha/dev/tty4",
|
||||
0,
|
||||
19200,
|
||||
"N",
|
||||
8,
|
||||
1
|
||||
],
|
||||
"уарэп-трасса": [
|
||||
"127.0.0.1",
|
||||
"127.0.0.1",
|
||||
50200,
|
||||
10004,
|
||||
false,
|
||||
true
|
||||
],
|
||||
"уарэп-щ3": [
|
||||
"/home/user/tty3",
|
||||
"/home/sasha/dev/tty2",
|
||||
7,
|
||||
19200,
|
||||
"N",
|
||||
|
||||
@@ -7,6 +7,9 @@ code = "shader_type canvas_item;
|
||||
|
||||
#define RADIUS_INNER_0 200.0 /* Радиус внутренний для режима приоритет РТО */
|
||||
#define RADIUS_INNER_1 480.0 /* Радиус внутренний для режима приоритет РЛС */
|
||||
#define ANTENAS_COUNT 28 /* Количество антенн */
|
||||
#define ANT_BAND_READY 1U /* Антенна (модуль ФС) готова или исправна */
|
||||
#define ANT_BAND_FAILED 0U /* Антенна (модуль ФС) не исправно */
|
||||
|
||||
uniform vec2 pc0 = vec2(560, 560); /* Центр сетки антенн */
|
||||
uniform float rotation: hint_range(0.0, 360.0) = 0.0; /* */
|
||||
@@ -14,9 +17,13 @@ uniform vec4 color0: source_color = vec4(0.38, 0.47, 0.51, 0.4);
|
||||
uniform vec4 color1: source_color = vec4(0.39, 0.44, 0.50, 0.4);
|
||||
uniform float radius_inner_0 = RADIUS_INNER_0;
|
||||
uniform float radius_inner_1 = RADIUS_INNER_1;
|
||||
uniform float radius_outter = 550.0; /* Радиус внешний. Должно быть равно ant_band_r1_6 */
|
||||
uniform float radius_outter = 550.0; /* Радиус внешний. Должно быть равно ant_band_r1_6 */
|
||||
uniform float alpha: hint_range(0.0, 1.0) = 0.5;
|
||||
uniform int mode = 0; /* Режим отображения. Приоритет РТО - 0, приоритет РЛС - 1 */
|
||||
uniform int mode = 0; /* Режим отображения. Приоритет РТО - 0, приоритет РЛС - 1 */
|
||||
uniform float ffr: hint_range(0.0, 1.0) = 0.2; /* Индикация неисправности модулей ФС. Заметность штриховки. */
|
||||
uniform float sfr: hint_range(0.0, 10.0) = 0.0; /* Индикация неисправности модулей ФС. Скорость движения штрховки */
|
||||
uniform float afr: hint_range(0.0, 180.0) = 0.0; /* Индикация неисправности модулей ФС. Наклон штрховки */
|
||||
uniform float pfr: hint_range(1.0, 20.0) = 10.0; /* Индикация неисправности модулей ФС. Частота штриховки */
|
||||
|
||||
const int ant_band_count_0 = 2;
|
||||
const int ant_band_count_1 = 2;
|
||||
@@ -42,7 +49,8 @@ const float ant_band_r1_4[] = {450.0, 530.0};
|
||||
const float ant_band_r1_5[] = {500.0, 540.0};
|
||||
const float ant_band_r1_6[] = {550.0, 550.0};
|
||||
|
||||
uniform vec4 ant_band_c[28];
|
||||
uniform vec4 ant_band_c[ANTENAS_COUNT];
|
||||
uniform uint ant_band_m[ANTENAS_COUNT];
|
||||
const float d4 = 90.0;
|
||||
const float ds = 1.0;
|
||||
|
||||
@@ -79,6 +87,12 @@ void antenas(inout vec4 c, vec2 uv, vec2 p0, int cnt, float r0, float r1, inout
|
||||
col.rgb = ant_band_c[j].rgb;
|
||||
index++;
|
||||
col.a = alpha + (random_timed(uv) - 0.5f) * ant_band_c[j].a;
|
||||
if (ant_band_m[j] == ANT_BAND_FAILED)
|
||||
{
|
||||
vec2 uvr = uv;
|
||||
rotate_vec2(uvr, radians(afr), pc0);
|
||||
col.a *= (1.0 - ffr) + tanh(10.0 * sin(TIME * sfr + 2.0 * PI * uvr.x / pfr)) * ffr;
|
||||
}
|
||||
float v = float(i & 1);
|
||||
vec4 color = v * col + (1.0f - v) * col;
|
||||
sector(c, uv, p0, float(i) * da, da, r0, r1, color);
|
||||
@@ -120,4 +134,9 @@ shader_parameter/radius_inner_1 = 480.0
|
||||
shader_parameter/radius_outter = 550.0
|
||||
shader_parameter/alpha = 0.5
|
||||
shader_parameter/mode = 0
|
||||
shader_parameter/ffr = 0.2
|
||||
shader_parameter/sfr = 0.0
|
||||
shader_parameter/afr = 0.0
|
||||
shader_parameter/pfr = 10.0
|
||||
shader_parameter/ant_band_c = PackedVector4Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
|
||||
shader_parameter/ant_band_m = PackedInt32Array(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1)
|
||||
|
||||
@@ -326,7 +326,9 @@ func _set_row_selected(i_row: int, selected: bool = true) -> void:
|
||||
var selector = nodes[selector_key]
|
||||
nodes.erase(selector_key)
|
||||
if is_instance_valid(selector):
|
||||
node.remove_child(selector)
|
||||
var prnt = selector.get_parent_control()
|
||||
if prnt:
|
||||
prnt.remove_child(selector)
|
||||
selector.queue_free()
|
||||
else:
|
||||
push_warning('обращение к удалённому элементу \"%s\"' % selector_key)
|
||||
@@ -448,7 +450,6 @@ func remove_row(i_row: int):
|
||||
|
||||
if nodes.has(sel_key):
|
||||
var selector = nodes[sel_key]
|
||||
if selector == null: return
|
||||
var prnt = selector.get_parent()
|
||||
prnt.remove_child(selector)
|
||||
selector.queue_free()
|
||||
@@ -485,11 +486,8 @@ func next_index(indexes: Array) -> void:
|
||||
func swap_nodes(nodes_copy, node_key_format, i0, i1) -> void:
|
||||
var key0 = node_key_format % [i0.y, i0.x]
|
||||
var key1 = node_key_format % [i1.y, i1.x]
|
||||
if is_instance_valid(nodes[key0]):
|
||||
nodes_copy[key1] = nodes[key0]
|
||||
nodes_copy[key1].name = key1
|
||||
else:
|
||||
print_debug("Ошибка: нод ", key0, " был освобожден")
|
||||
nodes_copy[key1] = nodes[key0]
|
||||
nodes_copy[key1].name = key1
|
||||
|
||||
|
||||
## Переназначает ключи в соответствии с размерами таблицы.
|
||||
|
||||
Reference in New Issue
Block a user