Отладка контроля, загрузки ЭМС-Г, состояния ЯУ-07

This commit is contained in:
Maxim
2025-05-27 09:57:39 +03:00
parent eba949f5d4
commit eb36856831
10 changed files with 267 additions and 147 deletions

View File

@@ -26,6 +26,7 @@ var save_path = "res://saves/"
const need_port: Array = [0x122, 0x124, 0x126, 0x128, 0x12A]
var current_meta: Array = [Constants.META.MODUL_UM_1, Constants.META.MODUL_UM_2, Constants.META.MODUL_UM_3, Constants.META.MODUL_UM_28]
var modul_um: Array = [0, 0, 0, 0]
var receive_yau_counter: Array = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
func _ready() -> void:
@@ -223,7 +224,7 @@ func _ready() -> void:
Network.connect('yau_receive', Callable(self, '_on_data_received'))
Network.connect('yau_read_isa', Callable(self, '_on_read_isa'))
Network.connect('port_fs_opened', _on_port_changed.bind(Color.AQUAMARINE))
Network.connect('port_fs_closed', _on_port_changed.bind(Color.CRIMSON))
Network.connect('port_fs_closed', _on_port_changed.bind(Color.DARK_GRAY))
Network.connect('data_from_fs_1', _on_data_fs_1)
Network.connect('data_from_fs_2', _on_data_fs_2)
Network.connect('data_from_fs_3', _on_data_fs_3)
@@ -321,16 +322,32 @@ func add_signs_scene():
node_select_yau_07b_2.get_node2(1, 4).add_item(key)
# Список статусов ячеек ЯУ-07б
func _on_yau_status(addr: String):
if addr != '':
for check in Constants.ADDRESSES:
if check[1] == addr:
$TabContainer/PRD/status_yau.modulate = Color.AQUAMARINE
$TabContainer/PRD/status_yau.text = 'ЯУ-07Б: ' + check[0]
else:
$TabContainer/PRD/status_yau.modulate = Color.CRIMSON
$TabContainer/PRD/status_yau.text = 'ЯУ-07Б: нет связи'
var count_packets_await: int = 10
var status_yau_list = $TabContainer/PRD/status_yau_list.get_children()
var status_label = $TabContainer/PRD/status_yau
if addr.is_empty():
# Сброс состояния, если адрес пуст (нет связи)
for label in status_yau_list:
label.text = ''
status_label.modulate = Color.CRIMSON
status_label.text = 'ЯУ-07Б: нет связи'
modul_um = [0, 0, 0, 0]
return
status_label.text = '' # Убираем статус, если есть сигнал от ЯУ-07Б
# Обновляем счетчики
for i in Constants.ADDRESSES.size():
var address_match = (Constants.ADDRESSES[i][1] == addr)
receive_yau_counter[i] = 0 if address_match else (receive_yau_counter[i] + 1) & 0xFFF
# Обновляем статусы элементов
for i in status_yau_list.size():
var label = status_yau_list[i]
var address_info = Constants.ADDRESSES[i]
label.text = address_info[0]
label.modulate = Color.AQUAMARINE if receive_yau_counter[i] < count_packets_await else Color.DARK_GRAY # Если счетчик >= count_packets_await, помечаем серым, иначе — аквамарином
func _on_read_isa(unit_isa_ports: Dictionary) -> void:

View File

