CANopen原理--心跳

本文介绍CANopen中心跳信号的原理,以及在开源CANopen协议栈CanFestival中的实现过程。

一、心跳的作用

CANopen网络中,当一个节点需要知道另一个节点的状态时,除了发送远程帧查询节点状态外,节点也可以周期性的发送心跳信号,向网络上的其它节点通告本节点的状态。
发送心跳的节点称为生产者,生产者既可以是主节点,也可以是从节点。
接收心跳的节点称为消费者,消费者既可以是主节点,也可以是从节点。
这里写图片描述
消费者负责监控心跳信号是否正常,若在规定的时间内没有收到心跳信号,则应该产生一个错误信息。

二、心跳的帧格式

心跳帧的格式如下:
这里写图片描述
其中,数据区为1个字节的节点状态,不同的值对应的含义如下:

//CanFestival-3.0-rc3\include\states.h
enum enum_nodeState {
  Initialisation  = 0x00, 
  Disconnected    = 0x01,
  Connecting      = 0x02,
  Preparing       = 0x02,
  Stopped         = 0x04,
  Operational     = 0x05,
  Pre_operational = 0x7F,
  Unknown_state   = 0x0F
};

三、心跳周期

心跳生产者发送心跳帧的周期由对象字典0x1017(Producer Heartbeat Time)的值确定,单位为1ms。
设定发送心跳帧的定时器:

\CanFestival-3.0-rc3\src\lifegrd.c
void heartbeatInit(CO_Data* d)
{
    ......
    if ( *d->ProducerHeartBeatTime )
    {
        TIMEVAL time = *d->ProducerHeartBeatTime;
        d->ProducerHeartBeatTimer = SetAlarm(d, 0, &ProducerHearbeatAlarm, MS_TO_TIMEVAL(time), MS_TO_TIMEVAL(time));
    }
}

其中,*d->ProducerHeartBeatTime的值即对象字典0x1017的值,在CanFestival给的示例程序中,即
TestMaster_obj1017的值:

\CanFestival-3.0-rc3\examples\TestMasterSlave\TestMaster.c
/* index 0x1017 :   Producer Heartbeat Time */ 
                    UNS16 TestMaster_obj1017 = 0x0;   /* 0 */

TestMaster_obj1017初始值为0,一般由主站在初始化时设置为非0值。

四、发送心跳帧

每当定时器超时后,将调用ProducerHearbeatAlarm()发送心跳帧:

\CanFestival-3.0-rc3\src\lifegrd.c
void ProducerHearbeatAlarm(CO_Data* d, UNS32 id)
{
    if(*d->ProducerHeartBeatTime)
    {
        Message msg;
        msg.cob_id.w = *d->bDeviceNodeId + 0x700;
        msg.len = (UNS8)0x01;
        msg.rtr = 0;
        msg.data[0] = d->nodeState; /* No toggle for heartbeat !*/
        /* send the heartbeat */
            MSG_WAR(0x3130, "Producing heartbeat: ", d->nodeState);
            canSend(d->canHandle,&msg );
    }else{
        d->ProducerHeartBeatTimer = DelAlarm(d->ProducerHeartBeatTimer);
    }
}

五、实例

以倍福EL6751为主节点的一个CANopen网络中,用USB-CAN检测到的心跳信号如下:
这里写图片描述

其中,ID为0x0000077f的帧是主节点EL6751发送的心跳帧,ID为0x00000701的帧是从节点1发送的心跳帧,数据中的状态为5,表明2个节点均处于Operational状态。

六、参考资料

1、CanFestival 3.0 RC3
2、CiA301 V4.2.0

  • 13
    点赞
  • 89
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
CAN(Controller Area Network,控制器局域网)是一种在汽车和工业领域中广泛使用的通信协议。CAN网络管理配置指的是在CAN网络中对网络进行管理和配置的过程。 CAN网络管理配置主要包括以下几个方面的内容。 首先是网络拓扑结构的配置。CAN网络可以采用总线型、星型、树型等不同的拓扑结构,根据具体的应用需求选择合适的拓扑结构,并进行相应的配置。例如,对于需要实现高可靠性的系统,可以采用冗余节点来配置网络拓扑。 其次是节点地址的配置。在CAN网络中,每个节点都需要有一个唯一的地址以便进行通信。在进行网络管理配置时,需要分配不同节点的地址,并确保每个节点的地址唯一且正确配置,这样才能实现节点之间的正常通信。 另外,还需要配置通信参数。CAN网络中的通信参数包括通信速率、传输模式、心跳监测等。这些参数的配置需要根据具体的应用场景和通信需求进行调整,以确保网络的稳定和可靠性。 此外,还需要对网络进行监测和故障诊断。通过网络管理配置,可以设置网络的监测机制,实时监测网络的运行状态,并根据需要进行故障诊断和排除。这有助于提高网络的可靠性和维护效率。 最后,对于一些特殊需求,还可以根据具体情况进行网络安全配置。例如,对于一些对数据安全性要求较高的应用,可以采取加密和认证等措施,提供更高的安全保障。 总之,CAN网络管理配置是对CAN网络进行管理和配置的过程,包括拓扑结构配置、节点地址配置、通信参数配置、监测与故障诊断以及网络安全配置等方面。通过合理的配置,可以实现CAN网络的正常运行和高效通信。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值