我是靠谱客的博主 痴情啤酒,最近开发中收集的这篇文章主要介绍CANOpen生命守护机制,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

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);
		/* 注册一个定时事件,在规定时间内没有收到心跳包,主站将从站置为离线 */
		if(time)
		{
			d->ConsumerHeartBeatTimers[index] = SetAlarm(d, index, &ConsumerHeartbeatAlarm, MS_TO_TIMEVAL(time), 0);
		}
  	}

	/* 生产者(从站)

最后

以上就是痴情啤酒为你收集整理的CANOpen生命守护机制的全部内容,希望文章能够帮你解决CANOpen生命守护机制所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(54)

评论列表共有 0 条评论

立即
投稿
返回
顶部