From 8c0da3bd49630576cf8c0cbdf0e35b643e9e1872 Mon Sep 17 00:00:00 2001 From: "julieta.prieto" Date: Mon, 29 Dec 2025 12:16:45 +0100 Subject: [PATCH 1/2] use proper arguments for canopen read raw --- ingenialink/servo.py | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/ingenialink/servo.py b/ingenialink/servo.py index a763c00e..3ff48322 100644 --- a/ingenialink/servo.py +++ b/ingenialink/servo.py @@ -1420,7 +1420,7 @@ def read_complete_access( buffer_size: Size of the buffer to read. Raises: - ValueError: if buffer size is not specified or cannot be detected + ValueError: if buffer size is not specified or cannot be detected for EthercatRegister. TypeError: if the register is not a CanopenRegister or EthercatRegister. Returns: @@ -1434,14 +1434,17 @@ def read_complete_access( _reg = reg.registers[0] buffer_size = reg.byte_length - if buffer_size is None: - raise ValueError( - "Buffer size must be specified for complete access read." - "Alternatively, use a CanOpenObject to infer the size required " - "automatically." - ) + if isinstance(_reg, EthercatRegister): + if buffer_size is None: + raise ValueError( + "Buffer size must be specified for complete access read." + "Alternatively, use a CanOpenObject to infer the size required " + "automatically." + ) + value = self._read_raw(reg=_reg, buffer_size=buffer_size, complete_access=True) + else: + value = self._read_raw(reg=_reg) - value = self._read_raw(_reg, buffer_size=buffer_size, complete_access=True) self._notify_register_update_complete_access( _reg, value, operation=RegisterAccessOperation.READ ) From 7e495d5f8963e2b002d155b406dfec04eb9cf4d5 Mon Sep 17 00:00:00 2001 From: "julieta.prieto" Date: Mon, 29 Dec 2025 12:28:09 +0100 Subject: [PATCH 2/2] drive context manager complete access just for ecat --- ingenialink/drive_context_manager.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/ingenialink/drive_context_manager.py b/ingenialink/drive_context_manager.py index ce214ae1..a87dcdbe 100644 --- a/ingenialink/drive_context_manager.py +++ b/ingenialink/drive_context_manager.py @@ -5,6 +5,7 @@ from ingenialink.dictionary import CanOpenObject from ingenialink.enums.register import RegAccess +from ingenialink.ethercat.servo import EthercatServo from ingenialink.exceptions import ILIOError from ingenialink.register import Register from ingenialink.servo import RegisterAccessOperation, Servo @@ -185,6 +186,8 @@ def _store_register_data(self) -> None: self._original_register_values[axis][uid] = register_value def _store_objects_data(self) -> None: + if not isinstance(self.drive, EthercatServo): + return for obj in self.drive.dictionary.all_objs(): uid = obj.uid # Always read the rpdo/tpdo map objects using complete access