I use something similar to thingstodo. I make a heartbeat register part of the block of data and it is simply a constantly changing number. In the SLC/Micrologix it's a copy of the free running clock. Just MOV S:4 to one of the members of the outgoing data block. In a Click, I use SD9 (scan counter). In Logix5K I just ADD 1 to the number every scan. I've no experience with the Micro8x, but there's probably a built in number and if not, just pick an element in your block and increment it.
In the receiving PLC, I compare that heartbeat value with a copy of it and tie that to a timer set for the time needed to take action on comms loss. on a branch on that same rung, I will MOV that incoming address to the reference location used in the EQU.
If the number stops changing, it means either that comms are lost or the remote PLC stopped running. A faulted PLC will still respond to messages but won't keep copying the clock or updating its scan counter. This covers both situations without distinguishing between the two. On my systems either situation requires the same action, so I just call it comm loss, set the appropriate alarm.
On radio networks I also like to record the "data age" in seconds of each node. To do that, I will set the comm loss timer for each node to the maximum and use a GEQ on the accumulator for the alarm bit so the timer can keep counting the seconds and will reset when that heartbeat changes. The timer accumulator is now also useful as "data age".
I also like to count errors and for that, I use the rising edge of MSG.ER bit for each message to each node. I typically only have one counter for each node, so all the message error bits for that node increment the same "error count".
I give the HMI a button to clear the errors and display the counts along with the "data age".
With radio networks, I usually set the MSG timeout value to 3 or four seconds, sometimes a bit longer if there are repeaters. TO do that in a Compactlogix or Controllogix, you have to write the value in microseconds (going from memory or it might be milliseconds) to the UnconnectedTimeout element of the message. <- I might not have that element name exactly right. In a Micrologix it is the MTO element in seconds. In a SLC I use the Help file to look up the element number for timeout.
If you don't adjust that timeout value, it will default to some stupidly long number like 30 seconds which ain't gonna ever work for me. Some people write their own timeouts in ladder logic with timers that set the TO element to force the MSG to timeout early, but that can get hairy with 18 nodes and multiple messages to each.
In the slave node, comment all the addresses that are "From Main" or "To Main" so that future readers will know they are reserved even if they are spares not in use.