本发明属于汽车电子技术领域,具体涉及一种多路can报文实时接收的软件实现方法。
背景技术:
can总线上有多个信号帧,不同的信号帧代表不同的物理含义,每个信号帧有唯一的id。工程师在进行can总线发送接收时,需要根据can信号的不同id对其进行分类以便更好的进行can消息的解析提取工作。现有can进行接收时往往需要等待全部信息发送完成再对数据进行更新,这就造成了信息更新不及时。同时接收完全部信息后根据各个id进行分类,若是接收的信息较大又会导致处理复杂而且需要消耗大量的时间。
因此现在需要一种新的can接收方法,以便能够快速及时的接收can消息并对其进行分类处理。
技术实现要素:
1、要解决的技术问题
为解决现有技术存在的上述缺陷,本发明提供一种can接收方法,能够简单快速实时地对多路的can消息进行接收并分类。
2、技术方案
为了实现上述的目的,本发明提供了以下技术手段:
一种can接收方法,包括以下步骤:
s101:创建存储can信号的缓存区,同时创建一个全局变量作为标识位;
s102:利用can信号采集设备采集can信号;
s103:获取每个can信号id,所述can信号为扩展帧,每个can信号id为29位;
s104:获取id的优先级,依据优先级判断该id对应的信号帧应存储的缓存区;
s105:根据公式i=(sa-1)*pf_max+pf,判断该缓存区中应当进行更新的信息,
其中,i为数组下标,sa为对应id的源地址,pf为pdu格式,pf_max为该id下的pf个数;
s106:进行数据更新,同时标识位置1。
进一步的,在所述s101中,创建3个缓存区,并依据优先级对缓存区进行分类。
进一步的,每个缓存区的大小根据实际的物理量来设计,同一个优先级的canid中的pf值按照顺序排列,并在计算缓存区的大小时考虑需预留的pf。
进一步的,在所述s102中,采用中断的方式进行can信号的接收采集。
进一步的,在所述s106中,采用轮询的方式解析can信号,通过标识位是否置1来判断是否有can通讯,判断完成后将标识位清零。
3、有益效果:
与现有技术相比,本发明的一种can接收方法的有益效果在于:
本发明提供了一种can接收方法,采用接收完一帧can报文就及时对存储can消息的缓存进行更新,以便能够快速及时的接收can消息,同时在接收的过程中根据通讯协议对接收到的信号进行分类处理使得数据结构更加清晰,报文解析起来也更加有条理。
附图说明
图1为本发明实施例公开的can接收方法的流程图;
图2为本发明实施例公开的数据存储结构图;
图3为本发明采用的协议数据单元图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整的描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有创造性劳动前提下所获得的所有其他实施例,都属于本发明保护范围。
一种can接收方法,使用can扩展帧的29为标识符,根据canid的优先级分别创建多个接收缓存,用于接收不同优先级的报文,缓存的大小由实际应用中需要使用到的物理量来决定,每一个缓存数组的下标都与该优先级下的canid一一对应,通过以下公式实现:
i=(sa-1)*pf_max+pf
其中:i为数组下标,sa为对应id的源地址,pf为pdu格式,pf_max为该id下的pf个数;
can设置为接收中断,每接收一帧报文,利用canid的优先级和对应关系的公式对缓存的数据进行更新。
以下是本发明提供的一种具体的实施例,本实施例中以接收三个不同优先级的can信号帧为例进行说明,如图3所示,本发明采用中断的方法进行can信息的接收,包括以下步骤:
步骤s101:创建存储can消息的缓存,同时创建一个全局变量作为标识位。创建的数据结构具体参考图2,共有3个缓冲区,依据优先级的不同进行分类。每个缓存的大小需要根据实际的物理量来进行设计,需要注意的是同一个优先级的canid中的pf值应该按照顺序排列下来,如有需预留的pf,在计算缓存的大小时应该将其也计算在内。
步骤s102:利用can信号采集设备采集can信号。这里采用中断的方式进行can信号的接收采集。
步骤s103:获取每个can信号id。这里的can消息为扩展帧,id共有29位。
步骤s104:获取id的优先级,依据优先级判断该信号帧应存储的缓存。id的优先级由前最高的3位来表示,报文优先级可从最高0(000b)设置到最低7(111b),本实施例中取三个优先级。
步骤s105:根据公式i=(sa-1)*pf_max+pf,判断该缓存中应当进行更新的信息。sa为源地址由8个2进制位组成,当can线上存在多个不同的设备时可以使用不同的源地址用于区分。pf则可以用来区分同一个设备中不同的物理量,取值范围(0-239)。计算公式也是由sa和pf来进行标识。
步骤s106:数据更新同时标识位置1。更新缓存的同时也需要将标识置1以便确定是否有can报文进行更新,解析can消息的时候推荐采用轮询的方式进行解析。如需判断是否有can通讯则需区判断标识是否置1,判断完成后需将标识重新清零,以便下次的判断。