Files
uarep-ctl/scripts/interfer.gd
2023-09-05 09:36:12 +03:00

83 lines
4.1 KiB
GDScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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 INTERFER_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) ## Вызывается при ошибке
signal interfer_update(ecm: Interfer) ## Вызывается при обновлении помехи
signal interfer_new(ecm: Interfer) ## Вызывается при новой помехе
signal interfer_resized(ecms: Dictionary) ## Вызывается при изменении количества сеансов помех
## Производит приём состояния помех. [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)