From 916b82f69371b424230d2e7edadbfc87933ff229 Mon Sep 17 00:00:00 2001 From: Maxim Date: Mon, 7 Jul 2025 16:29:18 +0300 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D1=80=D0=B0=D0=B1=D0=BE=D1=82?= =?UTF-8?q?=D0=BA=D0=B0=20=D1=83=D0=BF=D1=80=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD?= =?UTF-8?q?=D0=B8=D0=BC=20=D0=B0=D1=82=D1=82=D0=B5=D0=BD=D1=8E=D0=B0=D1=82?= =?UTF-8?q?=D0=BE=D1=80=D0=B0=D0=BC=D0=B8=20=D1=83=20=D1=83=D0=B3=D0=BB?= =?UTF-8?q?=D0=B0=D0=BC=D0=B8=20=D0=B4=D0=BE=D1=83=20=D0=B2=20=D0=BA=D0=BE?= =?UTF-8?q?=D0=BD=D1=82=D1=80=D0=BE=D0=BB=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scenes/pribor-prd-v/pribor_prd_v.gd | 41 +++++++++++++++++++++++++++-- scenes/pribor-uyep/sch3-view.gd | 1 - scripts/prd.gd | 11 +++++--- 3 files changed, 47 insertions(+), 6 deletions(-) diff --git a/scenes/pribor-prd-v/pribor_prd_v.gd b/scenes/pribor-prd-v/pribor_prd_v.gd index 76a70d2b..fbc39a50 100644 --- a/scenes/pribor-prd-v/pribor_prd_v.gd +++ b/scenes/pribor-prd-v/pribor_prd_v.gd @@ -11,12 +11,16 @@ const POWER_UKP_1: int = 31 const POWER_UKP_2: int = 63 const bit_dkm_3: int = 3 const bit_dkm_4: int = 4 +const ADDR_UG_LITERA_1: int = 0x106 +const ADDR_UG_LITERA_2: int = 0x108 var count_packet_1:int = 0 var power_array_1: Array = [] var count_packet_2:int = 0 var power_array_2: Array = [] var currecnt_unit: String +var ug_work_1: int +var ug_work_2: int enum STATE_VAL { NONE = 0, @@ -43,6 +47,18 @@ func _ready() -> void: control_timer.start() +func _enter_tree() -> void: + signaller.connect('режим_работа', Callable(self, 'on_mode_changed').bind(false)) + on_ug_setting() + + +func _exit_tree() -> void: + 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, [ADDR_UG_LITERA_1, ug_work_1, ADDR_UG_LITERA_2, ug_work_2]]) + + func set_default_state() -> void: $kasseta_P_1/ref_A19.state = STATE_VAL.NONE $kasseta_P_1/ref_A20.state = STATE_VAL.NONE @@ -231,10 +247,9 @@ func _on_control_fs(mode: bool) -> void: func on_stop_control() -> void: _on_control_fs(false) - print('stop timer') -func on_fs_update_state(packet_type_7: Dictionary): +func on_fs_update_state(packet_type_7: Dictionary) -> void: var parts = currecnt_unit.split('-') var last_part = parts[-1] # Прибор for fs in packet_type_7: @@ -255,3 +270,25 @@ func on_fs_update_state(packet_type_7: Dictionary): $kasseta_FS_VD/ref_A4.state = STATE_VAL.GOOD if packet_type_7[fs].isg == 1 else STATE_VAL.ERROR if packet_type_7[fs].isg == 0 else STATE_VAL.NONE if fs == 19 and last_part == '2в': $kasseta_FS_VD/ref_A4.state = STATE_VAL.GOOD if packet_type_7[fs].isg == 1 else STATE_VAL.ERROR if packet_type_7[fs].isg == 0 else STATE_VAL.NONE + + +func on_ug_setting() -> void: + 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(ADDR_UG_LITERA_1): + ug_work_1 = unit_prd.isa_ports[ADDR_UG_LITERA_1] + if unit_prd.isa_ports.has(ADDR_UG_LITERA_2): + ug_work_2 = unit_prd.isa_ports[ADDR_UG_LITERA_2] + + const dou = 0x3 + const att = 0x7 + var result = ((att & 0x07) << 3) | (dou & 0x07) + + var prd_module = prd.prd_dict[unit_prd.name] + prd_module.cmd_array.append([unit_prd.CmdCode.WRITE_ISA, [ADDR_UG_LITERA_1, result, ADDR_UG_LITERA_2, result]]) + + +func on_mode_changed(in_tree: bool) -> void: + if not in_tree: + queue_free() diff --git a/scenes/pribor-uyep/sch3-view.gd b/scenes/pribor-uyep/sch3-view.gd index 59891f3e..f0ee87f4 100644 --- a/scenes/pribor-uyep/sch3-view.gd +++ b/scenes/pribor-uyep/sch3-view.gd @@ -84,7 +84,6 @@ func _enter_tree() -> void: func _ready() -> void: var unit_key = settings.get_unit_key(unit_name) - var a = network.units var unit_sch3 = network.units[unit_key] var items = get_tree().get_nodes_in_group('bits_items_switch') for item in items: diff --git a/scripts/prd.gd b/scripts/prd.gd index 8d4e3261..afffcdf3 100644 --- a/scripts/prd.gd +++ b/scripts/prd.gd @@ -194,7 +194,6 @@ class PRD: fs.um_code_rx = u.isa_ports[port] & 0x7 - func on_line_changed(unit_ems): if not unit_ems.online: yemsg_board.ems_load = yemsg_board.LoadState.NOT_DEFINED @@ -203,8 +202,6 @@ class PRD: func on_data_received(_u): set_prd_status() - if state != PrdState.WORK: - return if yemsg_board.state_board != yemsg_board.WAIT or yemsg_board.state_cmd != yemsg_board.WAIT: return if yemsg_board.online: @@ -280,6 +277,8 @@ func _ready() -> void: var unit_caps_key = settings.get_unit_key('уарэп-капсрпб') var unit_caps = network.units[unit_caps_key] unit_caps.connect('data_received', Callable(self, 'on_data_capsrpb_received')) + signaller.connect('режим_контроль', Callable(self, 'on_mode_changed').bind(PrdState.CONTROL)) + signaller.connect('режим_работа', Callable(self, 'on_mode_changed').bind(PrdState.WORK)) func get_fs_param(index: int) -> Array: @@ -369,3 +368,9 @@ func on_data_capsrpb_received(unit0: capsrpb.CapsRpb): if fs.has('width'): fs_module.width_caps_rx = int(fs['width']) signaller.emit_signal('fs_update_state', fs_dict) + + +## Вызывается при переходе в режим работа/контроль +func on_mode_changed(changed_mode: int) -> void: + for pdr in prd.prd_dict.values(): + pdr.state = changed_mode