本发明涉及汽车仪can总线信号发送技术,尤其涉及到基于时间片分配的can信号发送算法。
背景技术:
近年来汽车中的can总线信号越来越多,can总线负载率越来越大,而在整车对can信号发送的实时性要求也越来越高,can信号在车载功能占比也越来越大,为了准确测试出仪表的功能,can信号发送的周期必须符合要求,拥有精准的can信号发送周期算法越来越重要。
目前常用的can信号周期发送发放有以下几种:
①定时发送算法:can信号的周期一般从10ms~5s不等,一般can信号的数量在现有车载系统中大概有100~150条左右,最常用的算法是生成定时器线程,定时器周期为10ms,首次将所有can信号前部发送出去,到下一定时周期如果can信号周期等于已发送时间在将此can信号发送出去。
②多线程发送:在原有的基础上将can信号分类,例如将10ms周期信号分成一组,20ms周期信号分成一组,50ms周期信号分成一组……,每一组信号生成一个发送线程,发送线程的定时周期与can信号周期相同,当发送线程的定时时间到达时,将该组can信号发送出去。
以上两种方式都存在一些弊端,①中的发送方式存在两个问题,一是当发送信号的数量增大后发送周期的准确率快速下降,二是此种发送方式会存在can总线在信号发送时段负载率很大,信号不发时段负载率很小;②中方法改善了①中的信号发送周期不准的问题,但是当某一周期信号数量比较多,发送周期也会变得不准确,另外因为发送线程太多会造成系统繁忙资源占用量大,会间接导致发送时间不准。
技术实现要素:
发明目的:本发明的目的是针对目前技术中的不足,提供了基于时间片分配的can信号发送算法,在于克服了上述现有技术中的不足之处,提供一种资源占用少、周期准确、can总线负载波动小,易于实现的汽车can总线信号周期发送技术。
技术方案:为实现上述目的,本发明提供了一种基于时间片分配的can信号发送算法,其特征在于,包括有如下步骤:。
1、can信号的输入来自于外部can数据库文件,系统程序读取数据库文件获取can信号及can信号发送周期,以can信号发送周期为准按照从小到大排序,信号周期相同时按照can信号值从小到大排序;
2、读取数据库文件获取can传输的波特率,根据波特率计算时间片时间,根据can信号排序结果给每一个can信号分配id;
3、根据时间片时间开启定时发送线程,等待定时器时间到并将id置为0;
4、定时器时间到达将id+1根据上文公式计算是否需要发送,若需要发送将发送该id的can信号,发送完成判断id值是否为最大;
5、若不需要发送则判断id值是否为最大;
6、若未到达最大值将id+1,再次判断是否需要发送该can信号;
7、若已经到达最大值,跳转到等待定时时间到达。
有益效果:
1.发送can信号周期精准;
2.使用单线程发送系统资源占用少;
3.发送过程中can总线负载波动小;
4.算法简单对操作系统要求低。
附图说明
图1为本发明中can信号周期发送程序逻辑图;
图2为本发明中can信号id、名称、周期示意表。
具体实施方式
下面结合附图和具体实施方式,进一步阐明本发明,应理解下述具体实施方式仅用于说明本发明而不用于限制本发明的范围。需要说明的是,下面描述中使用的词语“前”、“后”、“左”、“右”、“上”和“下”指的是附图中的方向,词语“内”和“外”分别指的是朝向或远离特定部件几何中心的方向。
如图1-2所述的基于时间片分配的can信号发送算法,在车载can总线系统中,can总线波特率一般有(125k,250k,500k)等几种常用波特率,以500k波特率为例,一帧can信号发送时间大约为250us,本算法采用一帧can信号的发送时间为定时器的定时周期250us,如图2所示将can信号按照周期顺序从小到大排列,且将can信号赋予唯一id值,定时器设置定时器计数器tcount(定时器没到达一次,将计数器+1),以及can信号周期tcyclic;在车载can总线系统中,can信号周期最小值为10ms;本算法将10ms按照250us的时间片分为40等分,即40个时间片;将限号按id值分为排序id值取40的余数得到的值作为该can信号的时间片值,当can信号时间片值与当前定时器时间片值一致时发送该can信号。
在此本算法将通过以上参数运用以下工式的形式表达此算法:temp1=(tcount)mod(tcyclic/250us),temp2=(id)mod(10ms/250us),当定时器周期到达且temp1==temp2是发送该id信号。
基于时间片分配的can信号发送算法的输入来自于外部can数据库文件(包含要发送的can信号以及can信号发送周期),程序将读取数据库文件获取can信号及can信号发送周期,以can信号发送周期为准按照从小到大排序,信号周期相同时按照can信号值从小到大排序;读取数据库文件获取can传输的波特率,根据波特率计算时间片时间,根据can信号排序结果给每一个can信号分配id;根据时间片时间开启定时发送线程,等待定时器时间到并将id置为0;定时器时间到达将id+1根据上文公式计算是否需要发送,若需要发送将发送该id的can信号,发送完成判断id值是否为最大;若不需要发送则判断id值是否为最大;若未到达最大值将id+1,再次判断是否需要发送该can信号;若已经到达最大值,跳转到等待定时时间到达。
本发明方案所公开的技术手段不仅限于上述实施方式所公开的技术手段,还包括由以上技术特征任意组合所组成的技术方案。
1.基于时间片分配的can信号发送算法,其特征在于,包括有如下步骤:
1、can信号的输入来自于外部can数据库文件,系统程序读取数据库文件获取can信号及can信号发送周期,以can信号发送周期为准按照从小到大排序,信号周期相同时按照can信号值从小到大排序;
2、读取数据库文件获取can传输的波特率,根据波特率计算时间片时间,根据can信号排序结果给每一个can信号分配id;
3、根据时间片时间开启定时发送线程,等待定时器时间到并将id置为0;
4、定时器时间到达将id+1根据上文公式计算是否需要发送,若需要发送将发送该id的can信号,发送完成判断id值是否为最大;
5、若不需要发送则判断id值是否为最大;
6、若未到达最大值将id+1,再次判断是否需要发送该can信号;
7、若已经到达最大值,跳转到等待定时时间到达。