一种冗余CAN总线通信系统的数据通信方法与流程

文档序号:12492087阅读:434来源:国知局
一种冗余CAN总线通信系统的数据通信方法与流程

本发明涉及现场总线通信技术,尤其涉及冗余CAN总线通信系统的数据通信方法。



背景技术:

目前,CAN总线技术已被广泛应用于工业控制领域。CAN总线分为物理层、数据链路层和应用层。其中,物理层和数据链路层遵循CAN2.0协议规范。1992年,CIA组织成立,其首要任务之一就是制定CAN应用层协议。目前,通过的协议规范包括DeviceNet、CANOpen等。CANOpen规范是工业控制领域权威的规范,其包括系列文档。其中,最基本的为CANOpen301,已正式发布并应用。此外,CANOpen302是针对浮动主节点的规范,CANOpen307是海事规范。对于安全等级要求较高的系统而言,尤其是硬实时嵌入式系统而言(海事领域、航空航天等领域),对传输数据的可靠性要求较高,因此通常会采用冗余CAN总线通信系统。冗余CAN总线通信系统的物理层结构如图1所示,其中,节点100包括两个CAN控制器101、102以及两个CAN收发器103、104。目前的冗余CAN总线系统主要有以下几种通信方式:

1、双CAN通信系统的简单冗余:

这种方式简单地将双CAN冗余通讯系统作为单CAN系统的重复,在两条CAN总线上发送和接收数据。其通信方式过于简单,如果在数据通信过程出现阻塞状况,同一帧报文将会在不同的时间到达接收方,从而导致数据的反复震荡,数据一致性差。对于实时系统而言,将会很大程度影响系统的功能和可靠性。

2、冗余系统的冷备份:

所谓冷备份即数据首先在一条CAN总线上进行传输,当使用的这一条CAN总线出现故障时,再使用另外一条CAN总线代替故障的CAN总线,进行数据的传输。该种传输机制由于任一时刻只有一条CAN总线在传输数据,也即可以保证数据的一致性问题。但是,其存在下面问题:(1)在总线切换的过程中会出现数据的丢失以及数据的延时传输;(2)当使用的那一条CAN总线出现短暂的干扰或故障时,该机制失去冗余的含义,因此,对于实时系统而言,冷备份系统并不适合。

3、CANOpen307规范中使用的热备份:

针对单CAN总线网络而言,CIA组织提出了CANOpen301规范。而海事电子产品由于其安全等级较高,因此采用冗余CAN总线,并在CANOpen301基础上提出了CANOpen307规范。目前,CANOpen307规范仍然是草稿版,未正式发布。

CANOpen307规范中也是采用热冗余,即两条CAN总线都进行过程数据(PDO)的发送,其从源端保证数据的一致性。即:待发送的CAN报文,从请求发送开始,到放入CAN控制器进行发送,会分别在两条CAN总线上进行计时,如果超过设定的时间窗口,会将报文舍弃,从而保证数据的一致性。但是,这种通信方式存在以下问题:(1)时间窗口的设置不能无限的大,要小于报文的禁止时间,否则仍然会出现乱序的问题;(2)在有限的时间窗口内,可能出现下面情况:当两条CAN总线都收到干扰时,会导致总线报文发送延迟,两条CAN总线上的报文都超过设定的时间窗口,将报文舍弃。那么,对于实时嵌入式系统来讲,丢弃了重要的报文,延迟了报文的接收时间,将会对系统产生不可预估,甚至是破坏性的影响。(3)在代码实现机制上复杂。



技术实现要素:

本发明所要解决的技术问题在于提供一种制造成本低的冗余CAN总线通信系统的数据通信方法,其能充分保证接收数据的实时性和一致性,并最大程度避免接收端产生新旧数据的震荡。

为解决上述技术问题,本发明所采取的技术方案是:

冗余CAN总线通信系统的数据通信方法,包括以下步骤:

a、发送端将包含滚动计数值a的PDO报文在两条CAN总线上发送;发送端发送具有同一个报文ID的PDO报文时,每发送一帧PDO报文,PDO报文的滚动计数值a加1,滚动计数值a的初始值为0,滚动计数值的上限值为N,当滚动计数值a达到其上限值N时,重新从1开始计数;

