diff --git a/src/components/modbus_component.py b/src/components/modbus_component.py index 41f1b0e..ffdd0d6 100644 --- a/src/components/modbus_component.py +++ b/src/components/modbus_component.py @@ -69,11 +69,11 @@ class ModbusComponent(Component): self.lock.unlock() except FileNotFoundError as e: error_message = f"Serial port error: {self.port} not found. Check your configuration." - self.log.error(error_message, exc_info=True) + #self.log.error(error_message, exc_info=True) self.modbus_error_signal.emit(error_message) except Exception as e: error_message = f"Configuration error: {str(e)}" - self.log.error(error_message, exc_info=True) + #self.log.error(error_message, exc_info=True) self.modbus_error_signal.emit(error_message) def _read(self, register, count=1, **kwargs): @@ -82,16 +82,18 @@ class ModbusComponent(Component): try: read = self.client.read_holding_registers(register, count=count, **kwargs) if read.isError(): + error_message = f"Modbus read failed: Could not read Modbus register {register}" + self.modbus_error_signal.emit(error_message) raise ValueError(f"Modbus read error at register {register}") return read except pymodbus.exceptions.ConnectionException: error_message = f"Modbus read failed: Connection error at port {self.port}" - self.log.error(error_message, exc_info=True) + #self.log.error(error_message, exc_info=True) self.modbus_error_signal.emit(error_message) return None # Return None to signal failure except Exception as e: error_message = f"Error reading Modbus register {register}: {str(e)}" - self.log.error(error_message, exc_info=True) + #self.log.error(error_message, exc_info=True) self.modbus_error_signal.emit(error_message) return None finally: @@ -109,11 +111,11 @@ class ModbusComponent(Component): return wrote except pymodbus.exceptions.ConnectionException as ce: error_message = f"Modbus write failed: Connection error at port {self.port}" - self.log.error(error_message, exc_info=True) + #self.log.error(error_message, exc_info=True) self.modbus_error_signal.emit(error_message) except Exception as e: error_message = f"Error writing Modbus register {register} with value {value}: {str(e)}" - self.log.error(error_message, exc_info=True) + #self.log.error(error_message, exc_info=True) self.modbus_error_signal.emit(error_message) finally: self.lock.unlock() @@ -122,7 +124,7 @@ class ModbusComponent(Component): """Decode data safely.""" if read is None: error_message = "Error decoding Modbus data: No data to decode (read returned None)" - self.log.error(error_message) + #self.log.error(error_message) self.modbus_error_signal.emit(error_message) return None try: @@ -134,11 +136,11 @@ class ModbusComponent(Component): return int(abs(data)) if "uint" in data_type else int(data) except AttributeError: error_message = "Modbus read returned invalid data (NoneType encountered)" - self.log.error(error_message) + #self.log.error(error_message) self.modbus_error_signal.emit(error_message) except Exception as e: error_message = f"Error decoding Modbus data: {str(e)}" - self.log.error(error_message, exc_info=True) + #self.log.error(error_message, exc_info=True) self.modbus_error_signal.emit(error_message) return None @@ -157,7 +159,7 @@ class ModbusComponent(Component): return builder.build() except Exception as e: error_message = f"Error encoding Modbus data: {str(e)}" - self.log.error(error_message, exc_info=True) + #self.log.error(error_message, exc_info=True) self.modbus_error_signal.emit(error_message) return None @@ -179,7 +181,7 @@ class ModbusComponent(Component): ) except Exception as e: error_message = f"Error inside Modbus read: {str(e)}" - self.log.error(error_message, exc_info=True) + #self.log.error(error_message, exc_info=True) self.modbus_error_signal.emit(error_message) return None @@ -191,7 +193,7 @@ class ModbusComponent(Component): self._write(register, encoded_data, **kwargs) except Exception as e: error_message = f"Error inside Modbus write: {str(e)}" - self.log.error(error_message, exc_info=True) + #self.log.error(error_message, exc_info=True) self.modbus_error_signal.emit(error_message) def __del__(self, event=None): @@ -201,6 +203,6 @@ class ModbusComponent(Component): self.client.close() except Exception as e: error_message = f"Error during Modbus cleanup: {str(e)}" - self.log.error(error_message, exc_info=True) + #self.log.error(error_message, exc_info=True) finally: self.lock.unlock() \ No newline at end of file diff --git a/src/components/tecna_marposs_provaset_t3.py b/src/components/tecna_marposs_provaset_t3.py index f711a3d..7639b64 100644 --- a/src/components/tecna_marposs_provaset_t3.py +++ b/src/components/tecna_marposs_provaset_t3.py @@ -478,9 +478,9 @@ class TecnaMarpossProvasetT3(ModbusComponent): appropriate error signals for Tecna Marposs. """ if error_message: - # Emit the Tecna-specific error signal with True and traceback + # Emit the Tecna-specific error signal with True and the error message self.tecna_error_signal.emit(True, error_message) - #print(f"{error_message}-Tecna Marposs") + self.log.error(f"Modbus error encountered: {error_message}") return True, error_message else: # Emit no error (False) diff --git a/src/ui/test_leak/test_leak.py b/src/ui/test_leak/test_leak.py index cde34c8..89083ca 100644 --- a/src/ui/test_leak/test_leak.py +++ b/src/ui/test_leak/test_leak.py @@ -4,7 +4,7 @@ import weakref from PyQt5.QtGui import QPixmap from PyQt5.QtWidgets import QMessageBox, QDialog, QApplication -from PyQt5.QtCore import Qt +from PyQt5.QtCore import Qt, pyqtSlot from ui import Dialog from ui.test_instructions_reminder import Test_Instructions_Reminder from ui.test_test import Test_Test @@ -26,6 +26,8 @@ class Test_Leak(Test_Test): self.show_instruction_b.setVisible("show_instructions" in self.parent.config["hardware_config"].keys()) self.show_instruction_b.clicked.connect(self.show_instruction) + self.components[self.tester_component].tecna_error_signal.connect(self.handle_modbus_error) + def show_instruction(self): dialog=Dialog() dialog.setCentralWidget(Test_Instructions_Reminder(recipe=self.parent.recipe,bench_name=self.parent.config.machine_id)) @@ -312,3 +314,16 @@ class Test_Leak(Test_Test): def save_last(self): if self.last is None: return + + @pyqtSlot(bool, str) + def handle_modbus_error(self, error, error_message): + """ + Handle errors received from the Modbus component and stop the test gracefully. + """ + if error: + self.display_text( + text=f"ERRORE TECNA TEST INTERROTTO.", + bg_color="red", text_color="white" + ) + self.parent.fail_cycle() + self.stop_test()