> 文章列表 > CAPL脚本DBLookup函数动态访问CAN 报文的属性

CAPL脚本DBLookup函数动态访问CAN 报文的属性

CAPL脚本DBLookup函数动态访问CAN 报文的属性

  • 🍅 我是蚂蚁小兵,专注于车载诊断领域,尤其擅长于对CANoe工具的使用
  • 🍅 寻找组织 ,答疑解惑,摸鱼聊天,博客源码,点击加入👉【相亲相爱一家人】
  • 🍅 玩转CANoe,博客目录大全,点击跳转👉

📘前言

目录

  • 📘前言
  • 📙 静态访问CAN报文属性
  • 📙 DBLookup 动态访问CAN报文属性
  • 🌎总结

📙 静态访问CAN报文属性

在CANoe工程中,只要加载了dbc文件,那么dbc文件中定义的报文属性都是可以直接获取的
大致分为3种类型:属性,信号和id/dlc/txnode

CAPL脚本DBLookup函数动态访问CAN 报文的属性

  • 属性在DBC文件中的定义如下图:
    CAPL脚本DBLookup函数动态访问CAN 报文的属性

  • 简单代码演示:

on key 'b'  
{     message EngineState msg;//用变量的方式直接访问write("报文属性-id :0x%x",msg.id);write("报文信号-DLC :%d",msg.dlc);write("报文属性-周期:%d",msg.GenMsgCycleTime);//直接访问 2write("报文属性-id :0x%x",EngineState.id);write("报文信号-DLC :%d",EngineState.dlc);write("报文属性-周期:%d",EngineState.GenMsgCycleTime);
}

输出:

Program / Model 报文属性-id :0x123
Program / Model 报文信号-DLC :2
Program / Model 报文属性-周期:100
Program / Model 报文属性-id :0x123
Program / Model 报文信号-DLC :2
Program / Model 报文属性-周期:100


📙 DBLookup 动态访问CAN报文属性

  • 在测试过程中,可以通过DBLookup函数来搜索DBC中报文的信息
  • 注意这个DBLookup函数只是访问DBC中的报文信息,而 this.idthis.dlc是总线上获取的报文信息。对于仿真节点,CANoe按照加载的DBC发送报文信息,但是对于真实ECU,它不一定按照DBC中定义的数据长度,属性发送。这在实际工程项目中正是我们需要测试的一个测试点
  • DBLookup能够访问的属性如下图所示

CAPL脚本DBLookup函数动态访问CAN 报文的属性


  • 代码演示
on message *
{if(this.id == 0x123){write("msg.ID :%s",DBLookup(this).Name);write("msg.DLC :%d",DBLookup(this).DLC);write("msg.DLC :%s",DBLookup(this).Transmitter);write("msg.DLC :%f",DBLookup(this).GenMsgCycleTime);}
}

CAPL脚本DBLookup函数动态访问CAN 报文的属性


  • 下面带式我官方实例中利用DBLookup函数检查选择节点的所有报文的发送的DLC是否正确(真实ECU测试才有意义)
  • 为了方便理解,我简化了官方实例的代码
// checks for all messages of a specific node that the DLC is correct.variables
{// system under testchar gNodeUnderTest[30] = "EngineState";}
on message *
{// check all frames from one node for the correct dlc and count them// is the frame defined in the database?if (DBLookup(this)){// is the frame defined as Tx-Frame for the node under test?// note: compare is case sensitiveif (strncmp(DBLookup(this).Transmitter, gNodeUnderTest, 30) == 0){// check if the DLC is correct; if not, remember the minimum// or maximum DLC of the received framesif (this.dlc != DBLookup(this).DLC){write("%s 的DLC发送错误,DBC中定义为:%d,实际收到为:%d",this.name,DBLookup(this).DLC,this.dlc);}}   }     
}

在这里插入图片描述

🌎总结

CAPL脚本DBLookup函数动态访问CAN 报文的属性

CAPL脚本DBLookup函数动态访问CAN 报文的属性

  • 🚩要有最朴素的生活,最遥远的梦想,即使明天天寒地冻,路遥马亡!
  • 🚩如果这篇博客对你有帮助,请 “点赞” “评论”“收藏”一键三连 哦!码字不易,大家的支持就是我坚持下去的动力。
    CAPL脚本DBLookup函数动态访问CAN 报文的属性