b、在接收端设置期望计数器和无效接收窗口,期望计数器的计数值b用于表示期望接收到的PDO报文的滚动计数值,该无效接收窗口所对应的PDO报文的滚动计数值范围由M帧PDO报文的计数值共同组成,该M帧PDO报文位于期望接收到的PDO报文之前,并紧邻该期望接收到的PDO报文;M为预设的窗口宽度;接收端每接收到发送端发送的一帧PDO报文时,先判断该帧PDO报文是否有效,其中: 除接收到的PDO报文的滚动计数值a为0的情况以外,当接收到的PDO报文的滚动计数值a落入无效接收窗口对应的PDO报文滚动计数值范围内时,接收端判断接收到的PDO报文为无效报文;当期望计数器的计数值b为0、接收到的PDO报文的滚动计数值a为0、或者是接收到的PDO报文的滚动计数值a不在无效接收窗口对应的PDO报文滚动计数值范围内时,接收端判断接收的PDO报文有效;

c、接收端在接收到滚动计数值a为0的有效报文时,将期望计数器的计数值b设为1,在接收到滚动计数值a不为0的有效报文、且期望计数器的计数值b小于所述的上限值N时,将期望计数器的计数值b更新为该有效报文的滚动计数值加1,在接收到滚动计数值a不为0的有效报文、且期望计数器的计数值b等于所述的上限值N时,将期望计数器的计数值b更新为1;

d、接收端在接收到无效报文时,丢弃该无效报文,并维持当前期望计数器的计数值b不变。

本发明的冗余CAN总线通信系统的数据通信方法易于实现、可靠性高,在热冗余传输的前提下,即保证了接收数据的一致性,又避免了数据的震荡,提高了实时系统的性能。与现有技术相比,本发明至少具有以下优点和特点:

1、与双CAN通信系统的简单冗余相比,解决了数据通信的乱序和数据一致性问题;

2、相比冗余系统的冷备份而言,可以实现两条CAN总线同时进行数据的传输,不存在CAN总线切换带来的丢帧和数据通信延时问题;

3、相比CANOpen307机制而言,本发明不在发送端进行报文的过滤,而采用接收端进行报文的比较判断,解决了由于时间窗口设置时导致丢失报文的问题,而且软件实现简单可靠;

4、本发明的发送端在两条CAN总线上都进行数据的传输,从源头上避免了丢帧的问题。而接收端通过设置接收窗口,可在CAN总线通信系统发生的故障的情况下也能更好地区分出新旧报文,对新报文进行接收,将旧报文进行舍弃,提高了数据接收的实时性,并能对故障做出报警,在保证数据一致性的同时,又避免了数据的震荡。

附图说明

图1示出了冗余CAN总线通信系统的物理层结构示意图。

图2示出了发送端所采用的滚动计数机制的原理示意图。

图3示出了根据本发明一实施例的一种冗余CAN总线通信系统的数据通信方法的接收端流程示意图。

具体实施方式

下面结合附图和具体实施例对本发明进行详细说明。

请参阅图2。根据本发明一实施例的一种冗余CAN总线通信系统的数据通信方法为了防止接收方接收到的数据产生新旧数据的震荡,在发送端采用了滚动计数(Rolling Counter)的机制,在接收端进行数据的筛选。在本实施例中,对于同一个ID的PDO报文而言,在报文的数据场中取第一个字节进行滚动计数,该滚动计数值最大值可灵活设置。发送端每发送一帧报文,滚动计数值就加1,包含该滚动计数值的报文在两条总线(即图2中的默认总线和冗余总线)上发送。发送端在上电或复位后首先发送滚动计数值为0的报文,之后的计数从1开始,如果超过设定的最大值,则从1开始重新计数。

根据本发明一实施例的一种冗余CAN总线通信系统的数据通信方法,包括以下步骤:

步骤a、发送端将包含滚动计数值a的PDO报文在两条CAN总线上发送;发送端发送具有同一个报文ID的PDO报文时,每发送一帧PDO报文,PDO报文的滚动计数值a加1,滚动计数值a的初始值为0,滚动计数值的上限值为N,当滚动计数值a达到其上限值N时,在发送下一帧PDO报文时,重新从1开始计数;在本实施例中,N=255,发送端发送的第一帧PDO报文的a为1,第二帧PDO报文为2,依次类推,当发送端发送完a=255的那一帧PDO报文之后,接下来的发送的那一帧PDO报文的滚动计数值a=1。

