Servo

class ingenialink.canopen.servo.CanopenServo(target: int, node: RemoteNode, dictionary_path: str, servo_status_listener: bool = False)[source]

CANopen Servo instance.

Parameters:
  • target – Node ID to be connected.

  • node – Remote Node of the drive.

  • dictionary_path – Path to the dictionary.

  • servo_status_listener – Toggle the listener of the servo for its status, errors, faults, etc.

check_configuration(config_file: str, subnode: int | None = None) None

Check if the drive is configured in the same way as the given configuration file. Compares the value of each register in the given file with the corresponding value in the drive.

Parameters:
  • config_file – the configuration to check

  • subnode – Subnode of the axis. Defaults to None.

Raises:
  • FileNotFoundError – If the configuration file cannot be found.

  • ValueError – If a configuration file from a subnode different from 0 is attempted to be loaded to subnode 0.

  • ValueError – If an invalid subnode is provided.

  • ILConfigurationError – If the configuration file differs from the drive state.

disable(subnode: int = 1, timeout: int = 1000) None

Disable PDS.

Parameters:
  • subnode – Subnode of the drive.

  • timeout – Timeout in milliseconds.

Raises:
disturbance_disable() None

Disable disturbance process.

disturbance_enable() None

Enable disturbance process.

disturbance_get_num_mapped_registers() int

Obtain the number of disturbance mapped registers.

Returns:

Actual number of mapped registers.

disturbance_remove_all_mapped_registers() None

Remove all disturbance mapped registers.

disturbance_remove_data() None

Remove disturbance data.

disturbance_set_mapped_register(channel: int, address: int, subnode: int, dtype: int, size: int) None

Set monitoring mapped register.

Parameters:
  • channel – Identity channel number.

  • address – Register address to map.

  • subnode – Subnode to be targeted.

  • dtype – Register data type.

  • size – Size of data in bytes.

disturbance_write_data(channels: int | List[int], dtypes: REG_DTYPE | List[REG_DTYPE], data_arr: List[int | float] | List[List[int | float]]) None

Write disturbance data.

Parameters:
  • channels – Channel identifier.

  • dtypes – Data type.

  • data_arr – Data array.

emcy_subscribe(callback: Callable[[EmergencyMessage], None]) None[source]

Subscribe to emergency messages.

Parameters:

callback – Callable that takes a EmergencyMessage instance as argument.

emcy_unsubscribe(callback: Callable[[EmergencyMessage], None]) None[source]

Unsubscribe from emergency messages.

Parameters:

callback – Subscribed callback.

enable(subnode: int = 1, timeout: int = 1000) None

Enable PDS.

Args:

subnode: Subnode of the drive. timeout: Timeout in milliseconds.

Raises:
fault_reset(subnode: int = 1, timeout: int = 1000) None

Executes a fault reset on the drive.

Parameters:
  • subnode – Subnode of the drive.

  • timeout – Timeout in milliseconds.

Raises:
get_state(subnode: int = 1) SERVO_STATE

Current drive state.

is_alive() bool

Checks if the servo responds to a reading a register.

Returns:

Return code with the result of the read.

is_listener_started() bool

Check if servo listener is started

Returns:

True if listener is started, else False

load_configuration(config_file: str, subnode: int | None = None, strict: bool = False) None

Write current dictionary storage to the servo drive.

Parameters:
  • config_file – Path to the dictionary.

  • subnode – Subnode of the axis.

  • strict – Whether to raise an exception if any error occurs during the loading

  • false (configuration process. If)

  • ignored. (all errors will only be)

  • default. (False by)

Raises:
  • FileNotFoundError – If the configuration file cannot be found.

  • ValueError – If a configuration file from a subnode different from 0 is attempted to be loaded to subnode 0.

  • ValueError – If an invalid subnode is provided.

  • ILError – If strict is set to True and any error occurs during the loading

  • configuration process.

monitoring_actual_number_bytes() int

Get the number of monitoring bytes left to be read.

monitoring_channel_data(channel: int, dtype: REG_DTYPE | None = None) List[float]

Obtain processed monitoring data of a channel.

Parameters:
  • channel – Identity channel number.

  • dtype – Data type of the register to map.

Note

The dtype argument is not necessary for this function, it was added to maintain compatibility with IPB’s implementation of monitoring.

Returns:

Monitoring data.

monitoring_disable() None

Disable monitoring process.

monitoring_enable() None

Enable monitoring process.

monitoring_get_bytes_per_block() int

Obtain Bytes x Block configured.

Returns:

Actual number of Bytes x Block configured.

monitoring_get_num_mapped_registers() int

Obtain the number of monitoring mapped registers.

Returns:

Actual number of mapped registers.

monitoring_read_data() None

Obtain processed monitoring data.

Returns:

Actual processed monitoring data.

monitoring_remove_all_mapped_registers() None

Remove all monitoring mapped registers.

monitoring_remove_data() None

Remove monitoring data.

monitoring_set_mapped_register(channel: int, address: int, subnode: int, dtype: int, size: int) None

Set monitoring mapped register.

Parameters:
  • channel – Identity channel number.

  • address – Register address to map.

  • subnode – Subnode to be targeted.

  • dtype – Register data type.

  • size – Size of data in bytes.

read(reg: str | Register, subnode: int = 1, **kwargs: Any) int | float | str | bytes[source]

