Исправление качки
Some checks failed
Локальный тест / test (push) Has been cancelled

This commit is contained in:
TotMaxim
2026-04-09 19:38:12 +03:00
parent a311e3201b
commit 2e6be9b4f1

View File

@@ -1,6 +1,6 @@
class_name Iterfer extends Node class_name Iterfer extends Node
const default_um: = 15.0 ## Угол места по умолчанию const default_um: = 5.0 ## Угол места по умолчанию
## Представление помехи. ## Представление помехи.
@@ -94,7 +94,7 @@ const EXCLUDE_INTERFER = ['srni1', 'srnm2', 'srngps', 'svi1', 'svm2']
const ID_INTERFERS_LEN = 63 ## Размер пула номеров целей. const ID_INTERFERS_LEN = 63 ## Размер пула номеров целей.
const INTERFER_OFF = 'off' const INTERFER_OFF = 'off'
const INTERFER_IQFILE = 'IQ-файл' const INTERFER_IQFILE = 'IQ-файл'
const POW_DEFAULT: float = 50.0 const POW_DEFAULT: float = 80.0
const PERIOD_DEFAULT = 7.5 const PERIOD_DEFAULT = 7.5
const MIN_WIDTH_COEF = 1.0 const MIN_WIDTH_COEF = 1.0
const MIN_RESEND_TIMEOUT = 0.05 const MIN_RESEND_TIMEOUT = 0.05
@@ -117,6 +117,8 @@ var fs_closed: Dictionary ## Словарь секторо
var width_coef: float = 1.5 ## Коэффициент расширения полосы var width_coef: float = 1.5 ## Коэффициент расширения полосы
var now: = 0.0 ## Время с момента запуска var now: = 0.0 ## Время с момента запуска
var resend_timeout: float = 1.0 ## Время повторной отправки команды var resend_timeout: float = 1.0 ## Время повторной отправки команды
var trim = 0.0 ## Килевая качка
var roll = 0.0 ## Бортовая качка
signal send_ecms(time_now) ## Сигнал отправки помех, если настало время signal send_ecms(time_now) ## Сигнал отправки помех, если настало время
@@ -140,6 +142,9 @@ class Interfer:
var priority: int = 0 ## Приоритет помехи var priority: int = 0 ## Приоритет помехи
var active: bool = false ## Флаг, что фиксируется мощность на выходном усилителе var active: bool = false ## Флаг, что фиксируется мощность на выходном усилителе
var freq_change = false ## Флаг, что частота изменнена пользователем var freq_change = false ## Флаг, что частота изменнена пользователем
var bort = false ## Признак бортовая или килевая качка
var trim_roll = 0.0 ## Качка для конкретной помехи
var trim_roll_manual = false ## Флаг что ум задан оператором
func _to_string() -> String: func _to_string() -> String:
return 'номер: %d название: %s частота: %0.1f МГц пеленг: %0.1f гр.' % [ispp, ITERFER_MODE[krp][0], params['freq'], kni] return 'номер: %d название: %s частота: %0.1f МГц пеленг: %0.1f гр.' % [ispp, ITERFER_MODE[krp][0], params['freq'], kni]
@@ -176,11 +181,25 @@ class Interfer:
var param = self.get(value_key) var param = self.get(value_key)
if param == null: if param == null:
params[value_key] = value params[value_key] = value
elif value_key == 'um':
trim_roll_manual = true
params[value_key] = value
set_um()
else: else:
self.set(value_key, value) self.set(value_key, value)
if value_key == 'freq': if value_key == 'freq':
freq_change = true freq_change = true
func set_um():
if not self.trim_roll_manual:
self.um = params.get('um', default_um) + self.trim_roll
else:
self.um = params.get('um', default_um)
if (self.um < settings.UM_MIN):
self.um = settings.UM_MIN
elif (self.um > settings.UM_MAX):
self.um = settings.UM_MAX
signal interfer_preparing(ecm: Interfer) ## Вызывается в момент запуска помехи. signal interfer_preparing(ecm: Interfer) ## Вызывается в момент запуска помехи.
signal interfer_run(ecm: Interfer) ## Вызывается в момент начала работы помехи. signal interfer_run(ecm: Interfer) ## Вызывается в момент начала работы помехи.
signal interfer_error(ecm: Interfer, msg: String) ## Вызывается при ошибке. signal interfer_error(ecm: Interfer, msg: String) ## Вызывается при ошибке.
@@ -227,7 +246,7 @@ func _ready() -> void:
threats.connect('threat_update', Callable(self, 'on_threats_update').bind(ecms)) threats.connect('threat_update', Callable(self, 'on_threats_update').bind(ecms))
ProjectSettings.connect('settings_changed', on_settings_changed) ProjectSettings.connect('settings_changed', on_settings_changed)
unit_nav = network.get_unit_instance('навигация') unit_nav = network.get_unit_instance('навигация')
unit_nav.connect('data_received', on_nav_data_received.bind(unit_caps)) unit_nav.connect('data_received', on_nav_data_received.bind(unit_caps, ecms))
connect('send_ecms', Callable(self, 'on_send_ecms').bind(ecms, unit_caps)) connect('send_ecms', Callable(self, 'on_send_ecms').bind(ecms, unit_caps))
call_deferred('emit_signal', 'interfer_resized', ecms) call_deferred('emit_signal', 'interfer_resized', ecms)
@@ -235,8 +254,9 @@ func _ready() -> void:
func on_trenazh_mode(val: bool): trenazh_mode = val func on_trenazh_mode(val: bool): trenazh_mode = val
func on_nav_data_received(coords: Dictionary, unit_caps): func on_nav_data_received(coords: Dictionary, unit_caps, ecms):
var ship_time = Time.get_datetime_dict_from_system() var ship_time = Time.get_datetime_dict_from_system()
var update_bk_kk = false
course = coords.get('k', 0.0) course = coords.get('k', 0.0)
var data_to_json = { var data_to_json = {
'ts': 8, 'ts': 8,
@@ -254,9 +274,23 @@ func on_nav_data_received(coords: Dictionary, unit_caps):
'minute': ship_time['minute'], 'minute': ship_time['minute'],
'second': ship_time['second'],} 'second': ship_time['second'],}
var json_data = JSON.stringify(data_to_json).to_utf8_buffer() var json_data = JSON.stringify(data_to_json).to_utf8_buffer()
if data_to_json['roll'] != roll:
roll = data_to_json['roll']
update_bk_kk = true
if data_to_json['trim'] != trim:
trim = data_to_json['trim']
update_bk_kk = true
unit_caps.tx_stack.append(json_data) unit_caps.tx_stack.append(json_data)
msg8_num += 1 msg8_num += 1
msg8_num %= 0xffffffff msg8_num %= 0xffffffff
if update_bk_kk:
for ecm in ecms.values():
if ecm.bort:
ecm.trim_roll = roll
else:
ecm.trim_roll = trim
ecm.set_um()
signaller.emit_signal('interfer_new', ecm)
func on_th_aoa_update(threats: Dictionary, ecms: Dictionary) -> void: func on_th_aoa_update(threats: Dictionary, ecms: Dictionary) -> void:
@@ -486,11 +520,12 @@ func interfer_create(_u, interfer_name, ecms, param, kni, id, dict, source_inter
ecm.params = param ecm.params = param
ecm.powp = power ecm.powp = power
ecm.source_interfer = source_interfer ecm.source_interfer = source_interfer
ecm.um = param.get('um', default_um) # Значение по умолчанию
if source_interfer == SOURCE_INTERFER[0]: if source_interfer == SOURCE_INTERFER[0]:
if thrs_dict.has(dict[ispp]): if thrs_dict.has(dict[ispp]):
ecm.priority = thrs_dict[dict[ispp]].priority ecm.priority = thrs_dict[dict[ispp]].priority
call_ecm_proc(ecm) call_ecm_proc(ecm)
set_bort(ecm)
ecm.set_um()
var set_nmfs_ok = set_nmfs(ecm) var set_nmfs_ok = set_nmfs(ecm)
if set_nmfs_ok != Error.OK: if set_nmfs_ok != Error.OK:
log.error('Ошибка выбора модуля ФС для помехи: %s' %[ecm.ispp]) log.error('Ошибка выбора модуля ФС для помехи: %s' %[ecm.ispp])
@@ -737,3 +772,18 @@ func on_send_ecms(time_now, ecms, unit_caps):
func _process(delta: float) -> void: func _process(delta: float) -> void:
now += delta now += delta
emit_signal('send_ecms', now) emit_signal('send_ecms', now)
func set_bort(ecm: Interfer):
var sec = 0
for sect in prd.FS_SECTORS.keys():
if ecm.kni >= prd.FS_SECTORS[sect][0] and ecm.kni <= prd.FS_SECTORS[sect][1]:
sec = sect
if (sec == 0) or (sec == 2):
ecm.bort = false
else:
ecm.bort = true
if ecm.bort:
ecm.trim_roll = roll
else:
ecm.trim_roll = trim