Доработка. Добавлены помехи
This commit is contained in:
80
scripts/interfer.gd
Normal file
80
scripts/interfer.gd
Normal file
@@ -0,0 +1,80 @@
|
||||
extends Node
|
||||
|
||||
## Представление помехи
|
||||
|
||||
## Состояние выполнения сеанса помехи
|
||||
const ITERFER_STATE = {
|
||||
0: 'идёт подготовка к выполнению',
|
||||
1: 'выполняется',
|
||||
2: 'не выполнена по причине ошибки в команде',
|
||||
3: 'не выполнена по причине занятости',
|
||||
4: 'не выполнена по причине_неисправности' }
|
||||
|
||||
|
||||
## Режимы помехи
|
||||
const ITERFER_MODE = {
|
||||
'srni1': ['СРН-И1', ['freq', 'width']],
|
||||
'srnm2': ['СРН-М2', ['freq', 'width']],
|
||||
'lchm1': ['ЛЧМ-1', ['freq', 'width']],
|
||||
'mchm1': ['МЧМ-1', ['freq', 'width']],
|
||||
'pdm2': ['ПД-М2', ['freq', 'width']],
|
||||
'pdm4': ['ПД-М4', ['freq', 'width']],
|
||||
'pdm4s': ['ПД-М4С', ['freq', 'width']],
|
||||
'pdchm': ['ПД-ЧМ', ['freq', 'width']],
|
||||
'svi1': ['СВ-И1', ['freq', 'width']],
|
||||
'svm2': ['СВ-М2', ['freq', 'width']],
|
||||
'k1': ['K1', ['freq', 'width', 'dur', 'period']],
|
||||
'ozp1': ['ОЗП-1', ['freq', 'width']] }
|
||||
|
||||
|
||||
## Сеанс помехи
|
||||
class Interfer:
|
||||
var ss: int = 0 ## Счётчик сообщений
|
||||
var ispp: int = 0 ## Индекс сеанса.
|
||||
var state: = 0 ## Состояние сеанса. Ответ КАПСРПБ. Возможные значения в [param ITERFER_STATE]
|
||||
var krp: String = '' ## Тип помехи. Возможные значения в [param ITERFER_MODE]
|
||||
var powp: float = 0.0 ## Мощность излучения выраженная в процентах
|
||||
var kni: = 0.0 ## Курсовой угол направления излучения
|
||||
var params: = {} ## Параметры помехи
|
||||
var get: Array[String] ## Запрос массива параметров (список запрошенных параметров)
|
||||
var retss: int ## Значение счётчика сообщения в котором был произведён запрос массива параметров
|
||||
|
||||
|
||||
func set_from_dic(dic: Dictionary):
|
||||
var names: = Tools.get_members_names(self)
|
||||
names.any(func(vn): if dic.has(vn): set(vn, dic[vn]); return false)
|
||||
|
||||
|
||||
signal interfer_preparing(ecm: Interfer)
|
||||
signal interfer_run(ecm: Interfer)
|
||||
signal interfer_error(ecm: Interfer, msg: String)
|
||||
|
||||
|
||||
## Производит приём состояния помех. [param unit] -> [param ecms]
|
||||
func on_data_capsrpb_received(unit: capsrpb.CapsRpb, ecms: Dictionary):
|
||||
if not unit.json_dic.has('ts'): return
|
||||
if not (unit.json_dic['ts'] is int): return
|
||||
if unit.json_dic['ts'] != 5: return
|
||||
|
||||
if not unit.json_dic.has('msvk'): return
|
||||
if not (unit.json_dic['msvk'] is Array): return
|
||||
|
||||
var msvk = unit.json_dic['msvk']
|
||||
var sz: = ecms.size()
|
||||
for dic_msvk in msvk:
|
||||
if not (dic_msvk is Dictionary): continue
|
||||
if dic_msvk.has('ispp'):
|
||||
var ispp = int(dic_msvk['ispp'])
|
||||
if ecms.has(ispp):
|
||||
var ecm = ecms[ispp]
|
||||
ecm.set_from_dic(dic_msvk)
|
||||
ecm.tick_rx = unit.tick
|
||||
call_deferred('emit_signal', 'interfer_update', ecm)
|
||||
else:
|
||||
var ecm = Interfer.new()
|
||||
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)
|
||||
Reference in New Issue
Block a user