步骤b、在接收端设置期望计数器和无效接收窗口,期望计数器的计数值b用于表示期望接收到的PDO报文的滚动计数值,无效接收窗口所对应的PDO报文的滚动计数值范围由M帧PDO报文的计数值共同组成,该M帧PDO报文位于期望接收到的PDO报文之前,并紧邻该期望接收到的PDO报文;M为预设的窗口宽度;接收端每接收到发送端发送的一帧PDO报文时,先判断该帧PDO报文是否有效,其中: 除接收到的PDO报文的滚动计数值a为0的情况以外,当接收到的PDO报文的滚动计数值a落入无效接收窗口对应的PDO报文滚动计数值范围内时,接收端判断接收到的PDO报文为无效报文;当期望计数器的计数值b为0、接收到的PDO报文的滚动计数值a为0、或者是接收到的PDO报文的滚动计数值a不在无效接收窗口对应的PDO报文滚动计数值范围内时,接收端判断接收的PDO报文有效。

在本实施例中,当接收端在接收到PDO报文的滚动计数值a为0的报文时,会对外发出发送端正在重启的通知信息,以让外界知道目前发送端正在进行重启。

在本实施例中,在接收端还设有正常接收窗口,正常接收窗口所对应的PDO报文的滚动计数值范围由期望接收到的PDO报文和M帧PDO报文的滚动计数值共同组成,该M帧PDO报文位于期望接收到的PDO报文之后,并紧邻该期望接收到的PDO报文。接收端在接收到有效的PDO报文时,如果该有效的PDO报文的滚动计数值a既不为0也不在正常接收窗口所对应的PDO报文滚动计数值范围内,则接收端对外发出故障报警信息,以让外界知道冗余CAN总线通信系统发生了故障。

预设的窗口宽度M可以采用以下公式确定:

使用这样的方式确定该M值,可以保证只要一条总线上的报文的延迟时间在所预估的可能的最大延迟时间之内时,滚动计数的机制都能够起到有效的作用,避免数据振荡。本实施例中,预设的窗口宽度M的取值范围可设为5<M<50。

步骤c、接收端在接收到滚动计数值a为0的有效报文时,将期望计数器的计数值强制设为1;接收端在接收到滚动计数值a不为0的有效报文、且期望计数器的计数值b小于上限值N时,将期望计数器的计数值b更新为该有效报文的滚动计数值加1,即,b=a+1;接收端在接收到滚动计数值a不为0的有效报文、且期望计数器的计数值b等于上限值N时,则将期望计数器的计数值b更新为1。

步骤d、接收端在接收到无效报文时,丢弃该无效报文,并维持当前期望计数器的计数值b不变。

举例来说,在窗口宽度M=10的情况下,假设发送端发送的第一帧PDO报文在两条CAN总线上同时进行传输,该PDO报文的滚动计数值a=0。如果接收端通过其中一条CAN总线先接收到该帧报文,因a=0会判断该PDO报文为有效报文,并使b=1,也就是说,接收端期望接收到的下一帧PDO报文的滚动计数值为1,同时接收端还会对外发出发送端正在重启的通知信息。当在另一条CAN总线上传输的、滚动计数值为0的PDO报文后传输到接收端时,因a=0,也会被作为有效报文,同时期望计数器的计数值b仍然为1。接下来,假设发送端又将第二帧PDO报文同时在两条CAN总线上进行传输,此时第二帧PDO报文的滚动计数值a=1。如果接收端又通过其中一条CAN总线先接收到该帧报文,由于b=a=1,接收端会判断该PDO报文为有效报文,并使b=1+1=2。而当在另一条CAN总线上传输的、滚动计数值为1的PDO报文后传输到接收端时,因1<2,会被接收端判断为无效报文而被舍弃(即后接收到的PDO报文的滚动计数值a落入无效接收窗口的范围内)。依此类推,假设接收端通过其中一条CAN总线先接收到了a=255的这一帧有效报文,因此时期望计数器的计数值b也等于255,则会使b=1。此时,期望发送端发送的PDO报文的滚动计数值a为1,无效接收窗口对应的PDO报文的滚动计数值范围由期望接收到的PDO报文之前的连续10帧PDO报文的计数值共同组成,即a=246~255,只要是发送端发送过来的PDO报文的滚动计数值a为246~255中的任意一者都算是落入了无效接收窗口的范围,因此,当在另一条CAN总线上传输的、滚动计数值为255的PDO报文后传输到接收端时,因255属于无效接收窗口的范围内,还是会被接收端判断为无效报文而被丢弃。

