I am using the Simple Open Ethercat Master (soem) library to read/write some digital inputs/outputs. My setup is a standard laptop, with a built in ethernet card, connected to beckhoff coupler, 8 digital input, and 8 digital output module.
I am running the following ops script.
import("soem_beckhoff_drivers") loadComponent("Master","soem_master::SoemMasterComponent") Master.displayAvailableDrivers() # Crawls the network and identifies attached devices. Devices are loaded # (if a driver exists) and given names "Slave_1***". The *** appear to be # the module order (at least this is the case for a single rack) Master.configure() # Setting the update period (in seconds). This determines the rate at which # the data is published on the ROS side (setting this value to zero turns # off updating Master.setPeriod(0.05) # This starts the Master "task" running. It will update at the period set # above Master.start() # This command remaps OROCOS topics to ROS topics stream("Master.Slave_1002.bits", ros.topic("DI")) stream("Master.Slave_1003.bits", ros.topic("DO"))The script configures the master and then republishes IO data as ROS topics.
My question is how do I know ahead of time that my 8 digital input module is going to be named Master.Slave_1002 or the digital ouputs Master.Slave_1003. The master seems to map the devices in the order that it encounters them on the network. Can I depend on this? What if I add a device in the middle of the network?