基于一主多从式模块的CAN总线地址分配方法及装置与流程

文档序号:20781066发布日期:2020-05-19 21:14阅读:1997来源:国知局
基于一主多从式模块的CAN总线地址分配方法及装置与流程

本发明属于嵌入式系统领域,涉及模块化can通信网络的地址分配技术,具体涉及一种基于一主多从式模块的can总线地址分配方法及装置。



背景技术:

can总线协议,是iso国际标准化得串行通信协议,在工业自动化,汽车船舶,智能家庭管理,机器人网络互联等产业有广泛的应用。can总线具有简单,实用,高性能,可靠,传输距离远,抗干扰能力强等多方面的优点。传统的can通信网络中,需要预先设定好每个can通讯节点的地址,这些can地址不能重复,否则通讯会出现异常。而对于一主多从式模块化设备的应用场合,传统的硬件分配can地址满足不了模块化设备即插即用的地址分配需求,同样,也满足不了所有模块无差异竞争做主的需求。因此,亟需一种基于一主多从式模块的can总线智能分配地址的方法,来提供系统的灵活性,可扩展性和稳定性。



技术实现要素:

本发明的目的,在于提供一种基于一主多从式模块的can总线地址分配方法及装置,一方面解决了多模块can通讯节点自动进入一主多从运行方式的需求,另一方面多模块的can总线智能分配地址的要求。采用出厂模块自带唯一设备id号,运行过程中竞争当主,主从模块互发地址申请报文和地址分配报文的方式动态分配模块地址。并将设备id号和can地址对应表存储在各个模块中。实现了模块的可靠动态投退。

为了达成上述目的,本发明采用的技术方案是:基于一主多从式模块的can总线地址分配方法,包含如下步骤:

步骤s1:在每个模块上预先存储有唯一的设备id号;

步骤s2:各模块启动后,通过侦听can总线来竞争推选主模块,并存储所有模块设备id号,主模块给各从模块分配can地址;

步骤s3:各模块正常运行后,通过不断的侦听can总线,收集总线上的信息;主模块发送控制信息到总线,其他从模块依据控制信息进行调节并发送应答can报文。

进一步地,在步骤s3后还包括

当前系统正常运行后,新投入一个模块,通过侦听总线来确定自动成为从模块还是竞争做主模块。

进一步地,在步骤s3后还包括

当前系统正常运行后,退出一个模块,其他模块通过侦听总线来确定下一步操作。

各模块预先存储唯一的设备id号、各模块通过一定的控制策略竞争做主模块、系统正常运行时支持模块稳定投退。

进一步地,所述步骤s1中,设备id号的设定方法具体是:设备id号为出厂调试每个模块的时候根据当前utc时间以及所用dsp硬件id号生成,每个模块的设备id号是唯一的。

进一步地,所述步骤s2中竞争推选主模块的方法具体包括:

步骤s2-1:各模块同时上电后,首先会侦听总线,如果在预定时间内没有收到有主模块发出的控制报文,则向总线发送竞争信息;

步骤s2-2:在竞争阶段每个模块均收到所有模块的设备id号并存储下来,进行大小排序,通过比较所有模块的设备id号来确认自身的设备id号是否为所有模块中最小的;

步骤s2-3:如果设备id号最小,成为主模块,如果不是最小,则放弃竞争,成为从模块。

进一步地,所述步骤s2中主模块给各从模块分配can地址的方法具体包括:

步骤s2-4:主从模块确定后,主模块自身can地址设为1,并按照之前存储的各个模块设备id号内部分配好各设备id号对应的can地址;

步骤s2-5:从模块发送申请can地址报文,主模块收到申请后发送can地址分配报文给从模块;从模块收到can地址分配报文后进行匹配,如果该帧报文发送的设备id号与自身匹配,则获取该帧分配的can地址。

进一步地,所述步骤s2-1中,竞争信息can报文的帧id标识符的最后为本模块的设备id号。

