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?
