CAN模拟仿真环境-开关灯demo

#### 创建一个开关进行仿真:

1.首先创建两个节点(可以直接图形创建,也可以在dbc编辑页面添加),dbc创建模版选择Vector_IL_Basic Template.dbc,然后保存文件位置。在Massages下面创建一个报文switch_status,ID越小优先级越大(这里随便写一个),DLC长度给个1(因为只有一个信号所以一个字节就行了了),在Network nodes下面创建两个节点,创建一个信号switch_status_sig,长度给个1就行(因为灯的状态不是0就是1),选择value type为无符号,点击下方Calculate minimum and maximum进行计算一下,可以观看上方最大值和最小值符不符合配置。将该信号添加到刚创建的报文,将该报文添加到发送端(也就是switch节点),双击light节点,点击Mapped Rx Sig点击Add将刚刚那个报文信号添加进去。这时候整个dbc就已经创建完成了。

2.dbc创建完成,我们要将dbc里的信息传递到canoe的界面上。点击Simulation中的Simulation Setup,右击Databasses出来添加页面,add可以添加dbc,Import Wizard...可以添加dbc之中的收发关系

3.添加面板,点开Panel,添加switch按钮和light,但是这仅仅是两个控件,我们需要设计两个系统变量来跟按钮和灯的状态进行绑定,创建环境变量,打开Environment中System Variables,然后点击添加,Namespace为在系统中你找到这个关系的名字(switch_light),填入name(switch_sysvar),下边填入初始值Initial Value(0),最大值(1)最小值(0),右击switch_light新建灯的变量light。点击Panel将变量与控件进行绑定,点击按钮找到属性,找到Symbol Filter选择Variable,然后找到Symbol选择刚刚设计的变量进行绑定。

4.编写代码

4.1 当系统变量发生变化时候进行处理,我们针对信号,所以要对信号实例化,不实例化的话我们没法操作dbc,

总结:

点击按钮,然后绑定的系统变量改变,switch节点中CAPL代码监听到这个变量改变然后就行函数运行,将这个系统变量的值赋给实例化的报文(与下面接收报文是一个)下面的信号,然后输出这个信号;Light节点中CAPL代码接收到这个相应报文然后进入函数进行运行,将这个报文的上面赋值的信号给到图像灯绑定的系统变量,然后这个变量就改变了,灯的状态就跟着改变了。

注意:主要还是通过报文接收发生信息,通过监听报文状态(这只是这个demo的机制,其他可能定时获取或者相应事件触发)来运行函数。

Light.can

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

variables
{
  
}

on message switch_status
{
  @MYSwitch_light::svLight=this.switch_status_sig;
}

switch.can

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

variables
{
  
}

//按钮的函数,将这个按钮的值赋给这个变量
on sysvar MYSwitch_light::svSwitch
{
  message switch_status switch_status_msg;
  
  switch_status_msg.switch_status_sig=@this;
  
  output(switch_status_msg);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值