进一步地,所述当前系统正常运行后,新投入一个模块,通过侦听总线来确定自动成为从模块还是竞争做主模块,具体是:

当前系统已经运行后,如果新投入一个模块,新上电的模块首先侦听总线,确认是否收到有主模块发出的控制信息,如果收到控制信息确定有主模块,新投入的模块自动确定为从模块,并发送申请can地址报文,主模块收到报文后存储下新投入模块的设备id号并发送can地址分配报文给该新投入的模块。

进一步地,所述当前系统正常运行后,退出一个模块,其他模块通过侦听总线来确定下一步操作,具体是:

如果主模块退出,各个从模块在预设时间内收不到来自主模块的控制信息,则各模块向总线发送竞争信息,开始新一轮的主模块竞争以及can地址分配;

从模块故障退出时,主模块在一定时间内收不到该从模块的应答报文,则确定该模块退出总线,并释放该模块can地址。

本发明同时提出了一种基于一主多从式模块的can总线地址分配装置,包括

设备id预设单元,用于在每个模块上预先存储有唯一的设备id号;

主从模块设定单元,用于各模块启动后,通过侦听can总线来竞争推选主模块,并存储所有模块设备id号,主模块给各从模块分配can地址;

主从模块运行控制单元:各模块正常运行后,通过不断的侦听can总线,收集总线上的信息;主模块发送控制信息到总线,其他从模块依据控制信息进行调节并发送应答can报文。

进一步地,上述装置还包括:

新模块投入控制单元,用于控制新模块的投入操作,当前系统正常运行后,新投入一个模块,通过侦听总线来确定自动成为从模块还是竞争做主模块。

模块退出控制单元,用于控制模块的退出操作,当前系统正常运行后,退出一个模块,其他模块通过侦听总线来确定下一步操作。

采用本can总线智能分配地址的方法,具有以下有益效果:

采用纯软件控制策略,无需各模块硬件差异化配置。各模块即插即用,投退不会对已运行系统通讯产生影响。始终保证一主多从模式运行,提高了系统的可靠性和安全性

附图说明

图1是本发明的单个模块上电逻辑框图。

图2是本发明的部分can通信标识符格式。

图3是本发明的系统运行时序图。

具体实施方式

以下将结合附图,对本发明的实施例进行详细说明。

本发明一实施例提供的基于一主多从式模块的can总线地址分配方法,包含如下步骤:

步骤s1:在每个模块上预先存储有唯一的设备id号。id号为出厂调试每个模块的时候,根据当前utc时间以及所用dsp硬件id号生成一个20bit的设备id号,每个模块的设备id号是唯一的。

步骤s2:各模块启动后,通过侦听can总线来竞争推选主模块,并存储所有模块设备id号,主模块给各从模块分配can地址;

各模块同时上电后,首先会侦听总线,如果一段时间内没有收到有主模块发出的控制报文,则向总线发送竞争信息。竞争信息can报文的帧id标识符后20位为本模块的设备id号。在竞争阶段每个模块均收到所有模块的设备id号并存储下来,进行大小排序,通过比较所有模块的设备id号来确认自身的设备id号是否为所有模块中最小的。如果最小,成为主模块,如果不是最小,则放弃竞争,成为从模块。

主从模块确定后,主模块自身can地址设为1,并按照之前存储的各个模块设备id号内部分配好各设备id号对应的can地址。从模块发送申请can地址报文,主模块收到申请后发送can地址分配报文给从模块。从模块收到can地址分配报文后进行匹配,如果该帧报文发送的设备id号与自身匹配,则获取该帧分配的can地址。

步骤s3:各模块正常运行后,通过不断的侦听can总线,收集总线上的信息。主模块发送控制信息到总线,其他从模块依据控制信息进行调节并发送应答can报文。

