Compare commits

...

3 Commits

Author SHA1 Message Date
TotMaxim
5b1984a307 Добавление проверки в serviceability 2025-11-23 19:03:34 +03:00
TotMaxim
dd642ea057 Добавление подписки на line change от яу 07 2025-11-23 17:22:14 +03:00
TotMaxim
63de1118b0 Свчетчик пакетов при ДКМ 2025-11-23 16:44:18 +03:00
2 changed files with 56 additions and 43 deletions

View File

@@ -231,7 +231,19 @@ class PRD:
var ukp_1_online = (unit_yau07.status[0] >> 2) & 1
var ukp_2_online = (unit_yau07.status[0] >> 3) & 1
var ems_g_online = (unit_yau07.status[0] & 1) & 1
var check_serviceability = ug_online and ukp_1_online and ukp_2_online and ems_g_online
var bit_ip_config: Array = [0, 1, 2, 3, 4, 5, 6, 7]
var ip_online: bool = true
var is_k_type: bool = prd_name in ['уарэп-яу07-1к', 'уарэп-яу07-2к', 'уарэп-яу07-3к', 'уарэп-яу07-4к']
for bit in bit_ip_config:
var status: bool = unit_yau07.status[27] >> bit & 1
# Игнорируем биты 5 и 6 для всех приборов, кроме типа "к"
if not is_k_type and (bit == 5 or bit == 6):
continue
if status:
ip_online = false
break
var check_serviceability = ug_online and ukp_1_online and ukp_2_online and ems_g_online and ip_online
if serviceability != check_serviceability:
serviceability = check_serviceability
emit_signal('update_serviceability')

View File

