Доработка, отправка команды на поставноку помех. В процессе.
This commit is contained in:
@@ -2,14 +2,6 @@ extends Node
|
||||
|
||||
## Представление помехи
|
||||
|
||||
## Состояние выполнения сеанса помехи
|
||||
const INTERFER_STATE = {
|
||||
0: 'идёт подготовка к выполнению',
|
||||
1: 'выполняется',
|
||||
2: 'не выполнена по причине ошибки в команде',
|
||||
3: 'не выполнена по причине занятости',
|
||||
4: 'не выполнена по причине_неисправности' }
|
||||
|
||||
|
||||
## Режимы помехи
|
||||
const ITERFER_MODE = {
|
||||
@@ -26,19 +18,39 @@ const ITERFER_MODE = {
|
||||
'k1': ['K1', ['freq', 'width', 'dur', 'period']],
|
||||
'ozp1': ['ОЗП-1', ['freq', 'width']] }
|
||||
|
||||
const ID_INTERFERS_LEN = 63 ## Размер пула номеров целей
|
||||
var msg_ss: int = 0 ## счётчик сообщений
|
||||
var id_array: Array ## Массив id воздействий
|
||||
var thrs: Dictionary ## Словарь воздействия для целей, ключ - id воздействия
|
||||
|
||||
|
||||
## Сеанс помехи
|
||||
class Interfer:
|
||||
var ss: int = 0 ## Счётчик сообщений.
|
||||
var ispp: int = 0 ## Индекс сеанса.
|
||||
var state: = 0 ## Состояние сеанса. Ответ КАПСРПБ. Возможные значения в [param ITERFER_STATE].
|
||||
var svk: = 0 ## Состояние сеанса. Ответ КАПСРПБ. Возможные значения в [param ITERFER_STATE].
|
||||
var krp: String = '' ## Тип помехи. Возможные значения в [param INTERFER_MODE].
|
||||
var powp: float = 0.0 ## Мощность излучения выраженная в процентах.
|
||||
var kni: = 0.0 ## Курсовой угол направления излучения.
|
||||
var params: = {} ## Параметры помехи.
|
||||
var get: Array[String] ## Запрос массива параметров (список запрошенных параметров).
|
||||
var retss: int ## Значение счётчика сообщения в котором был произведён запрос массива параметров.
|
||||
var tick_rx: int ## Тик время обновления цели, мс.
|
||||
|
||||
func get_msg6_data():
|
||||
var data_to_json : Dictionary = {}
|
||||
data_to_json['ts'] = 6
|
||||
data_to_json['ss'] = ss
|
||||
data_to_json['ispp'] = ispp
|
||||
data_to_json['krp'] = krp
|
||||
if krp != 'off':
|
||||
data_to_json['kni'] = kni
|
||||
data_to_json['powp'] = powp # Необходимо добавить управление мощностью
|
||||
data_to_json['get'] = []
|
||||
data_to_json['params'] = params
|
||||
var json = JSON.new().stringify(data_to_json)
|
||||
var pac = json.to_utf8_buffer()
|
||||
return pac
|
||||
|
||||
func set_from_dic(dic: Dictionary):
|
||||
var names: = tools.get_members_names(self)
|
||||
@@ -49,10 +61,18 @@ signal interfer_preparing(ecm: Interfer) ## Вызывается в м
|
||||
signal interfer_run(ecm: Interfer) ## Вызывается в момент начала работы помехи.
|
||||
signal interfer_error(ecm: Interfer, msg: String) ## Вызывается при ошибке.
|
||||
signal interfer_update(ecm: Interfer) ## Вызывается при обновлении помехи.
|
||||
signal interfer_new(ecm: Interfer) ## Вызывается при создании новой помехи.
|
||||
signal interfer_resized(ecms: Dictionary) ## Вызывается при изменении количества сеансов помех.
|
||||
|
||||
|
||||
func _ready():
|
||||
var ecms: Dictionary = {} ## Словарь помех
|
||||
for i in range(ID_INTERFERS_LEN): # Заполняет массив ID целей
|
||||
id_array.append(i+1)
|
||||
var unit_key = repsettings.get_unit_key('уарэп-капсрпб-отп')
|
||||
var unit = repnetwork.units[unit_key]
|
||||
signaller.connect('interfer_create', Callable(self, 'on_interfer_create').bind(unit, ecms))
|
||||
|
||||
|
||||
## Производит приём состояния помех. [param unit] -> [param ecms]
|
||||
func on_data_capsrpb_received(unit: capsrpb.CapsRpb, ecms: Dictionary):
|
||||
if not unit.json_dic.has('ts'): return
|
||||
@@ -77,6 +97,53 @@ func on_data_capsrpb_received(unit: capsrpb.CapsRpb, ecms: Dictionary):
|
||||
ecm.set_from_dic(dic_msvk)
|
||||
ecms[ispp] = ecm
|
||||
ecm.tick_rx = unit.tick
|
||||
call_deferred('emit_signal', 'interfer_new', ecm)
|
||||
if sz != ecms.size():
|
||||
call_deferred('emit_signal', 'interfer_resized', ecms)
|
||||
|
||||
|
||||
## Вызыватся, когда пользователь выбрал помеху и выбраны цели
|
||||
func on_interfer_create(btn, sel_threats, unit, ecms):
|
||||
for item in sel_threats:
|
||||
var ispp: int = 0
|
||||
var interfer_name: String = btn.get_meta('rfi_name')
|
||||
var param: Dictionary = {}
|
||||
var kni: float = item.aoa
|
||||
param['freq'] = item.freq
|
||||
param['width'] = item.width
|
||||
if interfer_name == 'k1':
|
||||
param['dur'] = 1.0 # Необходимо добавить параметры управления
|
||||
param['period'] = 1.0 # Необходимо добавить параметры управления
|
||||
var key = thrs.find_key(item.id)
|
||||
if key != null:
|
||||
ispp = key
|
||||
else:
|
||||
ispp = pop_id()
|
||||
if ispp == 0: return
|
||||
msg_ss += 1
|
||||
var ecm: Interfer
|
||||
if ecms.has(ispp):
|
||||
ecm = ecms[ispp]
|
||||
else:
|
||||
ecm = Interfer.new()
|
||||
ecm.ispp = ispp
|
||||
ecm.ss = msg_ss
|
||||
ecm.kni = kni
|
||||
ecm.krp = interfer_name
|
||||
ecm.params = param
|
||||
ecm.powp = 100.0 # Необходимо добавить управление мощностью
|
||||
thrs[ispp] = item.id
|
||||
var json_data = ecm.get_msg6_data()
|
||||
unit.tx_stack.append(json_data)
|
||||
signaller.emit_signal('interfer_new', ecm)
|
||||
|
||||
|
||||
func pop_id():
|
||||
var id = 0
|
||||
if len(id_array):
|
||||
id = id_array[0]
|
||||
id_array.remove_at(0)
|
||||
return id
|
||||
|
||||
|
||||
func push_id(id : int):
|
||||
id_array.append(id)
|
||||
|
||||
Reference in New Issue
Block a user