我是CAPL和CANalyzer的新手,我试图从CAN读取,我希望每隔10毫秒就读取每帧,但我找不到任何解决方案。
我试过使用计时器,但据我所知,每个事件都必须在启动另一个事件之前完成,这样计时器就会情不自禁地考虑框架是从一个函数读取的。
我还试图将其划分为不同的函数,但无法让它们将数据从一个函数发送到另一个函数。
variables {...}
on message CAN1.*
{
setTimer(myTimer,2000);
//for() reading from CAN1
}
on timer myTimer
{
tile.FDF=1;
tile.dataLength=64;
tile.can=2;
while(tileData<endOfData)
{
//for() reading every byte from the tile
}
output(tile);
}我需要每隔10毫秒从瓷砖上读取每一帧行,现在每隔几毫秒就读一次。
发布于 2022-07-27 07:38:36
从你的问题上看,还不清楚你想要处理什么,如何处理,也不清楚什么是瓷砖,所以我可以在这里给出伪代码。将消息处理程序中的CAN1.*更改为您感兴趣的任何消息。
上一次处理数据时存储时间戳,并在经过10 ms后才再次处理,该如何处理?
例如。
variables {
dword tsLastProcessed;
}
on message CAN1.*
{
// timeNow is incremented every 10 us
if((timeNow() - tsLastProcessed) < 1000) {
return;
}
/* else */
tsLastProcessed = timeNow();
<process data>
}https://stackoverflow.com/questions/73130475
复制相似问题