снятие мощности со всех лучей на приборе прд-н

This commit is contained in:
Maxim
2025-08-15 09:48:50 +03:00
parent cda98ce6bd
commit d67a2a6cd7
5 changed files with 130 additions and 94 deletions

View File

@@ -1,24 +1,25 @@
class TestPRD extends Node:
const RAY_25_1:= 'ray_25_1'
const RAY_25_2:= 'ray_25_2'
const RAY_25_3:= 'ray_25_3'
const RAY_25_4:= 'ray_25_4'
const RAY_25_5:= 'ray_25_5'
const RAY_25_6:= 'ray_25_6'
const RAY_25_7:= 'ray_25_7'
const RAY_m5:= 'RAY_m5'
const RAY_5:= 'RAY_5'
const RAY_15:= 'RAY_15'
const RAY_25:= 'RAY_25'
const RAY_35:= 'RAY_35'
const RAY_45:= 'RAY_45'
enum STATE_VAL { NONE = 0, GOOD = 1, ERROR = 2 }
enum STATE_MASHINE {
INIT,
FS_TURN_ON,
FS_WORK,
WRITE_ISA,
READ_ISA,
CHEK_KASSETA_Y5,
UG_SET_RAY,
UG_SET_RAY_0,
UG_SET_RAY_1,
UG_SET_RAY_2,
UG_SET_RAY_3,
UG_SET_RAY_4,
UG_SET_RAY_5,
UG_SET_RAY_6,
UM_RUN,
FS_TURN_OFF,
STOP_CONTROL,
@@ -42,13 +43,13 @@ class TestPRD extends Node:
}
var power_result: Dictionary = {
RAY_25_1: [],
RAY_25_2: [],
RAY_25_3: [],
RAY_25_4: [],
RAY_25_5: [],
RAY_25_6: [],
RAY_25_7: [],
1: {RAY_m5: [], RAY_5: [], RAY_15: [], RAY_25: [], RAY_35: [], RAY_45: [],},
2: {RAY_m5: [], RAY_5: [], RAY_15: [], RAY_25: [], RAY_35: [], RAY_45: [],},
3: {RAY_m5: [], RAY_5: [], RAY_15: [], RAY_25: [], RAY_35: [], RAY_45: [],},
4: {RAY_m5: [], RAY_5: [], RAY_15: [], RAY_25: [], RAY_35: [], RAY_45: [],},
5: {RAY_m5: [], RAY_5: [], RAY_15: [], RAY_25: [], RAY_35: [], RAY_45: [],},
6: {RAY_m5: [], RAY_5: [], RAY_15: [], RAY_25: [], RAY_35: [], RAY_45: [],},
7: {RAY_m5: [], RAY_5: [], RAY_15: [], RAY_25: [], RAY_35: [], RAY_45: [],},
}
var constants: Dictionary
var pribor_config: Dictionary
@@ -61,13 +62,11 @@ class TestPRD extends Node:
var self_name: String
var state: int = STATE_MASHINE.INIT
var current_fs: int
var flag_check_dkm: bool
var flag_timer_started: bool
var flag_timer_started: bool = false
#var ug_online: bool
var unit_prd: Object
var module_prd: Object
var power_amplify: Array
var fs_array_node: Array
var control_label: Label
var control_timer: Timer = Timer.new()
@@ -76,7 +75,6 @@ class TestPRD extends Node:
func _init(init_data: Dictionary) -> void:
control_label = init_data['control_label']
power_amplify = init_data['power_amplifiers']
fs_array_node = init_data['fs_nodes']
unit_prd = init_data['unit_prd']
module_prd = init_data['module_prd']
constants = init_data['constants']
@@ -109,17 +107,26 @@ class TestPRD extends Node:
block_ip_config = check_block_ip(status, block_ip_config)
check_temperature_um(status, power_amplify)
_process_dkm_status(status)
if current_fs != 0:
var tek_litera: Dictionary = power_result[current_fs]
var interes = _get_ray_key(state)
print('interes: ', interes)
if interes != '':
var arr_pow = tek_litera[interes]
tek_litera[_get_ray_key(state)] = power_um_ukp(status, current_fs, tek_litera[_get_ray_key(state)])
power_result[current_fs] = tek_litera
## Пакеты от MP550Service
func on_fs_update_state(packet_type_7: Dictionary, fs_mapping: Dictionary, fs_array: Array) -> void:
func on_fs_update_state(packet_type_7: Dictionary, fs_mapping: Dictionary) -> void:
var fs_key: String = FS_KEYS.get(current_fs, '')
if fs_key.is_empty():
return
var fs_result := {fs_key: STATE_VAL.NONE}
fs_result = on_fs_state(packet_type_7, fs_mapping, fs_result)
_update_fs_states(fs_result, fs_array)
block_fs_config[fs_key] = fs_result[fs_key]
##
func state_control_machine() -> void:
@@ -128,11 +135,41 @@ class TestPRD extends Node:
_handle_init_state()
STATE_MASHINE.FS_TURN_ON:
_handle_fs_turn_on_state()
STATE_MASHINE.CHEK_KASSETA_Y5:
pass
state = STATE_MASHINE.FS_WORK
STATE_MASHINE.FS_WORK:
_handle_fs_work_state()
if not flag_timer_started:
_handle_fs_work_state()
STATE_MASHINE.CHEK_KASSETA_Y5:
if block_kasseta_y5_config['yau07']:
state = STATE_MASHINE.WRITE_ISA
else:
print_debug('Яу-07Б: нет связи ', block_kasseta_y5_config)
STATE_MASHINE.WRITE_ISA:
_handle_ug_set_state(0x6)
STATE_MASHINE.READ_ISA:
_handle_read_isa(module_prd, unit_prd, [constants.ADDR_UG_LITERA_1, constants.ADDR_UG_LITERA_2, constants.ADDR_UG_LITERA_3])
state = STATE_MASHINE.UG_SET_RAY
STATE_MASHINE.UG_SET_RAY:
var addr: int = constants.ADDR_UG_LITERA_1
if current_fs == 3 or current_fs == 5 or current_fs == 7:
addr = constants.ADDR_UG_LITERA_2
if unit_prd.isa_ports.has(addr) and (unit_prd.cmd_state == unit_prd.CmdState.DONE):
control_timer.stop()
if unit_prd.isa_ports[addr] & 0x07 == 0:
state = STATE_MASHINE.UG_SET_RAY_1
elif unit_prd.isa_ports[addr] & 0x07 == 1:
state = STATE_MASHINE.UG_SET_RAY_2
elif unit_prd.isa_ports[addr] & 0x07 == 2:
state = STATE_MASHINE.UG_SET_RAY_3
elif unit_prd.isa_ports[addr] & 0x07 == 3:
state = STATE_MASHINE.UG_SET_RAY_4
elif unit_prd.isa_ports[addr] & 0x07 == 4:
state = STATE_MASHINE.UG_SET_RAY_5
elif unit_prd.isa_ports[addr] & 0x07 == 5:
state = STATE_MASHINE.FS_TURN_OFF
elif unit_prd.isa_ports[addr] & 0x07 == 6:
state = STATE_MASHINE.UG_SET_RAY_0
STATE_MASHINE.UG_SET_RAY_0:
_handle_ug_set_state(0x0)
STATE_MASHINE.UG_SET_RAY_1:
@@ -145,8 +182,6 @@ class TestPRD extends Node:
_handle_ug_set_state(0x4)
STATE_MASHINE.UG_SET_RAY_5:
_handle_ug_set_state(0x5)
STATE_MASHINE.UG_SET_RAY_6:
_handle_ug_set_state(0x6)
STATE_MASHINE.UM_RUN:
flag_timer_started = _handle_um_run_state()
STATE_MASHINE.FS_TURN_OFF:
@@ -162,28 +197,28 @@ class TestPRD extends Node:
else:
control_results = on_control_result(block_ip_config, block_dkm_config, block_fs_config, control_results)
state = STATE_MASHINE.AWAIT
print_debug(power_result)
func _handle_fs_turn_on_state() -> void:
control_label.text = 'Выполняется включение ФС-%s' % current_fs
manage_fs(true, self_name, pribor_config, fs_parameters, current_fs, constants.POWER_UM)
#control_timer.wait_time = constants.TIMER_DELAY
#control_timer.start()
state = STATE_MASHINE.FS_WORK
control_timer.wait_time = constants.TIMER_DELAY
control_timer.start()
func _handle_fs_work_state() -> void:
control_label.text = 'Выполняется проверка ФС-%s' % current_fs
if not module_prd.unit_yau07.online:
return
if (current_fs == 2 and block_fs_config.fs_2 and not flag_timer_started) or \
(current_fs == 3 and block_fs_config.fs_3 and not flag_timer_started) or \
(current_fs == 4 and block_fs_config.fs_4 and not flag_timer_started) or \
(current_fs == 5 and block_fs_config.fs_5 and not flag_timer_started) or \
(current_fs == 6 and block_fs_config.fs_6 and not flag_timer_started) or \
(current_fs == 7 and block_fs_config.fs_7 and not flag_timer_started) or \
(current_fs == 1 and block_fs_config.fs_1 and not flag_timer_started):
state = STATE_MASHINE.UG_SET_RAY_6
if (current_fs == 2 and block_fs_config.fs_2) or \
(current_fs == 3 and block_fs_config.fs_3) or \
(current_fs == 4 and block_fs_config.fs_4) or \
(current_fs == 5 and block_fs_config.fs_5) or \
(current_fs == 6 and block_fs_config.fs_6) or \
(current_fs == 7 and block_fs_config.fs_7) or \
(current_fs == 1 and block_fs_config.fs_1):
state = STATE_MASHINE.CHEK_KASSETA_Y5
func _handle_ug_set_state(RAY_DOU_NUM: int) -> void:
@@ -217,7 +252,7 @@ class TestPRD extends Node:
func _handle_um_run_state() -> bool:
control_label.text = 'Выполняется настройка ЭМС'
module_prd.cmd_array.append([unit_prd.CmdCode.WRITE_ISA, [constants.BASE_ADDR_EMS_G, 6666]])
state = STATE_MASHINE.FS_WORK
state = STATE_MASHINE.READ_ISA
return true
@@ -231,7 +266,6 @@ class TestPRD extends Node:
control_label.text = 'Выполняется завершение проверки ФС-%s' % current_fs
control_results = power_um_control_result(control_results, constants, power_result)
flag_timer_started = false
flag_check_dkm = false
_advance_to_next_fs()
state = STATE_MASHINE.INIT
@@ -251,7 +285,7 @@ class TestPRD extends Node:
func initialize_connections() -> void:
_determine_self_name()
var fs_mapping = _create_fs_mapping(self_name)
signaller.conn(signaller.fs_update_state, Callable(self, 'on_fs_update_state').bind(fs_mapping, fs_array_node))
signaller.conn(signaller.fs_update_state, Callable(self, 'on_fs_update_state').bind(fs_mapping))
unit_prd.connect('data_received', Callable(self, 'on_data_received'))
@@ -275,10 +309,6 @@ class TestPRD extends Node:
var dkm_bit = _get_dkm_bit_for_current_fs()
block_dkm_config = check_dkm(status, dkm_bit, block_dkm_config)
flag_check_dkm = block_dkm_config[_get_dkm_key_for_current_fs()]
if flag_check_dkm:
power_result[_get_ray_key_for_current_fs()] = power_um_ukp(status, current_fs, power_result[_get_ray_key_for_current_fs()])
func _get_current_fs_key() -> String:
return FS_KEYS.get(current_fs, '')
@@ -308,27 +338,17 @@ class TestPRD extends Node:
_: return ''
func _get_ray_key_for_current_fs() -> String:
match current_fs:
1: return RAY_25_1
2: return RAY_25_2
3: return RAY_25_3
4: return RAY_25_4
5: return RAY_25_5
6: return RAY_25_6
7: return RAY_25_7
static func _get_ray_key(machine_state: int) -> String:
match machine_state:
STATE_MASHINE.UG_SET_RAY_0: return RAY_m5
STATE_MASHINE.UG_SET_RAY_1: return RAY_5
STATE_MASHINE.UG_SET_RAY_2: return RAY_15
STATE_MASHINE.UG_SET_RAY_3: return RAY_25
STATE_MASHINE.UG_SET_RAY_4: return RAY_35
STATE_MASHINE.UG_SET_RAY_5: return RAY_45
_: return ''
func _update_fs_states(fs_result: Dictionary, fs_array: Array) -> void:
for fs in fs_array:
var fs_meta: String = fs.get_meta('fs')
if fs_result.has(fs_meta):
var new_state = fs_result[fs_meta]
fs.state = new_state
block_fs_config[fs_meta] = new_state
func on_stop_control() -> void:
state = STATE_MASHINE.FS_TURN_OFF
@@ -337,22 +357,22 @@ class TestPRD extends Node:
var all_blocks_ip_ok = true
var all_blocks_dkm_ok = true
var all_blocks_fs_ok = true
for block in ip_config:
if not ip_config[block][1]:
all_blocks_ip_ok = false
ctrl_results['block_ip'] = all_blocks_ip_ok
for block in dkm_config:
if not dkm_config[block]:
all_blocks_dkm_ok = false
ctrl_results['dkm'] = all_blocks_dkm_ok
for block in fs_config:
if not fs_config[block]:
all_blocks_fs_ok = false
ctrl_results['fs'] = all_blocks_fs_ok
return ctrl_results
@@ -365,22 +385,24 @@ class TestPRD extends Node:
settings_ug.ADDR_UG_LITERA_2, result_2,
settings_ug.ADDR_UG_LITERA_3, settings_ug.ATT_UM_3]])
prd_module.cmd_array.append([prd_unit.CmdCode.READ_ISA, [settings_ug.ADDR_UG_LITERA_1, settings_ug.ADDR_UG_LITERA_2, settings_ug.ADDR_UG_LITERA_3]])
static func _handle_read_isa(prd_module: Object, prd_unit: Object, read_isa_ports: Array) -> void:
prd_module.cmd_array.append([prd_unit.CmdCode.READ_ISA, read_isa_ports])
static func power_um_control_result(ctrl_results: Dictionary, constan: Dictionary, pwr_result: Dictionary) -> Dictionary:
ctrl_results['power_um'] = true
for amp_array in pwr_result.values():
if amp_array.size() == 0:
ctrl_results['power_um'] = false
return ctrl_results
for amp_array in pwr_result.values():
for value in amp_array:
if value < constan.TEMP_THRESHOLD:
ctrl_results['power_um'] = false
break
#for amp_array in pwr_result.values():
#for value in amp_array:
#if value < constan.TEMP_THRESHOLD:
#ctrl_results['power_um'] = false
#break
return ctrl_results
@@ -417,8 +439,8 @@ class TestPRD extends Node:
var status = status_prd[byte_dry] >> bit & 1
ip_config[block][1] = false if status else true
return ip_config
## Проверка кассеты у-5 (ЯУ-07Б, ЭМС-Г, УГ, УКП-1, УКП-2)
static func check_block_kasseta_y5(status_prd: PackedByteArray, y5_config: Dictionary) -> Dictionary:
y5_config.yau07 = true
@@ -441,7 +463,7 @@ class TestPRD extends Node:
const TEMP: float = 115.0 / (Constants.MAXIMUM_CODE_ADC - Constants.MINIMUM_CODE_AD)
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
@@ -449,7 +471,7 @@ class TestPRD extends Node:
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)
power_amplifier[i_temp].value0 = tmp_1
if power_amplifier.size() > 12: # Темпуратура от УМ литеры 1
temperature_ukp_1 = status_prd.decode_u16(Constants.TEMPERATURE_UKP_1 + 2 * 7)
tmp_1 = round(Constants.CONST_MIN_TEMP + (Constants.MAXIMUM_CODE_ADC - temperature_ukp_1) * TEMP + 3)