@@ -25,13 +25,13 @@ const RAY_45: String = 'RAY_45'
## Конфигурация лучей: состояния, названия, задержки и требования
const RAY_CONFIG = {
0: { 'state': 'UG_SET_RAY_0', 'name': '-5°', 'requires_si_fs': true },
1: { 'state': 'UG_SET_RAY_1', 'name': '', 'requires_si_fs': false },
2: { 'state': 'UG_SET_RAY_2', 'name': '15°', 'requires_si_fs': false },
3: { 'state': 'UG_SET_RAY_3', 'name': '25°', 'requires_si_fs': false },
4: { 'state': 'UG_SET_RAY_4', 'name': '35°', 'requires_si_fs': false },
5: { 'state': 'UG_SET_RAY_5', 'name': '45°', 'requires_si_fs': false },
6: { 'state': 'UG_SET_RAY_0', 'name': 'Контроль', 'requires_si_fs': false } # ДКМ
0: { 'state': 'UG_SET_RAY_0', 'name': '-5°'},
1: { 'state': 'UG_SET_RAY_1', 'name': ''},
2: { 'state': 'UG_SET_RAY_2', 'name': '15°'},
3: { 'state': 'UG_SET_RAY_3', 'name': '25°'},
4: { 'state': 'UG_SET_RAY_4', 'name': '35°'},
5: { 'state': 'UG_SET_RAY_5', 'name': '45°'},
6: { 'state': 'UG_SET_RAY_0', 'name': 'Контроль'} # ДКМ
}
const RAY_TYPES := [RAY_m5, RAY_5, RAY_15, RAY_25, RAY_35, RAY_45]
@@ -42,7 +42,6 @@ enum STATE_MACHINE {
INIT,
FS_TURN_ON,
FS_WORK,
WRITE_ISA,
READ_ISA,
CHEK_KASSETA_Y5,
CHEK_BLOCK_IP,
@@ -53,6 +52,7 @@ enum STATE_MACHINE {
UG_SET_RAY_3,
UG_SET_RAY_4,
UG_SET_RAY_5,
UG_SET_RAY_CTRL,
IN_EMS_RUN,
IN_EMS_STOP,
FS_TURN_OFF,
@@ -104,6 +104,7 @@ var power_for_litera: Dictionary
var self_name: String
var state: int = STATE_MACHINE.INIT
var current_litera: int
var count_packets_power: int = 0
## Флаги состояния системы
var flag_write_isa: bool = false
@@ -248,6 +249,7 @@ func _initialize_ray_mapping() -> void:
STATE_MACHINE.UG_SET_RAY_3: 'RAY_25',
STATE_MACHINE.UG_SET_RAY_4: 'RAY_35',
STATE_MACHINE.UG_SET_RAY_5: 'RAY_45',
STATE_MACHINE.UG_SET_RAY_CTRL: 'RAY_CTRL',
}
@@ -264,7 +266,6 @@ func _initialize_ray_state_enums() -> void:
func _process(_delta: float) -> void:
pass
var count_packets_power: int = 0
## Обработка данных от ЯУ-07
func on_data_received(unit_pribor: Object) -> void:
@@ -291,7 +292,9 @@ func on_data_received(unit_pribor: Object) -> void:
if current_litera != 0:
var tek_litera: Dictionary = power_for_litera[current_litera]
var interes = _get_ray_key(state)
if interes != '':
if interes == 'RAY_CTRL':
count_packets_power += 1
elif interes != '':
tek_litera[_get_ray_key(state)] = power_um_ukp(status, current_litera, tek_litera[_get_ray_key(state)])
power_for_litera[current_litera] = tek_litera
count_packets_power += 1
@@ -351,8 +354,8 @@ func state_control_machine() -> void:
STATE_MACHINE.FS_WORK: _handle_fs_work_state()
STATE_MACHINE.CHEK_KASSETA_Y5: _handle_check_kasseta_state() # Проверка Кассеты У5
STATE_MACHINE.CHEK_BLOCK_IP: _handle_check_block_ip_state() # Проверка ИП
STATE_MACHINE.WRITE_ISA: _handle_write_isa_state()
STATE_MACHINE.READ_ISA: _handle_read_isa_state()
STATE_MACHINE.UG_SET_RAY_CTRL: _handle_ray_operation(6)
STATE_MACHINE.UG_SET_RAY: _handle_ray_operation() # Режим чтения
STATE_MACHINE.UG_SET_RAY_0: _handle_ray_operation(0)
STATE_MACHINE.UG_SET_RAY_1: _handle_ray_operation(1)
@@ -459,16 +462,13 @@ func _handle_check_block_ip_state() -> void:
if not block_ip_config[ip][1]:
block_ip = false
if block_ip:
state = STATE_MACHINE.WRITE_ISA
if current_litera == 1:
state = STATE_MACHINE.UG_SET_RAY_5
else:
state = STATE_MACHINE.UG_SET_RAY_CTRL
elif flag_only_fs:
state = STATE_MACHINE.IN_EMS_STOP
## Обработка состояния WRITE_ISA - запись в УГ
func _handle_write_isa_state() -> void:
if not flag_write_isa:
_handle_ug_set_state(0x6)
state = STATE_MACHINE.READ_ISA
## Обработка состояния READ_ISA - чтение из УГ
func _handle_read_isa_state() -> void:
@@ -513,10 +513,7 @@ func _advance_to_next_fs() -> void:
5: current_litera = 0
6: current_litera = 7
7: current_litera = 0
# Сброс прогресса при переходе к следующей ФС
if current_litera != 0:
current_fs_progress = 0.0
#endregion
@@ -543,17 +540,14 @@ func _handle_ray_read_mode() -> void:
## Обработка записи состояния луча
func _handle_ray_write_mode(ray_num: int) -> void:
if not _can_write_ray(ray_num):
if not _can_write_ray():
return
# Особые условия для луча 0
if ray_num == 0:
control_timer.stop()
# Ожидание пяти пакетов от ЯУ-07
if count_packets_power < 5:
return
if count_packets_power < 5: return
# Установка луча
_handle_ug_set_state(ray_num)
flag_write_isa = true
@@ -573,8 +567,6 @@ func _process_ray_value(ray_value: int) -> void:
state = STATE_MACHINE.IN_EMS_STOP
6:
state = STATE_MACHINE.UG_SET_RAY_0
if current_litera == 1:
state = STATE_MACHINE.UG_SET_RAY_5
## Проверка возможности обработки состояния луча
@@ -583,16 +575,15 @@ func _can_process_ray_state(addr: int) -> bool:
## Проверка возможности записи луча
func _can_write_ray(ray_num: int) -> bool:
func _can_write_ray() -> bool:
if flag_write_isa:
return false
var ray_config = RAY_CONFIG[ray_num]
# Для луча 0 требуется flag_si_fs_input, для остальных - нет
if ray_num == 0:
return ray_config.requires_si_fs and flag_si_fs_input
return true
if not flag_si_fs_input:
_set_status('Ожидание сигнала излучения от ФС-%s' % current_litera )
return false
else:
return true
## Получение адреса UG для текущей литеры
@@ -604,13 +595,14 @@ func _get_ug_address() -> int:
#region UG_OPERATIONS
## Подготовка к настройке и записи в УГ
func _handle_ug_set_state(RAY_DOU_NUM: int) -> void:
var def_att: int = 0x00
_set_status('Настройка угла %s' % _get_ray_name(RAY_DOU_NUM))
var dic_att := {
'RAY_DOU_NUM': RAY_DOU_NUM,
'ADDR_UG_LITERA_1': constants.ADDR_UG_LITERA_1,
'ADDR_UG_LITERA_2': constants.ADDR_UG_LITERA_2,
'ADDR_UG_LITERA_3': constants.ADDR_UG_LITERA_3,
'ATT_UM_3': 0x00,
'ATT_UM_3': def_att,
'BASE_EMS_G': constants.BASE_ADDR_EMS_G
}
@@ -625,7 +617,6 @@ func _handle_ug_set_state(RAY_DOU_NUM: int) -> void:
elif self_name == '' or self_name == '' or self_name == '' or self_name == '':
dic_att['ATT_UM_1'] = constants.ATT_UM_2
dic_att['ATT_UM_2'] = constants.ATT_UM_3
flag_write_isa = on_ug_setting(unit_prd, dic_att, cmd_array)
count_packets_power = 0
@@ -657,7 +648,7 @@ func progressbar_status() -> void:
base_progress = PROGRESS_FS_WORK
STATE_MACHINE.CHEK_KASSETA_Y5:
base_progress = PROGRESS_CHECK_KASSETA
STATE_MACHINE.WRITE_ISA:
STATE_MACHINE.UG_SET_RAY_CTRL:
base_progress = PROGRESS_WRITE_ISA
STATE_MACHINE.READ_ISA:
base_progress = PROGRESS_READ_ISA
@@ -739,7 +730,7 @@ func on_stop_control() -> void:
flag_no_trust_yau07 = true
elif state == STATE_MACHINE.CHEK_KASSETA_Y5:
flag_only_fs = true
state = STATE_MACHINE.FS_TURN_OFF
state = STATE_MACHINE.IN_EMS_STOP
#endregion
@@ -821,6 +812,7 @@ func initialize_connections() -> void:
signaller.conn(signaller.start_contol_device, Callable(self, '_on_start_contol_device'))
interfer.connect('interfer_resized', Callable(self, 'on_interfer_resized'))
unit_prd.connect('data_received', Callable(self, 'on_data_received'))
unit_prd.connect('line_changed', Callable(self, 'on_line_changed_yau07'))
# Подключение сигналов режимов работы
var mode_signals = ['режим_работа', 'режим_журнал', 'режим_эмс', 'режим_настройки']
@@ -873,6 +865,15 @@ func on_mode_changed(in_tree: bool) -> void:
restore_default_states()
else: ## При нажатии на режим контроль
_set_status('Ожидание запуска контроля')
# Вызывается при смене связи я ячейков ЯУ-07Б
func on_line_changed_yau07(_status: Object)->void:
_set_status('Ожидание запуска контроля')
flag_control_is_over = false
flag_no_trust_yau07 = false
flag_only_fs = false
restore_default_states()
#endregion
@@ -893,7 +894,7 @@ func _process_dkm_status(status: PackedByteArray) -> void:
if not unit_prd.isa_ports.has(addr) or not (unit_prd.cmd_state == unit_prd.CmdState.DONE):
return
if not unit_prd.isa_ports[addr] & 0x07 == 6:
if not unit_prd.isa_ports[addr] & 0x07 == 6:
return
# Обработка битов ДКМ в зависимости от текущей литеры