Рефактор. Переписан автомат состояний для работы с ЯУ-07 в ПРД.
This commit is contained in:
@@ -4,7 +4,7 @@ class_name scroll_ecm_params extends ScrollContainer
|
|||||||
|
|
||||||
const CellLineEdit = preload('res://table/ячейка-2.tscn') ## Ячейка таблицы.
|
const CellLineEdit = preload('res://table/ячейка-2.tscn') ## Ячейка таблицы.
|
||||||
const TableHeader = preload('res://table/header.tscn') ## Ячейка заголовок таблицы.
|
const TableHeader = preload('res://table/header.tscn') ## Ячейка заголовок таблицы.
|
||||||
const CellTaggleBtn = preload('res://table/settings-toggle.tscn')
|
const CellTaggleBtn = preload('res://table/set-toggle.tscn')
|
||||||
|
|
||||||
const TABLE_HEADER = [ TableHeader, TableHeader ] ## Описание ряда заголовка.
|
const TABLE_HEADER = [ TableHeader, TableHeader ] ## Описание ряда заголовка.
|
||||||
const TABLE_ROW = [ CellLineEdit, CellLineEdit ] ## Описание ряда.
|
const TABLE_ROW = [ CellLineEdit, CellLineEdit ] ## Описание ряда.
|
||||||
@@ -38,13 +38,6 @@ func init_table():
|
|||||||
$table.set_node_alligment(0, MOD_ROW_INDEX, HORIZONTAL_ALIGNMENT_LEFT)
|
$table.set_node_alligment(0, MOD_ROW_INDEX, HORIZONTAL_ALIGNMENT_LEFT)
|
||||||
$table.set_node_editable(0, MOD_ROW_INDEX, false)
|
$table.set_node_editable(0, MOD_ROW_INDEX, false)
|
||||||
var taggle_node = $table.get_node2(1, MOD_ROW_INDEX)
|
var taggle_node = $table.get_node2(1, MOD_ROW_INDEX)
|
||||||
#for item in taggle_node.get_children():
|
|
||||||
#item.size.x = 85
|
|
||||||
#item.size.y = 25
|
|
||||||
#item.position.x = 0
|
|
||||||
#item.position.y = 0
|
|
||||||
#taggle_node.size.x = 85
|
|
||||||
#taggle_node.size.y = 25
|
|
||||||
var taggle_btn = taggle_node.get_children()[1]
|
var taggle_btn = taggle_node.get_children()[1]
|
||||||
taggle_btn.connect('pressed', on_taggle_btn.bind(taggle_btn))
|
taggle_btn.connect('pressed', on_taggle_btn.bind(taggle_btn))
|
||||||
taggle_btn.disabled = true
|
taggle_btn.disabled = true
|
||||||
|
|||||||
@@ -40,7 +40,7 @@ signal drag_end ## Вызывается в момент завершени
|
|||||||
const map_sizes = [
|
const map_sizes = [
|
||||||
Rect2i(360, 360, 400, 400),
|
Rect2i(360, 360, 400, 400),
|
||||||
Rect2i(82, 82, 955, 955)]
|
Rect2i(82, 82, 955, 955)]
|
||||||
var fs_band = prd.fs_band_rto ## Текущий режим блоков ФС по частоте
|
var fs_band = prd.FS_BAND_RTO ## Текущий режим блоков ФС по частоте
|
||||||
var fs_selected: Dictionary ## Словарь выбранных секторов
|
var fs_selected: Dictionary ## Словарь выбранных секторов
|
||||||
var fs_active: Dictionary ## Словарь секторов назначенных на подавление
|
var fs_active: Dictionary ## Словарь секторов назначенных на подавление
|
||||||
|
|
||||||
@@ -74,7 +74,7 @@ func on_enter_tree() -> void: call_deferred('on_button_strobe_pressed')
|
|||||||
## Обработчик нажатия на кнопку вид.
|
## Обработчик нажатия на кнопку вид.
|
||||||
func on_button_view_toggled(toggled: bool):
|
func on_button_view_toggled(toggled: bool):
|
||||||
signaller.emit_signal('map_mode_changed', int(toggled))
|
signaller.emit_signal('map_mode_changed', int(toggled))
|
||||||
fs_band = prd.fs_band_rls if toggled else prd.fs_band_rto
|
fs_band = prd.FS_BAND_RLS if toggled else prd.FS_BAND_RTO
|
||||||
var s = map_sizes[int(toggled)]
|
var s = map_sizes[int(toggled)]
|
||||||
$tilemap.size = s.size
|
$tilemap.size = s.size
|
||||||
$tilemap.position = s.position
|
$tilemap.position = s.position
|
||||||
@@ -138,17 +138,17 @@ func map_threat_to_bip(th: threats.Threat, bip: Control):
|
|||||||
var freq = th.freq
|
var freq = th.freq
|
||||||
var sector_key = null
|
var sector_key = null
|
||||||
var sector_width = 50.0
|
var sector_width = 50.0
|
||||||
for key in prd.fs_freq:
|
for key in prd.FS_FREQ:
|
||||||
var freq_range = prd.fs_freq[key]
|
var freq_range = prd.FS_FREQ[key]
|
||||||
var _num_values = (freq_range[1]- freq_range[0]) / sector_width
|
var _num_values = (freq_range[1]- freq_range[0]) / sector_width
|
||||||
if freq_range[0] <= freq and freq <= freq_range[1]:
|
if freq_range[0] <= freq and freq <= freq_range[1]:
|
||||||
sector_key = key
|
sector_key = key
|
||||||
break
|
break
|
||||||
if sector_key!= null:
|
if sector_key!= null:
|
||||||
radius_internal = prd.fs_freq[sector_key][2]
|
radius_internal = prd.FS_FREQ[sector_key][2]
|
||||||
radius_outter = prd.fs_freq[sector_key][3]
|
radius_outter = prd.FS_FREQ[sector_key][3]
|
||||||
freq_low = prd.fs_freq[sector_key][0]
|
freq_low = prd.FS_FREQ[sector_key][0]
|
||||||
freq_high = prd.fs_freq[sector_key][1]
|
freq_high = prd.FS_FREQ[sector_key][1]
|
||||||
bip.position = tools.pos_calc(
|
bip.position = tools.pos_calc(
|
||||||
th.freq,
|
th.freq,
|
||||||
th.aoa,
|
th.aoa,
|
||||||
@@ -372,9 +372,9 @@ func sel_fs_sector(event):
|
|||||||
var sector: int
|
var sector: int
|
||||||
var band: int
|
var band: int
|
||||||
var has_band: bool = false
|
var has_band: bool = false
|
||||||
for sec in prd.fs_sectors.values():
|
for sec in prd.FS_SECTORS.values():
|
||||||
if angle >= sec[0] and angle <= sec[1]:
|
if angle >= sec[0] and angle <= sec[1]:
|
||||||
sector = prd.fs_sectors.find_key(sec)
|
sector = prd.FS_SECTORS.find_key(sec)
|
||||||
for diap in fs_band.values():
|
for diap in fs_band.values():
|
||||||
if distance >= diap[0] and distance <= diap[1]:
|
if distance >= diap[0] and distance <= diap[1]:
|
||||||
band = fs_band.find_key(diap)
|
band = fs_band.find_key(diap)
|
||||||
@@ -430,11 +430,11 @@ func set_ecm_btns_state(value: bool):
|
|||||||
|
|
||||||
|
|
||||||
func get_fs_param(index: int) -> Array:
|
func get_fs_param(index: int) -> Array:
|
||||||
var freq = (prd.fs_freq[index / 4][4])
|
var freq = (prd.FS_FREQ[index / 4][4])
|
||||||
var sector = (prd.fs_sectors[index % 4][0] + prd.fs_sectors[index % 4][1])/2 - 45.0
|
var sector = (prd.FS_SECTORS[index % 4][0] + prd.FS_SECTORS[index % 4][1])/2 - 45.0
|
||||||
if sector < 0:
|
if sector < 0:
|
||||||
sector += 360.0
|
sector += 360.0
|
||||||
var width = prd.fs_freq[index / 4][1] - prd.fs_freq[index / 4][0]
|
var width = prd.FS_FREQ[index / 4][1] - prd.FS_FREQ[index / 4][0]
|
||||||
return [sector, freq, width, index]
|
return [sector, freq, width, index]
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -2,7 +2,9 @@ class_name yems_boards extends Node
|
|||||||
|
|
||||||
class EmsBoard:
|
class EmsBoard:
|
||||||
enum {WAIT, WR_DEV_NUM_W, WRITE, WR_DEV_NUM_R, READ, READ_FLASH, WRITE_FLASH,
|
enum {WAIT, WR_DEV_NUM_W, WRITE, WR_DEV_NUM_R, READ, READ_FLASH, WRITE_FLASH,
|
||||||
WRITE_FLASH_BEGIN, LOAD_KEMS, WRITE_FLASH_END, LOAD_FAIL} ## Состояния платы
|
WRITE_FLASH_BEGIN, WRITE_FLASH_END} ## Состояния платы
|
||||||
|
|
||||||
|
enum LoadState {NOT_LOAD, DONE, IN_PROCESS, FAIL, NOT_DEFINED}
|
||||||
|
|
||||||
const modulation_dev: Dictionary = { ## Словарь соответствия диапазона номеру устройства
|
const modulation_dev: Dictionary = { ## Словарь соответствия диапазона номеру устройства
|
||||||
0 : 50,
|
0 : 50,
|
||||||
@@ -13,33 +15,32 @@ class EmsBoard:
|
|||||||
5 : 51,
|
5 : 51,
|
||||||
6 : 52, }
|
6 : 52, }
|
||||||
|
|
||||||
var id_board: int ## id платы
|
var id_board: int ## id платы
|
||||||
var in_devs: Dictionary ## Словарь с входными устройствами.
|
var in_devs: Dictionary ## Словарь с входными устройствами.
|
||||||
var out_devs: Dictionary ## Словарь с выходными устройствами.
|
var out_devs: Dictionary ## Словарь с выходными устройствами.
|
||||||
var base_addr_isa: int ## Базовый адрес ячейки isa.
|
var base_addr_isa: int ## Базовый адрес ячейки isa.
|
||||||
var ports_to_wr: Array ## Порты для записи
|
var ports_to_wr: Array ## Порты для записи
|
||||||
var in_tbl: Array
|
var in_tbl: Array
|
||||||
var out_tbl: Array
|
var out_tbl: Array
|
||||||
var online: bool ## статус платы
|
var online: bool ## статус платы
|
||||||
var ems_load: bool ## флаг загрузки платы
|
var ems_load: int = LoadState.NOT_DEFINED ## состояние загрузки платы
|
||||||
var state_cmd = WAIT ## текущее состояние платы ЭМС
|
var state_cmd = WAIT ## текущее состояние платы ЭМС
|
||||||
var state_board = WAIT ## текущее состояние платы ЭМС
|
var state_board = WAIT ## текущее состояние платы ЭМС
|
||||||
var cur_dev ## Текущее устройство
|
var cur_dev ## Текущее устройство
|
||||||
var cur_dev_num: = 0 ## Номер текущего устройства
|
var cur_dev_num: = 0 ## Номер текущего устройства
|
||||||
var cur_dev_index: = 0 ## Индекс текущего устройства в списке
|
var cur_dev_index: = 0 ## Индекс текущего устройства в списке
|
||||||
var dev_num_list: = Array() ## Список всех устройств
|
var dev_num_list: = Array() ## Список всех устройств
|
||||||
var need_next_dev: bool = false ## Нужно ли переходить к следующему устройству
|
var need_next_dev: bool = false ## Нужно ли переходить к следующему устройству
|
||||||
var unit_ems ## Юнит эмс
|
var unit_ems ## Юнит эмс
|
||||||
var read_done: bool = false ## Флаг, что данные из ячейки прочитанны
|
var read_done: bool = false ## Флаг, что данные из ячейки прочитанны
|
||||||
var need_flash_rd: bool = false ## Флаг, что надо прочитать флеш
|
var need_flash_rd: bool = false ## Флаг, что надо прочитать флеш
|
||||||
var need_flash_wr: bool = false ## Флаг, что надо записать данные в флеш
|
var need_flash_wr: bool = false ## Флаг, что надо записать данные в флеш
|
||||||
var need_write: bool = false ## Флаг, что надо записать данные в ячейку ЭМС
|
var need_write: bool = false ## Флаг, что надо записать данные в ячейку ЭМС
|
||||||
var ems_g_fn: String = '' ## Имя файла настроек ЭМС-Г
|
var ems_g_fn: String = '' ## Имя файла настроек ЭМС-Г
|
||||||
var cmd_array: Array ## Очередь выполнения команд
|
var cmd_array: Array ## Очередь выполнения команд
|
||||||
|
|
||||||
signal upd_delay_offset(board, cur_dev) ## Сигнал о обновлении данных задержек
|
signal upd_delay_offset(board, cur_dev) ## Сигнал о обновлении данных задержек
|
||||||
signal upd_o_state(board, cur_dev) ## Сигнал о обновлении данных режима выходов
|
signal upd_o_state(board, cur_dev) ## Сигнал о обновлении данных режима выходов
|
||||||
signal load_done(board) ## Сигнал о окончании загрузки данных в ячейку
|
|
||||||
|
|
||||||
func _init(id, base_addr, in_table, out_table, u):
|
func _init(id, base_addr, in_table, out_table, u):
|
||||||
id_board = id
|
id_board = id
|
||||||
@@ -59,13 +60,18 @@ class EmsBoard:
|
|||||||
var bit_online = 0 + id_board
|
var bit_online = 0 + id_board
|
||||||
var bit_load = 3 + id_board
|
var bit_load = 3 + id_board
|
||||||
online = (status[0] >> bit_online) & 1
|
online = (status[0] >> bit_online) & 1
|
||||||
ems_load = (status[0] >> bit_load) & 1
|
ems_load = LoadState.DONE if ((status[0] >> bit_load) & 1) else LoadState.NOT_LOAD
|
||||||
else:
|
else:
|
||||||
online = status[0] & 1
|
online = status[0] & 1
|
||||||
var bit_load = 4
|
var bit_load = 4
|
||||||
ems_load = (status[0] >> bit_load) & 1
|
if online:
|
||||||
if not online:
|
if ems_load == LoadState.NOT_DEFINED:
|
||||||
need_write = true
|
ems_load = LoadState.DONE if ((status[0] >> bit_load) & 1) else LoadState.NOT_LOAD
|
||||||
|
elif ((status[0] >> bit_load) & 1):
|
||||||
|
ems_load = LoadState.DONE
|
||||||
|
else:
|
||||||
|
ems_load = LoadState.NOT_DEFINED
|
||||||
|
set_wait()
|
||||||
var in_blank = int(status[1 + offset] | (status[2 + offset] << 8) | (status[3 + offset] << 16) | \
|
var in_blank = int(status[1 + offset] | (status[2 + offset] << 8) | (status[3 + offset] << 16) | \
|
||||||
(status[4 + offset] << 24) | (status[5 + offset] << 32))
|
(status[4 + offset] << 24) | (status[5 + offset] << 32))
|
||||||
var in_imp = int(status[7 + offset] | (status[8 + offset] << 8) | (status[9 + offset] << 16) | \
|
var in_imp = int(status[7 + offset] | (status[8 + offset] << 8) | (status[9 + offset] << 16) | \
|
||||||
@@ -155,19 +161,20 @@ class EmsBoard:
|
|||||||
state_cmd = WR_DEV_NUM_W
|
state_cmd = WR_DEV_NUM_W
|
||||||
on_wr_device(cur_dev_num)
|
on_wr_device(cur_dev_num)
|
||||||
else: # Пробег закончен, выбираем последнее устройство
|
else: # Пробег закончен, выбираем последнее устройство
|
||||||
state_cmd = WAIT
|
set_wait()
|
||||||
state_board = WAIT
|
|
||||||
read_done = true
|
read_done = true
|
||||||
cur_dev_index -= 1
|
cur_dev_index -= 1
|
||||||
need_next_dev = false
|
need_next_dev = false
|
||||||
else:
|
else:
|
||||||
state_cmd = WAIT
|
if cmd_array.size():
|
||||||
|
execute_cmd()
|
||||||
|
else:
|
||||||
|
set_wait()
|
||||||
|
|
||||||
elif (state_cmd == READ_FLASH) and (unit_ems.cmd_code_rx == unit_ems.CmdCode.READ_FLASH_MP550):
|
elif (state_cmd == READ_FLASH) and (unit_ems.cmd_code_rx == unit_ems.CmdCode.READ_FLASH_MP550):
|
||||||
on_read_flash()
|
on_read_flash()
|
||||||
elif (state_cmd == WRITE_FLASH) and (unit_ems.cmd_code_rx == unit_ems.CmdCode.WRITE_FLASH_MP550):
|
elif (state_cmd == WRITE_FLASH) and (unit_ems.cmd_code_rx == unit_ems.CmdCode.WRITE_FLASH_MP550):
|
||||||
state_board = WAIT
|
set_wait()
|
||||||
state_cmd = WAIT
|
|
||||||
|
|
||||||
## Выбор текущего устройства и проверка правильности его номера
|
## Выбор текущего устройства и проверка правильности его номера
|
||||||
func check_dev_number():
|
func check_dev_number():
|
||||||
@@ -297,6 +304,7 @@ class EmsBoard:
|
|||||||
|
|
||||||
func execute_cmd():
|
func execute_cmd():
|
||||||
if len(cmd_array):
|
if len(cmd_array):
|
||||||
|
state_board = WRITE
|
||||||
var cmd: Array = cmd_array.pop_front()
|
var cmd: Array = cmd_array.pop_front()
|
||||||
change_mode(cmd[0], cmd[1])
|
change_mode(cmd[0], cmd[1])
|
||||||
|
|
||||||
@@ -308,3 +316,7 @@ class EmsBoard:
|
|||||||
|
|
||||||
func get_dev_mode(fs_index):
|
func get_dev_mode(fs_index):
|
||||||
return out_devs[modulation_dev[fs_index/4]].mode
|
return out_devs[modulation_dev[fs_index/4]].mode
|
||||||
|
|
||||||
|
func set_wait():
|
||||||
|
state_cmd = WAIT
|
||||||
|
state_board = WAIT
|
||||||
|
|||||||
@@ -52,6 +52,7 @@ class Interfer:
|
|||||||
var tick_tx: int ## Тик время обновления цели, мс.
|
var tick_tx: int ## Тик время обновления цели, мс.
|
||||||
var source_interfer: String = '' ## Тип объекта по которой поставлена помеха.
|
var source_interfer: String = '' ## Тип объекта по которой поставлена помеха.
|
||||||
var modulation: bool ## Модуляция для включения усилителей
|
var modulation: bool ## Модуляция для включения усилителей
|
||||||
|
var um: float ## Угол места для помехи.
|
||||||
|
|
||||||
func _to_string() -> String:
|
func _to_string() -> String:
|
||||||
return 'номер: %d название: %s частота: %0.1f МГц пеленг: %0.1f гр.' % [ispp, ITERFER_MODE[krp][0], params['freq'], kni]
|
return 'номер: %d название: %s частота: %0.1f МГц пеленг: %0.1f гр.' % [ispp, ITERFER_MODE[krp][0], params['freq'], kni]
|
||||||
@@ -258,14 +259,15 @@ func interfer_create(interfer_name, ecms, param, kni, id, dict, source_interfer)
|
|||||||
ecm = Interfer.new()
|
ecm = Interfer.new()
|
||||||
ecm.ispp = ispp
|
ecm.ispp = ispp
|
||||||
ecms[ispp] = ecm
|
ecms[ispp] = ecm
|
||||||
ecm.svk = STATE_TSMT # Подготовка к передаче сообщения
|
ecm.svk = STATE_TSMT # Подготовка к передаче сообщения
|
||||||
ecm.ss = msg_ss
|
ecm.ss = msg_ss
|
||||||
ecm.kni = kni
|
ecm.kni = kni
|
||||||
ecm.krp = interfer_name
|
ecm.krp = interfer_name
|
||||||
ecm.params = param
|
ecm.params = param
|
||||||
ecm.powp = 100.0 # Необходимо добавить управление мощностью
|
ecm.powp = 100.0
|
||||||
ecm.source_interfer = source_interfer
|
ecm.source_interfer = source_interfer
|
||||||
ecm.modulation = emit_enable
|
ecm.modulation = emit_enable
|
||||||
|
ecm.um = 15.0 # Значение по умолчанию
|
||||||
signaller.emit_signal('interfer_new', ecm)
|
signaller.emit_signal('interfer_new', ecm)
|
||||||
if interfer_name == 'off':
|
if interfer_name == 'off':
|
||||||
signaller.emit_signal('interfer_off', ecm, ecms, thrs)
|
signaller.emit_signal('interfer_off', ecm, ecms, thrs)
|
||||||
|
|||||||
105
scripts/prd.gd
105
scripts/prd.gd
@@ -1,8 +1,9 @@
|
|||||||
extends Node
|
extends Node
|
||||||
|
|
||||||
|
enum PrdState {WORK, CONTROL}
|
||||||
|
|
||||||
## Границы секторов блоков ФС по частоте в режиме РТО.
|
## Границы секторов блоков ФС по частоте в режиме РТО.
|
||||||
const fs_band_rto: Dictionary = {
|
const FS_BAND_RTO: Dictionary = {
|
||||||
0: [200.0, 250.0],
|
0: [200.0, 250.0],
|
||||||
1: [250.0, 300.0],
|
1: [250.0, 300.0],
|
||||||
2: [300.0, 350.0],
|
2: [300.0, 350.0],
|
||||||
@@ -12,7 +13,7 @@ const fs_band_rto: Dictionary = {
|
|||||||
6: [500.0, 550.0] }
|
6: [500.0, 550.0] }
|
||||||
|
|
||||||
## Границы секторов блоков ФС по частоте в режиме РЛС.
|
## Границы секторов блоков ФС по частоте в режиме РЛС.
|
||||||
const fs_band_rls: Dictionary = {
|
const FS_BAND_RLS: Dictionary = {
|
||||||
0: [480.0, 490.0],
|
0: [480.0, 490.0],
|
||||||
1: [490.0, 500.0],
|
1: [490.0, 500.0],
|
||||||
2: [500.0, 510.0],
|
2: [500.0, 510.0],
|
||||||
@@ -22,13 +23,23 @@ const fs_band_rls: Dictionary = {
|
|||||||
6: [540.0, 550.0] }
|
6: [540.0, 550.0] }
|
||||||
|
|
||||||
## Границы секторов блоков ФС по пеленгу.
|
## Границы секторов блоков ФС по пеленгу.
|
||||||
const fs_sectors: Dictionary = {
|
const FS_SECTORS: Dictionary = {
|
||||||
0: [0.0, 90.0],
|
0: [0.0, 90.0],
|
||||||
3: [90.0, 180.0],
|
3: [90.0, 180.0],
|
||||||
2: [180.0, 270.0],
|
2: [180.0, 270.0],
|
||||||
1: [270.0, 360.0] }
|
1: [270.0, 360.0] }
|
||||||
|
|
||||||
const fs_freq: Dictionary = {
|
const CODE_UM: Array = [
|
||||||
|
[-5, 0],
|
||||||
|
[0 , 10],
|
||||||
|
[10, 20],
|
||||||
|
[20, 30],
|
||||||
|
[30, 40],
|
||||||
|
[40, 50],
|
||||||
|
[50, 55]
|
||||||
|
]
|
||||||
|
|
||||||
|
const FS_FREQ: Dictionary = {
|
||||||
0: [390.0, 800.0, 200.0, 250.0, 433.0],
|
0: [390.0, 800.0, 200.0, 250.0, 433.0],
|
||||||
1: [800.0, 1065.0, 250.0, 300.0, 860.0],
|
1: [800.0, 1065.0, 250.0, 300.0, 860.0],
|
||||||
2: [1065.0, 1210.0, 300.0, 350.0, 1137.0],
|
2: [1065.0, 1210.0, 300.0, 350.0, 1137.0],
|
||||||
@@ -38,7 +49,7 @@ const fs_freq: Dictionary = {
|
|||||||
6: [3500.0, 6000.0, 500.0, 550.0, 5800.0] }
|
6: [3500.0, 6000.0, 500.0, 550.0, 5800.0] }
|
||||||
|
|
||||||
## Названия приборов ПРД
|
## Названия приборов ПРД
|
||||||
const prd_names: Array = [
|
const PRD_NAMES: Array = [
|
||||||
'уарэп-яу07-1н',
|
'уарэп-яу07-1н',
|
||||||
'уарэп-яу07-1в',
|
'уарэп-яу07-1в',
|
||||||
'уарэп-яу07-1к',
|
'уарэп-яу07-1к',
|
||||||
@@ -53,7 +64,7 @@ const prd_names: Array = [
|
|||||||
'уарэп-яу07-4к', ]
|
'уарэп-яу07-4к', ]
|
||||||
|
|
||||||
## Соответствие модулей ФС их нахождуению в приборе ПРД
|
## Соответствие модулей ФС их нахождуению в приборе ПРД
|
||||||
const fs_prd: Dictionary = {
|
const FS_PRD: Dictionary = {
|
||||||
0: ['уарэп-яу07-1к'],
|
0: ['уарэп-яу07-1к'],
|
||||||
1: ['уарэп-яу07-4к'],
|
1: ['уарэп-яу07-4к'],
|
||||||
2: ['уарэп-яу07-3к'],
|
2: ['уарэп-яу07-3к'],
|
||||||
@@ -87,7 +98,7 @@ var fs_dict: Dictionary ## Словарь с модулями ФС
|
|||||||
var prd_dict: Dictionary ## Словарь с приборами ПРД
|
var prd_dict: Dictionary ## Словарь с приборами ПРД
|
||||||
|
|
||||||
class Fs:
|
class Fs:
|
||||||
const um_ports: Dictionary = {
|
const UM_PORTS: Dictionary = {
|
||||||
1 : 0x6,
|
1 : 0x6,
|
||||||
2 : 0xA,
|
2 : 0xA,
|
||||||
3 : 0x6,
|
3 : 0x6,
|
||||||
@@ -99,27 +110,29 @@ class Fs:
|
|||||||
var modulation: bool ## Состояние модуляции
|
var modulation: bool ## Состояние модуляции
|
||||||
var prd_name: String ## Ипя прибора ПРД в котором стоит модуль
|
var prd_name: String ## Ипя прибора ПРД в котором стоит модуль
|
||||||
var um_port: int = 0 ## Порт для угла места
|
var um_port: int = 0 ## Порт для угла места
|
||||||
var um: int = 0 ## Код угла места
|
var um_code: int = 0 ## Код угла места
|
||||||
|
|
||||||
signal update_modulation(index)
|
signal update_modulation(index)
|
||||||
|
|
||||||
func _init(i, p_name):
|
func _init(i, p_name):
|
||||||
prd_name = p_name
|
prd_name = p_name
|
||||||
index = i
|
index = i
|
||||||
if um_ports.has(index/4):
|
if UM_PORTS.has(index/4):
|
||||||
um_port = um_ports[index/4]
|
um_port = UM_PORTS[index/4]
|
||||||
|
|
||||||
func set_modulation(val):
|
func set_modulation(val):
|
||||||
modulation = val
|
modulation = val
|
||||||
|
|
||||||
|
|
||||||
class PRD:
|
class PRD:
|
||||||
const ug_addr: int = 0x100 ## адрес ячейки УГ
|
const UG_BASE_ADDR: int = 0x100 ## адрес ячейки УГ
|
||||||
|
|
||||||
var prd_name: String ## Имя прибора
|
var prd_name: String ## Имя прибора
|
||||||
var unit_yau07 ## Юнит эмс
|
var unit_yau07 ## Юнит эмс
|
||||||
var fs_dic: Dictionary ## Массив блоков ФС
|
var fs_dic: Dictionary ## Массив блоков ФС
|
||||||
var yemsg_board: yemsboards.EmsBoard ## Плата ЭМС-Г
|
var yemsg_board: yemsboards.EmsBoard ## Плата ЭМС-Г
|
||||||
|
var state = PrdState.WORK
|
||||||
|
var cmd_array: Array ## Очередь команд
|
||||||
|
|
||||||
func _init(u_name ,u):
|
func _init(u_name ,u):
|
||||||
prd_name = u_name
|
prd_name = u_name
|
||||||
@@ -142,48 +155,66 @@ class PRD:
|
|||||||
var out_dev = yemsdevs.OutDev.new(item[0], params, 0, 0x120)
|
var out_dev = yemsdevs.OutDev.new(item[0], params, 0, 0x120)
|
||||||
yemsg_board.out_devs[out_dev.id] = out_dev
|
yemsg_board.out_devs[out_dev.id] = out_dev
|
||||||
yemsg_board.need_write = true
|
yemsg_board.need_write = true
|
||||||
unit_yau07.connect('data_received', Callable(self, 'on_data_ems_received').bind())
|
unit_yau07.connect('data_received', Callable(self, 'on_data_received').bind())
|
||||||
unit_yau07.connect('command_done', Callable(self, 'on_command_done').bind())
|
unit_yau07.connect('command_done', Callable(self, 'on_command_done').bind())
|
||||||
unit_yau07.connect('line_changed', Callable(self, 'on_line_changed').bind())
|
unit_yau07.connect('line_changed', Callable(self, 'on_line_changed').bind())
|
||||||
|
|
||||||
func on_command_done(unit_ems):
|
func on_command_done(unit_ems):
|
||||||
yemsg_board.on_command_done(unit_ems)
|
if yemsg_board.state_board != yemsg_board.WAIT or yemsg_board.state_cmd != yemsg_board.WAIT:
|
||||||
|
yemsg_board.on_command_done(unit_ems)
|
||||||
|
return
|
||||||
|
|
||||||
func on_line_changed(unit_ems):
|
func on_line_changed(unit_ems):
|
||||||
if not unit_ems.online:
|
if not unit_ems.online:
|
||||||
yemsg_board.ems_load = false
|
yemsg_board.ems_load = yemsg_board.LoadState.NOT_DEFINED
|
||||||
yemsg_board.state_board = yemsg_board.WAIT
|
yemsg_board.set_wait()
|
||||||
yemsg_board.state_cmd = yemsg_board.WAIT
|
|
||||||
yemsg_board.need_write = true
|
|
||||||
|
|
||||||
func on_data_ems_received(unit_ems):
|
func on_data_received(unit_ems):
|
||||||
yemsg_board.set_status(unit_ems.status)
|
yemsg_board.set_status(unit_ems.status)
|
||||||
if yemsg_board.state_board == yemsg_board.WAIT and yemsg_board.state_cmd == yemsg_board.WAIT:
|
if state != PrdState.WORK:
|
||||||
if yemsg_board.online:
|
return
|
||||||
if yemsg_board.need_write and (not yemsg_board.ems_load):
|
if yemsg_board.state_board != yemsg_board.WAIT or yemsg_board.state_cmd != yemsg_board.WAIT:
|
||||||
start_load()
|
return
|
||||||
elif not yemsg_board.ems_load:
|
if yemsg_board.online:
|
||||||
yemsg_board.set_load_done()
|
if yemsg_board.ems_load == yemsg_board.LoadState.NOT_LOAD:
|
||||||
elif yemsg_board.ems_load and len(yemsg_board.cmd_array):
|
start_load()
|
||||||
yemsg_board.execute_cmd()
|
elif yemsg_board.ems_load == yemsg_board.LoadState.IN_PROCESS:
|
||||||
|
yemsg_board.set_load_done()
|
||||||
|
elif (yemsg_board.ems_load == yemsg_board.LoadState.DONE) and len(yemsg_board.cmd_array):
|
||||||
|
yemsg_board.execute_cmd()
|
||||||
else:
|
else:
|
||||||
yemsg_board.need_write = true
|
execute_cmd()
|
||||||
|
return
|
||||||
|
execute_cmd()
|
||||||
|
|
||||||
|
func execute_cmd():
|
||||||
|
if not len(cmd_array): return
|
||||||
|
var cmd: Array = cmd_array.pop_front()
|
||||||
|
unit_yau07.send_isa(cmd[0], cmd[1])
|
||||||
|
|
||||||
func start_load():
|
func start_load():
|
||||||
var file = FileAccess.open(yemsconsts.emsg_files_folder + yemsg_board.ems_g_fn, FileAccess.READ)
|
var file = FileAccess.open(yemsconsts.emsg_files_folder + yemsg_board.ems_g_fn, FileAccess.READ)
|
||||||
|
var abs_dir = ProjectSettings.globalize_path(yemsconsts.emsg_files_folder + yemsg_board.ems_g_fn)
|
||||||
if file == null:
|
if file == null:
|
||||||
yemsg_board.state_board = yemsg_board.LOAD_FAIL
|
yemsg_board.ems_load = yemsg_board.LoadState.FAIL
|
||||||
|
yemsg_board.set_wait()
|
||||||
|
log.error('Не удалось прочитать файл настроек ячейки ЭМС-Г %s' %abs_dir)
|
||||||
return
|
return
|
||||||
var read = file.get_as_text()
|
var read = file.get_as_text()
|
||||||
file.close()
|
file.close()
|
||||||
var json_conv: = JSON.new()
|
var json_conv: = JSON.new()
|
||||||
if Error.OK == json_conv.parse(read):
|
if Error.OK == json_conv.parse(read):
|
||||||
var json_data = json_conv.get_data()
|
var json_data = json_conv.get_data()
|
||||||
|
yemsg_board.need_write = true
|
||||||
|
yemsg_board.ems_load = yemsg_board.LoadState.IN_PROCESS
|
||||||
yemsg_board.btn_load(json_data)
|
yemsg_board.btn_load(json_data)
|
||||||
yemsg_board.state_board = yemsg_board.WRITE
|
yemsg_board.state_board = yemsg_board.WRITE
|
||||||
yemsg_board.start_rw_kems(false)
|
yemsg_board.start_rw_kems(false)
|
||||||
else:
|
else:
|
||||||
yemsg_board.state_board = yemsg_board.LOAD_FAIL
|
yemsg_board.ems_load = yemsg_board.LoadState.FAIL
|
||||||
|
yemsg_board.set_wait()
|
||||||
|
log.error('Не удалось прочитать файл настроек ячейки ЭМС-Г %s' %abs_dir)
|
||||||
|
|
||||||
|
|
||||||
func on_update_modulation(index):
|
func on_update_modulation(index):
|
||||||
yemsg_board.add_cmd(index/4, fs_dic[index].modulation)
|
yemsg_board.add_cmd(index/4, fs_dic[index].modulation)
|
||||||
@@ -191,13 +222,13 @@ class PRD:
|
|||||||
|
|
||||||
func _ready() -> void:
|
func _ready() -> void:
|
||||||
check_dir()
|
check_dir()
|
||||||
for prd_name in prd_names:
|
for prd_name in PRD_NAMES:
|
||||||
var unit_key = settings.get_unit_key(prd_name)
|
var unit_key = settings.get_unit_key(prd_name)
|
||||||
var unit_prd = network.units[unit_key]
|
var unit_prd = network.units[unit_key]
|
||||||
var new_prd = PRD.new(prd_name, unit_prd)
|
var new_prd = PRD.new(prd_name, unit_prd)
|
||||||
prd_dict[prd_name] = new_prd
|
prd_dict[prd_name] = new_prd
|
||||||
for key in fs_prd.keys():
|
for key in FS_PRD.keys():
|
||||||
var fs = Fs.new(key, fs_prd[key][0])
|
var fs = Fs.new(key, FS_PRD[key][0])
|
||||||
fs_dict[key] = fs
|
fs_dict[key] = fs
|
||||||
if prd_dict.has(fs.prd_name):
|
if prd_dict.has(fs.prd_name):
|
||||||
prd_dict[fs.prd_name].fs_dic[key] = fs
|
prd_dict[fs.prd_name].fs_dic[key] = fs
|
||||||
@@ -211,13 +242,13 @@ func get_fs_index(ecm, fs_index_arr):
|
|||||||
var angle: float = ecm.kni + 45.0
|
var angle: float = ecm.kni + 45.0
|
||||||
if angle > 360.0:
|
if angle > 360.0:
|
||||||
angle -= 360.0
|
angle -= 360.0
|
||||||
for sec in fs_sectors.values():
|
for sec in FS_SECTORS.values():
|
||||||
if float(angle) >= sec[0] and float(angle) <= sec[1]:
|
if float(angle) >= sec[0] and float(angle) <= sec[1]:
|
||||||
sector = fs_sectors.find_key(sec)
|
sector = FS_SECTORS.find_key(sec)
|
||||||
for diap in fs_freq.values():
|
for diap in FS_FREQ.values():
|
||||||
if ecm.params.has('freq'):
|
if ecm.params.has('freq'):
|
||||||
if ecm.params['freq'] >= diap[0] and ecm.params['freq'] <= diap[1]:
|
if ecm.params['freq'] >= diap[0] and ecm.params['freq'] <= diap[1]:
|
||||||
band.append(fs_freq.find_key(diap))
|
band.append(FS_FREQ.find_key(diap))
|
||||||
for item in band:
|
for item in band:
|
||||||
fs_index_arr.append(item * 4 + sector)
|
fs_index_arr.append(item * 4 + sector)
|
||||||
|
|
||||||
@@ -233,6 +264,7 @@ func update_fs_state(ecms):
|
|||||||
var fs = fs_dict[fs_index]
|
var fs = fs_dict[fs_index]
|
||||||
fs.set_modulation(ecm.modulation)
|
fs.set_modulation(ecm.modulation)
|
||||||
for prd_module in prd_dict.values(): ## Отправка команды на исполнение в ПРД
|
for prd_module in prd_dict.values(): ## Отправка команды на исполнение в ПРД
|
||||||
|
if prd_module.state != PrdState.WORK: return
|
||||||
if not prd_module.unit_yau07.online: continue
|
if not prd_module.unit_yau07.online: continue
|
||||||
for fs in prd_module.fs_dic.values():
|
for fs in prd_module.fs_dic.values():
|
||||||
var dev_mode = prd_module.yemsg_board.get_dev_mode(fs.index)
|
var dev_mode = prd_module.yemsg_board.get_dev_mode(fs.index)
|
||||||
@@ -243,6 +275,7 @@ func update_fs_state(ecms):
|
|||||||
fs.emit_signal('update_modulation')
|
fs.emit_signal('update_modulation')
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## Проверяет ниличие директории, если их нет, создаёт
|
## Проверяет ниличие директории, если их нет, создаёт
|
||||||
func check_dir():
|
func check_dir():
|
||||||
var dir = DirAccess.open(yemsconsts.emsg_files_folder)
|
var dir = DirAccess.open(yemsconsts.emsg_files_folder)
|
||||||
|
|||||||
@@ -69,7 +69,7 @@ func _ready() -> void:
|
|||||||
continue
|
continue
|
||||||
temp_array.append([])
|
temp_array.append([])
|
||||||
for i in len(json_data[key]) - 1:
|
for i in len(json_data[key]) - 1:
|
||||||
if tools.type_is_num(json_data[key][i+1]) == tools.type_is_num(UnitProfiles[key][2][i]):
|
if tools.type_is_num(json_data[key][i+1]) and tools.type_is_num(UnitProfiles[key][2][i]):
|
||||||
if typeof(UnitProfiles[key][2][i]) == TYPE_INT:
|
if typeof(UnitProfiles[key][2][i]) == TYPE_INT:
|
||||||
temp_array[1].append(int(json_data[key][i+1]))
|
temp_array[1].append(int(json_data[key][i+1]))
|
||||||
elif typeof(UnitProfiles[key][2][i]) == TYPE_FLOAT:
|
elif typeof(UnitProfiles[key][2][i]) == TYPE_FLOAT:
|
||||||
|
|||||||
@@ -59,8 +59,10 @@ func _ready() -> void:
|
|||||||
unit_5p28.connect('get_threats', Callable(self, 'on_get_threats').bind(unit_5p28, threats))
|
unit_5p28.connect('get_threats', Callable(self, 'on_get_threats').bind(unit_5p28, threats))
|
||||||
timer_check_lost.connect('timeout', Callable(self, 'on_timer_check_lost').bind(settings.ThreatParams.time_lost, threats))
|
timer_check_lost.connect('timeout', Callable(self, 'on_timer_check_lost').bind(settings.ThreatParams.time_lost, threats))
|
||||||
timer_check_lost.start(settings.ThreatParams.time_lost / 1000.0)
|
timer_check_lost.start(settings.ThreatParams.time_lost / 1000.0)
|
||||||
timer_aoa_update.connect('timeout', Callable(self, 'on_timer_aoa_update').bind(threats))
|
timer_aoa_update.connect('timeout', Callable(self, 'on_timer_aoa_update').bind(threats, timer_aoa_update))
|
||||||
timer_aoa_update.start(1.00)
|
timer_aoa_update.start(3.0)
|
||||||
|
timer_aoa_update.one_shot = true
|
||||||
|
|
||||||
signaller.connect('rto_threat_sel', Callable(self, 'on_rto_threat_sel').bind(threats))
|
signaller.connect('rto_threat_sel', Callable(self, 'on_rto_threat_sel').bind(threats))
|
||||||
signaller.connect('rto_threat_unsel', Callable(self, 'on_rto_threat_unsel').bind(threats))
|
signaller.connect('rto_threat_unsel', Callable(self, 'on_rto_threat_unsel').bind(threats))
|
||||||
signaller.connect('rto_threat_unsel_all', Callable(self, 'on_rto_threat_unsel_all').bind(threats))
|
signaller.connect('rto_threat_unsel_all', Callable(self, 'on_rto_threat_unsel_all').bind(threats))
|
||||||
@@ -80,8 +82,9 @@ func on_timer_check_lost(time_lost: int, threats: Dictionary):
|
|||||||
call_deferred('emit_signal', 'threats_resized', threats)
|
call_deferred('emit_signal', 'threats_resized', threats)
|
||||||
|
|
||||||
|
|
||||||
func on_timer_aoa_update(threats:Dictionary):
|
func on_timer_aoa_update(threats:Dictionary, tmr):
|
||||||
signaller.emit_signal('th_aoa_update', threats)
|
signaller.emit_signal('th_aoa_update', threats)
|
||||||
|
tmr.start(1.0)
|
||||||
|
|
||||||
## отправляет словарь целей в юнит, для запаковки и отправки в 5П28.
|
## отправляет словарь целей в юнит, для запаковки и отправки в 5П28.
|
||||||
func on_get_threats(unit, threats): unit.pack_threats(threats)
|
func on_get_threats(unit, threats): unit.pack_threats(threats)
|
||||||
|
|||||||
Reference in New Issue
Block a user