首页 > 其他分享 >理解软件自带的easy工程(一)

理解软件自带的easy工程(一)

时间:2023-07-13 11:44:58浏览次数:30  
标签:Engine end EngineState sysvar EngineSpeedEntry easy 软件 自带 EngineSpeed

 1.数据库

 有三个网络节点,两个报文,四个信号,其中EngineState报文发送两个信号:EngineSpeed,OnOff。LightState发送FlashLight,HeadLight两个信号。OnOff信号是value table型。

双击Display节点

 所有信号都是它的接收信号。

2.系统变量

 3..面板设计

 

 

  

 

 就这么看首先Ignition控制Display的小车子变化,Speed控制车速的显示,包括转盘上的显示和车速值的显示,如果Ignition不打开,那么车速不会显示;Head和Hazard控制车灯的显示。

Control面板中Ignition与EngineStateSwitch系统变量关联,speed与EngineSpeedEntry系统变量关联,Head与HeadLight信号相关联,Hazard与HazardLightsSwitch系统变量相关联。

 Display面板中小车与信号OnOff相关联,Meter1与EngineSpeedDspMeter系统变量相关联,下面的TextBox与EngineSpeed信号相关联,车前灯与系统变量LightDisplay相关联,车前灯有八种状态,如下所示

 4.CAPL编码

  • 下面是Engine代码
/*@@var:*/
variables 
{
}
/*@@end*/

/*@@sysvarChange:Engine::EngineStateSwitch:*/
on sysvar sysvar::Engine::EngineStateSwitch
{
 $EngineState::OnOff = @this;
  if(@this)
    $EngineState::EngineSpeed = @sysvar::Engine::EngineSpeedEntry;
  else
    $EngineState::EngineSpeed = 0;
}
/*@@end*/

/*@@sysvarChange:Engine::EngineSpeedEntry:*/
on sysvar sysvar::Engine::EngineSpeedEntry
{
  if(@sysvar::Engine::EngineStateSwitch) 
  {
    $EngineState::EngineSpeed = @this;
  }
}
/*@@end*/

 

当系统变量sysvar::Engine::EngineStateSwitch发生变化时(因为Ignition与sysvar::Engine::EngineStateSwitch相关联,所以在面板中打开Ignition时变量sysvar::Engine::EngineStateSwitch会发生变化)触发事件:

$EngineState::OnOff = @this;

 

将变量的值赋给信号OnOff,因为小车与OnOff绑定,所以小车状态会变化。

if(@this)
    $EngineState::EngineSpeed = @sysvar::Engine::EngineSpeedEntry;
  else
    $EngineState::EngineSpeed = 0;

如果Ignition关闭,那么变量值为0,则速度值显示为0;如果Ignition打开,则变量值会变成1,那么就会执行

$EngineState::EngineSpeed = @sysvar::Engine::EngineSpeedEntry;

 

将系统变量EngineSpeedEntry的值赋给信号EngineSpeed,这里Speed与变量EngineSpeedEntry相关联,所以你在control面板中拖动speed的速度条,值会变,又信号EngineSpeed与TextBox相关联,所以会显示出速度值。同时因为系统变量EngineSpeedEntry发生变化,又会触发下面的事件

on sysvar sysvar::Engine::EngineSpeedEntry
{
  if(@sysvar::Engine::EngineStateSwitch) 
  {
    $EngineState::EngineSpeed = @this;
  }
}

 

这里为什么要加条件,因为当发动机没开启时,即使速度条变化,也不可能有速度值,所以要先判断系统变量EngineStateSwitch值是否为1,再把速度值赋给EngineSpeed,?这里很疑惑,因为作用和上面信号触发事件中条件语句的作用一样???????????

  • 下面是Light的脚本
/*@@var:*/
variables 
{
  msTimer tFlashLightFrequency;
  const int gFlashLightFrequency = 500;
  int gHazardLightsStatus = 0;

  int gDebugCounterTX = 0;
  int gDebugCounterTXRQ = 0;
  int gDebugCounterRX = 0;
}
/*@@end*/

/*@@startStart:Start:*/
on start
{
   setWriteDbgLevel(0); // set DbgLevel = 1 to get more information in Write-Window
}
/*@@end*/

/*@@msg:CAN1.easy::LightState (0x321):*/
on message LightState 
{
 
  if (this.dir == TX)
  {
    gDebugCounterTX++;
    if(gDebugCounterTX == 10)
    {
      writeDbgLevel(1,"LightState TX received by node %NODE_NAME%");
      gDebugCounterTX = 0;
    }     
  }
  if(this.dir == TXREQUEST)
  {
    gDebugCounterTXRQ++;
    if(gDebugCounterTXRQ == 10)
    {
      writeDbgLevel(1,"LightState TXREQUEST received by node %NODE_NAME%");
      gDebugCounterTXRQ = 0;
    } 
  }
  if (this.dir == RX)
  {
    gDebugCounterRX++;
    if(gDebugCounterRX == 10)
    {
      writeDbgLevel(1,"Error: LightState RX received by node %NODE_NAME%");
      gDebugCounterRX = 0;
    }
  }
}
/*@@end*/

/*@@timer:tFlashLightFrequency:*/
on timer tFlashLightFrequency
{
  gHazardLightsStatus = (gHazardLightsStatus == 1 ? 0 : 1);
  $LightState::FlashLight = gHazardLightsStatus;
  setTimer(this, gFlashLightFrequency);
}
/*@@end*/

