- 🍅 我是蚂蚁小兵,专注于车载诊断领域,尤其擅长于对CANoe工具的使用
- 🍅 寻找组织 ,答疑解惑,摸鱼聊天,博客源码,点击加入👉【相亲相爱一家人】
- 🍅 玩转CANoe,博客目录大全,点击跳转👉
📘前言
目录
- 📘前言
- 📙 静态访问CAN报文属性
- 📙 DBLookup 动态访问CAN报文属性
- 🌎总结
📙 静态访问CAN报文属性
在CANoe工程中,只要加载了dbc文件,那么dbc文件中定义的报文属性都是可以直接获取的
大致分为3种类型:属性,信号和id/dlc/txnode
-
属性在DBC文件中的定义如下图:
-
简单代码演示:
on key 'b'
{
message EngineState msg;
//用变量的方式直接访问
write("报文属性-id :0x%x",msg.id);
write("报文信号-DLC :%d",msg.dlc);
write("报文属性-周期:%d",msg.GenMsgCycleTime);
//直接访问 2
write("报文属性-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.id
或this.dlc
是总线上获取的报文信息。对于仿真节点,CANoe按照加载的DBC发送报文信息,但是对于真实ECU,它不一定按照DBC中定义的数据长度,属性发送。这在实际工程项目中正是我们需要测试的一个测试点 DBLookup
能够访问的属性如下图所示
- 代码演示
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);
}
}
- 下面带式我官方实例中利用
DBLookup
函数检查选择节点的所有报文的发送的DLC是否正确(真实ECU测试才有意义) - 为了方便理解,我简化了官方实例的代码
// checks for all messages of a specific node that the DLC is correct.
variables
{
// system under test
char 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 sensitive
if (strncmp(DBLookup(this).Transmitter, gNodeUnderTest, 30) == 0)
{
// check if the DLC is correct; if not, remember the minimum
// or maximum DLC of the received frames
if (this.dlc != DBLookup(this).DLC)
{
write("%s 的DLC发送错误,DBC中定义为:%d,实际收到为:%d",this.name,DBLookup(this).DLC,this.dlc);
}
}
}
}
🌎总结
- 🚩要有最朴素的生活,最遥远的梦想,即使明天天寒地冻,路遥马亡!
- 🚩如果这篇博客对你有帮助,请 “点赞” “评论”“收藏”一键三连 哦!码字不易,大家的支持就是我坚持下去的动力。