169 lines
5.4 KiB
GDScript
169 lines
5.4 KiB
GDScript
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')
|