EtherCAT IO Assignment using Simple Open Ethercat Master

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?