@@ -95,6 +95,7 @@ const INTERFER_IQFILE = 'IQ-файл'
const POW_DEFAULT : float = 50.0
const PERIOD_DEFAULT = 7.5
const MIN_WIDTH_COEF = 1.0
const MIN_RESEND_TIMEOUT = 0.05
var msg6_num : int = 0 ## Счётчик сообщений "тип 6"
var msg8_num : int = 0 ## Счётчик сообщений "тип 8"
@@ -112,7 +113,10 @@ var gos_protocols: PackedStringArray ## Список протокол
var gos_nmfs : Array ## Список номеров блоков ФС для которых запрещена работа
var fs_closed : Dictionary ## Словарь секторов запрета
var width_coef : float = 1.5 ## Коэффициент расширения полосы
var now : = 0.0 ## Время с момента запуска
var resend_timeout : float = 1.0 ## Время повторной отправки команды
signal send_ecms ( time_now ) ## Сигнал отправки помех, если настало время
## Режимы работы АФСП и БПО (Протокол ТНИИС-СТЦ, пункт 2.5.10)
enum AFSP_BPO_MODE {
@@ -130,7 +134,7 @@ class Interfer:
var params : = { } ## Параметры помехи.
var get_params : Array [ String ] ## Запрос массива параметров (список запрошенных параметров).
var retss : int ## Значение счётчика сообщения в котором был произведён запрос массива параметров.
var tick_tx : int ## Тик время обновления цели, мс.
var tick_tx : float ## Тик время обновления цели, мс.
var source_interfer : String = ' ' ## Тип объекта по которой поставлена помеха.
var modulation : bool ## Модуляция для включения усилителей
var um : float ## Угол места для помехи.
@@ -202,20 +206,15 @@ func _ready() -> void:
id_array . append ( i + 1 )
var unit_caps = network . get_unit_instance ( ' уарэп-капсрпб ' )
var unit_5p28 = network . get_unit_instance ( ' уарэп-5п28 ' )
var timer_check_state : = Timer . new ( )
add_child ( timer_check_state )
var resend_timeout = ProjectSettings . get_setting ( ' application/interfer/resend_timeout ' , 1000.0 )
var ecms : Dictionary = { } ## Словарь помех.
var seczaps : Dictionary = { } ## Словарь секторов запрета
timer_check_state . connect ( ' timeout ' , Callable ( self , ' on_timer_check_state ' ) . bind ( unit_caps , ecms , resend_timeout ) )
timer_check_state . start ( resend_timeout / 1000.0 )
unit_caps . connect ( ' data_received ' , Callable ( self , ' on_data_capsrpb_received ' ) . bind ( ecms , seczaps ) )
unit_5p28 . connect ( ' get_interfers ' , Callable ( self , ' on_get_interfers ' ) . bind ( unit_5p28 , ecms ) )
signaller . connect ( ' interfer_create ' , Callable ( self , ' on_interfer_create ' ) . bind ( unit_caps , ecms ) )
signaller . connect ( ' interfer_rcv ' , Callable ( self , ' on_interfer_rcv ' ) . bind ( unit_5p28 , unit_caps , ecms ) )
signaller . connect ( ' interfer_new ' , Callable ( self , ' on_interfer_new ' ) . bind ( unit_caps ) )
signaller . connect ( ' interfer_new ' , Callable ( self , ' on_interfer_new ' ) )
signaller . connect ( ' interfer_off_all ' , Callable ( self , ' on_interfer_off_all ' ) . bind ( unit_caps , ecms ) )
signaller . connect ( ' th_aoa_update ' , Callable ( self , ' on_th_aoa_update ' ) . bind ( ecms , unit_caps ))
signaller . connect ( ' th_aoa_update ' , Callable ( self , ' on_th_aoa_update ' ) . bind ( ecms ) )
signaller . connect ( ' interfer_off ' , Callable ( self , ' on_interfer_off ' ) . bind ( ecms , unit_caps ) )
signaller . connect ( ' manual_control ' , Callable ( self , ' on_manual_control ' ) )
signaller . connect ( ' full_auto ' , Callable ( self , ' on_full_auto ' ) )
@@ -227,10 +226,11 @@ func _ready() -> void:
signaller . connect ( ' update_fs_closed ' , Callable ( self , ' on_update_fs_closed ' ) )
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 , unit_caps ))
threats . connect ( ' threat_update ' , Callable ( self , ' on_threats_update ' ) . bind ( ecms ) )
ProjectSettings . connect ( ' settings_changed ' , on_settings_changed )
var unit_nav : = network . get_unit_instance ( ' навигация ' )
unit_nav . connect ( ' data_received ' , on_nav_data_received . bind ( unit_caps ) )
connect ( ' send_ecms ' , Callable ( self , ' on_send_ecms ' ) . bind ( ecms , unit_caps ) )
call_deferred ( ' emit_signal ' , ' interfer_resized ' , ecms )
@@ -263,16 +263,7 @@ func on_nav_data_received(coords: Dictionary, unit_caps):
msg8_num %= 0xffffffff
## Проверяет состояние отправки пакета и если не доставлен, повторяет отправку.
func on_timer_check_state ( unit_instance , ecms , resend_timeout ) - > void :
var tick = Time . get_ticks_msec ( )
for ecm in ecms . values ( ) :
if ( tick - ecm . tick_tx ) > = resend_timeout :
send_ecm ( ecm , unit_instance )
ecm . tick_tx = tick
func on_th_aoa_update ( threats : Dictionary , ecms : Dictionary , unit_instance ) - > void :
func on_th_aoa_update ( threats : Dictionary , ecms : Dictionary ) - > void :
gos_nmfs . clear ( )
for thr in threats . values ( ) :
var fs_arr : Array = [ ]
@@ -304,12 +295,8 @@ func on_th_aoa_update(threats: Dictionary, ecms: Dictionary, unit_instance) -> v
ecm . params [ ' freq ' ] = thr . freq
ecm . kni = fposmod ( thr . aoa - course , 360 )
call_ecm_proc ( ecm )
if ecm . nmfs in gos_nmfs :
if ecm . nmfs in gos_nmfs or prd . fs_caps_id [ ecm . nmfs ] in fs_closed :
signaller . emit_signal ( ' interfer_off ' , ecm )
elif prd . fs_caps_id [ ecm . nmfs ] in fs_closed :
signaller . emit_signal ( ' interfer_off ' , ecm )
else :
send_ecm ( ecm , unit_instance )
signaller . emit_signal ( ' fs_update_color ' , ecms )
prd . update_fs_state ( ecms , trenazh_mode )
@@ -459,7 +446,7 @@ func on_interfer_rcv(interfer_params: Array, unit0, unit_caps, ecms) -> void:
unit0 . on_interfer_accept ( err )
func interfer_create ( u , interfer_name , ecms , param , kni , id , dict , source_interfer , power ) - > void :
func interfer_create ( _ u, interfer_name , ecms , param , kni , id , dict , source_interfer , power ) - > void :
var sz = ecms . size ( )
var ispp : int = 0
param [ ' dur ' ] = 1.0 # Необходимо добавить параметры управления
@@ -502,13 +489,13 @@ func interfer_create(u, interfer_name, ecms, param, kni, id, dict, source_interf
if interfer_name == ' off ' :
signaller . emit_signal ( ' interfer_off ' , ecm )
thrs . erase ( ispp )
ecm . tick_tx = Time . get_ticks_msec ( )
send_ecm ( ecm , u )
if sz != ecms . size ( ) :
call_deferred ( ' emit_signal ' , ' interfer_resized ' , ecms )
func send_ecm ( ecm , unit0 ) - > void :
var time_now = Time . get_ticks_msec ( )
print_debug ( time_now )
if ecm . krp != INTERFER_OFF :
if not ecm . modulation :
call_deferred ( ' emit_signal ' , ' interfer_update ' , ecm )
@@ -518,6 +505,7 @@ func send_ecm(ecm, unit0) -> void:
unit0 . tx_stack . append ( json_data )
func on_interfer_off_all ( _unit0 , ecms : Dictionary ) - > void :
for ecm in ecms . values ( ) :
signaller . emit_signal ( ' interfer_off ' , ecm )
@@ -589,7 +577,7 @@ func on_threats_resized(th_dic):
thrs_dict = th_dic
func on_threats_update ( threat , ecms , unit_caps ):
func on_threats_update ( threat , ecms ) :
var th_id = threat . id
var ecm = null
for ecm_i in thrs . keys ( ) :
@@ -613,8 +601,6 @@ func on_threats_update(threat, ecms, unit_caps):
if ecm . kni < 0 :
ecm . kni += 360
set_nmfs ( ecm )
if ecm != null :
send_ecm ( ecm , unit_caps )
func find_threat ( freq : int , aoa : float ) :
@@ -687,9 +673,8 @@ func on_interfer_off(ecm: Interfer, ecms, unit_caps):
interfer . call_deferred ( ' emit_signal ' , ' interfer_resized ' , ecms )
func on_interfer_new ( ecm , unit_caps ):
func on_interfer_new ( ecm ) :
call_ecm_proc ( ecm )
send_ecm ( ecm , unit_caps )
func on_settings_changed ( ) :
@@ -697,8 +682,9 @@ func on_settings_changed():
var protocols : String = ProjectSettings . get_setting ( ' application/config/Список своих протоколов ' , ' ' )
gos_protocols = protocols . split ( " , " , true )
width_coef = float ( ProjectSettings . get_setting ( ' application/config/Коэффициент ширины полосы излучения ' , 1.5 ) )
if width_coef < MIN_WIDTH_COEF :
width_coef = MIN_WIDTH_COEF
if width_coef < MIN_WIDTH_COEF : width_coef = MIN_WIDTH_COEF
resend_timeout = float ( ProjectSettings . get_setting ( ' application/config/Время повторной отправки помехи ' , 1.0 ) )
if resend_timeout < MIN_RESEND_TIMEOUT : resend_timeout = MIN_RESEND_TIMEOUT
func call_ecm_proc ( ecm ) :
@@ -727,3 +713,15 @@ func set_th_emit(th: threats.Threat, ecm: Interfer):
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
func on_send_ecms ( time_now , ecms , unit_caps ) :
for ecm in ecms . values ( ) :
if ( time_now - ecm . tick_tx ) > = resend_timeout :
send_ecm ( ecm , unit_caps )
ecm . tick_tx = time_now
func _process ( delta : float ) - > void :
now += delta
emit_signal ( ' send_ecms ' , now )