1 目的
利用CANoe在两路CAN通道之间创建一个网关,通过CAPL实现CAN1、CAN2通道间的报文转发,并进行故障注入测试(通过改变某些信号的值)。
(本实例仅用于博主学习记录)
2 步骤
- 创建一个两路通道(CAN1、CAN2)的工程文件
- 在CAN1新增一个Node节点,并命名为GW,并将node的Buses设置为CAN1+CAN2(如下图,此时CAN2也会同步出现一个GW节点)
- 将dbc复制一份,并分别给CAN1、CAN2加载一份
- 双击GW节点铅笔按钮,开始写CAPL脚本(如下),并将脚本文件保存至相应文件夹
/*@!Encoding:936*/
includes
{
}
variables
{
}
on message CAN1.* //将CAN1通道的报文透传(转发)给CAN2
{
message CAN2.* m;
if(this.DIR==RX) // if it is a received frame
{
if(this.CAN==1)
{
m=this;
output(m); // send it to the other channel
}
}
}
//on message CAN2.* //将CAN2通道的报文透传(转发)给CAN1,这里暂时不用
//{
// message CAN1.* m;
// if(this.DIR==RX) // if it is a received frame
// {
// if(this.CAN==2)
// {
// m=this;
// output(m); // send it to the other channel
// }
// }
//}
on message CAN1.0x506 //将CAN1 ID为506的报文,修改部分信号的值后再转发给CAN2
{
message CAN2.0x506 m;
// this is an example for a message that will be manipulated before it is sent on CAN2
if (this.DIR==RX) // if this message is received
{
if(this.CAN==1)
{
m=this;
// m.Byte(0)=0x31; // 第1个字节
// m.Byte(1)=0x31; // 第2个字节
// you can use signal-based access as well: m.SignalName = ....
output(m);
}
}
}
- 上位机输出CAN(DB9接口)接入CANoe CAN2通道,CANoe CAN3通道接入上位机原本接入的Control CAN(上位机<-->CANoe<-->Control CAN)
- 运行工程文件
3 结果展示
文章来源:https://www.toymoban.com/news/detail-525057.html
(注:上图展示并未对506的信号值进行修改,所以CAN1、CAN2的报文传递的数据完全一样)文章来源地址https://www.toymoban.com/news/detail-525057.html
到了这里,关于如何利用CANoe在两路CAN通道之间创建网关(gateway)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!