@@ -377,11 +377,11 @@ func _on_data_fs(fs_data:PackedByteArray, fs_name: String):
logger.info('✅ Состояние генератора ФС-1: Включен')
elif fs_name == 'ФС-2':
$Kasseta_FS/ref_A2.state = Constants.STATE_VAL.GOOD
logger.info('✅ Состояние генератора ФС-1: Включен')
logger.info('✅ Состояние генератора ФС-2: Включен')
flag_fs_2_ready = true
elif fs_name == 'ФС-3':
$Kasseta_FS/FS_PRD_K.state = Constants.STATE_VAL.GOOD
logger.info('✅ Состояние генератора ФС-1: Включен')
logger.info('✅ Состояние генератора ФС-3: Включен')
flag_fs_3_ready = true
else:
if fs_name == 'ФС-1':
@@ -443,7 +443,7 @@ func _on_yau_feedback_receive(_status_yau):
$soc_y5/ug.state = Constants.STATE_VAL.GOOD
else:
flag_ug = false
$soc_y5/ug.state = Constants.STATE_VAL.ERROR
$soc_y5/ug.state = Constants.STATE_VAL.NONE
## Флаг для проверки модуяции на высоком
if Network.unit.isa_ports.has(Constants.BASE_PORTS.EMS_G+8) and Network.unit.isa_ports.has(Constants.BASE_PORTS.EMS_G+2):
if Network.unit.isa_ports[Constants.BASE_PORTS.EMS_G+2] == Constants.META.MODUL_UM_2:
@@ -492,6 +492,7 @@ func _on_start_super_control():
node.value1 = 0
node.state = Constants.STATE_VAL.NONE
var predel_temp: int = 200
## Temperature for
for i_temperature in range(6): ## Температура от УКП
if len(Network.unit.status) > Constants.DataIndices.TEMPERATURE_UKP_2 + 2 * i_temperature:
@@ -499,13 +500,13 @@ func _on_start_super_control():
var temperature_ukp_2 = Network.unit.status.decode_u16(Constants.DataIndices.TEMPERATURE_UKP_2 + 2 * i_temperature)
var TMP_1 = Constants.CONST_MIN_TEMP + (Constants.MAXIMUM_CODE_ADC - temperature_ukp_1) * Constants.TEMP + 3
var TMP_2 = Constants.CONST_MIN_TEMP + (Constants.MAXIMUM_CODE_ADC - temperature_ukp_2) * Constants.TEMP + 3
if TMP_1 > 70:
if TMP_1 > predel_temp:
um_cell_ind[i_temperature].value0 = TMP_1
um_cell_ind[i_temperature].state = Constants.STATE_VAL.ERROR
logger.warning('❌ Температура УМ %s = %d' % [um_cell_ind[i_temperature].fname, TMP_1])
else:
um_cell_ind[i_temperature].value0 = TMP_1
if TMP_2 > 70:
if TMP_2 > predel_temp:
um_cell_ind[i_temperature+6].value0 = TMP_2
um_cell_ind[i_temperature+6].state = Constants.STATE_VAL.ERROR
logger.warning('❌ Температура %s: %d' % [um_cell_ind[i_temperature+6].fname, TMP_2])
@@ -515,7 +516,7 @@ func _on_start_super_control():
if len(Network.unit.status) > Constants.DataIndices.TEMPERATURE_UKP_2 + 2 * 7:
var temperature_litera_1 = Network.unit.status.decode_u16(Constants.DataIndices.TEMPERATURE_UKP_1 + 2 * 7)
var TEMPERATURE = Constants.CONST_MIN_TEMP + (Constants.MAXIMUM_CODE_ADC - temperature_litera_1) * Constants.TEMP + 3
if TEMPERATURE > 70:
if TEMPERATURE > predel_temp:
um_cell_ind[12].value0 = TEMPERATURE
logger.warning('❌ Температура %s = %d' % [um_cell_ind[12].fname, TEMPERATURE])
else:
@@ -533,6 +534,9 @@ func _on_start_super_control():
logger.error("❌ ЯУ-07Б: Нет связи")
if flag_continue_control:
flag_fs_1_ready = false
flag_fs_2_ready = false
flag_fs_3_ready = false
if Network.unit_fs.online:
var fs_freq: Array
var fs_att_1: float
@@ -571,7 +575,7 @@ func _on_start_super_control():
func _status_cell(status):
var status_board: int = status.decode_u8(Constants.DataIndices.STATUS_BOARD)
var dry_contact: int = status.decode_u8(Constants.DataIndices.DRY_CONTACT)
var err: bool = false
# status_board
for i in range(1, 5):
if ((status_board >> (i-1)) & 0x1) == 1:
@@ -580,8 +584,7 @@ func _status_cell(status):
else:
node_cell_ind[i].state = Constants.STATE_VAL.ERROR
logger.error("%s : Нет связи" % node_cell_ind[i].get('fname'))
_on_contol_err()
return
err = true
#dry_contact
if (node_cell_ind[2].state == Constants.STATE_VAL.GOOD):
@@ -597,13 +600,18 @@ func _status_cell(status):
else:
node_cell_ind[i_node].state = Constants.STATE_VAL.ERROR
logger.error("%s : Нет связи" % node_cell_ind[i_node].get('fname'))
err = true
if node_cell_ind[3].state == Constants.STATE_VAL.GOOD:
if err:
_on_contol_err()
return
if node_cell_ind[2].state == Constants.STATE_VAL.GOOD:
var mask: int = 0x7
prep_set_ug = 0
var index_ray: int = Constants.RAY_DICT.find(' 25°')
if Constants.CURRENT_MODE == Constants.MODE.PRD_B or Constants.CURRENT_MODE == Constants.MODE.PRD_K:
index_ray = Constants.RAY_DICT.find(' 1')
index_ray = Constants.RAY_DICT.find(' 3')
var index_att: int = Constants.ATT_DICT.find(' 10.5 dB')
## Регулировка положением луча 1
prep_set_ug = set_bits(prep_set_ug, index_ray, mask)
@@ -638,112 +646,124 @@ func _on_fs_status(META:int):
if logger and flag_continue_control:
if META == Constants.META.CI_2_OT_FS or META == Constants.META.CI_4_OT_FS or META == Constants.META.CI_6_OT_FS:
logger.info('✅ СИ от ФС-1: Включен')
return
elif META == Constants.META.CI_3_OT_FS or META == Constants.META.CI_5_OT_FS or META == Constants.META.CI_7_OT_FS:
logger.info('✅ СИ от ФС-2: Включен')
elif META == Constants.META.CI_1_OT_FS:
logger.info('✅ СИ от ФС-3: Включен')
if flag_fs_1_ready and flag_fs_2_ready:
if Constants.CURRENT_MODE == Constants.MODE.PRD_K:
if not flag_fs_3_ready:
return
if not flag_fs_1_ready:
return
#dkm
var dkm: int = Network.unit.status.decode_u8(Constants.DataIndices.DKM)
if not flag_fs_2_ready:
return
if Constants.CURRENT_MODE == Constants.MODE.PRD_H:
if (dkm >> 1) & 0x1 == 1:
logger.info('%s: %s' % [$Kasseta_FS/ref_A3.fname, 'Включено'])
$soc_DKM/DKM_2.state = Constants.STATE_VAL.GOOD
$Kasseta_FS/ref_A3.state = $soc_DKM/DKM_2.state
else:
logger.info('%s: %s' % [$Kasseta_FS/ref_A3.fname, 'Нет связи'])
$soc_DKM/DKM_2.state = Constants.STATE_VAL.ERROR
$Kasseta_FS/ref_A3.state = $soc_DKM/DKM_2.state
if (dkm >> 2) & 0x1 == 1:
logger.info('%s: %s' % [$Kasseta_FS/ref_A4.fname, 'Включено'])
$soc_DKM/DKM_3.state = Constants.STATE_VAL.GOOD
$Kasseta_FS/ref_A4.state = $soc_DKM/DKM_3.state
else:
logger.info('%s: %s' % [$Kasseta_FS/ref_A4.fname, 'Нет связи'])
$soc_DKM/DKM_3.state = Constants.STATE_VAL.ERROR
$Kasseta_FS/ref_A4.state = $soc_DKM/DKM_3.state
if Constants.CURRENT_MODE == Constants.MODE.PRD_K:
if not flag_fs_3_ready:
return
if (dkm >> 1) & 0x1 == 1 and (dkm >> 2) & 0x1 == 1: # Следующий шаг ->
flag_dkm = true
else:
Network.set_fs_gen_status(true) ## отключен = true
Network.get_gen_state_1()
Network.set_fs_gen_status_2(true) ## отключен = true
Network.get_gen_state_2()
_on_contol_err()
#dkm
var dkm: int = Network.unit.status.decode_u8(Constants.DataIndices.DKM)
elif Constants.CURRENT_MODE == Constants.MODE.PRD_B:
if (dkm >> 3) & 0x1 == 1:
logger.info('%s: %s' % [$Kasseta_FS/ref_A3.fname, 'Включено'])
$soc_DKM/DKM_2.state = Constants.STATE_VAL.GOOD
$Kasseta_FS/ref_A3.state = $soc_DKM/DKM_2.state
else:
logger.info('%s: %s' % [$Kasseta_FS/ref_A3.fname, 'Нет связи'])
$soc_DKM/DKM_2.state = Constants.STATE_VAL.ERROR
$Kasseta_FS/ref_A3.state = $soc_DKM/DKM_2.state
if (dkm >> 4) & 0x1 == 1:
logger.info('%s: %s' % [$Kasseta_FS/ref_A4.fname, 'Включено'])
$soc_DKM/DKM_3.state = Constants.STATE_VAL.GOOD
$Kasseta_FS/ref_A4.state = $soc_DKM/DKM_3.state
else:
logger.info('%s: %s' % [$Kasseta_FS/ref_A4.fname, 'Нет связи'])
$soc_DKM/DKM_3.state = Constants.STATE_VAL.ERROR
$Kasseta_FS/ref_A4.state = $soc_DKM/DKM_3.state
if Constants.CURRENT_MODE == Constants.MODE.PRD_H:
if (dkm >> 1) & 0x1 == 1:
logger.info('%s: %s' % [$Kasseta_FS/ref_A3.fname, 'Включено'])
$soc_DKM/DKM_2.state = Constants.STATE_VAL.GOOD
$Kasseta_FS/ref_A3.state = $soc_DKM/DKM_2.state
else:
logger.info('%s: %s' % [$Kasseta_FS/ref_A3.fname, 'Нет связи'])
$soc_DKM/DKM_2.state = Constants.STATE_VAL.ERROR
$Kasseta_FS/ref_A3.state = $soc_DKM/DKM_2.state
if (dkm >> 2) & 0x1 == 1:
logger.info('%s: %s' % [$Kasseta_FS/ref_A4.fname, 'Включено'])
$soc_DKM/DKM_3.state = Constants.STATE_VAL.GOOD
$Kasseta_FS/ref_A4.state = $soc_DKM/DKM_3.state
else:
logger.info('%s: %s' % [$Kasseta_FS/ref_A4.fname, 'Нет связи'])
$soc_DKM/DKM_3.state = Constants.STATE_VAL.ERROR
$Kasseta_FS/ref_A4.state = $soc_DKM/DKM_3.state
if (dkm >> 3) & 0x1 == 1 and (dkm >> 4) & 0x1 == 1: # Следующий шаг ->
flag_dkm = true
else:
Network.set_fs_gen_status(true) ## отключен = true
Network.get_gen_state_1()
Network.set_fs_gen_status_2(true) ## отключен = true
Network.get_gen_state_2()
_on_contol_err()
if (dkm >> 1) & 0x1 == 1 and (dkm >> 2) & 0x1 == 1: # Следующий шаг ->
flag_dkm = true
timer.stop()
else:
#flag_dkm = true
#timer.stop()
Network.set_fs_gen_status(true) ## отключен = true
Network.get_gen_state_1()
Network.set_fs_gen_status_2(true) ## отключен = true
Network.get_gen_state_2()
_on_contol_err()
elif Constants.CURRENT_MODE == Constants.MODE.PRD_K:
if (dkm >> 0) & 0x1 == 1:
logger.info('%s: %s ' % [$Kasseta_FS/Block_FS_PRD_K.fname, 'Включено'])
$soc_DKM/DKM_1.state = Constants.STATE_VAL.GOOD
$Kasseta_FS/Block_FS_PRD_K.state = $soc_DKM/DKM_1.state
else:
logger.info('%s: %s ' % [$Kasseta_FS/Block_FS_PRD_K.fname, 'Нет связи'])
$soc_DKM/DKM_1.state = Constants.STATE_VAL.ERROR
$Kasseta_FS/Block_FS_PRD_K.state = $soc_DKM/DKM_1.state
if (dkm >> 5) & 0x1 == 1:
logger.info('%s: %s ' % [$Kasseta_FS/ref_A3.fname, 'Включено'])
$soc_DKM/DKM_2.state = Constants.STATE_VAL.GOOD
$Kasseta_FS/ref_A3.state = $soc_DKM/DKM_2.state
else:
logger.info('%s: %s' % [$Kasseta_FS/ref_A3.fname, 'Нет связи'])
$soc_DKM/DKM_2.state = Constants.STATE_VAL.ERROR
$Kasseta_FS/ref_A3.state = $soc_DKM/DKM_2.state
if (dkm >> 6) & 0x1 == 1:
logger.info('%s: %s' % [$Kasseta_FS/ref_A4.fname, 'Включено'])
$soc_DKM/DKM_3.state = Constants.STATE_VAL.GOOD
$Kasseta_FS/ref_A4.state = $soc_DKM/DKM_3.state
else:
logger.info('%s: %s' % [$Kasseta_FS/ref_A4.fname, 'Нет связи'])
$soc_DKM/DKM_3.state = Constants.STATE_VAL.ERROR
$Kasseta_FS/ref_A4.state = $soc_DKM/DKM_3.state
elif Constants.CURRENT_MODE == Constants.MODE.PRD_B:
if 1 == 1:#if (dkm >> 3) & 0x1 == 1:
logger.info('%s: %s' % [$Kasseta_FS/ref_A3.fname, 'Включено'])
$soc_DKM/DKM_2.state = Constants.STATE_VAL.GOOD
$Kasseta_FS/ref_A3.state = $soc_DKM/DKM_2.state
else:
logger.info('%s: %s' % [$Kasseta_FS/ref_A3.fname, 'Нет связи'])
$soc_DKM/DKM_2.state = Constants.STATE_VAL.ERROR
$Kasseta_FS/ref_A3.state = $soc_DKM/DKM_2.state
if 1 == 1:#(dkm >> 4) & 0x1 == 1:
logger.info('%s: %s' % [$Kasseta_FS/ref_A4.fname, 'Включено'])
$soc_DKM/DKM_3.state = Constants.STATE_VAL.GOOD
$Kasseta_FS/ref_A4.state = $soc_DKM/DKM_3.state
else:
logger.info('%s: %s' % [$Kasseta_FS/ref_A4.fname, 'Нет связи'])
$soc_DKM/DKM_3.state = Constants.STATE_VAL.ERROR
$Kasseta_FS/ref_A4.state = $soc_DKM/DKM_3.state
if (dkm >> 5) & 0x1 and (dkm >> 6) & 0x1 and (dkm >> 0) & 0x1: # Следующий шаг ->
flag_dkm = true
timer.stop()
else:
Network.set_fs_gen_status(true) ## отключен = true
Network.get_gen_state_1()
Network.set_fs_gen_status_2(true) ## отключен = true
Network.get_gen_state_2()
Network.set_fs_gen_status_3(true) ## отключен = true
Network.get_gen_state_3()
_on_contol_err()
logger.info('🛈 ДКМ: %s ' % dkm)
if (dkm >> 3) & 0x1 == 1 and (dkm >> 4) & 0x1 == 1: # Следующий шаг ->
flag_dkm = true
timer.stop()
else:
#flag_dkm = true
#timer.stop()
Network.set_fs_gen_status(true) ## отключен = true
Network.get_gen_state_1()
Network.set_fs_gen_status_2(true) ## отключен = true
Network.get_gen_state_2()
_on_contol_err()
elif Constants.CURRENT_MODE == Constants.MODE.PRD_K:
if (dkm >> 0) & 0x1 == 1:
logger.info('%s: %s ' % [$Kasseta_FS/Block_FS_PRD_K.fname, 'Включено'])
$soc_DKM/DKM_1.state = Constants.STATE_VAL.GOOD
$Kasseta_FS/Block_FS_PRD_K.state = $soc_DKM/DKM_1.state
else:
logger.info('%s: %s ' % [$Kasseta_FS/Block_FS_PRD_K.fname, 'Нет связи'])
$soc_DKM/DKM_1.state = Constants.STATE_VAL.ERROR
$Kasseta_FS/Block_FS_PRD_K.state = $soc_DKM/DKM_1.state
if (dkm >> 5) & 0x1 == 1:
logger.info('%s: %s ' % [$Kasseta_FS/ref_A3.fname, 'Включено'])
$soc_DKM/DKM_2.state = Constants.STATE_VAL.GOOD
$Kasseta_FS/ref_A3.state = $soc_DKM/DKM_2.state
else:
logger.info('%s: %s' % [$Kasseta_FS/ref_A3.fname, 'Нет связи'])
$soc_DKM/DKM_2.state = Constants.STATE_VAL.ERROR
$Kasseta_FS/ref_A3.state = $soc_DKM/DKM_2.state
if (dkm >> 6) & 0x1 == 1:
logger.info('%s: %s' % [$Kasseta_FS/ref_A4.fname, 'Включено'])
$soc_DKM/DKM_3.state = Constants.STATE_VAL.GOOD
$Kasseta_FS/ref_A4.state = $soc_DKM/DKM_3.state
else:
logger.info('%s: %s' % [$Kasseta_FS/ref_A4.fname, 'Нет связи'])
$soc_DKM/DKM_3.state = Constants.STATE_VAL.ERROR
$Kasseta_FS/ref_A4.state = $soc_DKM/DKM_3.state
if (dkm >> 5) & 0x1 and (dkm >> 6) & 0x1 and (dkm >> 0) & 0x1: # Следующий шаг ->
flag_dkm = true
timer.stop()
else:
Network.set_fs_gen_status(true) ## отключен = true
Network.get_gen_state_1()
Network.set_fs_gen_status_2(true) ## отключен = true
Network.get_gen_state_2()
Network.set_fs_gen_status_3(true) ## отключен = true
Network.get_gen_state_3()
_on_contol_err()
logger.info('🛈 ДКМ: %s ' % dkm)
func _on_modul_um():
@@ -847,12 +867,13 @@ func _status_prd():
status += 1 if (node_cell_ind[18].state == Constants.STATE_VAL.GOOD) else 0
var pribor_ispraven: bool = false
var min_dopusk: int = 40
var min_dopusk: int = 10
var status_need = count_cell-7 if Constants.CURRENT_MODE != Constants.MODE.PRD_K else count_cell+1
if (status == status_need):
pribor_ispraven = true
var count_um: int = 0
for i_pow in array_pow_1:
if count_um == 6:
um_cell_ind[count_um+6].value1 = i_pow

View File

@@ -39,6 +39,11 @@ func _on_read_ems_g():
func _on_sync():
for index in 16:
for row in 16:
var chk_btn = node_select1.get_node2(index+2, row+3).get_child(1, false)
chk_btn.set_pressed_no_signal(false)
for index in 32:
var tmp_device_mode = Constants.EMS_G_PORT_DATA_HOLDER[index][0]
if tmp_device_mode > 46:
@@ -50,7 +55,7 @@ func _on_sync():
for row in 16:
if (port0x124 & (1 << row)) != 0:
var chk_btn = node_select1.get_node2(tmp_device_mode-45, row+3).get_child(1, false)
chk_btn.button_pressed =true
chk_btn.set_pressed_no_signal(true)
if key == 0x128:
port0x128 = Constants.EMS_G_PORT_DATA_HOLDER[index][1][key]
var list = node_select1.get_node2(tmp_device_mode-45, 0)