CANoe-如何制作面板并实现通信

本文介绍了如何在CANoe中制作面板,特别是通过Button控件实现通信。首先搭建硬件环境并配置仿真节点,然后在软件环境中创建面板。Button的属性包括Text、Control Name、Switch Value等,可以通过选择信号或系统变量来实现不同功能。文中详细讲解了Button作为信号类型时如何改变信号值,并通过实验验证。此外,还讨论了Button作为系统变量时如何触发capl脚本中的回调函数,以及如何通过条件判断避免重复执行。最后提到了面板的编辑方法。
摘要由CSDN通过智能技术生成

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即可

最后我们看一下所有的面板都是在什么地方打开


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

汽车通信技术

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值