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
- activate_pdos(refresh_rate: float | None = None, watchdog_timeout: float | None = None) None[source]
Start PDOs and notify the status to the observers.
- Parameters:
refresh_rate – Determines how often (seconds) the PDO values will be updated.
watchdog_timeout – The PDO watchdog time. If not provided it will be set proportional to the refresh rate.
- 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, disconnect_callback: Callable[[Servo], None] | None = None) 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.
disconnect_callback – Callback function to be called when the servo is disconnected. If not specified, no callback will be called.
- 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.
- static find_adapters() list[tuple[int, str, str]][source]
Finds all available EtherCAT adapters.
- Returns:
interface index, adapter name, interface guid.
- Raises:
ImportError – If pysoem is not installed.
- 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_fileextension is .sfu), False otherwise.slave_id – Slave ID to which load the firmware file.
password – Password to load the firmware file. If
Nonethe 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 the FoE write operation is not successful.
- static pysoem_available() bool[source]
Check if pysoem is available.
- Returns:
True if pysoem is available, False otherwise.
- 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 = 2.0) None[source]
Set all slaves with mapped PDOs to Operational State.
- Parameters:
timeout – timeout in seconds to reach Op state, 2.0 seconds by default.
- Raises:
ILStateError – If slaves can not reach SafeOp or Op state.
- subscribe_to_pdo_thread_status(callback: Callable[[bool], None]) None[source]
Subscribe be notified when the PDO process data thread status changes.
- Parameters:
callback – Callback function.
- 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_pdo_thread_status(callback: Callable[[bool], None]) None[source]
Unsubscribe from PDO thread status changes.
- Parameters:
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 pdo_manager: PDONetworkManager
Returns the PDO manager.
- 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.
- 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.
- 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.
- 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.