CANoe 仿真

本文介绍如何使用CANoe工具进行数据记录并转换为CSV格式,再通过CAPL编程实现数据的回放,包括创建不同类型的刺激源、定时发送消息及控制刺激源的启动和停止。

应用:

实际应用中遇到一些难以复现的case,需要将当时录取的数据重新注入至can线,以复现当时的工况,以便于相应控制器录取当时的内部变量。

步骤1:

使用CANoe自带工具Logging file Conversion将数据转为CSV格式。
在这里插入图片描述
note:可以进行如下设置,根据自己需要进行选择。
在这里插入图片描述
在这里插入图片描述

步骤2

  1. 配置Capl test module “MyTestModule”.
    配置“MyTestModule”
  2. 设置按键“a”时仿真测试开始。
    在这里插入图片描述
    3.相应代码
/*@!Encoding:1252*/
includes
{
  
}

variables
{
  // variables for the stimuli handling:
  dword StimEV1, StimEV2, StimSV1, StimSV2, StimSig1, StimSig2, StimSig3, StimSig4;
  // Creating a message that can be send via CAPL
  message frmSix myMsg = {DLC = 8};
  msTimer MyTimer;
}

on preStart
{
  // executed in the role of a developer
  ChkConfig_Init();
}

void MainTest ()
{
  // set the timer for cyclic sending of the message frmSix:
  setTimerCyclic(MyTimer,20);
  
  // Start the Test Case which in turn starts the stimuli:
  TC_Stimuli();
}

testcase TC_Stimuli()
{
  // Create Stimulus for System Variable cyclical - time column of CSV is NOT taken into account:
  StimSV1= StmCreate_CSV(sysvar::MyNameSpace::MySV1,sigOne, 200, "MyCSV.csv");
  // Create Stimulus for System Variable non-cyclical - time column of CSV is taken into account:
  StimSV2= StmCreate_CSV(sysvar::MyNameSpace::MySV2,sigOne, "MyCSV.csv");
  
  // Create Stimulus for Environment Variable cyclical - time column of CSV is NOT taken into account:
  StimEV1 = StmCreate_CSV(MyEnvVar1, sigTwo, 200, "MyCSV.csv");
  // Create Stimulus for Environment Variable non- cyclical - time column of CSV is taken into account:
  StimEV2= StmCreate_CSV(MyEnvVar2, sigTwo, "MyCSV.csv");
  
  // Create a Stimulus for a signal non- cyclical, signal send via CAPL:
  StimSig1 =StmCreate_CSV(myMsg,sigEleven, "MyCSV.csv");
  //Create a Stimulus for a signal non-cyclical, signal send via Interaction Layer:
  StimSig2 =StmCreate_CSV(sigThree, "MyCSV.csv");
  // Create a Stimulus for a signal cyclical, signal send via CAPL:
  StimSig3 =StmCreate_CSV(myMsg, sigTwelve,200,"MyCSV.csv");
  //Create a Stimulus for a signal cyclical, signal send via Interaction Layer:
  StimSig4 =StmCreate_CSV(sigTwo,200,"MyCSV.csv");
  
  //Start Stimuli:
  StmControl_Start(StimSV1);
  StmControl_Start(StimSV2);
  StmControl_Start(StimEV1);
  StmControl_Start(StimEV2);
  StmControl_Start(StimSig1);
  StmControl_Start(StimSig2);
  StmControl_Start(StimSig3);
  StmControl_Start(StimSig4);
  
  //testWaitForTimeout(10000);设置停止条件,可以自行进行设置。
  TestWaitForSignalOutsideRange(sigTwelve, 0, 300, 5000);
  // Stop Stimuli:
  StmControl_Stop(StimSV1);
  StmControl_Stop(StimSV2);
  StmControl_Stop(StimEV1);
  StmControl_Stop(StimEV2);
  StmControl_Stop(StimSig1);
  StmControl_Stop(StimSig2);
  StmControl_Stop(StimSig3);
  StmControl_Stop(StimSig4);
  
}

// send message via CAPL (cyclical):
on timer MyTimer
{
  output(myMsg);
}


on preStop
{
  // Destroy stimulus:
  StmControl_Destroy (StimSV1);
  StmControl_Destroy (StimSV2);
  StmControl_Destroy (StimEV1);
  StmControl_Destroy (StimEV2);
  StmControl_Destroy (StimSig1);
  StmControl_Destroy (StimSig2);
  StmControl_Destroy (StimSig3);
  StmControl_Destroy (StimSig4);
}

说明

  1. 可以以此为例根据自己项目往CAN线发送数据,计算MsgCounter and CRC value;
  2. CSV文件中的名称务必和程序中的一致。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值