From 8b28ca7714999a72efbacf3f1fa6a02224d4a08a Mon Sep 17 00:00:00 2001 From: MaD_CaT Date: Thu, 27 Nov 2025 13:28:34 +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=D0=98=D0=B7=D0=BC=D0=B5=D0=BD=D0=B5=D0=BD?= =?UTF-8?q?=D0=B8=D1=8F=20=D0=9C=D0=B0=D0=BA=D1=81=D0=B8=D0=BC=D0=B0=20?= =?UTF-8?q?=D1=81=20=D0=BF=D1=83=D0=BB=D1=8C=D1=82=D0=B0=2027.11.2025?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scenes/frame-ecm-list/scroll-ecm-list.gd | 8 ++------ scenes/pribor-prd-n/pribor-prd-n.gd | 2 +- scenes/контроль/контроль.tscn | 1 - scripts/prd.gd | 20 ++++++++++---------- scripts/pribor-prd.gd | 8 ++++---- scripts/spt25.gd | 20 ++++++++++++++++++++ 6 files changed, 37 insertions(+), 22 deletions(-) diff --git a/scenes/frame-ecm-list/scroll-ecm-list.gd b/scenes/frame-ecm-list/scroll-ecm-list.gd index 5dba8124..8ad0a9fd 100644 --- a/scenes/frame-ecm-list/scroll-ecm-list.gd +++ b/scenes/frame-ecm-list/scroll-ecm-list.gd @@ -119,13 +119,9 @@ func on_interfer_new(ecm, table_index): $table.set_row_editable(i_row, false) $table.set_node_user_data(0, i_row, ecm) table_index[ecm.ispp] = i_row - $table.cleanup_invalid_selectors() # Будем надеяться, что отложенные вызовы производятся в том же порядке - var selected_rows = [] - $table.get_selected_rows(selected_rows) - for old_row in selected_rows: - $table.set_row_selected(old_row, false) - $table.set_row_selected(i_row, true) + $table.call_deferred('clear_rows_selected') + $table.call_deferred('set_row_selected', i_row, true) if not interfer.auto_enabled: signaller.emit_signal('interfer_selected', ecm) diff --git a/scenes/pribor-prd-n/pribor-prd-n.gd b/scenes/pribor-prd-n/pribor-prd-n.gd index a8617c1e..21f6bc6a 100644 --- a/scenes/pribor-prd-n/pribor-prd-n.gd +++ b/scenes/pribor-prd-n/pribor-prd-n.gd @@ -166,7 +166,7 @@ static func on_control_result(for_result_dic: Dictionary) -> void: f.state = result_dic[fs_meta] if not all_y5_good: return - if result_dic.fs_2 == 1 and block_kasseta_y5_prd_config_n['yau07']: + if result_dic.fs_2 == 1 and block_kasseta_y5_prd_config_n['yau07']: for_result_dic.module_fs_2.state = STATE_VAL.GOOD if result_dic.dkm_2 else STATE_VAL.ERROR for_result_dic.dou_2.state = STATE_VAL.GOOD if result_dic.dou_2 else STATE_VAL.ERROR diff --git a/scenes/контроль/контроль.tscn b/scenes/контроль/контроль.tscn index 792ac797..f917b9b3 100644 --- a/scenes/контроль/контроль.tscn +++ b/scenes/контроль/контроль.tscn @@ -1027,7 +1027,6 @@ patch_margin_right = 16 patch_margin_bottom = 16 [node name="connect_pribor" type="AnimatedSprite2D" parent="pribor_prd_n_2"] -visible = false light_mask = 3 position = Vector2(37, -10) scale = Vector2(0.625, 0.625) diff --git a/scripts/prd.gd b/scripts/prd.gd index 2612f33e..cd46de4f 100644 --- a/scripts/prd.gd +++ b/scripts/prd.gd @@ -231,22 +231,22 @@ class PRD: execute_cmd() return execute_cmd() - + ## Мониторинг состояния юнита прд func set_prd_status() -> void: # Обновление статуса платы ЯУ-07 yemsg_board.set_status(unit_yau07.status) - + # Проверка онлайн-статусов основных модулей ug_online = (unit_yau07.status[0] >> 1) & 1 var ukp_1_online = (unit_yau07.status[0] >> 2) & 1 var ukp_2_online = (unit_yau07.status[0] >> 3) & 1 var ems_g_online = (unit_yau07.status[0] & 1) & 1 - + # Установка флага состояния УГ if not ug_online: set_ug_state = true - + # Проверка источников питания var ip_online: bool = _check_dry_contact(unit_yau07.status, prd_name) var check_temperature_um: bool = unit_control.flags.temperature_ok @@ -264,7 +264,7 @@ class PRD: serviceability = _set_serviceability_from_control_results(unit_control) else: serviceability = _set_serviceability_from_online_status(check_dic) - + ## Проверка онлайн-статуса сухих контактов static func _check_dry_contact(unit_yau07_status: PackedByteArray, self_name: String) -> bool: var bit_ip_config: Array = [0, 1, 2, 3, 4, 5, 6, 7] @@ -276,7 +276,7 @@ class PRD: if status: return false return true - + ## Установка состояния обслуживания на основе результатов контроля static func _set_serviceability_from_control_results(unit_ctrl: Object) -> int: var control_results = unit_ctrl.get_control_results() @@ -293,7 +293,7 @@ class PRD: all_ok = false break return STATE_DEVICE.GOOD if all_ok else STATE_DEVICE.ERROR - + ## Установка состояния обслуживания на основе онлайн-статусов static func _set_serviceability_from_online_status(check_dic: Dictionary) -> int: var all_online: bool = true @@ -302,8 +302,8 @@ class PRD: all_online = false break return STATE_DEVICE.NONE if all_online else STATE_DEVICE.ERROR - - + + func execute_cmd(): if not len(cmd_array): return if unit_yau07.cmd_state != unit_yau07.CmdState.DONE: return @@ -362,7 +362,7 @@ func _ready() -> void: if prd_dict.has(fs.prd_name): prd_dict[fs.prd_name].fs_dic[key] = fs fs.connect('update_modulation', prd_dict[fs.prd_name].on_update_modulation.bind(fs.index)) - + for key in FS_PRD.keys(): fs_caps_id[FS_PRD[key][1]] = key var unit_caps = network.get_unit_instance('уарэп-капсрпб') diff --git a/scripts/pribor-prd.gd b/scripts/pribor-prd.gd index 111cbd50..fd1bf3a1 100644 --- a/scripts/pribor-prd.gd +++ b/scripts/pribor-prd.gd @@ -291,7 +291,7 @@ func on_data_received(unit_pribor: Object) -> void: block_kasseta_y5_config = check_block_kasseta_y5(status, block_kasseta_y5_config, flags.no_trust_yau07) _set_control_result('block_kasseta', on_y5_control_result(block_kasseta_y5_config)) _set_control_result('temperature', flags.temperature_ok) - _set_control_result('block_ip', on_dry_control_result(block_ip_config)) + _set_control_result('block_ip', on_dry_control_result(block_ip_config)) if not flags.in_control: return if machine_timer.is_stopped(): return if flags.no_trust_yau07: return @@ -410,7 +410,7 @@ func _handle_fs_turn_on_state() -> void: state = STATE_MACHINE.FS_WORK -static func take_ecm_id(ecm_dic: Dictionary, device_name: String, current_lit: int) -> int: +static func take_ecm_id(ecm_dic: Dictionary, device_name: String, current_lit: int) -> int: # Получаем целевой nmfs из таблицы var target_nmfs: int = LITER_TO_NMFS.get(device_name, {}).get(current_lit, -1) if target_nmfs == -1: @@ -560,7 +560,7 @@ func _handle_ray_write_mode(ray_num: int) -> void: if not flags.write_isa: _handle_ug_set_state(ray_num) flags.write_isa = true - + # Ожидание COUNT_PACK_POWER_RECIEVE пакетов от ЯУ-07 if count_packets_power < COUNT_PACK_POWER_RECIEVE: return state = STATE_MACHINE.READ_ISA @@ -1074,7 +1074,7 @@ static func check_temperature_um(status_prd: PackedByteArray) -> Dictionary: else: for i_temp in 8: return_dic_temp[arr_um[i_temp]] = -999 # Заполняем нулями если УКП нет на связи - + if ukp2_online: for i_temp in 8: var temperature_ukp_2: int = status_prd.decode_u16(Constants.TEMPERATURE_UKP_2 + 2 * i_temp) diff --git a/scripts/spt25.gd b/scripts/spt25.gd index 9bc9f601..1adc1f34 100644 --- a/scripts/spt25.gd +++ b/scripts/spt25.gd @@ -34,6 +34,10 @@ class SPT25 extends unit.Unit: if not online: online = true emit_signal('line_changed', self) + + #rx_data.reverse() + var reverse_rx_data = process_packet_reverse(rx_data) + emit_signal('data_received', rx_data) @@ -47,3 +51,19 @@ class SPT25 extends unit.Unit: online = false emit_signal('line_changed', self) return rc + + + ## Производит переворот битов в байте в пакете по байтово + static func process_packet_reverse(packet:PackedByteArray)->PackedByteArray: + var result=PackedByteArray() + for i in packet.size(): + result.append(reverse_bit(packet[i])) + return result + + + ## Производит переворот битов в байте + static func reverse_bit(b: int) -> int: + b=((b&0xF0)>>4) | ((b&0x0F)<<4) + b=((b&0xCC)>>2) | ((b&0x33)<<2) + b=((b&0xAA)>>1) | ((b&0x55)<<1) + return b