PldThatWorks,
The methods being discussed so far on this topic only catch a small percentage of the ways a PLC and things it connects to can go bad. In the earliest FAA "fail safe" systems, they used 3 processors. They all read the same inputs. They all computed the outputs. The two that came up with the same result were OK. If the third matched, it was OK too. With only two processors, there was really no way to tell whether the accusor (falsly claiming that the OTHER processor is bad) or the accusee is actually bad. When two are checking on each other, there's no way to tell who's right!
Now for you specific application, are there failures that could crash them both? Eg. electrical glitches? Fire? Lightning? A software bug that both experience because conditions were right? How do they share or handoff the I/O that isn't modbus or ethernet?
It might be best to back off a little and put in some self-diagnostic logic that can report status. If all is well, it could have a clock as part of the display. If it stops timing, then the PLC has quit for any number of reasons. It the display goes dark, it has failed. And so on. Let the PLC self diagnose (if it can) and report errors on the screen. And keep a spare around.
Really and truly fail-safe operation needs to look at the big picture. I little redundancy doesn't help much, and might even hurt by adding complicated processes that are hard to test and therefore more likely than the mainline to be wrong. I'd be very cautious with this one.

Roger