Ken has mentioned "Liston-Only" connections.
There is also the option of "Sharing" the input module, so that both controllers have ownership of it. For this to be successful, then the configurations in both projects must be identical. (I use Copy/Paste to make this easy).
Sharing, IMHO, is preferable to Listen Only, since either controller can be taken down without affecting the other.
In a Listen-Only setup, if the "Owner-Controller" is removed from its chassis, the input module no longer has a connection, and stops transmitting its data.
It works like this -
1. One controller will power-up first, and will send its connection request to the input module, by attempting to download the Configuration tag.
2. The input module accepts the configuration tag (on the basis that it has no stored configuration - the modules are not retentive).
3. Then the second controller (and we have no way of determining which will be first, or second), will attempt the connection by downloading its configuration tag.
4. The input module checks the incoming configuration is consistent with the configuration it already has from the first controller, and if it is, accepts the second connection as well.
An input module can have many owner-controllers in a full sharing scenario, the connection will only be made if the configurations match.
So long as a shared input module has at least one connection with a controller, it will still multicast its data.
I keep saying Input Module, not I/O module, because Output modules cannot have multiple owners, for obvious reasons.