当冗余CAN总线通信系统的硬件在运行过程中发生了某些临时性的故障,比如CAN发送器和接收器端子的松动导致在一定时间内发送端发送的数据无法传输至接收端,本申请因为设置了无效接收窗口可以避免因为这种故障导致系统停止工作,也能保障系统运行具有良好的实时性。

如果一条总线上的报文发生阻塞,导致报文发送延迟,当总线恢复正常后,延迟的总线发送给接收端的报文因为其计数值小于另一边总线接收的报文的计数值,所以会被舍弃。而如果一条CAN线总线负载较低,运行状态良好,则接收到最新的滚动计数值,也即意味着该帧报文为最新的数据,所以该数据将会应用到系统中,从而满足系统的实时性需求。

图3示出了根据本发明一实施例的一种冗余CAN总线通信系统的数据通信方法的接收端流程示意图,图3示出了接收端如何判断接收的PDO报文为有效报文的一个具体应用实例。然而,图3所示的接收端工作流程图仅为示意性的,并不应当视为对本申请限制,例如,接收端也可以先判断a是否为0,而后判断b是否为0,接收端也可以采用其它的算法判断接收的PDO报文是否为有效报文。

根据图3的记载,前述的步骤b进一步包括以下步骤:

接收端每接收到发送端发送的一帧PDO报文时,先判断所述期望计数器的计数值b 是否为0,如果b=0,则判断接收到的PDO报文为有效报文;

如果b≠0,接收端判断接收到的PDO报文的滚动计数值a是否为0,如果a=0,则判断接收到的PDO报文为有效报文;

如果a≠0,接收端判断期望计数器的计数值b与该接收到的PDO报文的滚动计数值a的差值c是否小于0,c=a-b;如果c不小于0,则直接判断c是否大于等于0且小于预设的窗口宽度M,如果c<0,则将c+N赋给c后再判断c是否大于等于0且小于预设的窗口宽度M;

如果接收端判断c是大于等于0且小于预设的窗口宽度M,则判断接收到的PDO报文为有效报文,即接收到的PDO报文的滚动计数值a处于正常接收窗口对应的PDO报文滚动计数值范围内。如果接收端判断c不是大于等于0且小于预设的窗口宽度M,则进一步判断c是否大于等于M且小于报文有效但发生故障的阈值T,T=N-M;

如果接收端判断c是大于等于M且小于报文有效但发生故障的阈值T,则接收端判断接收到的PDO报文为有效报文并对外发出故障报警信息;如果接收端判断c不是大于等于M且小于报文有效但发生故障的阈值T,则c应该是大于等于T且小于N,此时判断接收到的PDO报文为无效报文,即接收到的PDO报文的滚动计数值a处于无效接收窗口对应的PDO报文滚动计数值范围内。

举例而言,在预设的窗口阈值M=10、N=255的情况下,则报文有效但发生故障的阈值T=N-M=255-10=245。假设当前期望计数器的计数值b为200,如果接收端接下来接收到PDO报文的滚动计数值a为190~199中的任一者时,则判断这些PDO报文的滚动计数值a处于无效接收窗口对应的PDO报文滚动计数值范围内,接收的PDO报文为旧的无效报文。如果接下来接收到PDO报文的滚动计数值a为200~210中的任一者时,则判断这些PDO报文的滚动计数值a处于正常接收窗口对应的PDO报文滚动计数值范围内,接收的PDO报文为有效报文。如果接下来接收到PDO报文的滚动计数值a为0~189或211~255中的任一者时,则判断接收到的PDO报文为有效报文并对外发出故障报警信息。

在实际应用如果通过图3所示的算法流程则是按照以下方式来计算和判断的。假设在当前期望计数器的计数值b为200时,冗余CAN总线通信系统发生了因此故障,随后接收端接收到了滚动计数值a等于10的报文。由于c=a-b=-190,小于0,则使c=N+c=255-190=65。然后判断65是否大于等于0且小于预设的窗口阈值M,M=10。由于65大于10,因此接收端接下来判断65是否大于等于M且小于报文有效但发生故障的阈值T,T=245。由于65大于10且小于245,因此,接收端判断接收到的PDO报文为有效报文并对外发出故障报警信息。这与前面的记载是相吻合的。

本实施例中,接收方端对接收到的报文进行了过滤,从而能充分保证接收数据的一致性,并最大程度避免接收端产生新旧数据的震荡,同时也高了数据接收的实时性。

显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1