Network

class ingenialink.ethercat.network.EthercatNetwork(interface_name: str, connection_timeout: float = 1, overlapping_io_map: bool = True, gil_release_config: GilReleaseConfig = GilReleaseConfig(config_init=None, sdo_read_write=None, foe_read_write=None, send_receive_processdata=None, _always_release=False))[source]

Network for all EtherCAT communications.

Parameters:
  • interface_name – Interface name to be targeted.

  • connection_timeout – Time in seconds of the connection timeout.

  • overlapping_io_map – Map PDOs to overlapping IO map.

  • gil_release_config – configures which functions should release the GIL.

Raises:

ImportError – WinPcap is not installed

close_ecat_master(release_reference: bool = True) None[source]

Closes the connection with the EtherCAT master.

Parameters:

release_reference – Whether to release the network reference.

If the network will be reused afterward it should be set to False.

config_pdo_maps() None[source]

Configure the PDO maps.

It maps the PDO maps of each slave and sets its state to SafeOP.

connect_to_slave(slave_id: int, dictionary: str, servo_status_listener: bool = False, net_status_listener: bool = False) EthercatServo[source]

Connects to a drive through a given slave number.

Parameters:
  • slave_id – Targeted slave to be connected.

  • dictionary – Path to the dictionary file.

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

  • net_status_listener – Toggle the listener of the network status, connection and disconnection.

Raises:
  • ValueError – If the slave ID is not valid.

  • ILError – If no slaves are found.

  • ILStateError – If slave can not reach PreOp state

Returns:

ethercat servo.

disconnect_from_slave(servo: EthercatServo) None[source]

Disconnects the slave from the network.

Parameters:

servo – Instance of the servo connected.

get_servo_state(servo_id: int | str) NetState[source]

Get the state of a servo that’s a part of network.

The state indicates if the servo is connected or disconnected.

Parameters:

servo_id – The servo’s slave ID.

Raises:

ValueError – If the servo ID is not an integer.

Returns:

The servo’s state.

load_firmware(fw_file: str, boot_in_app: bool, slave_id: int = 1, password: int | None = None) None[source]

Loads a given firmware file to a target slave.

Parameters:
  • fw_file – Path to the firmware file.

  • boot_in_app – True if the application includes the bootloader (i.e, fw_file extension is .sfu), False otherwise.

  • slave_id – Slave ID to which load the firmware file.

  • password – Password to load the firmware file. If None the default password will be used.

Raises:
  • AttributeError – If the boot_in_app argument is not a boolean.

  • FileNotFoundError – If the firmware file cannot be found.

  • ValueError – If the salve ID value is invalid.

  • ILError – If no slaves could be found in the network.

  • ILError – If the slave ID couldn’t be found in the network.

  • ILFirmwareLoadError – If no slave is detected.

  • ILFirmwareLoadError – If the FoE write operation is not successful.

scan_slaves() list[int][source]

Scans for slaves in the network.

Scanning of slaves cannot be done if a slave is already connected to the network.

Returns:

List containing all the detected slaves.

Raises:

ILError – If any slaves is already connected.

scan_slaves_info() OrderedDict[int, SlaveInfo][source]

Scans for slaves in the network and return an ordered dict with the slave information.

Returns:

Ordered dict with the slave information.

send_receive_processdata(timeout: float = 0.1, *, release_gil: bool | None = None) None[source]

Send and receive PDOs.

Parameters:
  • timeout – receive processdata timeout in seconds, 0.1 seconds by default.

  • release_gil – used to overwrite the GIL release configuration. True to release the GIL, False otherwise. If not specified, default GIL release configuration will be used.

Raises:

ILWrongWorkingCountError – If processdata working count is wrong

start_pdos(timeout: float = 1.0) None[source]

Set all slaves with mapped PDOs to Operational State.

Parameters:

timeout – timeout in seconds to reach Op state, 1.0 seconds by default.

Raises:
  • ILError – If the RPDO values are not set before starting the PDO exchange process.

  • ILStateError – If slaves can not reach SafeOp or Op state.

start_status_listener() None[source]

Start monitoring network events (CONNECTION/DISCONNECTION).

stop_pdos() None[source]

For all slaves in OP or SafeOp state, set state to PreOp.

stop_status_listener() None[source]

Stops the NetStatusListener from listening to the drive.

subscribe_to_status(slave_id: int, callback: Callable[[NetDevEvt], None]) None[source]

