目标:
使用CAPL语言编写脚本,利用CANoe进行仿真,将回放报文(asc\blf等文件)的时间、ID、数据场内容等信息打印到txt文档中。
;
时间获取错误
参考VECTOR官方网页说明,Time_ns用于获取报文的时间戳(ns,data type:int64)。此处获取的ns时间为64位整型,转换位16进制,需要使用%llx格式。(注:使用%x或%lx,将导致只能产生8个字符的有效显示,时间丢失。)
对应语句:
snprintf(msgdata,1000,“%08X%16llX%02X”,this.id,this.time_ns,this.DataLength);
将ns时间转换为float类型的s(秒)进行显示,除数使用小数点表示,如官方所示函数:
float getTime (float time)
{
// convert NS to SEC:
return time / 1000000000.0;
}
---
# 获取报文的相关语句:
> 示例代码:
on message CAN1.*
{
for(j=0;j<9;j++)
{
if(this.id==DIDarray[j])
{
ClearCharArray(msgdata);
snprintf(msgdata,1000,"%08X%16llX%02X",this.id,this.time_ns,this.DataLength);
for( i = 0; i < this.DataLength; i++)
{
ClearCharArray(ch_byte);
snprintf(ch_byte,8,"%02X",this.byte(i));
strncat(msgdata,ch_byte,1000);
}
strncat(msgdata,"\n",1000);
//write("time_ns: %f",(this.time_ns)/1000000000.0);
WriteFile(msgdata);
}
}
}
其中, ClearCharArray()用于清空结构体, WriteFile()函数将数据msgdata写入文本。
---
以上,作为简单参考,希望对阅读本文的读者有所帮助。