从零开始学习CANoe(四)—— 设计panel

相关文章

茫茫人海,相遇是一种缘分,欢迎欢迎!
在这里插入图片描述

从零开始学习CANoe(一)—— 新建工程
从零开始学习CANoe(二)—— CANdb++ 创建 dbc文件
从零开始学习CANoe(三)—— 系统变量的创建和使用


任何测试可能都需要人机交互界面,CANoe 保留了 UI设计功能,可以实现简单的UI设计。 @[TOC](panel designer)

设计第一个panel

1,将这个文件夹下的素材拷贝到我们的工程下。从零开始学习CANoe(四)—— 设计panel_第1张图片

2、打开panel designer

从零开始学习CANoe(四)—— 设计panel_第2张图片
3,另存为下列途径下,起名为Control.vxpm

从零开始学习CANoe(四)—— 设计panel_第3张图片
3、拖着控件右下角可以调节大小
从零开始学习CANoe(四)—— 设计panel_第4张图片
4,选中 Group Box 控件 ,在面板中需要的地方双击左键 可以放置一个控件
从零开始学习CANoe(四)—— 设计panel_第5张图片
5,在上一步骤基础上,选中Properties 更改控件名字。
从零开始学习CANoe(四)—— 设计panel_第6张图片
6,再添加几个控件,如下图。
从零开始学习CANoe(四)—— 设计panel_第7张图片
7,添加一个Switch 控件
从零开始学习CANoe(四)—— 设计panel_第8张图片
8,按照下图设置属性
从零开始学习CANoe(四)—— 设计panel_第9张图片

9,右键选择 Fit image Size 可以 调增控件图片的大小。
从零开始学习CANoe(四)—— 设计panel_第10张图片
10,添加一个Trace Bar控件
从零开始学习CANoe(四)—— 设计panel_第11张图片

11,按照下图设置属性
从零开始学习CANoe(四)—— 设计panel_第12张图片

11,添加一个Swicth 控件,注意下图的Mouse Activetion type 要选择 Left ,下图的选择是错误的
从零开始学习CANoe(四)—— 设计panel_第13张图片
12,添加第二个Swicth 控件,注意下图的Mouse Activetion type 要选择 Left ,下图的选择是错误的
从零开始学习CANoe(四)—— 设计panel_第14张图片

13,添加两个Static Text 说明下图的两个控件
从零开始学习CANoe(四)—— 设计panel_第15张图片
14,选择 Add Panel,将上面创建的panel加载到工程中。
从零开始学习CANoe(四)—— 设计panel_第16张图片
15,如下图所以看以看到Control panel已经被添加了,
从零开始学习CANoe(四)—— 设计panel_第17张图片
16,然后可以run下工程,操作下control panel,看下write窗口打印的结果。
从零开始学习CANoe(四)—— 设计panel_第18张图片
17,然后可以run下工程,操作下control panel,看下write窗口打印的结果。
从零开始学习CANoe(四)—— 设计panel_第19张图片
18,为了统一名称,我们把上一个博客中test.can更改为 Engine.can ,代码如下:

/*@!Encoding:ASCII*/
On key 'a'
{
     
  @Engine::EngineStateSwitch = 0;
  write("close the engine...");
  @Engine::EngineStateSwitch = 1;
  write("open the engine...");
  @Engine::EngineSpeedEntry =1000;
}

on sysvar sysvar::Engine::EngineStateSwitch
{
     
 $EngineState::OnOff = @this;
  if(@this)   
  {
     
    $EngineState::EngineSpeed = @sysvar::Engine::EngineSpeedEntry;
    write("EngineSpeed is %f...", @this);
  }
  else
    $EngineState::EngineSpeed = 0;  
}

on sysvar sysvar::Engine::EngineSpeedEntry // 
{
     
  if(@sysvar::Engine::EngineStateSwitch)  //
  {
     
    $EngineState::EngineSpeed = @this;
    write("EngineSpeed is %f...", @this);
  }
}

18,我们再再Light 节点上新建一个simulation can ,名字为Light.can
从零开始学习CANoe(四)—— 设计panel_第20张图片
19,Light.can 中的代码如下

