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

相关文章

从零开始学习CANoe(一)—— 新建工程
从零开始学习CANoe(二)—— CANdb++ 创建 dbc文件
从零开始学习CANoe(三)—— 系统变量的创建和使用
从零开始学习CANoe(四)—— 设计panel
从零开始学习CANoe(五)—— CAPL 测试节点
从零开始学习CANoe(六)—— XML 测试节点
从零开始学习CANoe(七)—— .NET 测试节点
从零开始学习CANoe(八)—— IG 模块
从零开始学习CANoe(九)—— 断点调试(Debug)
从零开始学习CANoe(十)—— 信号发生器(Signal Generator
从零开始学习CANoe(十一)—— Statistics Window
从零开始学习CANoe(十二)—— Trace Window
从零开始学习CANoe(十三)—— Logging Window

设计第一个panel
1,将这个文件夹下的素材拷贝到我们的工程下。

å¨è¿éæå¥å¾çæè¿°

2、打开panel designer


3,另存为下列途径下,起名为Control.vxpm


4、拖着控件右下角可以调节大小

5,选中 Group Box 控件 ,在面板中需要的地方双击左键 可以放置一个控件

å¨è¿éæå¥å¾çæè¿°

6,在上一步骤基础上,选中Properties 更改控件名字。

å¨è¿éæå¥å¾çæè¿°

7,再添加几个控件,如下图。

å¨è¿éæå¥å¾çæè¿°

8,添加一个Switch 控件

9,按照下图设置属性

å¨è¿éæå¥å¾çæè¿°
10,右键选择 Fit image Size 可以 调增控件图片的大小。

å¨è¿éæå¥å¾çæè¿°

11,添加一个Trace Bar控件

å¨è¿éæå¥å¾çæè¿°
12,按照下图设置属性


13,添加一个Swicth 控件,注意下图的Mouse Activetion type 要选择 Left ,下图的选择是错误的

å¨è¿éæå¥å¾çæè¿°

14,添加第二个Swicth 控件,注意下图的Mouse Activetion type 要选择 Left ,下图的选择是错误的


15,添加两个Static Text 说明下图的两个控件

å¨è¿éæå¥å¾çæè¿°

16,选择 Add Panel,将上面创建的panel加载到工程中。

å¨è¿éæå¥å¾çæè¿°

17,如下图所以看以看到Control panel已经被添加了,

å¨è¿éæå¥å¾çæè¿°

18,然后可以run下工程,操作下control panel,看下write窗口打印的结果。

19,然后可以run下工程,操作下control panel,看下write窗口打印的结果。

å¨è¿éæå¥å¾çæè¿°

20,为了统一名称,我们把上一个博客中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);
  }
}


21,我们再再Light 节点上新建一个simulation can ,名字为Light.can

å¨è¿éæå¥å¾çæè¿°

22,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;
}


23,点击 Light 里面的下面的那个按钮Hazard Flasher,可以看到write窗口在500ms间隔的打印0和1

å¨è¿éæå¥å¾çæè¿°

设计第二个panel
1,新建一个panel,起名为Display

å¨è¿éæå¥å¾çæè¿°

2,添加如下图的Group Box

å¨è¿éæå¥å¾çæè¿°

3,添加一个仪表盘 控件,用来显示当前速度值

å¨è¿éæå¥å¾çæè¿°

4,添加一个输入输出控件,用来显示当前速度值

å¨è¿éæå¥å¾çæè¿°
5,添加一个 图片控件

å¨è¿éæå¥å¾çæè¿°

6,添加一个Switch控件,用作左边的车灯

å¨è¿éæå¥å¾çæè¿°

7,按下图完成配置

å¨è¿éæå¥å¾çæè¿°

8,添加有车灯,按下图完成配置

å¨è¿éæå¥å¾çæè¿°

9,再在 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; 
    }
  }
}

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

å¨è¿éæå¥å¾çæè¿°

————————————————
版权声明:本文为CSDN博主「蚂蚁小兵」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_34414530/article/details/109244135

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值