Merge remote-tracking branch 'refs/remotes/kotik/prd-control'

# Conflicts:
#	scenes/pribor-prd-k/pribor-prd-k.tscn
#	scenes/pribor-prd-n/pribor-prd-n.tscn
#	scenes/pribor-prd-v/pribor-prd-v.tscn
#	scenes/контроль/контроль.tscn
This commit is contained in:
kira-a-k
2025-11-21 19:49:04 +03:00
12 changed files with 459 additions and 271 deletions

View File

@@ -3,7 +3,18 @@ extends Node
# Константы
const CONFIG_PATH = "user://config/setting_prd_control.json"
const DEFAULT_CONFIG_PATH = "res://config/setting_prd_control.json"
# Добавляем константы для прогресса
const PROGRESS_INIT: float = 5.0
const PROGRESS_FS_TURN_ON: float = 10.0
const PROGRESS_FS_WORK: float = 20.0
const PROGRESS_CHECK_KASSETA: float = 25.0
const PROGRESS_WRITE_ISA: float = 30.0
const PROGRESS_READ_ISA: float = 35.0
const PROGRESS_UG_SET_RAY: float = 40.0
const PROGRESS_RAY_STATES: float = 50.0
const PROGRESS_COMPLETE: float = 100.0
# Для маппинга (Возможно уберу в будущем, но это не точно)
const RAY_m5: String = "RAY_m5"
const RAY_5: String = "RAY_5"
const RAY_15: String = "RAY_15"
@@ -32,6 +43,14 @@ enum STATE_MACHINE {
STOP_CONTROL,
AWAIT
}
var ems_g_sock_dic: Dictionary = {
'ems_input_1': 0,
'ems_input_2': 0,
'ems_input_lit_1': 0,
'ems_output_1': 0,
'ems_output_2': 0,
'ems_output_lit_1': 0,
}
# Загруженные конфигурации
var config_data: Dictionary
@@ -54,6 +73,8 @@ var block_kasseta_y5_config: Dictionary
var temperature_um: Dictionary
var control_results: Dictionary
var power_result: Dictionary
var ecms: Dictionary
var power_for_litera: Dictionary
var self_name: String
var state: int = STATE_MACHINE.INIT
var current_litera: int
@@ -63,6 +84,8 @@ var flag_si_fs_input: bool = false
var flag_si_fs_output: bool = false
var flag_in_control: bool = false
var flag_control_is_over: bool = false
var flag_no_trust_yau07: bool = false
var flag_only_fs: bool = false
var unit_prd: Object
var control_timer: Timer = Timer.new()
var ems_6666_timer: Timer = Timer.new()
@@ -70,8 +93,17 @@ var machine_timer: Timer = Timer.new()
var cc: int = 0
var cmd_array: Array
signal control_is_over()
signal update_progress(progress_value: float)
# Добавляем переменные для отслеживания прогресса
var total_fs_to_check: int = 0
var completed_fs_count: int = 0
var current_fs_progress: float = 0.0
# Переменная для текущего статуса
var current_status: String = "Ожидание запуска контроля"
# Сигналы Класса
signal control_is_over() # Когда контроль все!
signal status_updated(status_text: String) # Сигнал для обновления статуса
signal update_progress(progress_value: float)
signal update_max_value_progress(max_progress_value: int)
var progress_value: float:
@@ -80,9 +112,6 @@ var progress_value: float:
progress_value = v
call_deferred('emit_signal', 'update_progress', v)
var ecms: Dictionary
var power_for_litera: Dictionary
## Инициализация аргуметнов
func _init(init_data: Dictionary, cmd_array_from_prd: Array) -> void:
@@ -140,9 +169,9 @@ func _load_configuration() -> void:
config_data = json.data
_parse_config_data()
else:
push_error("Failed to parse JSON config: " + json.get_error_message())
push_error("Ошибка разбора JSON конфигурации: " + json.get_error_message())
else:
push_error("Failed to load config file: " + CONFIG_PATH)
push_error("Ошибка to load config file: " + CONFIG_PATH)
func _parse_config_data() -> void:
@@ -195,8 +224,9 @@ func _process(_delta: float) -> void:
func on_data_received(unit_pribor: Object) -> void:
if not flag_in_control: return
var status: PackedByteArray = unit_pribor.status
block_kasseta_y5_config = check_block_kasseta_y5(status, block_kasseta_y5_config, flag_no_trust_yau07)
if flag_no_trust_yau07: return
socket_status_ems_g(status)
block_kasseta_y5_config = check_block_kasseta_y5(status, block_kasseta_y5_config)
block_ip_config = check_block_ip(status, block_ip_config)
temperature_um = check_temperature_um(status)
if machine_timer.is_stopped():
@@ -211,33 +241,26 @@ func on_data_received(unit_pribor: Object) -> void:
power_for_litera[current_litera] = tek_litera
var ems_input_1: int
var ems_input_2: int
var ems_input_lit_1: int
var ems_output_1: int
var ems_output_2: int
var ems_output_lit_1: int
# Методы для работы с DataIndices из JSON
# Методы для работы с JSON
func _get_data_index(key: String) -> int:
return data_indices.get(key, -1)
func socket_status_ems_g(packet_form_yau_07: PackedByteArray) -> void:
if self_name in ['', '', '', '']:
ems_input_1 = (packet_form_yau_07.decode_u16(_get_data_index('IN_BLANK_PRD')) & (1 << 9)) != 0
ems_input_2 = (packet_form_yau_07.decode_u16(_get_data_index('IN_BLANK_PRD')) & (1 << 10)) != 0
ems_g_sock_dic.ems_input_1 = (packet_form_yau_07.decode_u16(_get_data_index('IN_BLANK_PRD')) & (1 << 9)) != 0
ems_g_sock_dic.ems_input_2 = (packet_form_yau_07.decode_u16(_get_data_index('IN_BLANK_PRD')) & (1 << 10)) != 0
if self_name in ['', '', '', '']:
ems_input_1 = (packet_form_yau_07.decode_u16(_get_data_index('IN_BLANK_PRD')) & (1 << 11)) != 0
ems_input_2 = (packet_form_yau_07.decode_u16(_get_data_index('IN_BLANK_PRD')) & (1 << 12)) != 0
ems_g_sock_dic.ems_input_1 = (packet_form_yau_07.decode_u16(_get_data_index('IN_BLANK_PRD')) & (1 << 11)) != 0
ems_g_sock_dic.ems_input_2 = (packet_form_yau_07.decode_u16(_get_data_index('IN_BLANK_PRD')) & (1 << 12)) != 0
if self_name in ['', '', '', '']:
ems_input_lit_1 = (packet_form_yau_07.decode_u16(_get_data_index('IN_BLANK_PRD')) & (1 << 8)) != 0
ems_input_1 = (packet_form_yau_07.decode_u16(_get_data_index('IN_BLANK_PRD')) & (1 << 13)) != 0
ems_input_2 = (packet_form_yau_07.decode_u16(_get_data_index('IN_BLANK_PRD')) & (1 << 14)) != 0
ems_g_sock_dic.ems_input_lit_1 = (packet_form_yau_07.decode_u16(_get_data_index('IN_BLANK_PRD')) & (1 << 8)) != 0
ems_g_sock_dic.ems_input_1 = (packet_form_yau_07.decode_u16(_get_data_index('IN_BLANK_PRD')) & (1 << 13)) != 0
ems_g_sock_dic.ems_input_2 = (packet_form_yau_07.decode_u16(_get_data_index('IN_BLANK_PRD')) & (1 << 14)) != 0
ems_output_1 = (packet_form_yau_07.decode_u16(_get_data_index('OUT_BLANK_PRD')) & (1 << 4)) != 0
ems_output_2 = (packet_form_yau_07.decode_u16(_get_data_index('OUT_BLANK_PRD')) & (1 << 5)) != 0
ems_output_lit_1 = (packet_form_yau_07.decode_u16(_get_data_index('OUT_BLANK_PRD')) & (1 << 3)) != 0
ems_g_sock_dic.ems_output_1 = (packet_form_yau_07.decode_u16(_get_data_index('OUT_BLANK_PRD')) & (1 << 4)) != 0
ems_g_sock_dic.ems_output_2 = (packet_form_yau_07.decode_u16(_get_data_index('OUT_BLANK_PRD')) & (1 << 5)) != 0
ems_g_sock_dic.ems_output_lit_1 = (packet_form_yau_07.decode_u16(_get_data_index('OUT_BLANK_PRD')) & (1 << 3)) != 0
var number_socket_input: int
if current_litera >= 1 and current_litera <= 7:
@@ -264,6 +287,7 @@ func on_fs_update_state(packet_type_7: Dictionary, fs_mapping: Dictionary) -> vo
control_results[fs_key] = fs_result[fs_key]
flag_fs_status_ok = control_results[fs_key] == 1
##
func state_control_machine() -> void:
match state:
@@ -286,6 +310,8 @@ func state_control_machine() -> void:
STATE_MACHINE.CHEK_KASSETA_Y5:
if block_kasseta_y5_config['yau07']:
state = STATE_MACHINE.WRITE_ISA
elif flag_only_fs:
state = STATE_MACHINE.IN_EMS_STOP
STATE_MACHINE.WRITE_ISA:
if not flag_write_isa:
_handle_ug_set_state(0x6)
@@ -355,13 +381,14 @@ func state_control_machine() -> void:
STATE_MACHINE.STOP_CONTROL:
_handle_stop_control_state()
## В машине состояний вызов изменения состояния прогресс бара контроля
if block_kasseta_y5_config['yau07']:
if block_kasseta_y5_config['yau07'] or flag_no_trust_yau07:
progressbar_status()
## 'Выполняется инициализация ФС-%s' % current_litera
func _handle_init_state() -> void:
if current_litera in [1, 2, 3, 4, 5, 6, 7]:
_set_status("Инициализация ФС-%s" % current_litera)
var flag_ecm: bool = false
for key in ecms:
var params = ecms[key].params.freq
@@ -375,12 +402,18 @@ func _handle_init_state() -> void:
flag_control_is_over = true
control_results = on_control_result(block_ip_config, control_results)
power_result = prep_power(power_for_litera, self_name)
emit_signal('control_is_over')
machine_timer.stop()
var result: bool = true
for device in control_results.values():
if not device:
result = false
_set_status("Прибор ПРД-%s: %s" % [self_name, ['неисправен', 'исправен'][int(result)]])
emit_signal('control_is_over')
##'Выполняется включение ФС-%s' % current_litera
func _handle_fs_turn_on_state() -> void:
_set_status("Включение ФС-%s" % current_litera)
manage_fs(true, self_name, pribor_config, fs_parameters, current_litera, constants.POWER_UM)
control_timer.wait_time = constants.TIMER_DELAY
control_timer.start()
@@ -388,17 +421,20 @@ func _handle_fs_turn_on_state() -> void:
##'Выполняется проверка ФС-%s' % current_litera
func _handle_fs_work_state() -> void:
_set_status("Проверка ФС-%s" % current_litera)
if (current_litera == 2 and control_results.fs_2) or \
(current_litera == 3 and control_results.fs_3) or \
(current_litera == 4 and control_results.fs_4) or \
(current_litera == 5 and control_results.fs_5) or \
(current_litera == 6 and control_results.fs_6) or \
(current_litera == 7 and control_results.fs_7) or \
(current_litera == 1 and control_results.fs_1):
(current_litera == 3 and control_results.fs_3) or \
(current_litera == 4 and control_results.fs_4) or \
(current_litera == 5 and control_results.fs_5) or \
(current_litera == 6 and control_results.fs_6) or \
(current_litera == 7 and control_results.fs_7) or \
(current_litera == 1 and control_results.fs_1):
state = STATE_MACHINE.CHEK_KASSETA_Y5
## Подготовка к настройки и записи в УГ
func _handle_ug_set_state(RAY_DOU_NUM: int) -> void:
_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,
@@ -420,38 +456,84 @@ func _handle_ug_set_state(RAY_DOU_NUM: int) -> void:
flag_write_isa = on_ug_setting(unit_prd, dic_att, cmd_array)
## Таймер отправки команды в ЭМС-Г для модуляции
func _on_ems_6666_timer() -> void:
cmd_array.append([unit_prd.CmdCode.WRITE_ISA, [constants.BASE_ADDR_EMS_G, 6666]])
## Таймер вызова машины состояний
func on_state_mashine():
state_control_machine()
## Функция для продвижения статуса прогресс бара
func progressbar_status() -> void:
if current_litera == 0:
progress_value = PROGRESS_COMPLETE
await get_tree().create_timer(0.5).timeout
progress_value = 0
return
# Базовый прогресс в зависимости от состояния
var base_progress: float = 0.0
match state:
STATE_MACHINE.INIT:
cc += 10 if current_litera in [3, 5, 6, 7] else 0
if control_timer.get_time_left() > 0:
progress_value = cc + control_timer.get_wait_time() - control_timer.get_time_left()
if current_litera == 0:
progress_value = 0
base_progress = PROGRESS_INIT
STATE_MACHINE.FS_TURN_ON:
base_progress = PROGRESS_FS_TURN_ON
STATE_MACHINE.FS_WORK:
base_progress = PROGRESS_FS_WORK
STATE_MACHINE.CHEK_KASSETA_Y5:
base_progress = PROGRESS_CHECK_KASSETA
STATE_MACHINE.WRITE_ISA:
base_progress = PROGRESS_WRITE_ISA
STATE_MACHINE.READ_ISA:
base_progress = PROGRESS_READ_ISA
STATE_MACHINE.UG_SET_RAY:
base_progress = PROGRESS_UG_SET_RAY
STATE_MACHINE.UG_SET_RAY_0, STATE_MACHINE.UG_SET_RAY_1:
base_progress = PROGRESS_RAY_STATES
STATE_MACHINE.UG_SET_RAY_2:
base_progress = PROGRESS_RAY_STATES + 10.0
STATE_MACHINE.UG_SET_RAY_3:
base_progress = PROGRESS_RAY_STATES + 20.0
STATE_MACHINE.UG_SET_RAY_4:
base_progress = PROGRESS_RAY_STATES + 30.0
STATE_MACHINE.UG_SET_RAY_5:
base_progress = PROGRESS_RAY_STATES + 40.0
STATE_MACHINE.IN_EMS_STOP, STATE_MACHINE.FS_TURN_OFF, STATE_MACHINE.STOP_CONTROL:
base_progress = PROGRESS_COMPLETE
# Плавное заполнение во время ожидания таймера
if control_timer.time_left > 0 and state != STATE_MACHINE.STOP_CONTROL:
var timer_progress = (control_timer.wait_time - control_timer.time_left) / control_timer.wait_time
base_progress = lerp(base_progress - 5.0, base_progress, timer_progress)
# Распределяем прогресс по ФС
if total_fs_to_check > 0:
var progress_per_fs = PROGRESS_COMPLETE / total_fs_to_check
current_fs_progress = base_progress
progress_value = (completed_fs_count * progress_per_fs) + (current_fs_progress * progress_per_fs / PROGRESS_COMPLETE)
else:
progress_value = base_progress
progress_value = clamp(progress_value, 0.0, PROGRESS_COMPLETE)
##'Выполняется отключение ФС-%s' % current_litera
func _handle_fs_turn_off_state() -> void:
_set_status("Отключение ФС-%s" % current_litera)
flag_fs_status_ok = false
manage_fs(false, self_name, pribor_config, fs_parameters, current_litera, constants.POWER_UM)
##'Выполняется завершение проверки ФС-%s' % current_litera
func _handle_stop_control_state() -> void:
_set_status("Завершение контроля ФС-%s" % current_litera)
# Увеличиваем счетчик завершенных ФС
completed_fs_count += 1
_advance_to_next_fs()
state = STATE_MACHINE.INIT
if current_litera == 0: return
if flag_no_trust_yau07:
state = STATE_MACHINE.STOP_CONTROL
## Переходит на следующую литеру, если 0 то считай закончил выполнения контроля
func _advance_to_next_fs() -> void:
match current_litera:
1: current_litera = 6
@@ -461,6 +543,9 @@ 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
######################################
@@ -482,12 +567,15 @@ func on_interfer_resized(ecms_dic: Dictionary) -> void:
func _on_start_contol_device()-> void:
_set_status("Подготовка к контролю")
_determine_self_name()
machine_timer.wait_time = constants.STATE_MASHINE_TIMER
machine_timer.start()
func _determine_self_name() -> void:
flag_no_trust_yau07 = false
flag_only_fs = false
cc = 0
state = STATE_MACHINE.get("INIT", 0)
var current_unit = unit_prd.name
@@ -517,8 +605,19 @@ func _determine_self_name() -> void:
control_results = device_data_config.get("control_results", {})
current_litera = device_config.get("start_litera", 0)
# Определяем общее количество ФС для контроля
match self_name:
'', '', '', '':
total_fs_to_check = 3 # Литеры 1, 6, 7
'', '', '', '':
total_fs_to_check = 2 # Литеры 2, 3
'', '', '', '':
total_fs_to_check = 2 # Литеры 4, 5
progress_value = 0
call_deferred('emit_signal', 'update_max_value_progress', device_config.get("progress_max", 20))
completed_fs_count = 0
current_fs_progress = 0.0
call_deferred('emit_signal', 'update_max_value_progress', 100)
func _load_block_config(config, config_type: String) -> Dictionary:
@@ -536,6 +635,7 @@ func _get_device_type() -> String:
return ''
## Настройка таймеров
func setup_timer() -> void:
add_child(control_timer)
control_timer.timeout.connect(on_stop_control)
@@ -550,19 +650,46 @@ func setup_timer() -> void:
machine_timer.connect('timeout', Callable(self, 'on_state_mashine'))
## Таймер отправки команды в ЭМС-Г для модуляции
func _on_ems_6666_timer() -> void:
cmd_array.append([unit_prd.CmdCode.WRITE_ISA, [constants.BASE_ADDR_EMS_G, 6666]])
## Таймер вызова машины состояний
func on_state_mashine():
state_control_machine()
## При таймауте таймера ожидания выполнения команды и перехода на следующий шаг машины состояний
func on_stop_control() -> void:
_handle_fs_turn_off_state()
if state == STATE_MACHINE.UG_SET_RAY:
flag_no_trust_yau07 = true
elif state == STATE_MACHINE.CHEK_KASSETA_Y5:
flag_only_fs = true
state = STATE_MACHINE.FS_TURN_OFF
## Срабатывает при выходе или входе в режим контроль
func on_mode_changed(in_tree: bool) -> void:
flag_in_control = in_tree
if not in_tree: ## TODO: Дополнительная проверка если контроль идет, если нет, то смысла вызывать нет
_set_status("Ожидание запуска контроля")
flag_control_is_over = false
flag_no_trust_yau07 = false
flag_only_fs = false
progress_value = 0
machine_timer.stop()
state = STATE_MACHINE.INIT
_handle_fs_turn_off_state()
#prd_v_module.cmd_array.append([unit_prd_v.CmdCode.WRITE_ISA, [constants_v.ADDR_UG_LITERA_1, ug_work_1, constants_v.ADDR_UG_LITERA_2, ug_work_2]])
else:
_set_status("Ожидание запуска контроля")
func _process_dkm_status(status: PackedByteArray) -> void:
if not control_results.has(_get_current_fs_key()):
if not control_results.has(_get_current_fs_key(current_litera, fs_keys)):
return
var dkm_bit = _get_dkm_bit_for_current_fs(current_litera, constants)
if dkm_bit == 0:
@@ -589,10 +716,11 @@ func _process_dkm_status(status: PackedByteArray) -> void:
control_results['dkm_7'] = check_dkm(status, dkm_bit)
func _get_current_fs_key() -> String:
return fs_keys.get(str(current_litera), '')
static func _get_current_fs_key(litera: int, fs_keys_dic: Dictionary) -> String:
return fs_keys_dic.get(str(litera), '')
## Возвращает бит ДКМ для проверки текущей литеры
static func _get_dkm_bit_for_current_fs(litera: int, constants_dic: Dictionary) -> int:
match litera:
1: return constants_dic.DKM_BIT_1
@@ -605,14 +733,9 @@ static func _get_dkm_bit_for_current_fs(litera: int, constants_dic: Dictionary)
_: return -1
func on_stop_control() -> void:
_handle_fs_turn_off_state()
state = STATE_MACHINE.FS_TURN_OFF
## Итоговое заключение по результам контроля всех ИП
static func on_control_result(ip_config: Dictionary, ctrl_results: Dictionary) -> Dictionary:
var all_blocks_ip_ok = true
for block in ip_config:
if not ip_config[block][1]:
all_blocks_ip_ok = false
@@ -624,10 +747,10 @@ static func on_control_result(ip_config: Dictionary, ctrl_results: Dictionary) -
static func on_ug_setting(prd_unit: Object, settings_ug: Dictionary, prd_cmd_array: Array) -> bool:
var result_1 = ((settings_ug.ATT_UM_1 & 0x07) << 3) | (settings_ug.RAY_DOU_NUM & 0x07)
var result_2 = ((settings_ug.ATT_UM_2 & 0x07) << 3) | (settings_ug.RAY_DOU_NUM & 0x07)
prd_cmd_array.append([prd_unit.CmdCode.WRITE_ISA, [ settings_ug.ADDR_UG_LITERA_1, result_1,
settings_ug.ADDR_UG_LITERA_2, result_2,
settings_ug.ADDR_UG_LITERA_3, settings_ug.ATT_UM_3,
]
prd_cmd_array.append([prd_unit.CmdCode.WRITE_ISA, [ settings_ug.ADDR_UG_LITERA_1, result_1,
settings_ug.ADDR_UG_LITERA_2, result_2,
settings_ug.ADDR_UG_LITERA_3, settings_ug.ATT_UM_3,
]
])
return true
@@ -655,7 +778,7 @@ static func manage_fs(mode: bool, pribor: String, p_conf: Dictionary, fs_params:
params.width,
sectors[litera - 1] if litera == 1 else sectors[litera - 5] if litera > 5 else sectors[litera - 4] if litera > 3 else sectors[litera - 2]
])
#signaller.emit_signal('emit_changed', mode)
#signaller.emit_signal('emit_changed', mode) TODO: не отключаю подавление (даже если при входе в контроль он был отключен)
signaller.emit_signal('interfer_init', interfer_name, fs_arr, power_um)
@@ -673,12 +796,13 @@ static func check_block_ip(status_prd: PackedByteArray, ip_config: Dictionary) -
## Проверка кассеты у-5 (ЯУ-07Б, ЭМС-Г, УГ, УКП-1, УКП-2)
static func check_block_kasseta_y5(status_prd: PackedByteArray, y5_config: Dictionary) -> Dictionary:
y5_config.yau07 = true
y5_config.ems = (status_prd[0] & 1) and ((status_prd[0] >> 4) & 1)
y5_config.ug = (status_prd[0] >> 1) & 1
y5_config.ukp1 = (status_prd[0] >> 2) & 1
y5_config.ukp2 = (status_prd[0] >> 3) & 1
static func check_block_kasseta_y5(status_prd: PackedByteArray, y5_config: Dictionary, flag_not_trust: bool) -> Dictionary:
y5_config.yau07 = not flag_not_trust
if y5_config.yau07:
y5_config.ems = (status_prd[0] & 1) and ((status_prd[0] >> 4) & 1)
y5_config.ug = (status_prd[0] >> 1) & 1
y5_config.ukp1 = (status_prd[0] >> 2) & 1
y5_config.ukp2 = (status_prd[0] >> 3) & 1
return y5_config
@@ -696,7 +820,6 @@ static func check_temperature_um(status_prd: PackedByteArray) -> Dictionary:
var return_dic_temp: Dictionary
var ukp1_online: int = (status_prd[0] >> 2) & 1
var ukp2_online = (status_prd[0] >> 3) & 1
if ukp1_online:
var tmp_1: int
var temperature_ukp_1: int
@@ -704,14 +827,11 @@ static func check_temperature_um(status_prd: PackedByteArray) -> Dictionary:
temperature_ukp_1 = status_prd.decode_u16(Constants.TEMPERATURE_UKP_1 + 2 * i_temp)
tmp_1 = round(Constants.CONST_MIN_TEMP + (Constants.MAXIMUM_CODE_ADC - temperature_ukp_1) * TEMP + 3)
return_dic_temp[arr_um[i_temp]] = tmp_1
if ukp2_online:
for i_temp in 8:
var temperature_ukp_2: int = status_prd.decode_u16(Constants.TEMPERATURE_UKP_2 + 2 * i_temp)
var tmp_2: int = round(Constants.CONST_MIN_TEMP + (Constants.MAXIMUM_CODE_ADC - temperature_ukp_2) * TEMP + 3)
return_dic_temp[arr_um[i_temp+8]] = tmp_2
return return_dic_temp
@@ -722,7 +842,7 @@ static func check_dkm(status_prd: PackedByteArray, bit_dkm: int) -> bool:
return status_dkm
##
## Распределения номеров ФС по пирборам
static func _create_fs_mapping(s_name: String) -> Dictionary:
var suffixes: Dictionary = {
0: '', 1: '', 2: '', 3: '',
@@ -740,7 +860,7 @@ static func _create_fs_mapping(s_name: String) -> Dictionary:
return mapping
##
## Получения статуса ФС
static func on_fs_state(packet_type_7: Dictionary, fs_mapping: Dictionary, fs_results: Dictionary, fs_rules_config: Array) -> Dictionary:
var updated_results := fs_results.duplicate()
for fs_num in packet_type_7:
@@ -759,7 +879,7 @@ static func _should_apply_rule(fs_num: int, rule: Dictionary, results: Dictionar
return bool(fs_num >= rule.min and fs_num < rule.max) and results.has(rule.key)
##
## Получение мощности при выполнении контроля
static func power_um_ukp(status: PackedByteArray, litera: int, pwr_result: Array) -> Array:
const Constants: Dictionary = {'POWER_UKP_1' : 31, 'POWER_UKP_2': 63}
var power_values: Array = []
@@ -833,34 +953,7 @@ static func update_max_power_values(power_data: Array, max_power_values: Array)
return max_power_values.duplicate()
static func check_dou_result(control_dic: Dictionary, power_dic: Dictionary, pribor: String, litera: int, cnst: Dictionary) -> Dictionary:
var all_dou_ok = true
var dou: String = 'dou_2' if litera == 2 else 'dou_3'
if pribor == '' or pribor == '' or pribor == '' or pribor == '':
dou = 'dou_6' if litera == 6 else 'dou_7'
elif pribor == '' or pribor == '' or pribor == '' or pribor == '':
dou = 'dou_4' if litera == 4 else 'dou_5'
var ray_dic: Dictionary = power_dic[litera]
if ray_dic[RAY_m5].size() == 0 or \
ray_dic[RAY_5 ].size() == 0 or \
ray_dic[RAY_15].size() == 0 or \
ray_dic[RAY_25].size() == 0 or \
ray_dic[RAY_35].size() == 0 or \
ray_dic[RAY_45].size() == 0:
control_dic[dou] = false
return control_dic
for i_pow_arr in ray_dic.values():
for i_pow in i_pow_arr.size():
if i_pow_arr[i_pow] < cnst.POWER_THRESHOLD:
all_dou_ok = false
control_dic[dou] = all_dou_ok
return control_dic
## Подготовка принятых данных по контролю для передачи в сцену
static func prep_power(power_dic: Dictionary, prd_name: String)-> Dictionary:
const RAY_KEYS := ["RAY_m5", "RAY_5", "RAY_15", "RAY_25", "RAY_35", "RAY_45"]
var prep_pow_dic: Dictionary = {}
@@ -912,3 +1005,68 @@ static func prep_power(power_dic: Dictionary, prd_name: String)-> Dictionary:
for um_index in range(current_um_names.size()):
prep_pow_dic[current_um_names[um_index]] = um_data[um_index]
return prep_pow_dic
static func check_dou_result(control_dic: Dictionary, power_dic: Dictionary, pribor: String, litera: int, cnst: Dictionary) -> Dictionary:
var all_dou_ok = true
var dou: String = 'dou_2' if litera == 2 else 'dou_3'
if pribor == '' or pribor == '' or pribor == '' or pribor == '':
dou = 'dou_6' if litera == 6 else 'dou_7'
elif pribor == '' or pribor == '' or pribor == '' or pribor == '':
dou = 'dou_4' if litera == 4 else 'dou_5'
var ray_dic: Dictionary = power_dic[litera]
if ray_dic[RAY_m5].size() == 0 or \
ray_dic[RAY_5 ].size() == 0 or \
ray_dic[RAY_15].size() == 0 or \
ray_dic[RAY_25].size() == 0 or \
ray_dic[RAY_35].size() == 0 or \
ray_dic[RAY_45].size() == 0:
control_dic[dou] = false
return control_dic
for i_pow_arr in ray_dic.values():
for i_pow in i_pow_arr.size():
if i_pow_arr[i_pow] < cnst.POWER_THRESHOLD:
all_dou_ok = false
control_dic[dou] = all_dou_ok
return control_dic
# Сеттер для статуса
func _set_status(new_status: String) -> void:
if current_status != new_status:
current_status = new_status
call_deferred('emit_signal', 'status_updated', new_status)
# Геттер для текущего статуса (чтобы можно было забрать в любой момент)
func get_current_status() -> String:
return current_status
func _get_ray_name(ray_num: int) -> String:
match ray_num:
0: return "-5°"
1: return ""
2: return "15°"
3: return "25°"
4: return "35°"
5: return "45°"
6: return "ДКМ"
_: return "неизвестный угол"
# Геттер для результатов контроля
func get_control_results() -> Dictionary:
return {
'control_is_over': flag_control_is_over,
'result_dic': control_results,
'power_dic': power_result,
'block_kasseta_y5_config': block_kasseta_y5_config,
'block_ip_config': block_ip_config,
'temperature_um': temperature_um,
'POWER_THRESHOLD': constants.POWER_THRESHOLD,
'name_prd': self_name
}