Доработка. Передача номера блока фс в команде постановки помехи. Передача имени воспроизводимого файла.

This commit is contained in:
MaD_CaT
2025-08-27 13:45:02 +03:00
parent fa0a2f4b24
commit 67f35b7ffd
4 changed files with 122 additions and 24 deletions

View File

@@ -36,15 +36,15 @@ theme_override_styles/tab_focus = SubResource("StyleBoxEmpty_41d34")
theme_override_styles/tab_disabled = SubResource("StyleBoxEmpty_cw2ss")
theme_override_styles/tabbar_background = SubResource("StyleBoxEmpty_nmdfd")
theme_override_styles/panel = SubResource("StyleBoxEmpty_vap7n")
current_tab = 1
current_tab = 0
script = ExtResource("1_fg0vd")
[node name="Работа" parent="tab_switch" instance=ExtResource("2_u7p16")]
visible = false
layout_mode = 2
metadata/_tab_index = 0
[node name="Контроль" parent="tab_switch" instance=ExtResource("3_txp0s")]
visible = false
layout_mode = 2
metadata/_tab_index = 1

View File

@@ -305,6 +305,6 @@ text = "Масштаб:"
[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"]
[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_center" to="." method="on_btn_center_toggled"]

View File

@@ -4,22 +4,38 @@ class_name Iterfer extends Node
## Режимы помехи.
const ITERFER_MODE = {
'off': ['Откл', ['freq', 'width'], 0],
'srni1': ['СРН-И1', ['freq', 'width'], 1],
'srnm2': ['СРН-М2', ['freq', 'width'], 2],
'srngps': ['СРН-GPS', ['freq', 'width'], 3],
'lchm1': ['ЛЧМ-1', ['freq', 'width'], 10],
'lchm2': ['ЛЧМ-2', ['freq', 'width'], 16],
'mchm1': ['МЧМ-1', ['freq', 'width'], 11],
'pdm2': ['ПД-М2', ['freq', 'width'], 12],
'pdm4': ['ПД-М4', ['freq', 'width'], 13],
'pdm4s': ['ПД-М4С', ['freq', 'width'], 14],
'pdchm': ['ПД-ЧМ', ['freq', 'width'], 15],
'svi1': ['СВ-И1', ['freq', 'width'], 20],
'svm2': ['СВ-М2', ['freq', 'width'], 21],
'k1': ['K1', ['freq', 'width', 'dur', 'period'], 50],
'ozp1': ['ОЗП-1', ['freq', 'width'], 51] }
'off': ['Откл', {}, 0],
'srni1': ['СРН-И1', {}, 1],
'srnm2': ['СРН-М2', {}, 2],
'srngps': ['СРН-GPS', {}, 3],
'lchm1': ['ЛЧМ-1', {}, 10],
'lchm2': ['ЛЧМ-2', {}, 16],
'mchm1': ['МЧМ-1', {}, 11],
'pdm2': ['ПД-М2', {}, 12],
'pdm4': ['ПД-М4', {}, 13],
'pdm4s': ['ПД-М4С', {}, 14],
'pdchm': ['ПД-ЧМ', {}, 15],
'svi1': ['СВ-И1', SVI1_PARAMS, 20],
'svm2': ['СВ-М2', SVM2_PARAMS, 21],
'k1': ['K1', K1_PARAMS, 50],
'ozp1': ['ОЗП-1', OZP1_PARAMS, 51] }
const K1_PARAMS = {'files': ['K1'],
'call_proc': 'call_all_diap'}
const OZP1_PARAMS = {'files': ['OZP1'],
'call_proc': 'call_all_diap'}
# Файл : Диапазон: ['имя файла', частота]
const SVI1_PARAMS = {'files': {1: ['SVI1_LIT2', 1017],
2: ['SVI1_LIT3', 1156]},
'call_proc': 'call_diap'}
const SVM2_PARAMS = {'files': {1: ['SVM2_LIT2', 1017],
2: ['SVM2_LIT3', 1156]},
'call_proc': 'call_diap'}
const PD_CHM = {'files': {
},
'call_proc': 'call_pd_chm'}
const SOURCE_INTERFER = ['th','fs','cu']
const ID_INTERFERS_LEN = 63 ## Размер пула номеров целей.
@@ -31,6 +47,7 @@ var id_array: Array ## Массив id воздействий.
var thrs: Dictionary ## Словарь воздействия для целей, ключ - id воздействия.
var fs: Dictionary ## Словарь воздействий для секторов, ключ - id воздействия.
var cu: Dictionary ## Словарь воздействий для 5П-28, ключ - id воздействия.
var thrs_dict: Dictionary ## Ссылка на словарь целей
var auto_enabled: bool = false ## Режим автомата
var emit_enable: bool = true ## Разрешить излучение
@@ -48,6 +65,7 @@ class Interfer:
var source_interfer: String = '' ## Тип объекта по которой поставлена помеха.
var modulation: bool ## Модуляция для включения усилителей
var um: float ## Угол места для помехи.
var nmfs: int = 0 ## Номер модуля ФС в нумерации СТЦ
func _to_string() -> String:
return 'номер: %d название: %s частота: %0.1f МГц пеленг: %0.1f гр.' % [ispp, ITERFER_MODE[krp][0], params['freq'], kni]
@@ -58,9 +76,10 @@ class Interfer:
data_to_json['ss'] = msg_num
data_to_json['ispp'] = ispp
data_to_json['krp'] = krp
data_to_json['nmfs'] = nmfs
if krp != INTERFER_OFF:
data_to_json['kni'] = kni
data_to_json['powp'] = powp # TODO: Необходимо добавить управление мощностью
data_to_json['powp'] = powp
data_to_json['params'] = params
data_to_json['get'] = get_params
var pac = JSON.stringify(data_to_json).to_utf8_buffer()
@@ -128,6 +147,8 @@ func _ready() -> void:
signaller.connect('interfer_prinuditelno', Callable(self, 'on_interfer_prinuditelno'))
signaller.connect('emit_changed', Callable(self, 'on_emit_changed').bind(ecms))
threats.connect('threat_lost', Callable(self, 'on_threats_lost').bind(ecms, unit_caps))
threats.connect('threats_resized', Callable(self, 'on_threats_resized'))
threats.connect('threat_update', Callable(self, 'on_threats_update').bind(ecms))
var key = settings.get_unit_key('навигация')
var unit_nav = network.units[key]
unit_nav.connect('data_received', on_nav_data_received.bind(unit_caps))
@@ -295,6 +316,13 @@ func interfer_create(u, interfer_name, ecms, param, kni, id, dict, source_interf
ecm.source_interfer = source_interfer
ecm.modulation = emit_enable
ecm.um = param.get('um', 15.0) # Значение по умолчанию
var ecm_params = ITERFER_MODE[interfer_name][1]
if ecm_params.has('call_proc'):
var call_set_params = Callable(self, ecm_params['call_proc']).bind(ecm, ecm_params)
call_set_params.call()
var set_nmfs_ok = set_nmfs(ecm)
if set_nmfs_ok != Error.OK:
log.error('Ошибка выбора модуля ФС для помехи: %s' %[ecm.ispp])
signaller.emit_signal('interfer_new', ecm)
if interfer_name == 'off':
signaller.emit_signal('interfer_off', ecm, ecms, thrs)
@@ -344,5 +372,70 @@ 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
func call_all_diap(ecm, ecm_params: Dictionary):
ecm.params['filename'] = ecm_params['files']
func call_diap(ecm, ecm_params: Dictionary):
var fs_index_arr: Array
prd.get_fs_index(ecm, fs_index_arr)
if len(fs_index_arr):
var band = fs_index_arr[0] / 4
if ecm_params['files'].has(band):
ecm.params['filename'] = ecm_params['files'][band][0]
ecm.params['freq'] = ecm_params['files'][band][1]
func set_nmfs(ecm):
var fs_index_arr: Array
prd.get_fs_index(ecm, fs_index_arr)
if len(fs_index_arr):
ecm.nmfs = prd.FS_PRD[fs_index_arr[0]][1]
return Error.OK
else:
return Error.FAILED
func on_threats_resized(th_dic):
thrs_dict = th_dic
func on_threats_update(threat, ecms):
if threat.tmod != 'fm': return
var th_fm_dict: Dictionary
for th_index in thrs_dict:
if thrs_dict[th_index].tmod != 'fm': continue
var fs_index_arr: Array
prd.find_fs_index(thrs_dict[th_index].aoa, thrs_dict[th_index].freq, fs_index_arr)
if fs_index_arr.size() == 0: continue
if th_fm_dict.has(fs_index_arr[0]):
th_fm_dict[fs_index_arr[0]][th_index] = thrs_dict[th_index]
else:
var th_dict: Dictionary
th_fm_dict[fs_index_arr[0]] = th_dict
th_fm_dict[fs_index_arr[0]][th_index] = thrs_dict[th_index]
for key in th_fm_dict:
if len(th_fm_dict[key]) < 2: continue
var nmfs = prd.FS_PRD[key][1]
for ecm in ecms.values():
if nmfs != ecm.nmfs: continue
if ecm.krp != 'pdchm': continue
func get_freq_range(freq_range_dict: Dictionary, th_dict: Dictionary):
var min_range_abs: int = 6000
var max_range_abs: int = 0
for key_i in th_dict:
var min_range: int = 6000
var max_range: int = 0
for key_j in th_dict:
if key_i == key_j: continue
var freq_range = abs(th_dict[key_i].freq - th_dict[key_j].freq)
if freq_range < min_range: min_range = freq_range
if freq_range > max_range: max_range = freq_range
if min_range < min_range_abs: min_range_abs = min_range
if max_range > max_range_abs: max_range_abs = max_range

View File

@@ -297,18 +297,23 @@ func get_fs_param(index: int) -> Array:
## Функция возвращает массив с индексами модулей ФС для выбранной помехи
func get_fs_index(ecm, fs_index_arr):
var angle: float = ecm.kni + 45.0
if ecm.params.has('freq'):
find_fs_index(angle, ecm.params['freq'], fs_index_arr)
func find_fs_index(aoa: float, freq: int, fs_index_arr: Array):
var sector: int
var band: Array
var angle: float = ecm.kni + 45.0
var angle = aoa
if angle > 360.0:
angle -= 360.0
for sec in FS_SECTORS.values():
if float(angle) >= sec[0] and float(angle) <= sec[1]:
sector = FS_SECTORS.find_key(sec)
for diap in FS_FREQ.values():
if ecm.params.has('freq'):
if ecm.params['freq'] >= diap[0] and ecm.params['freq'] <= diap[1]:
band.append(FS_FREQ.find_key(diap))
if freq >= diap[0] and freq <= diap[1]:
band.append(FS_FREQ.find_key(diap))
for item in band:
fs_index_arr.append(item * 4 + sector)