开发一个CANoe仿真Demo_FirstDemo

目录

创建一个仿真工程

添加CAN数据库

新建CAN数据库

添加报文和信号

添加数据库到工程中

定义系统变量 

创建仿真面板

创建网络节点

工程运行测试


该文目标:

编写一个仿真工程,该工程将模拟两个功能单一的ECU之间的通信

开发一个CANoe仿真Demo_FirstDemo_第1张图片


创建一个仿真工程

  • 创建仿真工程,命名为FirstDemo.cfg
  • 将其保存在文件夹FirstDemo下
  • 在该文件夹下分别创建三个文件夹:CANdb、Panels、Nodes


    开发一个CANoe仿真Demo_FirstDemo_第2张图片


添加CAN数据库

dbc得作用:数据库文件在仿真工程中可以供CAPL和Panel面板调用,并在Trace、Graphics等分析窗口中将相关信息解析出来,将十六进制的数据转换为数据库中对应的报文和信号等,具有较强的可读性

新建CAN数据库

创建一个含有报文Msg1和信号bsSwitch的数据库

1:打开CANdb++Editor(CAN数据库编辑器)

2:选择CAN Template.dbc作为模板

3:将新建文件命名为FirstDemo.dbc并保存在工程FirstDemo下面的文件夹CANdb

添加报文和信号

在Messages下面创建一条报文Msg1,报文设置如图

在Signals下面创建一个信号bsSwitch,报文设置如图

开发一个CANoe仿真Demo_FirstDemo_第3张图片   开发一个CANoe仿真Demo_FirstDemo_第4张图片

将信号bsSwitch拖曳到报文Msg1下面,这样bsSwitch就变成报文Msg1的一条信号

开发一个CANoe仿真Demo_FirstDemo_第5张图片

 至此,数据库已创建完毕,可以保存工程并推出

本数据只包含一条报文和一条信号

添加数据库到工程中

在Simulation Setup窗口中,添加dbc到Databasses中即可

开发一个CANoe仿真Demo_FirstDemo_第6张图片


定义系统变量 

单击Environment功能区中的System Variables(系统变量)配置对话框

创建一个系统变量svLight,参数如图

创建另一个系统变量svSwitch,参数如图

 开发一个CANoe仿真Demo_FirstDemo_第7张图片开发一个CANoe仿真Demo_FirstDemo_第8张图片

 开发一个CANoe仿真Demo_FirstDemo_第9张图片

问: 1:为什么要定义两个系统变量???

        2:“系统变量”存在得意义是什么???

答:1:

        一个灯的系统变量(svLight),一个开关的系统变量(svSwitch) ;

        其中sv是指system variables;

        灯的sv可以在Panel中与表示灯的组件相关联,起到控制Panel中灯的开关的作用;

        开关的sv同理;

         2:

        说白了就是

        环境变量(env)在老版CANoe中常用,而系统变量(sys)在CANoe6.0以后常用;

        两者作用相同,优先使用系统变量(sys)

        具体见下文:

        CANoe:环境变量vs系统变量的区别


创建仿真面板

创建开关/指示灯面板(储存在Panels文件夹下) 

(没有环境变量,这里的Panel面板无法和对应的信息关联)

 开发一个CANoe仿真Demo_FirstDemo_第10张图片开发一个CANoe仿真Demo_FirstDemo_第11张图片

 开发一个CANoe仿真Demo_FirstDemo_第12张图片开发一个CANoe仿真Demo_FirstDemo_第13张图片


创建网络节点

在Simulation Setup窗口中添加两个ECU节点(ECU1和ECU2)

作用:当开关按下后,ECU1发送一个CAN报文,ECU2收到报文后,将指示灯亮起

对ECU1的设置:

单击File按钮,为该节点创建一个Switch.can文件,并添加CAPL代码

(这段代码使得节点Switch根据系统变量svSwitch的变化,修改bsSwitch的值,并将新的报文发送到总线上。)
 开发一个CANoe仿真Demo_FirstDemo_第14张图片

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

variables
{

}

on prestart 
{
  write("This is my first CANoe Simulation!\n");
}

//以下为处理系统变量svSwitch的响应
on sysvar sysvar::MyNamespace::svSwitch
{
   //声明一个CAN报文,用于报文发送
   message Msg1 msg;

   //读取当前的系统变量svSwitch的值,并赋值给报文顶得信号bsSwitch
   msg.bsSwitch = SysGetVariableInt(sysvar::MyNamespace::svSwitch);

   //将报文输出到总线上
   output(msg);
}

 对ECU2的设置:

 单击File按钮,为该节点创建一个Light.can文件,并添加CAPL代码

(这段代码将在Light节点中处理收到的CAN报文Msg1,根据报文中信号bsSwitch修改系统变量svLight的值,从而屎线LED指示灯的点亮或者熄灭。)

开发一个CANoe仿真Demo_FirstDemo_第15张图片

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

variables
{
  
}

//以下为接收到Msg1报文的响应
on message Msg1
{
   //读取报文的信号bsSwitch的值,并赋值给系统变量svLight
   sysSetVariableInt(sysvar::MyNamespace::svLight, this.bsSwitch);
}


工程运行测试

开发一个CANoe仿真Demo_FirstDemo_第16张图片

你可能感兴趣的:(VECTOR软件合辑,网络,服务器,运维)