CanOpen提供两种监视节点在线的机制,一种叫做生命保护机制,一种叫心跳机制。两种机制都是基于NMT报文进行实现的。
心跳机制:从站每隔一段时间上报一次自己的当前状态。主站对每个从站进行倒计时,一旦在规定时间内从站没有上报状态,则认为其掉线。
/* 初始化心跳报文:主站为所有使用心跳包的从站配置入口,
从站没有在规定时间内上报心跳包,主站将从站状态置为掉线 */
void heartbeatInit(CO_Data *d)
{
UNS8 index;
/* 注册字典索引号0x1017和子索引号0x00的回调函数为OnHeartbeatProducerUpdate */
RegisterSetODentryCallBack(d, 0x1017, 0x00, &OnHeartbeatProducerUpdate);
/* 同步标志位置0 */
d->toggle = 0;
/* 遍历消费者(主站)的所有心跳包入口(从站) */
for(index = (UNS8)0x00; index < *d->ConsumerHeartbeatCount; index++)
{
/* 从消费者(主站)心跳包入口(从站)中取出定时时间 */
TIMEVAL time = (UNS16)((d->ConsumerHeartbeatEntries[index]) & (UNS32)0x0000FFFF);
/* 注册一个定