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使能),否则该帧仅作为普通静态帧发送,不参与时间同步。

验证方法与判定标准

完成配置后,按以下步骤验证同步帧是否正确发送:

  1. 启动CANoe仿真,连接FlexRay通道(或使用总线仿真模式)。
  2. 在Trace窗口添加FlexRay协议过滤器,观察静态时隙10的帧。
  3. 判定标准:
    • 在每个通信循环中,时隙10均出现帧ID=10的帧;
    • 该帧的“Sync Frame”属性在Trace中显示为“Yes”;
    • 网络中的其他节点(或仿真分析工具)能基于该帧完成时钟同步,即同步状态(Sync State)变为“Sync”而非“No Sync”。

若Trace中未出现周期性的帧ID=10,或同步状态未建立,请检查:时隙ID是否与帧ID一致、周期设置是否为1、同步帧属性是否已使能。

同步帧配置与验证时序 循环N 循环N+1 时间 静态段(Static Segment) 动态段(Dynamic Segment) Slot 10 同步帧 ID=10 周期=1(每循环发送) Slot 10 同步帧 ID=10 同步帧配置参数 帧ID: 10 时隙ID: 10 周期: 1 同步属性: 使能 帧ID必须等于时隙ID 每个通信循环发送一次

判定标准汇总

配置成功的最终判定条件为:在总线仿真或实际网络中,每个通信循环的静态时隙10均能捕获到帧ID=10且同步标志为“Yes”的帧,同时网络同步状态指示为已同步。若使用CAPL脚本,on frFrame事件处理器会持续输出收到的同步帧信息,可作为实时验证依据。