extends Panel var timer = Timer.new() var node_cell_ind: Array var count_cell: int var past_pribor: int 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.ERROR)) 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.ERROR)) self.add_child(timer) timer.connect('timeout', Callable(self, '_on_timer').bind(Network.unit)) timer.start(1) node_cell_ind = [ $soc_y5/ay07, $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] count_cell = len(node_cell_ind) func _on_timer(pribor_prd): if (past_pribor != Constants.CURRENT_MODE): _draw_control_panel_prd(Constants.CURRENT_MODE) if (pribor_prd.online): $soc_y5/ay07.state = Constants.STATE_VAL.GOOD _status_cell(pribor_prd.status) else: $soc_y5/ay07.state = Constants.STATE_VAL.ERROR for i in range(1,count_cell): node_cell_ind[i].state = Constants.STATE_VAL.NONE _status_prd() past_pribor = 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, count_cell-8): if ((status_board >> (i-1)) & 0x1) == 1: node_cell_ind[i].state = Constants.STATE_VAL.GOOD else: node_cell_ind[i].state = Constants.STATE_VAL.ERROR #dkm if Constants.CURRENT_MODE == Constants.MODE.PRD_H: $soc_DKM/DKM_2.state = 1 if (dkm >> 1) & 0x1 else 3 $soc_DKM/DKM_3.state = (dkm >> 2) & 0x1 elif Constants.CURRENT_MODE == Constants.MODE.PRD_B: $soc_DKM/DKM_2.state = (dkm >> 3) & 0x1 $soc_DKM/DKM_3.state = (dkm >> 4) & 0x1 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 #dry_contact if (node_cell_ind[2].state == Constants.STATE_VAL.GOOD): for i in range(5, count_cell): if ((dry_contact >> (i-5)) & 0x1) == 0: node_cell_ind[i].state = Constants.STATE_VAL.GOOD else: node_cell_ind[i].state = Constants.STATE_VAL.ERROR else: for i in range(5, count_cell): node_cell_ind[i].state = Constants.STATE_VAL.NONE func _status_prd(): var status: int = 0 for i in range(count_cell-3): status += 1 if (node_cell_ind[i].state == Constants.STATE_VAL.GOOD) else 0 status += 1 if (node_cell_ind[count_cell-1].state == Constants.STATE_VAL.GOOD) else 0 if (Constants.CURRENT_MODE == Constants.MODE.PRD_K): status += 1 if (node_cell_ind[count_cell-3].state == Constants.STATE_VAL.GOOD) else 0 status += 1 if (node_cell_ind[count_cell-2].state == Constants.STATE_VAL.GOOD) else 0 if (status == count_cell): $lbl_control.text = 'Прибор исправен' $lbl_control.modulate = Color.AQUAMARINE else: $lbl_control.text = 'Прибор неисправен' $lbl_control.modulate = Color.CRIMSON else: if (status == count_cell-2): $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/ay07.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/ay07.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 elif pribor == Constants.MODE.PRD_K: # Кассета У5 $soc_y5/IP5_25.rname = 'А31' $soc_y5/ay07.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 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(): $Power_array.text = 'Hello'