Доработка. Добавлена команда отправки угла места, рефактор машин состояний отправки команд ЭМС. Мелкие исправления.

This commit is contained in:
MaD_CaT
2025-03-17 12:38:35 +03:00
parent d296b78cd5
commit d1f715c42b
5 changed files with 87 additions and 40 deletions

View File

@@ -29,16 +29,6 @@ const FS_SECTORS: Dictionary = {
2: [180.0, 270.0],
1: [270.0, 360.0] }
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],
1: [800.0, 1065.0, 250.0, 300.0, 860.0],
@@ -99,18 +89,28 @@ var prd_dict: Dictionary ## Словарь с приборами ПРД
class Fs:
const UM_PORTS: Dictionary = {
1 : 0x6,
2 : 0xA,
3 : 0x6,
4 : 0xA,
5 : 0x6,
6 : 0xA }
1 : 0x106,
2 : 0x10A,
3 : 0x106,
4 : 0x10A,
5 : 0x106,
6 : 0x10A }
const CODE_UM: Array = [
[-5, 0],
[0 , 10],
[10, 20],
[20, 30],
[30, 40],
[40, 50],
[50, 55]]
var index ## Индекс блока усилителей
var modulation: bool ## Состояние модуляции
var prd_name: String ## Ипя прибора ПРД в котором стоит модуль
var um_port: int = 0 ## Порт для угла места
var um_code: int = 0 ## Код угла места
var um_code_tx: int = 0 ## Код угла места для отправки в прибор
var um_code_rx: int = 0 ## Текущий код угла места
signal update_modulation(index)
@@ -123,16 +123,34 @@ class Fs:
func set_modulation(val):
modulation = val
func set_um_code(um: float):
if um < CODE_UM[0][0]:
um_code_tx = 0
elif um > CODE_UM[len(CODE_UM) - 1][1]:
um_code_tx = len(CODE_UM) - 1
else:
for i in CODE_UM.size():
if (um >= CODE_UM[i][0]) and (um < CODE_UM[i][1]):
um_code_tx = i
func set_um_data(data_arr, u):
if UM_PORTS.has(index/4):
var val = um_code_tx
if u.isa_ports.has(um_port):
val = tools.set_bits(u.isa_ports[um_port], um_code_tx, 0x0003)
data_arr.append(um_port)
data_arr.append(val)
class PRD:
const UG_BASE_ADDR: int = 0x100 ## адрес ячейки УГ
var prd_name: String ## Имя прибора
var unit_yau07 ## Юнит эмс
var fs_dic: Dictionary ## Массив блоков ФС
var yemsg_board: yemsboards.EmsBoard ## Плата ЭМС-Г
var state = PrdState.WORK
var cmd_array: Array ## Очередь команд
var ug_online: bool = false ## Состояние ячейки УГ
var set_ug_state: bool = true ## Необходимо ли записать в УГ настройки
func _init(u_name ,u):
prd_name = u_name
@@ -159,18 +177,25 @@ class PRD:
unit_yau07.connect('command_done', Callable(self, 'on_command_done').bind())
unit_yau07.connect('line_changed', Callable(self, 'on_line_changed').bind())
func on_command_done(unit_ems):
func on_command_done(u):
if yemsg_board.state_board != yemsg_board.WAIT or yemsg_board.state_cmd != yemsg_board.WAIT:
yemsg_board.on_command_done(unit_ems)
yemsg_board.on_command_done(u)
return
for fs in fs_dic.values():
for port in u.isa_ports.keys():
if port == fs.um_port:
fs.um_code_rx = u.isa_ports[port] & 0x7
func on_line_changed(unit_ems):
if not unit_ems.online:
yemsg_board.ems_load = yemsg_board.LoadState.NOT_DEFINED
yemsg_board.set_wait()
set_ug_state = true
func on_data_received(unit_ems):
yemsg_board.set_status(unit_ems.status)
func on_data_received(_u):
set_prd_status()
if state != PrdState.WORK:
return
if yemsg_board.state_board != yemsg_board.WAIT or yemsg_board.state_cmd != yemsg_board.WAIT:
@@ -187,6 +212,12 @@ class PRD:
return
execute_cmd()
func set_prd_status():
yemsg_board.set_status(unit_yau07.status)
ug_online = (unit_yau07.status[0] >> 1) & 1
if not ug_online:
set_ug_state = true
func execute_cmd():
if not len(cmd_array): return
var cmd: Array = cmd_array.pop_front()
@@ -219,6 +250,9 @@ class PRD:
func on_update_modulation(index):
yemsg_board.add_cmd(index/4, fs_dic[index].modulation)
func set_um(data_arr):
cmd_array.append([unit_yau07.CmdCode.WRITE_ISA, data_arr])
func _ready() -> void:
check_dir()
@@ -263,9 +297,11 @@ func update_fs_state(ecms):
for fs_index in fs_ids:
var fs = fs_dict[fs_index]
fs.set_modulation(ecm.modulation)
fs.set_um_code(ecm.um)
for prd_module in prd_dict.values(): ## Отправка команды на исполнение в ПРД
if prd_module.state != PrdState.WORK: return
if not prd_module.unit_yau07.online: continue
var um_data_array: Array = []
for fs in prd_module.fs_dic.values():
var dev_mode = prd_module.yemsg_board.get_dev_mode(fs.index)
var fs_state = 2
@@ -273,7 +309,15 @@ func update_fs_state(ecms):
fs_state = 3
if (dev_mode != fs_state) or (fs_state == 3):
fs.emit_signal('update_modulation')
if not prd_module.ug_online: continue
if prd_module.set_ug_state:
fs.set_um_data(um_data_array, prd_module.unit_yau07)
else:
if fs.um_code_tx != fs.um_code_rx:
fs.set_um_data(um_data_array, prd_module.unit_yau07)
if um_data_array.size():
prd_module.set_ug_state = false
prd_module.set_um(um_data_array)
## Проверяет ниличие директории, если их нет, создаёт