本发明的另一实施例中,除了上述步骤外,还包括当前系统已经运行后,如果新投入一个模块,新上电的模块首先侦听总线,确认是否收到有主模块发出的控制信息,如果收到控制信息确定有主模块,新投入的模块自动确定为从模块,并发送申请can地址报文,主模块收到报文后存储下新投入模块的设备id号并发送can地址分配报文给该新投入的模块。

当前系统正常运行后,退出一个模块:如果主模块退出,各个从模块在一定的时间内收不到来自主模块的控制信息,则各模块向总线发送竞争信息,开始新一轮的主模块竞争以及can地址分配。

如果从模块故障退出时,主模块在一定时间内收不到该从模块的应答报文,则确定该模块退出总线,并释放该模块can地址。如图3所示为本发明的系统运行时序图。

如图1所示是本发明的单个模块上电逻辑框图。在模块上电阶段,会经过如下的控制逻辑:

s21.各个模块会在初始化的一段时间内侦听can总线上,是否有主模块发来的控制信息报文。控制信息can报文的29位帧id格式如下图2所示,bit28为0(高优先级),表明can总线上目前已有主模块存在,则该上电的模块确认自己为从模块,转至步骤s5;如果没有收到控制信息,表明can总线上目前还没有主模块存在,则进入竞争做主阶段,转至步骤s22。

s22.在竞争做主阶段,所有模块发送竞争信息can报文,竞争信息can报文的29位帧id标识符中后20位为本模块的设备id号(每个模块唯一),格式如下图2所示,bit28为1(低优先级);bit27:0(0表示主模块未定,竞争当主);bit19~0:设备id号。则在竞争做主阶段每个模块均收到所有模块的设备id号并存储下来,进行大小排序,通过比较自己的设备id号是否为所有模块中最小的。如果最小,成为主模块,转至步骤s23;如果不是最小,则放弃竞争,成为从模块,转至步骤s25。

s23.主模块默认can地址设为1,并按照之前存储的各个模块设备id号分配对应的can地址,转至步骤s24。

s24.主模块如果收到从模块的can地址申请报文,则发送can地址分配报文给从模块。格式如下图2所示,bit28为1(低优先级);bit26~20:分配给从模块的can地址(2~127);bit19~0:从模块设备id号。转至步骤s26。

s25.从模块发送申请can地址报文给主模块,格式如下图2所示,bit28:1(低优先级);bit27:1(1表示主模块已定,申请can地址)bit19~0:设备id号;并在收到can地址分配报文后进行匹配,如果该帧报文发送的设备id号与自身匹配,则获取该帧分配的can地址。

s26.主模块正常运行阶段,发送控制报文给各从模块,如果一段时间内未收到某一从模块的应答报文,则判断该从模块退出,并释放存储的该模块can地址和设备id号。如果收到新的模块的can地址申请报文,则更新存储的模块设备id号与can地址的对应表。转至步骤s24。

本发明一实施例还以供了基于一主多从式模块的can总线地址分配装置,包括:

设备id预设单元,用于在每个模块上预先存储有唯一的设备id号;

主从模块设定单元,用于各模块启动后,通过侦听can总线来竞争推选主模块,并存储所有模块设备id号,主模块给各从模块分配can地址;

主从模块运行控制单元:各模块正常运行后,通过不断的侦听can总线,收集总线上的信息;主模块发送控制信息到总线,其他从模块依据控制信息进行调节并发送应答can报文。

新模块投入控制单元,用于控制新模块的投入操作,当前系统正常运行后,新投入一个模块,通过侦听总线来确定自动成为从模块还是竞争做主模块。

模块退出控制单元,用于控制模块的退出操作,当前系统正常运行后,退出一个模块,其他模块通过侦听总线来确定下一步操作。

以上实施例仅为说明本发明的技术思想,不能以此限定本发明的保护范围,凡是按照本发明提出的技术思想,在技术方案基础上所做的任何改动,均落入本发明保护范围之内。

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