From 86669fc94c13256c05bfd66fb9064524316b4f2d Mon Sep 17 00:00:00 2001 From: Miguel Date: Fri, 23 May 2025 23:18:32 +0200 Subject: [PATCH] Add method to create ADAM message directly from mA value and update simulator tab to use it --- protocol_handler.py | 12 ++++++++++++ tabs/simulator_tab.py | 19 +++++++++++++++---- 2 files changed, 27 insertions(+), 4 deletions(-) diff --git a/protocol_handler.py b/protocol_handler.py index 8f2b847..79f250f 100644 --- a/protocol_handler.py +++ b/protocol_handler.py @@ -54,6 +54,18 @@ class ProtocolHandler: full_message_str = f"{message_part}{checksum}\r" return full_message_str.encode('ascii'), ma_val + + @staticmethod + def create_adam_message_from_ma(adam_address, ma_value): + """ + Crea un mensaje completo ADAM (como bytes) directamente desde un valor mA. + Permite enviar valores mA fuera del rango 4-20mA si es necesario. + """ + ma_str = ProtocolHandler.format_ma_value(ma_value) # Formato XX.XXX + message_part = f"#{adam_address}{ma_str}" + checksum = ProtocolHandler.calculate_checksum(message_part) + full_message_str = f"{message_part}{checksum}\r" + return full_message_str.encode('ascii'), ma_value @staticmethod def ma_to_voltage(ma_value): diff --git a/tabs/simulator_tab.py b/tabs/simulator_tab.py index 5a52b3d..a3b6922 100644 --- a/tabs/simulator_tab.py +++ b/tabs/simulator_tab.py @@ -315,15 +315,26 @@ class SimulatorTab: final_ma = ProtocolHandler.voltage_to_ma(final_voltage) final_brix = ProtocolHandler.ma_to_brix(final_ma, min_brix_map, max_brix_map) - message, calculated_ma_from_brix = ProtocolHandler.create_adam_message(adam_address, final_brix, min_brix_map, max_brix_map) + # Usar el nuevo método que toma ma_value directamente para el modo manual + message, returned_ma = ProtocolHandler.create_adam_message_from_ma(adam_address, final_ma) # Actualizar display - self.current_brix_var.set(Utils.format_brix_display(final_brix)) - self.current_ma_var.set(Utils.format_ma_display(final_ma)) + brix_display_text = "" + # Si la entrada fue mA o Voltaje y el resultado es un mA < 4 (estado de error) + if (input_type == "mA" or input_type == "Voltaje") and final_ma < 4.0: + brix_display_text = "Error (Sub 4mA)" + else: + # Para entrada Brix, o mA/Voltaje que resultan en mA >= 4.0 + brix_display_text = Utils.format_brix_display(final_brix) + + self.current_brix_var.set(brix_display_text) + self.current_ma_var.set(Utils.format_ma_display(returned_ma)) # Usar returned_ma que es igual a final_ma self.current_voltage_var.set(ProtocolHandler.format_voltage_display(final_voltage)) # Agregar al gráfico - self.add_data_point(final_brix, final_ma) + # final_brix aquí es el valor numérico calculado (ej. min_brix_map si mA < 4), + # lo cual es consistente para el gráfico. + self.add_data_point(final_brix, returned_ma) # Enviar por conexión temporal current_config_values = {