在CANoe的Simulation Setup中,整个系统以图形化的方式显示网络、设备和所有网络节点,可以用CANoe硬件设备连接多路网络总线,同时在CANoe软件上创建所有的总线通道,包括LIN、CAN和Ethernet等,在每条总线上,可以添加多个网络节点或各类型的测试模块,方便测试
在总线上右击添加网络节点或测试模块
Network Node
在总线上添加网络节点,也就是ECU节点,也可以叫仿真节点
Network Node的用途有哪些?
首先需要明确的是,只要CANoe工程一运行,所有的Active Network Node都会同步运行起来
如果不想让某个节点运行,可以Deactive,有两种Deactive的方式
- 节点上右击Deactive
- 节点Configuration中选择off
右击节点选择Configuration
非激活状态下的Network Node是置灰的
由于Network Node是和CANoe同步运行,所以一般我们把事件触发的代码写在Network Node的capl中,比如说on key、on sysvar 等
这就是为什么我们在设计CANoe面板时会建立Network Node,因为其中用到了on sysvar等代码
我们想在CANoe运行期间,面板状态是可用的,而面板上的控件功能是通过事件来触发的,这也就要求在CANoe运行期间,这些事件可以随时触发,只有Network Node里的capl文件才可以在CANoe运行时随时触发所有的on事件
如何在Network Node中添加capl文件?
通过右击Network Node选择Configuration添加capl文件
可以在capl中编写相关事件函数,这样在CANoe运行期间,就可以随时通过触发不同的事件来实现想要的功能
除了用Network Node中的capl实现事件触发,还可以把它配置成某个真实节点用来仿真
比如说你获取了整车的DBC文件,里面包含了多个ECU节点及其下面的消息和信号,你想在CANoe中模拟这些节点的通信状态
首先需要导入DBC文件
右击Network Node选择Configuration,配置来自DBC里的ECU节点
配置完ECU后,还不能让它像真实的ECU那样发送周期报文,必须把交互层的dll文件添加进来
同样是在Configuration下
这个dll文件是CANoeILNLVector.dll,安装CANoe软件时自带,路径为:C:\Program Files\Vector CANoe 12.0\Exec32
CANoe提供了一些常用的dll文件,用户可以通过调用dll文件中的接口实现很多功能,也可以自己用C或C#语言编写函数方法生成dll,然后在CANoe中使用
CAPL Test Module
基于CAPL的测试模块,在Simulation Setup中如何使用呢?
首先添加一个CAPL Test Module
既然是基于CAPL的测试模块,必定是要添加capl文件
然后在capl中写入一个on key的事件
运行CANoe工程,点击’t’键,发现在write窗口中并没有打印“press key t”
这是为什么?
这说明CANoe运行后,CAPL Test Module并没有执行,也就不会触发里面的事件
再打开CAPL Test Module的Configuration
发现相比Network Node,CAPL Test Module多了start选项
可以看出CAPL Test Module并不会随着CANoe运行而执行,它有自己的执行方式,Configuration里提供了四种方式
- immediately
立即执行,也就是CANoe运行时即执行
- Environment variable
触发环境变量时执行
- System variable
触发系统变量时执行
- Key
点击某个按键时执行
或者也可以通过点击CAPL Test Module上的运行图标手动执行
我们现在运行CANoe后,点击此图标看看,会发现Write窗口中报错
提示执行的这个测试模块无效,为什么?
执行CAPL Test Module,本质上是执行capl文件,执行capl文件,又是执行的什么呢?
我们知道capl语言类似于C#语言,而C#脚本在执行时其实是执行的里面的主函数下的函数体
所以,CAPL Test Module里的capl脚本,必须要有主函数
所有的测试用例的实现都在这里执行
这里记住一点
CAPL Test Module的开始是以上面的几种方式执行,而它的结束是当主函数MainTest里的代码执行完毕后就会结束
所以如果你想在CAPL Test Module中实现事件触发,比如on key或on sysvar,必须要把MainTest里的代码执行时间拉长,比如增加一个等待时间
其他几个模块
.Net Test Module是执行C#脚本的测试模块,XML Test Module是执行XML文件的测试模块, IG可以在IG面板上添加消息和信号,Replay可以回放trace
这里还有一个问题,你会发现Simulation Setup中可以添加的这些,比如Network Node、CAPL Test Module等,在Test Modules中都可以添加
用法其实都一样,我知道的唯一差别就是XML Test Module,在Test Modules中可以生成test cases条目,可以选择想要的test case单独执行,而在Simulation Setup中不显示test cases条目,且是一次性全部执行完
以上,打完收工,请帮忙三连哦,谢谢!