#### 创建一个开关进行仿真:
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);
}