CANopen原理--心跳
本文介绍CANopen中心跳信号的原理,以及在开源CANopen协议栈CanFestival中的实现过程。一、心跳的作用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
更多推荐
所有评论(0)