Vector CANoe

时间:2016-10-13 15:16:03

标签: simulation capl canoe

我已经使用Vector软件在CANoe中创建了一个节点,我为它设计了设计数据库。

我需要传输连续的消息,为此我创建了一个带按钮的面板。当我一直按下按钮时,信息的信号应始终取值1,否则为0(按钮释放)

应该传输的消息具有以下特征:

enter image description here

我按下按钮后传输消息的代码:

variables {

 message messageDeclaredInDb myMessage;
 msTimer cyclicTimer200ms;
}
on envVar ev_Button_Status
{

  switch (getValue(this)) {

   case 0: myMessage.Sig = 0;
           write("button released");
           break;

    case 1: myMessage.Sig = 1;
            write("button pressed");
            break;

    default: write("Default");
  }

  setTimerCyclic(cyclicTimer200ms, 200);

}

on timer cyclicTimer200ms 
{

  myMessage.Sig = getValue(ev_Button_Status);
  output(myMessage); 
}

我在图形中可视化结果:

enter image description here

但是想要的结果应该是这样的,没有信号的上下:

enter image description here

有任何提示吗?知道我不使用任何交互层。

1 个答案:

答案 0 :(得分:2)

请注意GenMsgILSupport = Yes属性,表示此消息已启用交互层支持。 IL负责根据数据库中定义的属性(如周期时间)接收和发送消息。

使用IL支持,您可以直接访问信号。您既不需要定义消息变量也不需要定时器,只需在信号名称前添加$字符并设置值即可。例如:

 $Sig = 1;

完成示例1:

on envVar ev_Button_Status
{    
     switch (getValue(this)) {    
     case 0:
         $Sig = 0;
         write("button released");
         break;

      case 1:
          $Sig = 1;
          write("button pressed");
          break;

      default:
          write("Default");
    }    
}

如果您不使用任何互动图层,请确保您的邮件已停用。此外,您的代码存在一些问题:

  1. 您应该在on start中启动计时器,而不是on envVar
  2. 将信号值设置为on envVaron timer,但不能同时设置。
  3. 完成示例2:

    variables {
        message messageDeclaredInDb myMessage;
        msTimer cyclicTimer200ms;
    }
    
    on start
    {
        setTimerCyclic(cyclicTimer200ms, 200);
    }
    
    on timer cyclicTimer200ms 
    {
        myMessage.Sig = getValue(ev_Button_Status);
        output(myMessage);
    }