Add method to create ADAM message directly from mA value and update simulator tab to use it

This commit is contained in:
Miguel 2025-05-23 23:18:32 +02:00
parent 0caea3ddc0
commit 86669fc94c
2 changed files with 27 additions and 4 deletions

View File

@ -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):

View File

@ -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 = {