【05】Canoe零基础手把手教学 --- 最简单的仿真 --- 开关和灯

—>总目录跳转

【05】Canoe零基础手把手教学 — 最简单的仿真 — 开关和灯

一、新建工程

新建工程参考【01】Canoe零基础手把手教学 — Canoe安装 — 四、打开Canoe

二、创建DBC文件

点击Tools -> 点击CANdb++ Editor -> File -> Create Database -> CANoe Template.dbc得到如下图所示窗口(你们新建的应该右边是全空的):

在这里插入图片描述

在这里插入图片描述

右键单击左边的Signals -> New,按照下图所示创建一个信号Light

在这里插入图片描述

再右键单击左边的Signals -> New,按照下图所示创建一个信号Swtich

在这里插入图片描述

在进行后续操作之前,我觉得有必要简单解释一下dbc文件的层级关系:

  • 首先左边的Network nodesECUs可以简单理解为等价的,1个node就是1个ECU
  • 然后Messages就是报文,很好理解,1个ECU里面可以包含有很多个报文,比如一个门模块的ECU可以有门的开关、门锁状态的报文和门的类型(比如电吸门)的报文等等
    最后是Signals,同样,1个Message可以包含多个Signals,比如上面门模块的一个报文里面可以同时包含门的开关门锁状态这2个Signal

为了进一步理解,我再用更具体的例子来解释说明:

  • 现在有一个MessageDoor_statusDoor_status这个Message里面包含2个Signal,一个叫open_close一个叫lock_unlock
  • 用层级来表示就是:
  • ECU_A
    • Message1
      • Signal1
      • Signal2
    • Message2
    • Message3

我们再右键点击MessagesNew,新建一个报文Light_msg

在这里插入图片描述

同理再新建一个报文Switch_msg

在这里插入图片描述

然后,把Light信号按住鼠标左键拖拽到Light_msg里面,把Swith信号拖拽到Switch_msg里面,得到如下图:

在这里插入图片描述

再右键点击Network nodesNew新建2个nodeLight_nodeSwitch_node,直接点确定即可,如上图

报文,信号都创建好了,现在捋一捋逻辑:

  • 首先我们有2个ECU,一个是Light_node,一个是Switch_node,即一个灯,一个开关
    • Light_node里面有1个报文Light_msgSwitch_node里面有1个报文Switch_msg
      • Light_msg报文里面有1个信号LightSwitch_msg报文里面有1个信号Switch
        • LightSwitch都是无符号整数,最小值是0代表关,最大值是1代表开

问题来了,信号要有发送方和接收方,所以我们要把发送、接收关系配置好:

  • 双击Light_node - > Mapped Rx Sig(Rx表示接收)-> Add: individual signals -> Switch -> OK
    • 解释一下是什么意思,灯要打开,需要接收到开关给的Switch信号

在这里插入图片描述

  • 同样,双击Switch_node - > Mapped Rx Sig(Rx表示接收)-> Add: individual signals -> Light -> OK
    • 开关也要接收灯给的信号,知道灯到底有没有打开,好方便进行后续的操作

在这里插入图片描述

报文、信号、ECU已经全部配置完毕,下面进行报文属性的配置:

  • 点击左上角File -> Import Attribute Definitions -> easy.dbc -> 打开
  • esay.dbc一般在如下路径:C:\Users\Public\Documents\Vector\CANoe\Sample Configurations 18.3.118\CAN\Easy\CANdb\easy.dbc
  • 可以复制放到自己的工程文件下

在这里插入图片描述
在这里插入图片描述

esay.dbc文件导入成功后,就可以双击Light_msgSwitch_msg调整报文属性了:

在这里插入图片描述
在这里插入图片描述

