@@ -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 ' : ' 5° ' , ' 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 ' : ' 5° ' } ,
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 == ' 1н ' or self_name == ' 2н ' or self_name == ' 3н ' or self_name == ' 4н ' :
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
# Обработка битов ДКМ в зависимости от текущей литеры