CANoe工具是汽车仿真测试开发中使用最广泛的工具
Panel
CANoe工具分为硬件和软件,首先需要把硬件环境搭建好
硬件搭建好后,需要在软件环境上配置好仿真节点,首先打开一个空白的configuration
由于连接的ECU使用的是CAN网络高速,且只有一个ECU,所以我们这里选择的是一个通道的500bit/s的高速CAN网络
打开工程文件以后,我们打开面板设计界面
面板设计界面是什么样
如果你学过C#语言,会发现和C#的窗体程序类似,都提供了不同功能的控件元素,方便用户随意拖入设计界面,不同控件具有不同的属性
现在我们看一个比较常用的控件,通过它来了解面板实现通信的流程
Button按钮
button按钮的功能就是按下,然后释放,只有这两个动作
我们先在Toolbox上把Button控件拖到面板设计区,然后右击选择显示它的属性
接着我们看一下Button按钮的属性有哪些
- Text
这个button在面板上显示的名字
- Control Name
这个button的身份id,当我们在capl中想操作这个button的时候就可以通过它的control name来操作
- Switch Value ‘Pressed’
表示button被按下后值被设置为多少
- Switch Value ‘Released’
表示button被释放后值被设置为多少
谁的值?
就是下面Symbol这个属性定义的
- Symbol
直面意思是象征,表明这个button象征着什么,我们看下具体有哪些类型
信号,环境变量,系统变量和服务信号,其中我们使用最多的是信号和系统变量
怎么使用?
比如我们选择了信号类型,然后再在上面的Symbol栏导入具体的信号
切记导入信号时会出现Symbol Selection界面,它里面的数据就是取自DBC数据库,所以我们需要首先导入DBC数据库
DBC数据库怎么导,前面的文章有讲过《CANoe-发送CAN消息的几种方式》
我们现在把这个button设置成一个信号Ig_15
我们设想下,如果面板就做成了这样,那我们按下这个button后,实现了什么功能?
按下这个动作会让值变为设置好的值1,谁的值,这个button是信号Ig_15,所以,按下这个button,信号Ig_15的值变成1。同样地,释放这个button,信号Ig_15的值变成0
注意,注意,button改变信号值,和xml改变信号值一样,都是通过交换层CANoeIL来设置信号值的,所以我们必须在仿真界面创建一个带有CANoeIL的节点
下面我们做个试验,看是否是这样?
我们先在仿真界面创建一个节点,然后设置成信号所在的节点Gateway,无法理解的可以参考《CANoe-发送CAN消息的几种方式》
然后我们在trace窗口查看
不点击button时,信号值是默认值0
按下button
释放button
这是button作为信号类型的表现
那如果把它设置成系统变量或者环境变量呢?用途又是什么?
可以类比信号,按下button是让信号值变成1,释放让信号值变成0,那如果是系统变量,按下button让系统变量值变成1,释放让系统变量值变成0
进一步想,系统变量值变成1或者0,有什么用?
答案是可以在capl脚本里调用这个变量,capl里有一个回调函数是关于系统变量的,on sysvar或者on sysvar_update,就是当这个系统变量值发生改变时,我就调用这个函数里的函数体
注意:这两个回调函数还是有区别的,on sysvar表示只有系统变量值变成不同值才会回调,而on sysvar_update表示系统变量值只要刷新(值不一定改变)就回调
什么意思?
比如说某个系统变量value现在的值是1,我这时候value = 0,那么这个系统变量值有没有改变?改变了,有没有刷新?有刷新,所以on sysvar和on sysvar_update都会回调。但是如果value = 1,它的值有没有改变?没有,它的值有没有刷新?刷新了,所以只会回调on sysvar_update
现在我们回到正题,按下button可以让系统变量值改变,系统变量值改变又会调用capl中的回调函数on sysvar或on sysvar_update,我们就可以在里面实现很多功能,比如说发送某条消息,改变某个信号值,或者就是简单的打印一句话
做个简单的例子:
先新建一个系统变量
然后把这个系统变量加到button的属性Symbol上
接着新建一个节点,加入一个capl脚本
运行工程,点击button一次,你觉得会打印出什么?
我点击了一次,为什么打印了两次?
因为系统变量默认值是0,然后你按下,系统变量值变成1,调用了一次这个回调函数,然后你又释放了,系统变量值变成0,又调用了一次这个回调函数,所以打印了两次
那怎样才能实现点击释放button后,只打印一次呢?也很简单,做个判断就好了
再看下打印的结果
你完全可以把write(“press button test”)改成发送一条消息,就实现了点击button一次,发送这条消息一次,或者循环发也能实现
还可以对已有的面板进行编辑
在面板的标题栏右击,然后选择Edit即可
最后我们看一下所有的面板都是在什么地方打开