下面再解释一下每条参数的意思:

  • GenMsgCycleTime = 200; // 每200毫秒发送一次
  • GenMsgFastOnStart = 0; // 定义消息是否在启动时快速发送,0否,1是
  • GenMsgCycleTimeFast = 100; // 快速发送时每100毫秒发送一次,通常与GenMsgFastOnStart结合使用,用于在启动时快速发消息
  • GenMsgDelayTime = 1; // 发送前延迟1毫秒
  • GenMsgILSupport = Yes; // 定义消息是否支持中断线(Interrupt Line)
  • GenMsgNrOfRepetition = 0; // 定义快速发送模式下的重复次数,快速发送0次
  • GenMsgSendType = 0; // 0周期性发送,1事件触发发送,2手动发送(由于没有CANdelaStudio)
  • GenMsgStartDelayTime = 0; // 定义消息开始发送前的延迟时间,开始发送前延迟0毫秒

最后再检查一下一致性,左上角File -> Consistency Check,没问题,可以进行下一步了

在这里插入图片描述

三、导入DBC文件

点击Simulation,点击Simulation Setup,在左边找到Databases,右键Import Wizard -> Select... -> 选中上一步中创建的dbc文件,把2个node都加进去,下一页 -> 完成

在这里插入图片描述
在这里插入图片描述

四、系统变量的配置

完成上述步骤后,可以开始配置系统变量了:
点击Environment -> System Variables -> 空白处鼠标右键New -> 创建aLightaSwitch两个系统变量,加a是为了防止和CAPL关键字或者和其他信号什么的重名

在这里插入图片描述
在这里插入图片描述

到这里,准备工作就差不多做完了,下面进行最后一步,CAPL脚本编写

五、最简单的CAPL脚本

单击Simulation -> Simulation Setup -> 点击Light_node上的铅笔图标,如下图

在这里插入图片描述
在这里插入图片描述

创建一个Light.can文件,代码如下:

/*@!Encoding:65001*/
includes
{
}

variables
{
}

on message Switch_node::Switch_msg
{
  @Light_node::aLight = @Switch_node::aSwitch;
  $Light_msg::Light = $Switch_msg::`Switch;
}

同理,点击Switch_node上的铅笔图标创建Switch.can文件,代码如下:

/*@!Encoding:65001*/
includes
{
}

variables
{
}

on sysvar Switch_node::aSwitch
{
  $Switch_msg::`Switch.raw = @Switch_node::aSwitch;
}

OK,全部保存好,CAPL脚本后面会专门介绍,目前先不做过多解释,照抄就行。

六、创建Panel

单击Tools -> Panel Designer,因为大家可能使用的Canoe版本不同,界面分布有些不一样,所以我对下面的操作步骤,稍微进行分解一下:

  • 首先找到Toolbox后点击,我用的Canoe18SP3这里是右下角,然后找到Vector Standard Controls下面的Graphical,然后把GraphicalLED ControlSwitch / Indicator拖拽到中间框里去(大小自由调整)

在这里插入图片描述

  • 然后找到Symbol Exploer里面的System variables下面我们定义好的系统变量aLightaSwitch,把这2个系统变量分别拖拽给对应的开关和灯泡。
  • 这一步就相当于把开关、灯泡的开和关跟对应的系统变量的值0和1关联上了,关就是0,开就是1

在这里插入图片描述

单击开图案,找到Properties(我这里是右下角),点击A/Z↓,找到Mouse Activation...,把Left Right设置成Left,同时可以看到下面的Value已经显示aSwitch了。

  • Left Right意思是鼠标右键是开,鼠标左键是关,Left意思是鼠标左键点一下是开,再点一下是关

在这里插入图片描述

最后点击Panel,把名字改一下,保存就OK了,如下图:

在这里插入图片描述

七、运行

点击左上角闪电图标,点击开关就可以看到灯泡亮和灭了

在这里插入图片描述
在这里插入图片描述

点击Stop,可以在Trace窗口展开看信号值Switch是0的时候Light是0,Switch变1的时候,Light也变1了。

在这里插入图片描述

八、总结

这就是最简单的Canoe仿真了,大家多操作几次就可以掌握了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值