了解一段时间的FlexRay协议后,感觉FlexRay就是一个调度表,类似时分多址的形式。
在Capl脚本中,Flexray帧对象frFrame的属性困扰了很久其中关于id这一块上踩了巨坑


和Can/Lin不同,FlexRay的id由三部分组成,在数据库中可以看到是Slot、Base Cycle和Cycle Repetion,但对应到脚本中的属性并没有全部出现。这导致后期我在脚本中去确认数据帧的时候无法定位。
在多次试错后发现其中的对应关系:
数据库: Capl:
slot fr_slotID
Base Cycle fr_cycleOffset
Cycle repetition fr_cycleRepetition
其中,slot指的是插槽,对应的是时刻表中的一个位置;Base Cycle类似于一个slot上的时间位置,Cycle repetition就是周期了。
这里可以把时刻表理解为一个二维坐标系,x轴代表的是slot(插槽),y轴代表的是slot时间位,如果同一个slot上有多个数据帧,那么这些帧就可以理解为动态帧,例如插槽10上有4个帧,周期为4,那么这四个帧的id就是10-0-4,10-1-4,10-2-4,10-3-4,对应坐标轴上就是(10,0)、(10,1)、(10,2)、(10,3),这里的y坐标0、1、2、3就是时间位了。
那时间位的意义是什么呢?当我们把时刻表理解为一个二位坐标系的时候,每一个周期只会发送y=n(0<=n<64)这条时间线上的所有帧,这个称之为小周期,当所有的数据帧都被发送了一次后,称之为大周期。
在数据库中的时刻表就是这个意思,但X,Y轴的举例可能和我是反的。

区分了动态帧和静态帧,这里顺带提一下怎样用脚本发送数据帧。在Can/Lin中可以直接使用output发送,但在flexray中需要将其设置到时刻表中才可以,函数为:
///帧需要提前申明
//动态帧的发送
frOutputDynFrame(DynFrame);
//静态帧的发送
frUpdateStatFrame(StatFrame);
关于里面的字符串处理、属性获取和含义等等还有很多坑,慢慢踩、慢慢聊!新人入坑,如有错误,烦请指正!