如何利用CAPL语言实现CAN信号收发监控(汽车系统仿真)

最近一段时间有好几个小伙伴问我如何利用CAPL语言开发出ECU与ECU之间的交互通信?今天就给大家简单讲一个例子,有需要做这方面的仿真同学可以参考下

汽车行业的小伙伴都知道,ECU与ECU之间是通过CAN/LIN线信号交互的,从一个ECU端到另一个ECU之间是经过网关转发,基本链路就是 ECU—GW(网关)—ECU。如下如所示

在这里插入图片描述

至于如何制作测试面板之类的我就不多加讲了,买本书看,或是百度下,这类的例子还是很多,如果有问题请私信我。
-------------------------------------------------以下内容是重点-----------------------------------------------------

实现步骤:
1.例如:IVI端控制驾驶模式(代码以事件循环型信号为例),VCU监控IVI发送的信号,然后处理后在返回信号,信号链路就是:IVI–GW–VCU
2.IVI端可以自己接一个硬件或是自己开发,我重点讲一下底层对手件是如何获取并处理后转发出去
以下是代码块,大家参考下改改基本上能用

/*@!Encoding:936*/

variables
{
 //设置两个变量和一个结构体
  message 0xIVI_ID msg;
  int EU_VCUPowerMode = 0;
  int EU_VCUPowerMode _TEMP;
  
  mstimer timer_0xVCU_ID;
  message  0xVCU_ID message_0xVCU_ID;
}
on start
{
  message_0xVCU_ID.EU_VCUPowerMode = EU_VCUPowerMode ;//临时变量赋值给VCU,然后外发
  settimer(timer_0xVCU_ID, xxx);
}
-----------------------------------------------------------------------------------
该段代码就是通过ON message 来实时监控IVI的信号,如果有变化,会自动将变化的值赋值给VCU

on message 0xIVI_ID 
{
  msg = this; 
  
  // IVIDriveModeSet 就是通过IVI设置驾驶模式,外发的信号,比如IVIDriveModeSet  = 2(运动),那么就将2这个值赋值给VCU的值
  if(msg.IVIDriveModeSet == 2)
  {
    message_0xVCU_ID.EU_VCUPowerMode = 1;
  }
  if(msg.IVIDriveModeSet == 3)
  {
    message_0xVCU_ID.EU_VCUPowerMode = 3;
  }
  if(msg.IVIDriveModeSet == 1)
  {
    message_0xVCU_ID.EU_VCUPowerMode = 2;
  }
}
-----------------------------------------------------------------------------------
//on timer内的代码就是VCU将在ON message获取的值进行处理,并对信号进行回复

on timer timer_0xVCU_ID
{  
  if(message_0xVCU_ID.EU_VCUPowerMode  == 1)
  {
    EU_VCUPowerMode _TEMP= 1;
  }
  if(message_0xVCU_ID.EU_VCUPowerMode == 2)
  {
    EU_VCUPowerMode _TEMP= 2;
  }
  if(message_0xVCU_ID.EU_VCUPowerMode == 3)
  {
    EU_VCUPowerMode _TEMP = 3;
  }
  if(message_0xVCU_ID.EU_VCUPowerMode == 0) //因为是信号是CE模式的,所以在信号返回0时在执行IVI端的请求
  {
    //这意识是将临时存储的值赋值给一个变量EU_VCUPowerMode ,这个变量将会赋值给message_0xVCU_ID.EU_VCUPowerMode ,见on start的代码
    EU_VCUPowerMode = EU_VCUPowerMode _TEMP;
  }
  settimer(timer_0xVCU_ID, xxx);
  output(message_0xVCU_ID);
}


以上就是详细的代码了,我在台架已经测试过,收发没有任何问题,基本上实现了利用CAPL语言实现仿真系统的收发功能,至于checksum以及RollingCounter等校验问题我的其他博客内容均有介绍。
如有不正之处或是其他问题,欢迎大家一起交流!

  • 5
    点赞
  • 91
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值