Files
PRD_TU_MP550/scripts/control_panel.gd

299 lines
11 KiB
GDScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

extends Panel
var timer: Timer = Timer.new()
var node_cell_ind: Array
var count_cell: int
var past_pribor: int
var logger: Node
class Logger extends Node:
var log_counter: int = 0
var log_level = "INFO"
var log_array
func _init(log_node):
log_array = log_node
log_array.clear()
func get_current_datetime_string() -> String:
var time = Time.get_datetime_dict_from_system()
return ' [%02d-%02d-%04d %02d:%02d] ' % [time['day'], time['month'], time['year'], time['hour'], time['minute']]
func info(message):
if log_level == "INFO" or log_level == "DEBUG":
var datetime_string = get_current_datetime_string()
log_array.insert_line_at(log_counter, "[INFO]" + datetime_string + message)
log_counter += 1
func warning(message):
if log_level == "WARNING" or log_level == "INFO" or log_level == "DEBUG":
var datetime_string = get_current_datetime_string()
log_array.insert_line_at(log_counter, "[WARNING]" + datetime_string + message)
log_counter += 1
func error(message):
var datetime_string = get_current_datetime_string()
log_array.insert_line_at(log_counter, "[ERROR]" + datetime_string + message)
log_counter += 1
func _ready() -> void:
Network.connect('port_fs_opened_1', _on_fs_status_1.bind(Constants.STATE_VAL.GOOD))
Network.connect('port_fs_closed_1', _on_fs_status_1.bind(Constants.STATE_VAL.NONE))
Network.connect('port_fs_opened_2', _on_fs_status_2.bind(Constants.STATE_VAL.GOOD))
Network.connect('port_fs_closed_2', _on_fs_status_2.bind(Constants.STATE_VAL.NONE))
self.add_child(timer)
timer.connect('timeout', Callable(self, '_on_timer'))
node_cell_ind = [
$soc_y5/yau_07b,
$soc_y5/ems_g,
$soc_y5/ug,
$soc_y5/ukp_2,
$soc_y5/ukp_1,
$soc_P1/MAA_1,
$soc_P1/MAA_2,
$soc_P1/IP9_50_2,
$soc_P1/IP9_50_1,
$soc_P1/IP12_50,
$soc_P2/IP9_50,
$soc_P2/IP12_50,
$soc_y5/IP5_25,
$Kasseta_FS/ref_A3,
$Kasseta_FS/ref_A1,
$Kasseta_FS/ref_A2,
$Kasseta_FS/ref_A4,
$Kasseta_FS/Block_FS_PRD_K,
$Kasseta_FS/FS_PRD_K]
count_cell = len(node_cell_ind)
_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)
var dkm: int = status.decode_u8(Constants.DataIndices.DKM)
$DKM.text = str(dkm)
# 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'))
#dkm
if Constants.CURRENT_MODE == Constants.MODE.PRD_H:
$soc_DKM/DKM_2.state = (dkm >> 1) & 0x1
$soc_DKM/DKM_3.state = (dkm >> 2) & 0x1
$Kasseta_FS/ref_A3.state = $soc_DKM/DKM_2.state
$Kasseta_FS/ref_A4.state = $soc_DKM/DKM_3.state
elif Constants.CURRENT_MODE == Constants.MODE.PRD_B:
$soc_DKM/DKM_2.state = (dkm >> 3) & 0x1
$soc_DKM/DKM_3.state = (dkm >> 4) & 0x1
$Kasseta_FS/ref_A3.state = $soc_DKM/DKM_2.state
$Kasseta_FS/ref_A4.state = $soc_DKM/DKM_3.state
elif Constants.CURRENT_MODE == Constants.MODE.PRD_K:
$soc_DKM/DKM_1.state = (dkm >> 0) & 0x1
$soc_DKM/DKM_2.state = (dkm >> 5) & 0x1
$soc_DKM/DKM_3.state = (dkm >> 6) & 0x1
$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
#dry_contact
if (node_cell_ind[2].state == Constants.STATE_VAL.GOOD):
for i in range(5, 13):
if ((dry_contact >> (i-5)) & 0x1) == 0:
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'))
else:
for i in range(5, 13):
node_cell_ind[i].state = Constants.STATE_VAL.NONE
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-5):
$lbl_control.text = 'Прибор исправен'
$lbl_control.modulate = Color.AQUAMARINE
else:
$lbl_control.text = 'Прибор неисправен'
$lbl_control.modulate = Color.CRIMSON
func _draw_control_panel_prd(pribor):
if pribor == Constants.MODE.PRD_H:
# Кассета У5
$soc_y5/IP5_25.rname = 'А24'
$soc_y5/yau_07b.rname = 'А30'
$soc_y5/ems_g.rname = 'А26'
$soc_y5/ug.rname = 'А27'
$soc_y5/ukp_1.rname = 'А28'
$soc_y5/ukp_2.rname = 'А29'
# Кассета ФС
$Kasseta_FS/Kasseta.text = 'Кассета ФС-НД'
$Kasseta_FS/Block_FS_PRD_K.visible = false
$Kasseta_FS/FS_PRD_K.visible = false
$Kasseta_FS/ref_A1.rname = 'А1'
$Kasseta_FS/ref_A1.fname = 'Модуль ФС'
$Kasseta_FS/ref_A3.rname = 'А3'
$Kasseta_FS/ref_A3.fname = 'БЛОК ФС-2'
$Kasseta_FS/ref_A2.rname = 'А2'
$Kasseta_FS/ref_A2.fname = 'Модуль ФС'
$Kasseta_FS/ref_A4.rname = 'А4'
$Kasseta_FS/ref_A4.fname = 'БЛОК ФС-3'
# Кассета П-1
$soc_P1/IP12_50.rname = 'А21'
$soc_P1/IP9_50_1.rname = 'А20'
$soc_P1/IP9_50_2.rname = 'А19'
$soc_P1/MAA_1.rname = 'А22'
$soc_P1/MAA_2.rname = 'А23'
# Кассета П-2
$soc_P2.visible = false
# ДКМ
$soc_DKM/DKM_1.visible = false
$soc_DKM/DKM_2.fname = 'ДКМ2'
$soc_DKM/DKM_3.fname = 'ДКМ3'
elif pribor == Constants.MODE.PRD_B:
# Кассета У5
$soc_y5/IP5_25.rname = 'А24'
$soc_y5/yau_07b.rname = 'А30'
$soc_y5/ems_g.rname = 'А26'
$soc_y5/ug.rname = 'А27'
$soc_y5/ukp_1.rname = 'А28'
$soc_y5/ukp_2.rname = 'А29'
# Кассета ФС
$Kasseta_FS/Kasseta.text = 'Кассета ФС-ВД'
$Kasseta_FS/Block_FS_PRD_K.visible = false
$Kasseta_FS/FS_PRD_K.visible = false
$Kasseta_FS/ref_A1.rname = 'А1'
$Kasseta_FS/ref_A1.fname = 'Модуль ФС'
$Kasseta_FS/ref_A3.rname = 'А3'
$Kasseta_FS/ref_A3.fname = 'БЛОК ФС-4'
$Kasseta_FS/ref_A2.rname = 'А2'
$Kasseta_FS/ref_A2.fname = 'Модуль ФС'
$Kasseta_FS/ref_A4.rname = 'А4'
$Kasseta_FS/ref_A4.fname = 'БЛОК ФС-5'
# Кассета П-1
$soc_P1/IP12_50.rname = 'А21'
$soc_P1/IP9_50_1.rname = 'А20'
$soc_P1/IP9_50_2.rname = 'А19'
$soc_P1/MAA_1.rname = 'А22'
$soc_P1/MAA_2.rname = 'А23'
# Кассета П-2
$soc_P2.visible = false
# ДКМ
$soc_DKM/DKM_1.visible = false
$soc_DKM/DKM_2.fname = 'ДКМ4'
$soc_DKM/DKM_2.fname = 'ДКМ5'
elif pribor == Constants.MODE.PRD_K:
# Кассета У5
$soc_y5/IP5_25.rname = 'А31'
$soc_y5/yau_07b.rname = 'А37'
$soc_y5/ems_g.rname = 'А33'
$soc_y5/ug.rname = 'А34'
$soc_y5/ukp_1.rname = 'А35'
$soc_y5/ukp_2.rname = 'А36'
# Кассета ФС
$Kasseta_FS/Kasseta.text = 'Кассета ФС-КД'
$Kasseta_FS/Block_FS_PRD_K.visible = true
$Kasseta_FS/FS_PRD_K.visible = true
$Kasseta_FS/ref_A1.rname = 'А3'
$Kasseta_FS/ref_A1.fname = 'Модуль ФС'
$Kasseta_FS/ref_A3.rname = 'А6'
$Kasseta_FS/ref_A3.fname = 'БЛОК ФС-6'
$Kasseta_FS/ref_A2.rname = 'А2'
$Kasseta_FS/ref_A2.fname = 'Модуль ФС'
$Kasseta_FS/ref_A4.rname = 'А5'
$Kasseta_FS/ref_A4.fname = 'БЛОК ФС-7'
# Кассета П-1
$soc_P1/IP12_50.rname = 'А23'
$soc_P1/IP12_50.fname = 'ИП9-50'
$soc_P1/IP9_50_1.rname = 'А24'
$soc_P1/IP9_50_1.fname = 'ИП9-50'
$soc_P1/IP9_50_2.rname = 'А26'
$soc_P1/IP9_50_2.fname = 'ИП12-50'
$soc_P1/MAA_1.rname = 'А27'
$soc_P1/MAA_2.rname = 'А28'
# Кассета П-2
$soc_P2.visible = true
# ДКМ
$soc_DKM/DKM_1.visible = true
$soc_DKM/DKM_2.fname = 'ДКМ6'
$soc_DKM/DKM_2.fname = 'ДКМ7'
func _on_fs_status_1(_name_port, status_fs_1):
$Kasseta_FS/ref_A1.state = status_fs_1
func _on_fs_status_2(_name_port, status_fs_2):
$Kasseta_FS/ref_A2.state = status_fs_2
func _on_start_super_control():
logger = Logger.new(get_node('log_array'))
timer.start(5)
if (past_pribor != Constants.CURRENT_MODE):
_draw_control_panel_prd(Constants.CURRENT_MODE)
if (Network.unit.online):
$soc_y5/yau_07b.state = Constants.STATE_VAL.GOOD
logger.info("Яу-07б: Есть связь ✅")
_status_cell(Network.unit.status)
else:
for i in range(1, count_cell):
node_cell_ind[i].state = Constants.STATE_VAL.NONE
$soc_y5/yau_07b.state = Constants.STATE_VAL.ERROR
logger.error("Яу-07б: Нет связи ❌")
_status_prd()
past_pribor = Constants.CURRENT_MODE
func _on_timer():
if (Network.unit.online):
logger = Logger.new(get_node('log_array'))
logger.info("Яу-07б: Есть связь ✅")
$soc_y5/yau_07b.state = Constants.STATE_VAL.GOOD
_status_cell(Network.unit.status)
else:
for i in range(1, count_cell):
node_cell_ind[i].state = Constants.STATE_VAL.NONE
$soc_y5/yau_07b.state = Constants.STATE_VAL.ERROR
logger.error("Яу-07б: Нет связи ❌")