почти готов контроль

This commit is contained in:
2025-02-25 00:52:39 +03:00
parent 1d001f9a0a
commit 74f266ce77
3 changed files with 234 additions and 119 deletions

View File

@@ -678,9 +678,10 @@ func _on_modul_fs_1(modulation_select_1) -> void:
func _on_get_status_1(toggled_btn):
var inverted_state = not toggled_btn
Network.set_fs_gen_status(inverted_state)
#Network.get_gen_state_1()
if $Background/side_panel/select_prd.button_pressed:
var inverted_state = not toggled_btn
Network.set_fs_gen_status(inverted_state)
Network.get_gen_state_1()
func _on_set_ferq_1(freq: String):
@@ -724,9 +725,10 @@ func _on_start_fs_2():
func _on_get_status_2(toggled_btn):
var inverted_state = not toggled_btn
Network.set_fs_gen_status_2(inverted_state)
#Network.get_gen_state_2()
if $Background/side_panel/select_prd.button_pressed:
var inverted_state = not toggled_btn
Network.set_fs_gen_status_2(inverted_state)
Network.get_gen_state_2()
func _on_set_ferq_2(freq: String):

View File

@@ -1,6 +1,7 @@
extends Panel
signal signal_on_start_timer_03()
signal signal_on_modul_um()
var timer: Timer = Timer.new()
var timer_03: Timer = Timer.new()
@@ -8,11 +9,17 @@ var node_cell_ind: Array
var count_cell: int
var past_pribor: int
var logger: Node
var array_pow: Array = []
var array_pow_1: Array = []
var array_pow_2: Array = []
var count_packet:int = 0
var flag_control_on: bool = false
var flag_control_add: bool = false
var flag_fs_1_ready: bool = false
var flag_fs_2_ready: bool = false
var flag_dkm: bool = false
var flag_ug: bool = false
var flag_modul_on_1: bool = false
var flag_modul_on_2: bool = false
var flag_start: bool = false
class Logger extends Node:
@@ -56,15 +63,13 @@ func _ready() -> void:
Network.connect('data_from_fs_2', _on_data_fs.bind('ФС-2'))
self.add_child(timer)
timer.connect('timeout', Callable(self, '_on_timer'))
Network.connect('yau_receive', Callable(self, '_on_yau_received'))
self.get_parent().get_child(2).connect('signal_FS_is_ready', Callable(self, '_on_fs_status'))
# Добавляем таймер как дочерний узел
self.add_child(timer_03)
# Подключаем сигнал timeout к функции _on_timer_03
timer.connect('timeout', Callable(self, '_on_timer'))
self.get_parent().get_child(2).connect('signal_FS_is_ready', Callable(self, '_on_fs_status'))
timer_03.connect('timeout', Callable(self, '_on_timer_03'))
self.connect('signal_on_start_timer_03', Callable(self, '_on_start_timer_03'))
Network.connect('yau_receive', Callable(self, '_on_yau_received'))
self.connect('signal_on_modul_um', Callable(self, '_on_modul_um'))
node_cell_ind = [
$soc_y5/yau_07b,
@@ -99,75 +104,11 @@ func _ready() -> void:
_draw_control_panel_prd(Constants.CURRENT_MODE)
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)
# status_board
for i in range(1, 5):
if ((status_board >> (i-1)) & 0x1) == 1:
node_cell_ind[i].state = Constants.STATE_VAL.GOOD
logger.info("%s : Есть связь ✅" % node_cell_ind[i].get('fname'))
else:
node_cell_ind[i].state = Constants.STATE_VAL.ERROR
logger.error("%s : Нет связи ❌" % node_cell_ind[i].get('fname'))
#dry_contact
if (node_cell_ind[2].state == Constants.STATE_VAL.GOOD):
for i_node in range(5, 13):
var skip = false
if i_node == 10 or i_node == 11:
skip = Constants.CURRENT_MODE != Constants.MODE.PRD_K
if not skip:
if ((dry_contact >> (i_node-5)) & 0x1) == 0:
node_cell_ind[i_node].state = Constants.STATE_VAL.GOOD
logger.info("%s : Есть связь ✅" % node_cell_ind[i_node].get('fname'))
else:
node_cell_ind[i_node].state = Constants.STATE_VAL.ERROR
logger.error("%s : Нет связи ❌" % node_cell_ind[i_node].get('fname'))
else:
for i_node_unknow in range(5, 13):
node_cell_ind[i_node_unknow].state = Constants.STATE_VAL.NONE
func _on_yau_received(status_yau):
if flag_control_on:
var arr_power_ukp_1: Array = []
for i in range(6): ## Мощность от УКП_1
var power_ukp_1 = status_yau.decode_u16(Constants.DataIndices.POWER_UKP_1 + 2 * i)
arr_power_ukp_1.append(power_ukp_1)
if count_packet == 0:
array_pow = arr_power_ukp_1
else:
for i in range(6):
if arr_power_ukp_1[i] > array_pow[i]:
array_pow[i] = arr_power_ukp_1[i]
count_packet +=1
#print(Network.unit.isa_ports)
func _status_prd():
var status: int = 0
for i in range(10):
status += 1 if (node_cell_ind[i].state == Constants.STATE_VAL.GOOD) else 0
for i in range(12, count_cell-2):
status += 1 if (node_cell_ind[i].state == Constants.STATE_VAL.GOOD) else 0
if (Constants.CURRENT_MODE == Constants.MODE.PRD_K):
status += 1 if (node_cell_ind[10].state == Constants.STATE_VAL.GOOD) else 0
status += 1 if (node_cell_ind[11].state == Constants.STATE_VAL.GOOD) else 0
status += 1 if (node_cell_ind[12].state == Constants.STATE_VAL.GOOD) else 0
status += 1 if (node_cell_ind[17].state == Constants.STATE_VAL.GOOD) else 0
status += 1 if (node_cell_ind[18].state == Constants.STATE_VAL.GOOD) else 0
if (status == count_cell-3):
$lbl_control.text = 'Прибор исправен'
$lbl_control.modulate = Color.AQUAMARINE
else:
$lbl_control.text = 'Прибор неисправен'
$lbl_control.modulate = Color.CRIMSON
func _process(_delta: float) -> void:
if flag_dkm and flag_ug:
emit_signal('signal_on_modul_um')
if flag_modul_on_1 and flag_modul_on_2 and flag_start:
emit_signal('signal_on_start_timer_03')
func _draw_control_panel_prd(pribor):
@@ -292,7 +233,7 @@ func _on_fs_status_2(_name_port, status_fs_2):
func fs_1_setup(freq):
await get_tree().create_timer(0.4).timeout
Network.set_fs_gen_status(true) ## отключен на false
Network.set_fs_gen_status(true) ## отключен на true
await get_tree().create_timer(0.4).timeout
Network.get_gen_state_1()
Network.status_can_macro_1(false)
@@ -301,14 +242,14 @@ func fs_1_setup(freq):
Network.set_can_macro(freq)
Network.status_can_macro_1(true)
await get_tree().create_timer(0.4).timeout
Network.set_fs_gen_status(false)
Network.set_fs_gen_status(false) ## отключен на true
await get_tree().create_timer(0.4).timeout
Network.get_gen_state_1()
func fs_2_setup(freq):
await get_tree().create_timer(1.8).timeout
Network.set_fs_gen_status_2(true)
Network.set_fs_gen_status_2(true) ## отключен = true
await get_tree().create_timer(0.8).timeout
Network.get_gen_state_2()
Network.status_can_macro_2(false)
@@ -317,7 +258,7 @@ func fs_2_setup(freq):
Network.set_can_macro_2(freq)
Network.status_can_macro_2(true)
await get_tree().create_timer(0.8).timeout
Network.set_fs_gen_status_2(false) ## отключен = false
Network.set_fs_gen_status_2(false) ## отключен = true
await get_tree().create_timer(0.8).timeout
Network.get_gen_state_2()
@@ -326,9 +267,9 @@ func yau_07b_setup():
Network.write_port_isa(Constants.BASE_PORTS.UG+6, 56)
Network.write_port_isa(Constants.BASE_PORTS.UG+8, 56)
Network.write_port_isa(Constants.BASE_PORTS.EMS_G+2, Constants.META.MODUL_UM_2)
Network.write_port_isa(Constants.BASE_PORTS.EMS_G+8, 2<<13)
Network.write_port_isa(Constants.BASE_PORTS.EMS_G+8, 2<<13) ## Отключить модуляцию (литера 2)
Network.write_port_isa(Constants.BASE_PORTS.EMS_G+2, Constants.META.MODUL_UM_3)
Network.write_port_isa(Constants.BASE_PORTS.EMS_G+8, 2<<13)
Network.write_port_isa(Constants.BASE_PORTS.EMS_G+8, 2<<13) ## Отключить модуляцию (литера 3)
func _on_data_fs(fs_data:PackedByteArray, fs_name: String):
@@ -357,10 +298,69 @@ func _on_data_fs(fs_data:PackedByteArray, fs_name: String):
logger.info('В модуль %s установлена частота CAN: %s МГц ✅' % [fs_name, (fs_data.decode_u16(0x20))])
func _on_yau_received(status_yau):
if flag_control_add:
# Сбор урожая с УКП-1
var arr_power_ukp_1: Array = []
for i in range(6): ## Мощность от УКП_1
var power_ukp_1 = status_yau.decode_u16(Constants.DataIndices.POWER_UKP_1 + 2 * i)
arr_power_ukp_1.append(power_ukp_1)
if count_packet == 0:
array_pow_1 = arr_power_ukp_1
else:
for i in range(6):
if arr_power_ukp_1[i] > array_pow_1[i]:
array_pow_1[i] = arr_power_ukp_1[i]
# Сбор урожая с УКП-2
var arr_power_ukp_2: Array = []
for i in range(6): ## Мощность от УКП_2
var power_ukp_2 = status_yau.decode_u16(Constants.DataIndices.POWER_UKP_2 + 2 * i)
arr_power_ukp_2.append(power_ukp_2)
if count_packet == 0:
array_pow_2 = arr_power_ukp_2
else:
for i in range(6):
if arr_power_ukp_2[i] > array_pow_2[i]:
array_pow_2[i] = arr_power_ukp_2[i]
count_packet += 1
if logger:
## Флаг для проверки настройки угла и аттенюации на двух литерах
if Network.unit.isa_ports.has(Constants.BASE_PORTS.UG+6) and Network.unit.isa_ports.has(Constants.BASE_PORTS.UG+8):
if Network.unit.isa_ports[Constants.BASE_PORTS.UG+6] == 56 and Network.unit.isa_ports[Constants.BASE_PORTS.UG+8] == 56:
flag_ug = true
else:
flag_ug = false
## Флаг для проверки модуяции на высоком
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:
if Network.unit.isa_ports[Constants.BASE_PORTS.EMS_G+8] == 0x8000:
flag_modul_on_1 = true
print('Модуляция 1 включена!')
#logger.info('Модуляция УМ (2, 4, 6) включена!')
elif Network.unit.isa_ports[Constants.BASE_PORTS.EMS_G+8] == 0x4000:
flag_modul_on_1 = false
print('Модуляция 1 отключена!')
#logger.info('Модуляция УМ (2, 4, 6) отключена!')
if Network.unit.isa_ports[Constants.BASE_PORTS.EMS_G+2] == Constants.META.MODUL_UM_3:
if Network.unit.isa_ports[Constants.BASE_PORTS.EMS_G+8] == 0x8000:
flag_modul_on_2 = true
print('Модуляция 2 включена!')
#logger.info('Модуляция УМ (3, 5, 7) включена!')
elif Network.unit.isa_ports[Constants.BASE_PORTS.EMS_G+8] == 0x4000:
flag_modul_on_2 = false
print('Модуляция 2 отключена!')
#logger.info('Модуляция УМ (3, 5, 7) включена!!')
func _on_start_super_control():
$log_array/await.visible = true
logger = Logger.new(get_node('log_array'))
for i in count_cell:
node_cell_ind[i].state = Constants.STATE_VAL.NONE
flag_dkm = false
flag_ug = false
#timer.start(5)
if (past_pribor != Constants.CURRENT_MODE):
@@ -368,7 +368,6 @@ func _on_start_super_control():
if (Network.unit.online):
$soc_y5/yau_07b.state = Constants.STATE_VAL.GOOD
logger.info("ЯУ-07Б: Есть связь ✅")
yau_07b_setup()
_status_cell(Network.unit.status)
else:
for i in range(1, count_cell):
@@ -376,6 +375,7 @@ func _on_start_super_control():
$soc_y5/yau_07b.state = Constants.STATE_VAL.ERROR
logger.error("ЯУ-07Б: Нет связи ❌")
$log_array/await.visible = false
if Network.unit_fs.online:
var fs_freq: Array = [0, 0, 0]
@@ -392,6 +392,38 @@ func _on_start_super_control():
logger.info('Настройка модулей ФС ❌')
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)
# status_board
for i in range(1, 5):
if ((status_board >> (i-1)) & 0x1) == 1:
node_cell_ind[i].state = Constants.STATE_VAL.GOOD
logger.info("%s : Есть связь ✅" % node_cell_ind[i].get('fname'))
else:
node_cell_ind[i].state = Constants.STATE_VAL.ERROR
logger.error("%s : Нет связи ❌" % node_cell_ind[i].get('fname'))
#dry_contact
if (node_cell_ind[2].state == Constants.STATE_VAL.GOOD):
for i_node in range(5, 13):
var skip = false
if i_node == 10 or i_node == 11:
skip = Constants.CURRENT_MODE != Constants.MODE.PRD_K
if not skip:
if ((dry_contact >> (i_node-5)) & 0x1) == 0:
node_cell_ind[i_node].state = Constants.STATE_VAL.GOOD
logger.info("%s : Есть связь ✅" % node_cell_ind[i_node].get('fname'))
else:
node_cell_ind[i_node].state = Constants.STATE_VAL.ERROR
logger.error("%s : Нет связи ❌" % node_cell_ind[i_node].get('fname'))
else:
for i_node_unknow in range(5, 13):
node_cell_ind[i_node_unknow].state = Constants.STATE_VAL.NONE
func _on_timer():
if (Network.unit.online):
logger = Logger.new(get_node('log_array'))
@@ -399,42 +431,20 @@ func _on_timer():
$soc_y5/yau_07b.state = Constants.STATE_VAL.GOOD
_status_cell(Network.unit.status)
else:
for i in range(1, count_cell):
for i in range(1, count_cell-9):
node_cell_ind[i].state = Constants.STATE_VAL.NONE
$soc_y5/yau_07b.state = Constants.STATE_VAL.ERROR
logger.error("ЯУ-07Б: Нет связи ❌")
if (Network.unit_fs.online):
logger.info('Настройка модулей ФС Гц')
logger.info('Настройка модулей ФС Гц:')
fs_1_setup(Constants.FS_FREQ.f2) # Гц
fs_2_setup(Constants.FS_FREQ.f3) # Гц
else:
logger.error('Настройка модулей ФС ❌')
func _on_start_timer_03():
timer_03.wait_time = 0.3
timer_03.one_shot = true
array_pow = []
flag_control_on = true
count_packet = 0
logger.info('Включение Модуляции УМ на высокое')
#Network.write_port_isa(Constants.BASE_PORTS.EMS_G+2, Constants.META.MODUL_UM_2)
#Network.write_port_isa(Constants.BASE_PORTS.EMS_G+8, 1<<13)
timer_03.start()
func _on_timer_03():
#Network.write_port_isa(Constants.BASE_PORTS.EMS_G+2, Constants.META.MODUL_UM_2)
#Network.write_port_isa(Constants.BASE_PORTS.EMS_G+8, 0<<13)
logger.info('Отключение Модуляции УМ')
flag_control_on = false
logger.info('Количество принятых пакетов от ЯУ-07Б: %s пакета' % count_packet)
logger.info('Максимальные значения по мощности от УКП-1: %s ' % str(array_pow))
_status_prd()
func _on_fs_status(META:int):
if logger:
if META == Constants.META.CI_2_OT_FS or META == Constants.META.CI_4_OT_FS:
@@ -459,6 +469,10 @@ func _on_fs_status(META:int):
logger.info('%s: %s' % [$Kasseta_FS/ref_A4.fname, 'Включено'])
else:
logger.info('%s: %s' % [$Kasseta_FS/ref_A4.fname, 'Нет связи'])
if (dkm >> 1) & 0x1 == 1 and (dkm >> 2) & 0x1 == 1: # Следующий шаг ->
flag_dkm = true
yau_07b_setup()
elif Constants.CURRENT_MODE == Constants.MODE.PRD_B:
$soc_DKM/DKM_2.state = (dkm >> 3) & 0x1
$soc_DKM/DKM_3.state = (dkm >> 4) & 0x1
@@ -472,6 +486,9 @@ func _on_fs_status(META:int):
logger.info('%s: %s' % [$Kasseta_FS/ref_A4.fname, 'Включено'])
else:
logger.info('%s: %s' % [$Kasseta_FS/ref_A4.fname, 'Нет связи'])
if (dkm >> 3) & 0x1 == 1 and (dkm >> 4) & 0x1 == 1: # Следующий шаг ->
flag_dkm = true
yau_07b_setup()
elif Constants.CURRENT_MODE == Constants.MODE.PRD_K:
$soc_DKM/DKM_1.state = (dkm >> 0) & 0x1
$soc_DKM/DKM_2.state = (dkm >> 5) & 0x1
@@ -479,5 +496,72 @@ func _on_fs_status(META:int):
$Kasseta_FS/Block_FS_PRD_K.state = $soc_DKM/DKM_1.state
$Kasseta_FS/ref_A3.state = $soc_DKM/DKM_2.state
$Kasseta_FS/ref_A4.state = $soc_DKM/DKM_3.state
emit_signal('signal_on_start_timer_03')
func _on_modul_um():
Network.write_port_isa(Constants.BASE_PORTS.EMS_G+2, Constants.META.MODUL_UM_2)
Network.write_port_isa(Constants.BASE_PORTS.EMS_G+8, 0x8000)
Network.write_port_isa(Constants.BASE_PORTS.EMS_G+2, Constants.META.MODUL_UM_3)
Network.write_port_isa(Constants.BASE_PORTS.EMS_G+8, 0x8000)
flag_ug = false
flag_dkm = false
flag_start = true
func _on_start_timer_03():
flag_start = false
timer_03.wait_time = 0.3
timer_03.one_shot = true
array_pow_1 = []
array_pow_2 = []
count_packet = 0
flag_control_add = true
timer_03.start()
func _on_timer_03():
Network.write_port_isa(Constants.BASE_PORTS.EMS_G+2, Constants.META.MODUL_UM_2)
Network.write_port_isa(Constants.BASE_PORTS.EMS_G+8, 0x4000)
Network.write_port_isa(Constants.BASE_PORTS.EMS_G+2, Constants.META.MODUL_UM_3)
Network.write_port_isa(Constants.BASE_PORTS.EMS_G+8, 0x4000)
flag_control_add = false
await get_tree().create_timer(1.0).timeout
logger.info('Количество принятых пакетов от ЯУ-07Б: %s пакета' % count_packet)
logger.info('Максимальные значения по мощности от УКП-1: %s ' % str(array_pow_1))
logger.info('Максимальные значения по мощности от УКП-1: %s ' % str(array_pow_2))
_status_prd()
$log_array/await.visible = false
Network.write_port_isa(Constants.BASE_PORTS.EMS_G+2, Constants.META.CZI_1)
func _status_prd():
var status: int = 0
for i in range(10):
status += 1 if (node_cell_ind[i].state == Constants.STATE_VAL.GOOD) else 0
for i in range(12, count_cell-2):
status += 1 if (node_cell_ind[i].state == Constants.STATE_VAL.GOOD) else 0
if (Constants.CURRENT_MODE == Constants.MODE.PRD_K):
status += 1 if (node_cell_ind[10].state == Constants.STATE_VAL.GOOD) else 0
status += 1 if (node_cell_ind[11].state == Constants.STATE_VAL.GOOD) else 0
status += 1 if (node_cell_ind[12].state == Constants.STATE_VAL.GOOD) else 0
status += 1 if (node_cell_ind[17].state == Constants.STATE_VAL.GOOD) else 0
status += 1 if (node_cell_ind[18].state == Constants.STATE_VAL.GOOD) else 0
var pribor_ispraven: bool = false
var min_dopusk: int = 40
if (status == count_cell-7):
pribor_ispraven = true
for i_pow in array_pow_1:
if i_pow < min_dopusk:
pribor_ispraven = false
for i_pow in array_pow_2:
if i_pow < min_dopusk:
pribor_ispraven = false
if pribor_ispraven:
$lbl_control.text = 'Прибор исправен'
$lbl_control.modulate = Color.AQUAMARINE
else:
$lbl_control.text = 'Прибор неисправен'
$lbl_control.modulate = Color.CRIMSON