/*@!Encoding:1252*/
variables 
{
     
  msTimer tFlashLightFrequency;
  const int gFlashLightFrequency = 500;
  int gHazardLightsStatus = 0;
}
on timer tFlashLightFrequency
{
     
 //定时器实现的功能是:500ms闪烁灯
  gHazardLightsStatus = (gHazardLightsStatus == 1 ? 0 : 1);
  $LightState::FlashLight = gHazardLightsStatus;
  setTimer(this, gFlashLightFrequency);
  write("current light state is : %d ...",gHazardLightsStatus);
}
on sysvar sysvar::Lights::HazardLightsSwitch
{
     
  if (@this)
  {
     
    gHazardLightsStatus = 1;
    setTimer(tFlashLightFrequency, gFlashLightFrequency);
  }
  else
  {
     
    cancelTimer(tFlashLightFrequency);
    gHazardLightsStatus = 0;
  }
  $LightState::FlashLight = gHazardLightsStatus;
}

20,点击 Light 里面的下面的那个按钮Hazard Flasher,可以看到write窗口在500ms间隔的打印0和1从零开始学习CANoe(四)—— 设计panel_第21张图片

设计第二个panel

21,新建一个panel,起名为Display
从零开始学习CANoe(四)—— 设计panel_第22张图片
22,添加如下图的Group Box
从零开始学习CANoe(四)—— 设计panel_第23张图片
23,添加一个仪表盘 控件,用来显示当前速度值
从零开始学习CANoe(四)—— 设计panel_第24张图片
24,添加一个输入输出控件,用来显示当前速度值

从零开始学习CANoe(四)—— 设计panel_第25张图片
25,添加一个 图片控件
从零开始学习CANoe(四)—— 设计panel_第26张图片
26,添加一个Switch控件,用作左边的车灯
从零开始学习CANoe(四)—— 设计panel_第27张图片
27,按下图完成配置
从零开始学习CANoe(四)—— 设计panel_第28张图片
28,添加有车灯,按下图完成配置
从零开始学习CANoe(四)—— 设计panel_第29张图片
29,再在 dispaly 节点,添加一个 simulation can ,命名为display.can ,代码如下图

/*@!Encoding:1252*/

variables 
{
     
  const long kOFF = 0;
  const long kON = 1;

  int gDebugCounter = 0;
}

on message EngineState 
{
       
  // engine state received
  if (this.dir == RX)
  {
     
    @sysvar::Engine::EngineSpeedDspMeter = this.EngineSpeed / 1000.0;
  }
}

on message LightState 
{
     
  gDebugCounter++;

  if (this.dir == RX)
  {
     
    SetLightDsp(this.HeadLight,this.FlashLight);

    if(gDebugCounter == 10)
    {
     
      write("LightState RX received by node %NODE_NAME%");
      gDebugCounter = 0;
    }    
  }
  else
  {
     
    if(gDebugCounter == 10)
    {
     
      write("Error: LightState TX received by node %NODE_NAME%"); 
      gDebugCounter = 0; 
    }
  }
}

SetLightDsp (long headLight, long hazardFlasher)
{
     
  if(headLight == kON) 
  {
     
    if(hazardFlasher == kON) 
    {
     
      @sysvar::Lights::LightDisplay = 7;
    } 
    else if(hazardFlasher == kOFF) 
    {
     
      @sysvar::Lights::LightDisplay = 4;
    }
  }
  else if(headLight == kOFF) 
  {
     
    if(hazardFlasher == kON)  
    {
     
      @sysvar::Lights::LightDisplay = 3;
    } 
    else if(hazardFlasher == kOFF) 
    {
     
      @sysvar::Lights::LightDisplay = 0; 
    }
  }
}

30,下图是完成后的最后效果图。

总结


感谢大家的阅读,希望能帮到大家一点点。

在这里插入图片描述

在这里插入图片描述

  • 好记性,不如烂笔头,技术探索路漫漫,携手志同道合之人上下求索是件很快乐的事。
  • 如果这篇博客对你有帮助,请 “点赞” “评论”“收藏”一键三连 哦!码字不易,大家的支持就是我坚持下去的动力。

你可能感兴趣的:(CAPL,CANoe,CAPL)