Актуальная доработка прибора прд-к с сигналом к1
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
extends "res://scenes/контроль/прибор.gd"
|
||||
|
||||
const Constants = {
|
||||
const Constants: Dictionary = {
|
||||
"IN_BLANK_PRD": 1,
|
||||
"OUT_BLANK_PRD": 13,
|
||||
"CI_1_OT_FS": 8,
|
||||
@@ -23,13 +23,13 @@ const Constants = {
|
||||
"ADDR_UG_LITERA_1": 0x106,
|
||||
"ADDR_UG_LITERA_2": 0x108,
|
||||
"ADDR_UG_LITERA_3": 0x10A,
|
||||
"TEMP_THRESHOLD": 70,
|
||||
"TEMP_THRESHOLD": 40,
|
||||
"POWER_THRESHOLD": 40,
|
||||
"TIMER_DELAY": 5.0,
|
||||
"dou_ray_nuber": 0x3,
|
||||
"dou_ray_nuber": 0x6,
|
||||
"attenutor_um_1": 0x7,
|
||||
"attenutor_um_2": 0x7,
|
||||
"attenutor_um_3": 0x7,
|
||||
"attenutor_um_3": 0x0,
|
||||
"POWER_UM": 75,
|
||||
}
|
||||
enum STATE_VAL { NONE = 0, GOOD = 1, ERROR = 2 }
|
||||
@@ -37,9 +37,11 @@ enum STATE_MASHINE {
|
||||
INIT,
|
||||
FS_TURN_ON,
|
||||
FS_WORK,
|
||||
UG_SET,
|
||||
UM_RUN,
|
||||
FS_TURN_OFF,
|
||||
STOP_CONTROL
|
||||
STOP_CONTROL,
|
||||
AWAIT
|
||||
}
|
||||
# Основные переменные
|
||||
var current_fs: int = 1
|
||||
@@ -58,9 +60,6 @@ var ug_work_3: int
|
||||
# Флаги и таймеры
|
||||
var control_timer: Timer = Timer.new()
|
||||
var mashine_timer: Timer = Timer.new()
|
||||
var flag_check_dkm_1: bool = false
|
||||
var flag_check_dkm_6: bool = false
|
||||
var flag_check_dkm_7: bool = false
|
||||
var pribor: String
|
||||
# Результаты контроля
|
||||
var _control_results: Dictionary = {
|
||||
@@ -87,6 +86,9 @@ func on_state_mashine() -> void:
|
||||
STATE_MASHINE.INIT:
|
||||
if current_fs == 1 or current_fs == 6 or current_fs == 7:
|
||||
state = STATE_MASHINE.FS_TURN_ON
|
||||
else:
|
||||
on_control_result()
|
||||
state = STATE_MASHINE.AWAIT
|
||||
|
||||
STATE_MASHINE.FS_TURN_ON:
|
||||
_on_control_fs(true)
|
||||
@@ -106,17 +108,20 @@ func on_state_mashine() -> void:
|
||||
var prd_module = prd.prd_dict[unit_prd.name]
|
||||
prd_module.cmd_array.append([unit_prd.CmdCode.WRITE_ISA, [Constants.BASE_ADDR_EMS_G, 6666]])
|
||||
flag_timer_started = true
|
||||
state = STATE_MASHINE.UG_SET
|
||||
|
||||
STATE_MASHINE.UG_SET:
|
||||
on_ug_setting()
|
||||
state = STATE_MASHINE.FS_WORK
|
||||
|
||||
STATE_MASHINE.FS_TURN_OFF:
|
||||
_on_control_fs(false)
|
||||
power_control_result()
|
||||
if current_fs == 1:
|
||||
on_control_result()
|
||||
state = STATE_MASHINE.STOP_CONTROL
|
||||
|
||||
STATE_MASHINE.STOP_CONTROL:
|
||||
flag_timer_started = false
|
||||
flag_check_dkm = false
|
||||
match current_fs:
|
||||
1: current_fs = 6
|
||||
6: current_fs = 7
|
||||
@@ -183,12 +188,26 @@ func on_data_received(unit_prd: Object) -> void:
|
||||
check_temperature_um(status)
|
||||
# Обработка данных ЭМС
|
||||
_process_ems_data(status)
|
||||
|
||||
flag_check_dkm_1 = check_dkm(status, Constants.DKM_BIT_1)
|
||||
flag_check_dkm_6 = check_dkm(status, Constants.DKM_BIT_6)
|
||||
flag_check_dkm_7 = check_dkm(status, Constants.DKM_BIT_7)
|
||||
if flag_check_dkm_1 or flag_check_dkm_6 or flag_check_dkm_7:
|
||||
|
||||
if current_fs == 1 and _control_results.fs_1:
|
||||
flag_check_dkm = check_dkm(status, Constants.DKM_BIT_1)
|
||||
elif current_fs == 6 and _control_results.fs_6:
|
||||
flag_check_dkm = check_dkm(status, Constants.DKM_BIT_6)
|
||||
elif current_fs == 7 and _control_results.fs_7:
|
||||
flag_check_dkm = check_dkm(status, Constants.DKM_BIT_7)
|
||||
|
||||
flag_check_dkm = check_dkm(status, Constants.DKM_BIT_7)
|
||||
flag_check_dkm = check_dkm(status, Constants.DKM_BIT_6)
|
||||
flag_check_dkm = check_dkm(status, Constants.DKM_BIT_1)
|
||||
|
||||
if flag_check_dkm:
|
||||
_process_ukp_power(status)
|
||||
|
||||
var unit_key = settings.get_unit_key(get_meta('unit_name')[0])
|
||||
var unit_prdic = network.units[unit_key]
|
||||
#if unit_prdic.isa_ports.has(Constants.ADDR_UG_LITERA_1):
|
||||
#print(unit_prdic.isa_ports[Constants.ADDR_UG_LITERA_1])
|
||||
#print(unit_prdic.isa_ports[Constants.ADDR_UG_LITERA_2])
|
||||
|
||||
|
||||
# Обрабатывает данные ЭМС и обновляет UI панели
|
||||
@@ -270,15 +289,16 @@ func check_dkm(status_prd: PackedByteArray, bit_dkm: int) -> bool:
|
||||
const DKM: int = 28
|
||||
|
||||
var status_dkm = status_prd[DKM] >> bit_dkm & 1
|
||||
if bit_dkm == 5 and current_fs == 6:
|
||||
print(status_prd[DKM])
|
||||
if bit_dkm == 5:
|
||||
$dou6_A7.state = STATE_VAL.GOOD if status_dkm else STATE_VAL.ERROR
|
||||
$kasseta_fs_kd/ref_A4.state = STATE_VAL.GOOD if status_dkm else STATE_VAL.ERROR
|
||||
_control_results["dkm_6"] = status_dkm
|
||||
elif bit_dkm == 6 and current_fs == 7:
|
||||
elif bit_dkm == 6:
|
||||
$dou7_A8.state = STATE_VAL.GOOD if status_dkm else STATE_VAL.ERROR
|
||||
$kasseta_fs_kd/ref_A7.state = STATE_VAL.GOOD if status_dkm else STATE_VAL.ERROR
|
||||
_control_results["dkm_7"] = status_dkm
|
||||
elif bit_dkm == 0 and current_fs == 1:
|
||||
elif bit_dkm == 0:
|
||||
$kasseta_fs_kd/ref_A2.state = STATE_VAL.GOOD if status_dkm else STATE_VAL.ERROR
|
||||
_control_results["dkm_1"] = status_dkm
|
||||
return status_dkm
|
||||
@@ -374,7 +394,7 @@ func _on_control_fs(mode: bool) -> void:
|
||||
var fs_params := {
|
||||
1: {'freq': 450.0, 'width': 80.0},
|
||||
6: {'freq': 2450.0, 'width': 110.0},
|
||||
7: {'freq': 5800.0, 'width': 110.0}
|
||||
7: {'freq': 4750.0, 'width': 110.0}
|
||||
}
|
||||
|
||||
# Формируем выходные данные
|
||||
@@ -390,7 +410,6 @@ func _on_control_fs(mode: bool) -> void:
|
||||
params.width,
|
||||
sectors[current_fs - 1] if current_fs == 1 else sectors[current_fs - 5]
|
||||
])
|
||||
|
||||
signaller.emit_signal('interfer_init', interfer_name, fs_arr, Constants.POWER_UM)
|
||||
|
||||
|
||||
@@ -417,14 +436,18 @@ func on_fs_update_state(packet_type_7: Dictionary) -> void:
|
||||
for fs in packet_type_7:
|
||||
if fs in fs_mapping and fs_mapping[fs]["condition"]:
|
||||
var data = packet_type_7[fs]
|
||||
var state_fs = STATE_VAL.GOOD if data.isg == 1 else STATE_VAL.ERROR if data.isg == 0 else STATE_VAL.NONE
|
||||
fs_mapping[fs]["node"].state = state_fs
|
||||
if fs < 4:
|
||||
if fs < 4 and current_fs == 1:
|
||||
_control_results["fs_1"] = (data.isg == 1)
|
||||
elif fs <24:
|
||||
var state_fs = STATE_VAL.GOOD if data.isg == 1 else STATE_VAL.ERROR if data.isg == 0 else STATE_VAL.NONE
|
||||
fs_mapping[fs]["node"].state = state_fs
|
||||
elif fs < 24 and current_fs == 6:
|
||||
_control_results["fs_6"] = (data.isg == 1)
|
||||
else:
|
||||
var state_fs = STATE_VAL.GOOD if data.isg == 1 else STATE_VAL.ERROR if data.isg == 0 else STATE_VAL.NONE
|
||||
fs_mapping[fs]["node"].state = state_fs
|
||||
elif fs > 23 and current_fs == 7:
|
||||
_control_results["fs_7"] = (data.isg == 1)
|
||||
var state_fs = STATE_VAL.GOOD if data.isg == 1 else STATE_VAL.ERROR if data.isg == 0 else STATE_VAL.NONE
|
||||
fs_mapping[fs]["node"].state = state_fs
|
||||
|
||||
|
||||
func on_ug_setting() -> void:
|
||||
@@ -443,8 +466,7 @@ func on_ug_setting() -> void:
|
||||
var prd_module = prd.prd_dict[unit_prd.name]
|
||||
prd_module.cmd_array.append([unit_prd.CmdCode.WRITE_ISA, [Constants.ADDR_UG_LITERA_1, result_1,
|
||||
Constants.ADDR_UG_LITERA_2, result_2,
|
||||
Constants.ADDR_UG_LITERA_3, Constants.attenutor_um_3,
|
||||
Constants.BASE_ADDR_EMS_G, 6666]])
|
||||
Constants.ADDR_UG_LITERA_3, Constants.attenutor_um_3]])
|
||||
|
||||
prd_module.cmd_array.append([unit_prd.CmdCode.READ_ISA, [Constants.ADDR_UG_LITERA_1, Constants.ADDR_UG_LITERA_2, Constants.ADDR_UG_LITERA_3]])
|
||||
|
||||
@@ -464,9 +486,10 @@ func on_control_result() -> void:
|
||||
# Проверка результатов и установка состояний
|
||||
var result: bool = true
|
||||
for key in _control_results:
|
||||
if not _control_results[key] and error_nodes.has(key):
|
||||
error_nodes[key].state = STATE_VAL.ERROR
|
||||
if not _control_results[key]:
|
||||
result = false
|
||||
if error_nodes.has(key):
|
||||
error_nodes[key].state = STATE_VAL.ERROR
|
||||
|
||||
# Установка текста и цвета результата
|
||||
var status_text := 'неисправен'
|
||||
|
||||
@@ -11,34 +11,54 @@ const Constants = {
|
||||
"POWER_UKP_2": 63,
|
||||
"DKM_BIT_2": 1,
|
||||
"DKM_BIT_3": 2,
|
||||
"BASE_ADDR_EMS_G": 0x120,
|
||||
"ADDR_UG_LITERA_1": 0x106,
|
||||
"ADDR_UG_LITERA_2": 0x108,
|
||||
"TEMP_THRESHOLD": 70,
|
||||
"POWER_THRESHOLD": 40,
|
||||
"TIMER_DELAY": 1.4,
|
||||
"RAY_DOU": 3,
|
||||
"ATT_UM_2": 0x7,
|
||||
"ATT_UM_3": 0x7,
|
||||
"TIMER_DELAY": 5.0,
|
||||
"POWER_UM": 70,
|
||||
}
|
||||
enum STATE_VAL { NONE = 0, GOOD = 1, ERROR = 2 }
|
||||
enum STATE_MASHINE {
|
||||
INIT,
|
||||
FS_TURN_ON,
|
||||
FS_WORK,
|
||||
UG_SET,
|
||||
UM_RUN,
|
||||
FS_TURN_OFF,
|
||||
STOP_CONTROL,
|
||||
AWAIT
|
||||
}
|
||||
# Основные переменные
|
||||
var count_packet_1:int = 0
|
||||
var current_fs: int = 2
|
||||
var state: int = STATE_MASHINE.INIT
|
||||
var flag_check_dkm: bool = false
|
||||
var flag_timer_started: bool = false
|
||||
|
||||
var count_packet_2:int = 0
|
||||
var power_array_1: Array = []
|
||||
var count_packet_3:int = 0
|
||||
var power_array_2: Array = []
|
||||
var currecnt_unit: String
|
||||
var ug_work_1: int
|
||||
var power_array_3: Array = []
|
||||
var pribor: String
|
||||
var ug_work_2: int
|
||||
var ug_work_3: int
|
||||
# Флаги и таймеры
|
||||
var control_timer: Timer = Timer.new()
|
||||
var flag_timer_started: bool = false
|
||||
var mashine_timer: Timer = Timer.new()
|
||||
|
||||
# Результаты контроля
|
||||
var _control_results: Dictionary = {
|
||||
"block_ip": false, # Проверка касет П1 и ИП МА2000
|
||||
"temperature": true, # Проверка температур УМ
|
||||
"dkm_1": false, # Проверка ДКМ
|
||||
"dkm_2": false, # Проверка ДКМ
|
||||
"dkm_3": false, # Проверка ДКМ
|
||||
"power_ukp": false, # Мощность от УКП
|
||||
"fs_1": false, # Проверка ФС
|
||||
"fs_2": false,
|
||||
"fs_2": false, # Проверка ФС
|
||||
"fs_3": false,
|
||||
}
|
||||
|
||||
|
||||
@@ -48,16 +68,76 @@ func _ready() -> void:
|
||||
set_default_state()
|
||||
|
||||
|
||||
func on_state_mashine() -> void:
|
||||
match state:
|
||||
STATE_MASHINE.INIT:
|
||||
print('Текущий запуск current_fs: ', current_fs)
|
||||
if current_fs == 2 or current_fs == 3:
|
||||
state = STATE_MASHINE.FS_TURN_ON
|
||||
else:
|
||||
on_control_result()
|
||||
state = STATE_MASHINE.AWAIT
|
||||
|
||||
STATE_MASHINE.FS_TURN_ON:
|
||||
print('FS_TURN_ON')
|
||||
_on_control_fs(true)
|
||||
control_timer.wait_time = Constants.TIMER_DELAY
|
||||
control_timer.start()
|
||||
state = STATE_MASHINE.FS_WORK
|
||||
|
||||
STATE_MASHINE.FS_WORK:
|
||||
print('FS_WORK')
|
||||
if (current_fs == 2 and flag_check_dkm and not flag_timer_started) or \
|
||||
(current_fs == 3 and flag_check_dkm and not flag_timer_started):
|
||||
state = STATE_MASHINE.UM_RUN
|
||||
|
||||
STATE_MASHINE.UM_RUN:
|
||||
print('UM_RUN')
|
||||
var unit_key = settings.get_unit_key(get_meta('unit_name')[0])
|
||||
var unit_prd = network.units[unit_key]
|
||||
var prd_module = prd.prd_dict[unit_prd.name]
|
||||
prd_module.cmd_array.append([unit_prd.CmdCode.WRITE_ISA, [Constants.BASE_ADDR_EMS_G, 6666]])
|
||||
flag_timer_started = true
|
||||
state = STATE_MASHINE.UG_SET
|
||||
|
||||
STATE_MASHINE.UG_SET:
|
||||
print('UG_SET')
|
||||
on_ug_setting()
|
||||
state = STATE_MASHINE.FS_WORK
|
||||
|
||||
STATE_MASHINE.FS_TURN_OFF:
|
||||
print('FS_TURN_OFF')
|
||||
_on_control_fs(false)
|
||||
power_control_result()
|
||||
state = STATE_MASHINE.STOP_CONTROL
|
||||
|
||||
STATE_MASHINE.STOP_CONTROL:
|
||||
print('STOP_CONTROL')
|
||||
flag_timer_started = false
|
||||
flag_check_dkm = false
|
||||
match current_fs:
|
||||
2: current_fs = 3
|
||||
3: current_fs = 0
|
||||
state = STATE_MASHINE.INIT
|
||||
|
||||
|
||||
func initialize_connections() -> void:
|
||||
signaller.conn(signaller.fs_update_state, Callable(self, 'on_fs_update_state'))
|
||||
var unit_name = get_meta('unit_name')[0]
|
||||
var unit_prd = network.get_unit_instance(unit_name)
|
||||
currecnt_unit = unit_prd.name
|
||||
var unit_key = settings.get_unit_key(get_meta('unit_name')[0])
|
||||
var unit_prd = network.units[unit_key]
|
||||
var currecnt_unit = unit_prd.name
|
||||
var parts = currecnt_unit.split('-')
|
||||
pribor = parts[-1]
|
||||
unit_prd.connect('data_received', Callable(self, 'on_data_received'))
|
||||
unit_prd.connect('line_changed', Callable(self, 'on_line_changed'))
|
||||
|
||||
|
||||
func setup_timer() -> void:
|
||||
add_child(mashine_timer)
|
||||
mashine_timer.connect('timeout', Callable(self, 'on_state_mashine'))
|
||||
mashine_timer.wait_time = 0.5
|
||||
mashine_timer.start()
|
||||
|
||||
add_child(control_timer)
|
||||
control_timer.connect('timeout', Callable(self, 'on_stop_control'))
|
||||
control_timer.one_shot = true
|
||||
@@ -76,14 +156,14 @@ func set_default_state() -> void:
|
||||
func _enter_tree() -> void:
|
||||
$control_result.text = ''
|
||||
signaller.connect('режим_работа', Callable(self, 'on_mode_changed').bind(false))
|
||||
_on_control_fs(true)
|
||||
|
||||
|
||||
func _exit_tree() -> void:
|
||||
var unit_name = get_meta('unit_name')[0]
|
||||
var unit_prd = network.get_unit_instance(unit_name)
|
||||
var prd_module = prd.prd_dict[unit_prd.name]
|
||||
prd_module.cmd_array.append([unit_prd.CmdCode.WRITE_ISA, [Constants.ADDR_UG_LITERA_1, ug_work_1, Constants.ADDR_UG_LITERA_2, ug_work_2]])
|
||||
|
||||
prd_module.cmd_array.append([unit_prd.CmdCode.WRITE_ISA, [Constants.ADDR_UG_LITERA_1, ug_work_2, Constants.ADDR_UG_LITERA_2, ug_work_3]])
|
||||
|
||||
|
||||
func on_line_changed(unit_prd: Object) -> void:
|
||||
@@ -101,9 +181,12 @@ func on_data_received(unit_prd: Object) -> void:
|
||||
# Обработка данных ЭМС
|
||||
_process_ems_data(status)
|
||||
|
||||
if flag_timer_started:
|
||||
check_dkm(status, Constants.DKM_BIT_2)
|
||||
check_dkm(status, Constants.DKM_BIT_3)
|
||||
if current_fs == 2 and _control_results.fs_2:
|
||||
flag_check_dkm = check_dkm(status, Constants.DKM_BIT_2)
|
||||
elif current_fs == 3 and _control_results.fs_3:
|
||||
flag_check_dkm = check_dkm(status, Constants.DKM_BIT_3)
|
||||
|
||||
if _control_results.fs_2 or _control_results.fs_3:
|
||||
# Обработка мощности от УКП
|
||||
_process_ukp_power(status)
|
||||
|
||||
@@ -191,63 +274,104 @@ func check_temperature_um(status_prd: PackedByteArray) -> void:
|
||||
|
||||
|
||||
## Проверка ДКМ
|
||||
func check_dkm(status_prd: PackedByteArray, bit_dkm: int) -> void:
|
||||
func check_dkm(status_prd: PackedByteArray, bit_dkm: int) -> bool:
|
||||
const DKM: int = 28
|
||||
|
||||
var status_dkm = status_prd[DKM] >> bit_dkm & 1
|
||||
#print('^: ', status_prd[DKM])
|
||||
if bit_dkm == 1:
|
||||
$dou2_A5.state = STATE_VAL.GOOD if status_dkm else STATE_VAL.ERROR
|
||||
$kasseta_FS_ND/ref_A4.state = STATE_VAL.GOOD if status_dkm else STATE_VAL.ERROR
|
||||
_control_results["dkm_1"] = status_dkm
|
||||
elif bit_dkm == 2:
|
||||
$dou3_A6.state = STATE_VAL.GOOD if status_dkm else STATE_VAL.ERROR
|
||||
$dou3_A5.state = STATE_VAL.GOOD if status_dkm else STATE_VAL.ERROR
|
||||
$kasseta_FS_ND/ref_A3.state = STATE_VAL.GOOD if status_dkm else STATE_VAL.ERROR
|
||||
_control_results["dkm_2"] = status_dkm
|
||||
elif bit_dkm == 2:
|
||||
$dou2_A6.state = STATE_VAL.GOOD if status_dkm else STATE_VAL.ERROR
|
||||
$kasseta_FS_ND/ref_A4.state = STATE_VAL.GOOD if status_dkm else STATE_VAL.ERROR
|
||||
_control_results["dkm_3"] = status_dkm
|
||||
return status_dkm
|
||||
|
||||
|
||||
func _process_ukp_power(status: PackedByteArray) -> void:
|
||||
## Мощность УМ от УКП 1
|
||||
var arr_power_ukp_1: Array = []
|
||||
|
||||
if (status[0] >> 2) & 1:
|
||||
for i_power in range(6):
|
||||
var power_ukp_1 = status.decode_u16(Constants.POWER_UKP_1 + 2 * i_power)
|
||||
arr_power_ukp_1.append(power_ukp_1)
|
||||
|
||||
if count_packet_1 == 0:
|
||||
power_array_1 = arr_power_ukp_1
|
||||
else:
|
||||
for i in arr_power_ukp_1.size():
|
||||
if arr_power_ukp_1[i] > power_array_1[i]:
|
||||
power_array_1[i] = arr_power_ukp_1[i]
|
||||
|
||||
var power_amplifier: Array = get_tree().get_nodes_in_group('power_amplifier')
|
||||
for i in 6:
|
||||
power_amplifier[i].value1 = '%d' % power_array_1[i]
|
||||
power_amplifier[i].state = STATE_VAL.GOOD if power_array_1[i] > Constants.POWER_THRESHOLD else STATE_VAL.ERROR
|
||||
count_packet_1 += 1
|
||||
if current_fs == 2:
|
||||
## Мощность УМ от УКП 1
|
||||
var arr_power_ukp_1: Array = []
|
||||
if (status[0] >> 2) & 1:
|
||||
var power_ukp_1: int
|
||||
for i_power in range(6):
|
||||
power_ukp_1 = status.decode_u16(Constants.POWER_UKP_1 + 2 * i_power)
|
||||
arr_power_ukp_1.append(power_ukp_1)
|
||||
|
||||
## Мощность УМ от УКП 2
|
||||
var arr_power_ukp_2: Array = []
|
||||
if count_packet_2 == 0:
|
||||
power_array_2 = arr_power_ukp_1
|
||||
else:
|
||||
for i in arr_power_ukp_1.size():
|
||||
if arr_power_ukp_1[i] > power_array_2[i]:
|
||||
power_array_2[i] = arr_power_ukp_1[i]
|
||||
|
||||
if (status[0] >> 2) & 1:
|
||||
for i_power in range(6):
|
||||
var power_ukp_2 = status.decode_u16(Constants.POWER_UKP_2 + 2 * i_power)
|
||||
arr_power_ukp_2.append(power_ukp_2)
|
||||
for i in 6:
|
||||
power_amplifier[i].value1 = '%d' % power_array_2[i]
|
||||
power_amplifier[i].state = STATE_VAL.GOOD if power_array_2[i] > Constants.TEMP_THRESHOLD else STATE_VAL.ERROR
|
||||
count_packet_2 += 1
|
||||
|
||||
if count_packet_2 == 0:
|
||||
power_array_2 = arr_power_ukp_2
|
||||
else:
|
||||
for i in arr_power_ukp_2.size():
|
||||
if arr_power_ukp_2[i] > power_array_2[i]:
|
||||
power_array_2[i] = arr_power_ukp_2[i]
|
||||
elif current_fs == 3:
|
||||
## Мощность УМ от УКП 2
|
||||
var arr_power_ukp_2: Array = []
|
||||
if (status[0] >> 2) & 1:
|
||||
for i_power in range(6):
|
||||
var power_ukp_2 = status.decode_u16(Constants.POWER_UKP_2 + 2 * i_power)
|
||||
arr_power_ukp_2.append(power_ukp_2)
|
||||
|
||||
for i in 6:
|
||||
power_amplifier[i+6].value1 = '%d' % power_array_2[i]
|
||||
power_amplifier[i+6].state = STATE_VAL.GOOD if power_array_2[i] > Constants.POWER_THRESHOLD else STATE_VAL.ERROR
|
||||
if count_packet_3 == 0:
|
||||
power_array_3 = arr_power_ukp_2
|
||||
else:
|
||||
for i in arr_power_ukp_2.size():
|
||||
if arr_power_ukp_2[i] > power_array_3[i]:
|
||||
power_array_3[i] = arr_power_ukp_2[i]
|
||||
|
||||
count_packet_2 += 1
|
||||
for i in 6:
|
||||
power_amplifier[i+6].value1 = '%d' % power_array_3[i]
|
||||
power_amplifier[i+6].state = STATE_VAL.GOOD if power_array_3[i] > Constants.TEMP_THRESHOLD else STATE_VAL.ERROR
|
||||
|
||||
count_packet_3 += 1
|
||||
|
||||
|
||||
func _on_control_fs(mode: bool) -> void:
|
||||
# Конфигурация параметров для каждого прибора
|
||||
var pribor_config := {
|
||||
'1н': {'angle': 0.0, 'sectors': [4, 8]},
|
||||
'2н': {'angle': 90.0, 'sectors': [7, 11]},
|
||||
'3н': {'angle': 180.0, 'sectors': [6, 10]},
|
||||
'4н': {'angle': 270.0, 'sectors': [5, 9]},
|
||||
}
|
||||
# Получаем конфигурацию для текущего прибора
|
||||
var config: Dictionary = pribor_config.get(pribor)
|
||||
var angle: float = config.angle
|
||||
var sectors: Array = config.sectors
|
||||
|
||||
# Конфигурация частот и ширин для каждого ФС
|
||||
var fs_params := {
|
||||
2: {'freq': 900.0, 'width': 100.0},
|
||||
3: {'freq': 1157.0, 'width': 100.0}
|
||||
}
|
||||
|
||||
# Формируем выходные данные
|
||||
var interfer_name: String = 'k1' if mode else 'off'
|
||||
var fs_arr: Array = []
|
||||
|
||||
if (state == STATE_MASHINE.FS_TURN_ON or state == STATE_MASHINE.FS_TURN_OFF):
|
||||
if current_fs in fs_params:
|
||||
var params = fs_params[current_fs]
|
||||
fs_arr.append([
|
||||
angle,
|
||||
params.freq,
|
||||
params.width,
|
||||
sectors[current_fs - 2]
|
||||
])
|
||||
signaller.emit_signal('interfer_init', interfer_name, fs_arr, Constants.POWER_UM)
|
||||
|
||||
|
||||
func power_control_result() -> void:
|
||||
var power_amplifier: Array = get_tree().get_nodes_in_group('power_amplifier')
|
||||
_control_results["power_ukp"] = true
|
||||
for amp in power_amplifier:
|
||||
if amp.state != STATE_VAL.GOOD:
|
||||
@@ -255,85 +379,51 @@ func _process_ukp_power(status: PackedByteArray) -> void:
|
||||
break
|
||||
|
||||
|
||||
func _on_control_fs(mode: bool) -> void:
|
||||
var parts = currecnt_unit.split('-')
|
||||
var last_part = parts[-1]
|
||||
var angle: float = 0.0 # -> ПРД-Н1; 90.0 -> ПРД-Н2; 180.0 -> ПРД-Н3; 270.0 -> ПРД-Н4
|
||||
var sector_1: float = 4 # -> ПРД-Н1; 7 -> ПРД-Н2; 6 -> ПРД-Н3; 5 -> ПРД-Н4;
|
||||
var sector_2: float = 8 # -> ПРД-Н1; 11 -> ПРД-Н2; 10 -> ПРД-Н3; 9 -> ПРД-Н4;
|
||||
if last_part == '2н':
|
||||
angle = 90.0
|
||||
sector_1 = 7
|
||||
sector_2 = 11
|
||||
elif last_part == '3н':
|
||||
angle = 180.0
|
||||
sector_1 = 6
|
||||
sector_2 = 10
|
||||
elif last_part == '4н':
|
||||
angle = 270.0
|
||||
sector_1 = 5
|
||||
sector_2 = 9
|
||||
|
||||
var interfer_name: String = 'k1' if mode else 'off'
|
||||
var freq_1: float = 860.0 # ФС_1
|
||||
var freq_2: float = 1137.0 # ФС_2
|
||||
var width_1: float = 110.0 # ФС_1
|
||||
var width_2: float = 110.0 # ФС_2
|
||||
|
||||
var fs_arr: Array = [[angle, freq_1, width_1, sector_1], [angle, freq_2, width_2, sector_2]]
|
||||
signaller.emit_signal('interfer_init', interfer_name, fs_arr, Constants.POWER_UM)
|
||||
|
||||
|
||||
func on_stop_control() -> void:
|
||||
print_debug('Отсановка контроля ПРД')
|
||||
_on_control_fs(false)
|
||||
on_control_result()
|
||||
state = STATE_MASHINE.FS_TURN_OFF
|
||||
|
||||
|
||||
func on_fs_update_state(packet_type_7: Dictionary) -> void:
|
||||
var parts = currecnt_unit.split('-')
|
||||
var last_part = parts[-1] # Прибор
|
||||
|
||||
# Словарь для маппинга: ключ - номер FS, значение - целевая нода и условие прибора
|
||||
var fs_mapping = {
|
||||
4: { "node": $kasseta_FS_ND/ref_A1, "condition": last_part == '1н' },
|
||||
5: { "node": $kasseta_FS_ND/ref_A1, "condition": last_part == '4н' },
|
||||
6: { "node": $kasseta_FS_ND/ref_A1, "condition": last_part == '3н' },
|
||||
7: { "node": $kasseta_FS_ND/ref_A1, "condition": last_part == '2н' },
|
||||
8: { "node": $kasseta_FS_ND/ref_A2, "condition": last_part == '1н' },
|
||||
9: { "node": $kasseta_FS_ND/ref_A2, "condition": last_part == '4н' },
|
||||
10: { "node": $kasseta_FS_ND/ref_A2, "condition": last_part == '3н' },
|
||||
11: { "node": $kasseta_FS_ND/ref_A2, "condition": last_part == '2н' }
|
||||
4: { "node": $kasseta_FS_ND/ref_A1, "condition": pribor == '1н' },
|
||||
5: { "node": $kasseta_FS_ND/ref_A1, "condition": pribor == '4н' },
|
||||
6: { "node": $kasseta_FS_ND/ref_A1, "condition": pribor == '3н' },
|
||||
7: { "node": $kasseta_FS_ND/ref_A1, "condition": pribor == '2н' },
|
||||
8: { "node": $kasseta_FS_ND/ref_A2, "condition": pribor == '1н' },
|
||||
9: { "node": $kasseta_FS_ND/ref_A2, "condition": pribor == '4н' },
|
||||
10: { "node": $kasseta_FS_ND/ref_A2, "condition": pribor == '3н' },
|
||||
11: { "node": $kasseta_FS_ND/ref_A2, "condition": pribor == '2н' }
|
||||
}
|
||||
for fs in packet_type_7:
|
||||
if fs in fs_mapping and fs_mapping[fs]["condition"]:
|
||||
var data = packet_type_7[fs]
|
||||
var state = STATE_VAL.GOOD if data.isg == 1 else STATE_VAL.ERROR if data.isg == 0 else STATE_VAL.NONE
|
||||
fs_mapping[fs]["node"].state = state
|
||||
if fs < 8:
|
||||
_control_results["fs_1"] = (data.isg == 1)
|
||||
else:
|
||||
if fs < 8 and current_fs == 2:
|
||||
_control_results["fs_2"] = (data.isg == 1)
|
||||
if _control_results['fs_1'] and _control_results["fs_2"] and not flag_timer_started:
|
||||
on_ug_setting()
|
||||
control_timer.wait_time = Constants.TIMER_DELAY
|
||||
control_timer.start()
|
||||
flag_timer_started = true
|
||||
var state_fs = STATE_VAL.GOOD if data.isg == 1 else STATE_VAL.ERROR if data.isg == 0 else STATE_VAL.NONE
|
||||
fs_mapping[fs]["node"].state = state_fs
|
||||
elif fs > 7 and current_fs == 3:
|
||||
_control_results["fs_3"] = (data.isg == 1)
|
||||
var state_fs = STATE_VAL.GOOD if data.isg == 1 else STATE_VAL.ERROR if data.isg == 0 else STATE_VAL.NONE
|
||||
fs_mapping[fs]["node"].state = state_fs
|
||||
|
||||
|
||||
func on_ug_setting() -> void:
|
||||
var unit_name = get_meta('unit_name')[0]
|
||||
var unit_prd = network.get_unit_instance(unit_name)
|
||||
var unit_key = settings.get_unit_key(get_meta('unit_name')[0])
|
||||
var unit_prd = network.units[unit_key]
|
||||
|
||||
if unit_prd.isa_ports.has(Constants.ADDR_UG_LITERA_1):
|
||||
ug_work_1 = unit_prd.isa_ports[Constants.ADDR_UG_LITERA_1]
|
||||
ug_work_2 = unit_prd.isa_ports[Constants.ADDR_UG_LITERA_1]
|
||||
if unit_prd.isa_ports.has(Constants.ADDR_UG_LITERA_2):
|
||||
ug_work_2 = unit_prd.isa_ports[Constants.ADDR_UG_LITERA_2]
|
||||
|
||||
const dou = 0x3
|
||||
const att = 0x7
|
||||
var result = ((att & 0x07) << 3) | (dou & 0x07)
|
||||
ug_work_3 = unit_prd.isa_ports[Constants.ADDR_UG_LITERA_2]
|
||||
|
||||
var result_1 = ((Constants.ATT_UM_2 & 0x07) << 3) | (Constants.RAY_DOU & 0x07)
|
||||
var result_2 = ((Constants.ATT_UM_3 & 0x07) << 3) | (Constants.RAY_DOU & 0x07)
|
||||
var prd_module = prd.prd_dict[unit_prd.name]
|
||||
prd_module.cmd_array.append([unit_prd.CmdCode.WRITE_ISA, [Constants.ADDR_UG_LITERA_1, result, Constants.ADDR_UG_LITERA_2, result, 0x120, 6666]])
|
||||
prd_module.cmd_array.append([unit_prd.CmdCode.WRITE_ISA, [Constants.ADDR_UG_LITERA_1, result_1,
|
||||
Constants.ADDR_UG_LITERA_2, result_2]])
|
||||
|
||||
prd_module.cmd_array.append([unit_prd.CmdCode.READ_ISA, [Constants.ADDR_UG_LITERA_1, Constants.ADDR_UG_LITERA_2]])
|
||||
|
||||
|
||||
func on_mode_changed(in_tree: bool) -> void:
|
||||
@@ -342,24 +432,25 @@ func on_mode_changed(in_tree: bool) -> void:
|
||||
|
||||
|
||||
func on_control_result() -> void:
|
||||
# Словарь соответствия ключей ошибок и нод
|
||||
var error_nodes := {
|
||||
'fs_2': $kasseta_FS_ND/ref_A2,
|
||||
'fs_3': $kasseta_FS_ND/ref_A1,
|
||||
}
|
||||
# Проверка результатов и установка состояний
|
||||
var result: bool = true
|
||||
|
||||
for key in _control_results:
|
||||
if not _control_results[key]:
|
||||
if key == 'fs_1':
|
||||
$kasseta_FS_ND/ref_A1.state = STATE_VAL.ERROR
|
||||
if key == 'fs_2':
|
||||
$kasseta_FS_ND/ref_A2.state = STATE_VAL.ERROR
|
||||
result = false
|
||||
print_debug('%s false' % key)
|
||||
if error_nodes.has(key):
|
||||
error_nodes[key].state = STATE_VAL.ERROR
|
||||
|
||||
var parts = currecnt_unit.split('-')
|
||||
var last_part = parts[-1] # Прибор
|
||||
# Установка текста и цвета результата
|
||||
var status_text := 'неисправен'
|
||||
var status_color := Color.CRIMSON
|
||||
if result:
|
||||
$control_result.text = 'Прибор ПРД-%s исправен' % last_part
|
||||
$control_result.add_theme_color_override("font_color", Color.AQUAMARINE)
|
||||
else:
|
||||
$control_result.text = 'Прибор ПРД-%s неисправен' % last_part
|
||||
$control_result.add_theme_color_override("font_color", Color.CRIMSON)
|
||||
await get_tree().create_timer(Constants.TIMER_DELAY).timeout
|
||||
flag_timer_started = false
|
||||
status_text = 'исправен'
|
||||
status_color = Color.AQUAMARINE
|
||||
|
||||
$control_result.text = 'Прибор ПРД-%s %s' % [pribor, status_text]
|
||||
$control_result.add_theme_color_override("font_color", status_color)
|
||||
|
||||
@@ -61,7 +61,7 @@ offset_bottom = 949.0
|
||||
fname = "MAA2000"
|
||||
rname = "A22"
|
||||
|
||||
[node name="dou2_A5" parent="." groups=["default_reset"] instance=ExtResource("2_is25t")]
|
||||
[node name="dou3_A5" parent="." groups=["default_reset"] instance=ExtResource("2_is25t")]
|
||||
layout_mode = 2
|
||||
offset_left = 485.0
|
||||
offset_top = 812.0
|
||||
@@ -70,7 +70,7 @@ offset_bottom = 877.0
|
||||
fname = "ДОУ-2"
|
||||
rname = "A5"
|
||||
|
||||
[node name="dou3_A6" parent="." groups=["default_reset"] instance=ExtResource("2_is25t")]
|
||||
[node name="dou2_A6" parent="." groups=["default_reset"] instance=ExtResource("2_is25t")]
|
||||
layout_mode = 2
|
||||
offset_left = 8.0
|
||||
offset_top = 812.0
|
||||
@@ -143,10 +143,10 @@ offset_left = 55.0
|
||||
offset_top = 32.0
|
||||
offset_right = 105.0
|
||||
offset_bottom = 182.0
|
||||
fname = "Блок ФС-3"
|
||||
fname = "Блок ФС-2"
|
||||
rname = "A3"
|
||||
|
||||
[node name="ref_A1" parent="kasseta_FS_ND" instance=ExtResource("7_eoqf2")]
|
||||
[node name="ref_A1" parent="kasseta_FS_ND" groups=["default_reset"] instance=ExtResource("7_eoqf2")]
|
||||
offset_left = 105.0
|
||||
offset_top = 32.0
|
||||
offset_right = 155.0
|
||||
@@ -155,7 +155,7 @@ fname = "Модуль ФС"
|
||||
rname = "A1"
|
||||
state = 2
|
||||
|
||||
[node name="ref_A2" parent="kasseta_FS_ND" instance=ExtResource("7_eoqf2")]
|
||||
[node name="ref_A2" parent="kasseta_FS_ND" groups=["default_reset"] instance=ExtResource("7_eoqf2")]
|
||||
offset_left = 155.0
|
||||
offset_top = 32.0
|
||||
offset_right = 205.0
|
||||
@@ -169,7 +169,7 @@ offset_left = 205.0
|
||||
offset_top = 32.0
|
||||
offset_right = 255.0
|
||||
offset_bottom = 182.0
|
||||
fname = "Блок ФС-2"
|
||||
fname = "Блок ФС-3"
|
||||
rname = "A4"
|
||||
|
||||
[node name="kasseta_P_1" type="NinePatchRect" parent="."]
|
||||
|
||||
Reference in New Issue
Block a user