Subscribe to network state changes.

Parameters:
  • slave_id – Slave ID of the drive to subscribe.

  • callback – Callback function.

unsubscribe_from_status(slave_id: int, callback: Callable[[str, NetDevEvt], None]) None[source]

Unsubscribe from network state changes.

Parameters:
  • slave_id – Slave ID of the drive to subscribe.

  • callback – Callback function.

static update_pysoem_timeouts(ret: int, safe: int, eeprom: int, tx_mailbox: int, rx_mailbox: int, state: int) None[source]

Update pysoem timeouts.

Parameters:
  • ret – new ret timeout.

  • safe – new safe timeout.

  • eeprom – new EEPROM access timeout.

  • tx_mailbox – new Tx mailbox cycle timeout.

  • rx_mailbox – new Rx mailbox cycle timeout.

  • state – new status check timeout.

update_sdo_timeout(sdo_read_timeout: int, sdo_write_timeout: int) None[source]

Update SDO timeouts for all the drives.

Parameters:
  • sdo_read_timeout – timeout for SDO read access in us

  • sdo_write_timeout – timeout for SDO write access in us

property protocol: NetProt

Obtain network protocol.

Type:

NetProt

servos: list[EthercatServo]

List of the connected servos in the network.

class ingenialink.ethercat.network.GilReleaseConfig(config_init: bool | None = None, sdo_read_write: bool | None = None, foe_read_write: bool | None = None, send_receive_processdata: bool | None = None)[source]

Configuration of pysoem functions that have GIL release control.

classmethod always() GilReleaseConfig[source]

Releases the GIL from all functions.

Returns:

GIL configuration.

property always_release: bool

Returns True if the GIL should be released for all functions, False otherwise.

class ingenialink.ethercat.network.NetStatusListener(network: EthercatNetwork, refresh_time: float = 0.25)[source]

Network status listener thread to check if the drive is alive.

Parameters:

network – Network instance of the EtherCAT communication.

is_alive()

Return whether the thread is alive.

This method returns True just before the run() method starts until just after the run() method terminates. See also the module function enumerate().

join(timeout=None)

Wait until the thread terminates.

This blocks the calling thread until the thread whose join() method is called terminates – either normally or through an unhandled exception or until the optional timeout occurs.

When the timeout argument is present and not None, it should be a floating point number specifying a timeout for the operation in seconds (or fractions thereof). As join() always returns None, you must call is_alive() after join() to decide whether a timeout happened – if the thread is still alive, the join() call timed out.

When the timeout argument is not present or None, the operation will block until the thread terminates.

A thread can be join()ed many times.

join() raises a RuntimeError if an attempt is made to join the current thread as that would cause a deadlock. It is also an error to join() a thread before it has been started and attempts to do so raises the same exception.

run() None[source]

Check the network status.

start()

Start the thread’s activity.

It must be called at most once per thread object. It arranges for the object’s run() method to be invoked in a separate thread of control.

This method will raise a RuntimeError if called more than once on the same thread object.

stop() None[source]

Check the network status.

property daemon

A boolean value indicating whether this thread is a daemon thread.

This must be set before start() is called, otherwise RuntimeError is raised. Its initial value is inherited from the creating thread; the main thread is not a daemon thread and therefore all threads created in the main thread default to daemon = False.

The entire Python program exits when only daemon threads are left.

property ident

Thread identifier of this thread or None if it has not been started.

This is a nonzero integer. See the get_ident() function. Thread identifiers may be recycled when a thread exits and another thread is created. The identifier is available even after the thread has exited.

property name

A string used for identification purposes only.

It has no semantics. Multiple threads may be given the same name. The initial name is set by the constructor.

property native_id

Native integral thread ID of this thread, or None if it has not been started.

This is a non-negative integer. See the get_native_id() function. This represents the Thread ID as reported by the kernel.

class ingenialink.ethercat.network.SlaveState(value)[source]

EtherCAT state enum.

ingenialink.ethercat.network.release_network_reference(network: EthercatNetwork | None = None) None[source]

Releases a network reference.

If network is not provided, all references will be removed.

Parameters:

network – network object.

Raises:

RuntimeError – if the specified network is not on the list.

ingenialink.ethercat.network.set_network_reference(network: EthercatNetwork) None[source]

Adds a reference to an EtherCAT network.

Parameters:

network – network.