一些常用的CAPL小功能
1.实时获取总线上的所有报文ID
on message*
{ if(flag==0)//设置检测条件以免每次都触发以下逻辑{id = this.id; // 获取当前总线上捕捉到的报文的IDisNew = 1;// 检查ID是否已记录for (i = 0; i < count; i++) //count是总消息个数{if (capturedIds[i] == id) //判断当前ID是否已经捕捉过{isNew = 0;//将标志设置为已保存状态break;}}// 如果是新ID,则存储if (isNew && count < elcount(capturedIds))//检查数组溢出和是否已经记录过{capturedIds[count] = id;//把检测到的ID赋值给数组的第count+1个元素count++;testStep("","捕获新ID: 0x%X", id);//把总线上的报文ID打印到测试报告write("捕获新ID: 0x%X", id);}}
}
2.获取总线上的一条报文
on Message CAN1.* //设置CAN1通道任意报文触发{Message *Msg; //声明*报文if(this.dir!=TX) //设置筛选条件TX or RXMsg=this; //获取当前报文并存放到Msg}
使用或者检测该报文的信息:
列:获取第一个字节 somone=Msg.byt(0)
也可以用on message 0x100(想要检测的ID)来捕捉指定的ID报文
3.自定义一条报文
Message.CAN=1;
Message.ID=0x252;
Message.DLC=8;
Message.Byte(0) =0x03;
Message.Byte(1) =0x3B;
Message.Byte(2) =0x40;
Message.Byte(3) =0x00;
Message.Byte(4)=0x00;
Message.Byte(5)=0x00;
Message.Byte(6)=0x00;
Message.Byte(7) =0x00;
output(magicMessage);
想要发送该报文还需要定义一个定时器来周期发送,如果需要远程请求可以定义Message.rtr=1;
4.CAN总线复位
on busOff
{resetCan();
}