extends Node ## Границы секторов блоков ФС по частоте в режиме РТО. const fs_band_rto: Dictionary = { 0: [200.0, 250.0], 1: [250.0, 300.0], 2: [300.0, 350.0], 3: [350.0, 400.0], 4: [400.0, 450.0], 5: [450.0, 500.0], 6: [500.0, 550.0] } ## Границы секторов блоков ФС по частоте в режиме РЛС. const fs_band_rls: Dictionary = { 0: [480.0, 490.0], 1: [490.0, 500.0], 2: [500.0, 510.0], 3: [510.0, 520.0], 4: [520.0, 530.0], 5: [530.0, 540.0], 6: [540.0, 550.0] } ## Границы секторов блоков ФС по пеленгу. const fs_sectors: Dictionary = { 0: [0.0, 90.0], 3: [90.0, 180.0], 2: [180.0, 270.0], 1: [270.0, 360.0] } const fs_freq: Dictionary = { 0: [390.0, 800.0, 200.0, 250.0, 433.0], 1: [800.0, 1065.0, 250.0, 300.0, 860.0], 2: [1065.0, 1210.0, 300.0, 350.0, 1137.0], 3: [1150.0, 1490.0, 350.0, 400.0, 1227.0], 4: [1490.0, 2000.0, 400.0, 450.0, 1575.0], 5: [2000.0, 3500.0, 450.0, 500.0, 2450.0], 6: [3500.0, 6000.0, 500.0, 550.0, 5800.0] } ## Названия приборов ПРД const prd_names: Array = [ 'уарэп-яу07-1н', 'уарэп-яу07-1в', 'уарэп-яу07-1к', 'уарэп-яу07-2н', 'уарэп-яу07-2в', 'уарэп-яу07-2к', 'уарэп-яу07-3н', 'уарэп-яу07-3в', 'уарэп-яу07-3к', 'уарэп-яу07-4н', 'уарэп-яу07-4в', 'уарэп-яу07-4к', ] ## Соответствие модулей ФС их нахождуению в приборе ПРД const fs_prd: Dictionary = { 0: ['уарэп-яу07-1к'], 1: ['уарэп-яу07-4к'], 2: ['уарэп-яу07-3к'], 3: ['уарэп-яу07-2к'], 4: ['уарэп-яу07-1н'], 5: ['уарэп-яу07-4н'], 6: ['уарэп-яу07-3н'], 7: ['уарэп-яу07-2н'], 8: ['уарэп-яу07-1н'], 9: ['уарэп-яу07-4н'], 10: ['уарэп-яу07-3н'], 11: ['уарэп-яу07-2н'], 12: ['уарэп-яу07-1в'], 13: ['уарэп-яу07-4в'], 14: ['уарэп-яу07-3в'], 15: ['уарэп-яу07-2в'], 16: ['уарэп-яу07-1в'], 17: ['уарэп-яу07-4в'], 18: ['уарэп-яу07-3в'], 19: ['уарэп-яу07-2в'], 20: ['уарэп-яу07-1к'], 21: ['уарэп-яу07-4к'], 22: ['уарэп-яу07-3к'], 23: ['уарэп-яу07-2к'], 24: ['уарэп-яу07-1к'], 25: ['уарэп-яу07-4к'], 26: ['уарэп-яу07-3к'], 27: ['уарэп-яу07-2к'], } var fs_dict: Dictionary ## Словарь с модулями ФС var prd_dict: Dictionary ## Словарь с приборами ПРД class Fs: var index ## Индекс блока усилителей var modulation: bool ## Состояние модуляции var prd_name: String ## Ипя прибора ПРД в котором стоит модуль signal update_modulation(index) func _init(i, p_name): prd_name = p_name index = i func set_modulation(val): modulation = val class PRD: var prd_name: String ## Имя прибора var unit_yau07 ## Юнит эмс var fs_dic: Dictionary ## Массив блоков ФС var yemsg_board ## Плата ЭМС-Г func _init(u_name ,u, yems_board): prd_name = u_name unit_yau07 = u yemsg_board = yems_board func on_update_modulation(index): yemsg_board.add_cmd(index/4, fs_dic[index].modulation) func _ready() -> void: for prd_name in prd_names: var unit_key = settings.get_unit_key(prd_name) var unit_prd = network.units[unit_key] for yemsg_board in yemsg.ems_board.values(): if yemsg_board[1] == unit_prd: var yemsg_b = yemsg_board[0] var new_prd = PRD.new(prd_name, unit_prd, yemsg_b) prd_dict[prd_name] = new_prd for key in fs_prd.keys(): var fs = Fs.new(key, fs_prd[key][0]) fs_dict[key] = fs if prd_dict.has(fs.prd_name): prd_dict[fs.prd_name].fs_dic[key] = fs fs.connect('update_modulation', prd_dict[fs.prd_name].on_update_modulation.bind(fs.index)) ## Функция возвращает массив с индексами модулей ФС для выбранной помехи func get_fs_index(ecm, fs_index_arr): var sector: int var band: Array var angle: float = ecm.kni + 45.0 if angle > 360.0: angle -= 360.0 for sec in fs_sectors.values(): if float(angle) >= sec[0] and float(angle) <= sec[1]: sector = fs_sectors.find_key(sec) for diap in fs_freq.values(): if ecm.params.has('freq'): if ecm.params['freq'] >= diap[0] and ecm.params['freq'] <= diap[1]: band.append(fs_freq.find_key(diap)) for item in band: fs_index_arr.append(item * 4 + sector) ## Обновление состояния модулей формирователя сигналов func update_fs_state(ecms): for fs in fs_dict.values(): ## Запрет модуляции для всех ФС fs.set_modulation(false) for ecm in ecms.values(): ## Выставление состояния помехи в ФС var fs_ids: Array get_fs_index(ecm, fs_ids) for fs_index in fs_ids: var fs = fs_dict[fs_index] fs.set_modulation(ecm.modulation) for prd_module in prd_dict.values(): ## Отправка команды на исполнение в ПРД if not prd_module.unit_yau07.online: continue for fs in prd_module.fs_dic.values(): var dev_mode = prd_module.yemsg_board.get_dev_mode(fs.index) var fs_state = 2 if fs.modulation: fs_state = 3 if (dev_mode != fs_state) or (fs_state == 3): fs.emit_signal('update_modulation')