/*@@key:'0':*/
on key '0'
{
  setwriteDbgLevel(0);
}
/*@@end*/

/*@@key:'1':*/
on key '1'
{
  setwriteDbgLevel(1);
}
/*@@end*/

/*@@sysvarChange:Lights::HazardLightsSwitch:*/
on sysvar sysvar::Lights::HazardLightsSwitch
{
  if (@this)
  {
    gHazardLightsStatus = 1;
    setTimer(tFlashLightFrequency, gFlashLightFrequency);
  }
  else
  {
    cancelTimer(tFlashLightFrequency);
    gHazardLightsStatus = 0;
  }

  $LightState::FlashLight = gHazardLightsStatus;
}
/*@@end*/

 

 好长  一段一段分析

on start
{
   setWriteDbgLevel(0); // set DbgLevel = 1 to get more information in Write-Window
}

 这里没懂啥意思

后面的代码理解在后一篇写吧

标签:Engine,end,EngineState,sysvar,EngineSpeedEntry,easy,软件,自带,EngineSpeed
From: https://www.cnblogs.com/wangyihe20000719/p/17549971.html

相关文章

  • 大咖论道,大模型时代软件研发效率革命
    摘要:开发者如何拥抱这波AIGC浪潮?本文分享自华为云社区《大咖论道,大模型时代软件研发效率革命》,作者:华为云社区精选。根据GitHub的一项调查,92%的受访开发者正在借助AI编码工具来完成工作和其他项目。另一方面,AI已经通过了大厂L3工程师入职测试,可自如应对数组/字符串、动态规划等......
  • EasyCVR平台Ehome协议接入,设备管理中出现新增通道按钮的问题优化
    EasyCVR可拓展性强、视频能力灵活、部署轻快,可支持的主流标准协议有GB28181、RTSP/Onvif、RTMP等,以及厂家私有协议与SDK接入,包括海康Ehome、海大宇等设备的SDK等,能对外分发RTSP、RTMP、FLV、HLS、WebRTC等格式的视频流。有用户反馈,通过海康Ehome接入的设备,在设备管理中出现了新......
  • 视频融合平台EasyCVR级联时注册失败并报错401是什么原因?
    EasyCVR视频融合平台基于云边端一体化架构,具有强大的数据接入、处理及分发能力,平台既具备传统安防视频监控的能力与服务,也支持AI智能检测技术的接入,可应用在多行业领域的智能化监管场景中。平台可提供视频监控直播、云端录像、云存储、录像检索与回看、智能告警、平台级联、云台控......
  • Mac 苹果电脑软件 crossOver 可以直接运行 windows 应用软件,强强
    首先我们可以先了解一下什么是crossOver,CrossOver是Mac和Windows系统之间的兼容工具。使Mac操作系统的用户可以运行Windows系统的应用,从办公软件、实用工具、游戏到设计软件,您都可以在Mac程序和Windows程序之间随意切换。那我们该如何使用CrossOver来安装使用......
  • TechSmith Snagit mac最强大的屏幕截图软件
    TechSmithSnagitMac版是一款强大的屏幕截图软件,适用于Mac操作系统。它提供了多种截图工具和编辑功能,可以帮助用户轻松地创建高质量的截图和录屏视频。→→↓↓载TechSmithSnagitmac 以下是TechSmithSnagit的一些主要特点:多种截图方式:TechSmithSnagit支持多种截图方式......
  • Unity3D_根据不同的屏幕缩放UI(在横屏上运行竖屏软件)
    一、首先我们创建一个1080*1920分辨率的场景 效果如下二、随便添加一张UI图片三、打包出来看效果(我们发现UI显示不全,这是因为UI的尺寸任然是1080*1920,而我们的电脑是1920*1080) 四、我们在Unity中做以下设置1.选中游戏物体Canvas2.点击组件CanvasScaler上的UISc......
  • Threads上线5天用户增至1亿,Threads软件常见问题百问百答
    7月10日,脸书(Facebook)母公司Meta旗下新应用程序Threads上线的第5天,其用户数量已经超过1亿。这一增长速度打破聊天机器人ChatGPT的纪录——推出两个月内活跃用户量才破亿。 Threads或成为史上用户数增长速度最快的消费者应用。 Meta首席执行官马克·扎克伯格宣告了这一喜讯,“T......
  • 一次说清楚:CAE软件可以做什么?
    引言:计算机辅助工程(CAE)软件是现代工程设计与分析的重要工具,它以计算机技术为基础,利用数值模拟和仿真方法来解决各种工程问题。本文将探讨CAE软件的广泛应用领域,以及它在工程设计与分析中的作用。 结构力学分析CAE软件在结构力学分析中发挥着重要作用。它可以模拟和预测结构在......
  • Media Encoder 2023-视频编码软件mac/win版
    AdobeMediaEncoder2023是Adobe公司推出的一款专业的媒体编码和转换软件。作为AdobeCreativeCloud套件的一部分,它与其他Adobe创意应用程序(如PremierePro、AfterEffects)无缝集成,提供了一个强大的工具集,用于优化、转换和编码各种媒体文件。→→↓↓载MediaEncoder2......
  • InDesign 2023-排版设计软件mac/win版
    AdobeInDesign2023是一款专业的排版设计软件,由Adobe公司开发。它是AdobeCreativeCloud套件中的一部分,为用户提供了丰富的工具和功能,用于创建出版物、印刷品、数字杂志、互动PDF和电子书等。→→↓↓载InDesign2023mac/win版 以下是InDesign2023的详细介绍:......