Read a register value from servo.

Parameters:
  • reg – Register.

  • subnode – Target axis of the drive.

Returns:

int, float or Value stored in the register.

Raises:
read_bitfields(reg: str | Register, subnode: int = 1, bitfields: Dict[str, BitField] | None = None) Dict[str, int]

Read bitfields of a register.

Parameters:
  • reg – Register.

  • subnode – Target subnode of the drive.

  • bitfields – Optional bitfield specification. If not it will be used from the register definition (if Any)

Returns:

Dictionary with values of the bitfields. Key is the name of the bitfield. Value is the value parsed.

register_update_subscribe(callback: Callable[[Servo, Register, int | float | str | bytes], None]) None

Subscribe to register updates. The callback will be called when a read/write operation occurs.

Parameters:

callback – Callable that takes a Servo and a Register instance as arguments.

register_update_unsubscribe(callback: Callable[[Servo, Register, int | float | str | bytes], None]) None

Unsubscribe to register updates.

Parameters:

callback – Subscribed callback.

reload_errors(dictionary: str) None

Force to reload all dictionary errors.

Parameters:

Dictionary.

replace_dictionary(dictionary: str) None

Deletes and creates a new instance of the dictionary.

Parameters:

dictionary – Path to the dictionary.

restore_parameters(subnode: int | None = None) None

Restore all the current parameters of all the slave to default.

Note

The drive needs a power cycle after this in order for the changes to be properly applied.

Parameters:

subnode – Subnode of the axis. None by default which restores all the parameters.

Raises:

ILError – Invalid subnode.

save_configuration(config_file: str, subnode: int | None = None) None

Read all dictionary registers content and put it to the dictionary storage.

Parameters:
  • config_file – Destination path for the configuration file.

  • subnode – Subnode of the axis.

start_status_listener() None

Start listening for servo status events (SERVO_STATE).

state_wait_change(state: SERVO_STATE, timeout: int, subnode: int = 1) SERVO_STATE

Waits for a state change.

Parameters:
  • state – Servo state before calling this function.

  • timeout – Maximum value to wait for the change.

  • subnode – Subnode of the drive.

Returns:

The last read state.

Raises:

ILTimeoutError – If state does not change in the given time.

status_word_decode(status_word: Dict[str, int]) SERVO_STATE

Decodes the status word to a known value.

Parameters:

status_word – Read value for the status word.

Returns:

Status word value.

status_word_wait_change(status_word: int, timeout: int, subnode: int = 1) None

Waits for a status word change.

Parameters:
  • status_word – Status word to wait for.

  • timeout – Maximum value to wait for the change.

  • subnode – Subnode of the drive.

Raises:

ILTimeoutError – If status word does not change in the given time.

stop_status_listener() None

Stop listening for servo status events (SERVO_STATE).

store_parameters(subnode: int | None = None, sdo_timeout: int = 3) None[source]

Store all the current parameters of the target subnode.

Parameters:
  • subnode – Subnode of the axis. None by default which stores all the parameters.

  • sdo_timeout – Timeout value for each SDO response.

Raises:

ILError – Invalid subnode.

subscribe_to_status(callback: Callable[[SERVO_STATE, int], Any]) None

Subscribe to state changes.

Parameters:

callback – Callback function.

Returns:

Assigned slot.

unsubscribe_from_status(callback: Callable[[SERVO_STATE, int], Any]) None

Unsubscribe from state changes.

Parameters:

function. (Callback)

write(reg: str | Register, data: int | float | str | bytes, subnode: int = 1, **kwargs: Any) None

Writes a data to a target register.

Parameters:
  • reg – Target register to be written.

  • data – Data to be written.

  • subnode – Target axis of the drive.

Raises:
write_bitfields(reg: str | Register, values: Dict[str, int], subnode: int = 1, bitfields: Dict[str, BitField] | None = None) None

Write bitfields of a register.

Only the values specified will be updated. The register will be read first to prevent overwriting other bits.

Parameters:
  • reg – Register

  • values – Dictionary with values of the bitfields. Key is the name of the bitfield. Value is the value to set.

  • subnode – Target subnode of the drive.

  • bitfields – Optional bitfield specification. If not it will be used from the register definition (if Any)

property dictionary: Dictionary

Returns dictionary object

property disturbance_data: bytes

Obtain disturbance data.

Returns:

Current disturbance data.

property disturbance_data_size: int

Obtain disturbance data size.

Returns:

Current disturbance data size.

property disturbance_number_mapped_registers: int

Get the number of mapped disturbance registers.

property errors: Dict[int, DictionaryError]

Errors.

property full_name: str

Drive full name.

property info: Dict[str, None | str | int]

Servo information.

property monitoring_data_size: int

Obtain monitoring data size.

Returns:

Current monitoring data size in bytes.

property monitoring_number_mapped_registers: int

Get the number of mapped monitoring registers.

property node: RemoteNode

Remote node of the servo.

property status: Dict[int, SERVO_STATE]

Servo status.

property subnodes: Dict[int, SubnodeType]

Dictionary of subnode ids and their type

units_acc

Acceleration units.

Type:

SERVO_UNITS_ACC

units_pos

Position units.

Type:

SERVO_UNITS_POS

units_torque

Torque units.

Type:

SERVO_UNITS_TORQUE

units_vel

Velocity units.

Type:

SERVO_UNITS_VEL