Рефактор. pribor-prd.gd и позиции сцены
This commit is contained in:
@@ -32,6 +32,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 +62,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
|
||||
@@ -80,9 +90,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 +147,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:
|
||||
@@ -211,33 +218,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 ['1н', '2н', '3н', '4н']:
|
||||
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 ['1в', '2в', '3в', '4в']:
|
||||
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 ['1к', '2к', '3к', '4к']:
|
||||
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:
|
||||
@@ -389,15 +389,16 @@ func _handle_fs_turn_on_state() -> void:
|
||||
##'Выполняется проверка ФС-%s' % current_litera
|
||||
func _handle_fs_work_state() -> void:
|
||||
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:
|
||||
var dic_att := {
|
||||
'RAY_DOU_NUM': RAY_DOU_NUM,
|
||||
@@ -420,16 +421,7 @@ 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:
|
||||
match state:
|
||||
STATE_MACHINE.INIT:
|
||||
@@ -452,6 +444,7 @@ func _handle_stop_control_state() -> void:
|
||||
state = STATE_MACHINE.INIT
|
||||
|
||||
|
||||
## Переходит на следующую литеру, если 0 то считай закончил выполнения контроля
|
||||
func _advance_to_next_fs() -> void:
|
||||
match current_litera:
|
||||
1: current_litera = 6
|
||||
@@ -536,6 +529,7 @@ func _get_device_type() -> String:
|
||||
return ''
|
||||
|
||||
|
||||
## Настройка таймеров
|
||||
func setup_timer() -> void:
|
||||
add_child(control_timer)
|
||||
control_timer.timeout.connect(on_stop_control)
|
||||
@@ -550,6 +544,23 @@ 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()
|
||||
state = STATE_MACHINE.FS_TURN_OFF
|
||||
|
||||
|
||||
## Срабатывает при выходе или входе в режим контроль
|
||||
func on_mode_changed(in_tree: bool) -> void:
|
||||
flag_in_control = in_tree
|
||||
if not in_tree: ## TODO: Дополнительная проверка если контроль идет, если нет, то смысла вызывать нет
|
||||
@@ -562,7 +573,7 @@ func on_mode_changed(in_tree: bool) -> void:
|
||||
|
||||
|
||||
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 +600,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 +617,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 +631,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 +662,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)
|
||||
|
||||
|
||||
@@ -696,7 +703,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 +710,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 +725,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к', 1: '4к', 2: '3к', 3: '2к',
|
||||
@@ -740,7 +743,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 +762,8 @@ 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 +837,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 == '1к' or pribor == '2к' or pribor == '3к' or pribor == '4к':
|
||||
dou = 'dou_6' if litera == 6 else 'dou_7'
|
||||
elif pribor == '1в' or pribor == '2в' or pribor == '3в' or pribor == '4в':
|
||||
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 +889,30 @@ 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 == '1к' or pribor == '2к' or pribor == '3к' or pribor == '4к':
|
||||
dou = 'dou_6' if litera == 6 else 'dou_7'
|
||||
elif pribor == '1в' or pribor == '2в' or pribor == '3в' or pribor == '4в':
|
||||
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
|
||||
|
||||
Reference in New Issue
Block a user