First a little discussion of the two terms you listed; heartbeat and watchdog.
A heartbeat is simply a cyclically toggling bit. Usually the toggle period is long enough to insure that no matter how bad the communication delays get in a generally functioning application you will never miss a state change of the heartbeat. When I've used heartbeats I've usually run about a 2 second period (1 sec on, 1 sec off), but my application could handle that amount of time without communication. You need to adjust the heartbeat period basedon your application needs.
A watchdog is a timer that looks for some action or event and is reset when the action/event occurs. In the comm case you list the watchdog could be reset on a oneshot of the heartbeat on state. Usually the watchdog time is set to a couple or three event periods (heartbeat periods in the comm case) and a fault is indicated if the watchdog ever times out. Most plcs use a hardware watchdog to detect if they lock up.
I have had the most success using a combination of a handshake and a watchdog. If you have control of both plcs in your case it is pretty easy to do. Add a rung like this in one plc:
| A B |
|-------]/[--------------( )----|
| |
with A being the bit coming from the other plc and B the bit going to the other plc.
In the other plc add this:
| B A |
|------] [---------------( )----|
| |
Then monitor B in the first plc and A in the second plc with a watchdog and you will be able to tell if the comm link is lost or if the other plc is not running. Just reset your watchdog on a oneshot of the output.
The nice thing about this structure is the toggle is independent of comm time. You only need to adjust your watchdog to the longest delay you are willing to live with and let 'er run.
Hope this helps.
Keith