2. 配置同步帧
任务说明
本案例目标是在FlexRay总线配置工具中完成同步帧(Sync Frame)的配置,具体包括:设置同步帧标识符(Sync Frame ID)和发送周期,并验证配置后的同步帧能够在通信循环中正确发送。同步帧是FlexRay网络时间同步的基础,每个通信循环中,同步帧由主节点(或配置为同步节点的控制器)在固定时隙发送,所有节点据此校正本地时钟。
配置实现
以下以Vector CANoe/CANalyzer的FlexRay配置为例,展示如何通过配置工具设置同步帧。核心配置项包括:帧ID(Frame ID)、时隙(Slot ID)、周期(Cycle)以及同步帧属性(Sync Frame属性)。同步帧必须满足:帧ID与时隙ID一致(FlexRay规范要求同步帧的帧ID等于其所在时隙编号),且周期必须为通信循环周期的整数倍(通常设为1,即每个循环都发送)。
配置步骤与代码
在CANoe中,通过CAPL程序动态配置同步帧参数,或通过XML配置文件静态定义。以下为最小可复现的XML配置片段,定义了一个同步帧:
<FlexRayConfiguration>
<Cluster>
<Channel name="A">
<Schedule>
<Slot id="10" type="Static">
<Frame>
<Name>SyncFrame_10</Name>
<FrameId>10</FrameId>
<Pdu name="SyncPdu">
<Length>8</Length>
</Pdu>
<Timing>
<CycleRepetition>1</CycleRepetition>
</Timing>
<SyncFrame>true</SyncFrame>
</Frame>
</Slot>
</Schedule>
</Channel>
</Cluster>
</FlexRayConfiguration>
若使用CAPL脚本在运行时配置并监控同步帧发送,核心代码如下:
/* CAPL脚本:配置并验证同步帧 */
variables
{
const int gSyncFrameId = 10; // 同步帧ID(必须等于时隙ID)
const int gSyncSlotId = 10; // 时隙ID
const int gCycleRepetition = 1; // 周期:每个通信循环发送
}
on start
{
// 在通道A的静态时隙10配置同步帧
frSetSlotConfig(1, gSyncSlotId, cFrSlotType_Static, gCycleRepetition);
frSetFrameConfig(1, gSyncFrameId, gSyncSlotId, cFrFrameType_Static, 8, gCycleRepetition);
frSetFrameSync(1, gSyncFrameId, 1); // 1=使能同步帧属性
write("同步帧配置完成: ID=%d, Slot=%d, Cycle=%d", gSyncFrameId, gSyncSlotId, gCycleRepetition);
}
on frFrame
{
// 监控同步帧是否正确发送
if (this.ID == gSyncFrameId && this.Channel == 1)
{
if (this.FrameType == cFrFrameType_Static)
{
write("收到同步帧: ID=%d, 周期计数=%d", this.ID, this.CycleNo);
}
}
}
关键配置说明
- 帧ID与时隙ID一致:FlexRay协议规定同步帧的帧ID必须等于其所在静态时隙编号,否则网络时间同步无法建立。
- 周期设置:
CycleRepetition=1表示每个通信循环(Communication Cycle)都发送该同步帧。若设为N,则每N个循环发送一次,但同步帧通常要求每个循环发送以保证同步精度。 - 同步帧属性:必须显式将
SyncFrame属性置为true(或在CAPL中调用frSetFrameSync使能),否则该帧仅作为普通静态帧发送,不参与时间同步。
验证方法与判定标准
完成配置后,按以下步骤验证同步帧是否正确发送:
- 启动CANoe仿真,连接FlexRay通道(或使用总线仿真模式)。
- 在Trace窗口添加FlexRay协议过滤器,观察静态时隙10的帧。
- 判定标准:
- 在每个通信循环中,时隙10均出现帧ID=10的帧;
- 该帧的“Sync Frame”属性在Trace中显示为“Yes”;
- 网络中的其他节点(或仿真分析工具)能基于该帧完成时钟同步,即同步状态(Sync State)变为“Sync”而非“No Sync”。
若Trace中未出现周期性的帧ID=10,或同步状态未建立,请检查:时隙ID是否与帧ID一致、周期设置是否为1、同步帧属性是否已使能。
判定标准汇总
配置成功的最终判定条件为:在总线仿真或实际网络中,每个通信循环的静态时隙10均能捕获到帧ID=10且同步标志为“Yes”的帧,同时网络同步状态指示为已同步。若使用CAPL脚本,on frFrame事件处理器会持续输出收到的同步帧信息,可作为实时验证依据。