【问题标题】:CAPL: Sending continous message after a key strokeCAPL:击键后发送连续消息
【发布时间】:2019-07-24 05:05:58
【问题描述】:

我正在尝试在击键后连续发送消息,并在设定的时间后重置消息。

includes
{

}

variables
{
  int i;
  int j;
}

On key 'a'
{
  j = 1;

}

on start
{
  if(j == 1 && i <= 300)
  {
    message MyMessage msg;
    msg.signal1 = 1;
    msg.signal2 = 600;
    output(msg);
    i++;
  }
  if(i>300)
  {
    message MyMessage msg;
    msg.signal1 = 0;
    msg.signal2 = 0;
    output(msg);
    j = 0;
  }
}

所以,在按键'A'上,它需要继续发送消息3秒,但3秒后结束。它需要将我的消息重置为 0。

我认为每个循环周期都会调用“on start”。但看起来我错了。

【问题讨论】:

    标签: can-bus capl


    【解决方案1】:

    On start 在 CANoe 中点击黄色闪烁符号后只会被调用一次。 您可以使用一个计时器,该计时器可以每隔 10 毫秒/您想要的任何毫秒定期调用。在On timer 函数中,您可以根据自己的要求制定逻辑。

    您可以使用以下 CAPL 脚本作为参考,并根据您的要求对其进行修改。

    includes
    {
    }
    
    variables
    {  int i;
      int j;
      mstimer timer1;
    }
    
    On key 'a'
    {
      j = 1;
    
    }
    
    On timer timer1
    {
      if(j >= 1 && i <= 300)
      {
        message MyMessage msg;
        msg.signal1 = 1;
        msg.signal2 = 600;
        output(msg);
        i++;
      }
      if(i>300)
      {
        message MyMessage msg;
        msg.signal1 = 0;
        msg.signal2 = 0;
        output(msg);
        j = 0;
      }
      settimer(timer1,10);
    }
    
    on start
    {
        j = 0;
        i = 0;
        settimer(timer1,10);
    }
    

    【讨论】:

    • 缺乏调试是可怕的,它正在发送信号(一段时间后)。但是在 3 秒后将信号重置为 0 是行不通的。
    • 可以使用write()函数进行调试
    • 可以使用调试器进行调试
    猜你喜欢
    • 2018-06-27
    • 2018-01-04
    • 1970-01-01
    • 2017-05-30
    • 1970-01-01
    • 2018-11-23
    • 2020-07-21
    • 2017-10-01
    • 1970-01-01
    相关资源
    最近更新 更多