自定义CANoe工程——按键控制后备箱开关

发布时间 2023-07-17 15:18:39作者: 玩一会

工程文件地址:C:\Users\Public\Documents\Vector\CANoe\Projects\TrunkOpen

1.新建数据库,需要有一个节点Trunk,一个报文TrunkOpen,报文上的信号为OpenOrClose。定义好这些以后不要忘了以下几点:

  • 信号要关联到它的对应报文;
  • 报文由哪个节点发送,具体在哪如下图所示;

  • 添加节点在建立数据库的时候添加,并且在Network nodes右键new添加,这样ECU处也会有显示。
  • 报文要设置定时发送在Attributes处。

GenMsgCycleTime:定义报文的发送周期

GenMsgCycleTimeFast:定义快速报文的周期

GenMsgDelay Time:定义两帧报文之间传输的最小间隔

GenMsgILSupport:指定该报文是否需要交互层的支持

GenMsgNrOfRepetition:定义事件型报文的重复周期

GenMsgSendType:定义报文的发送类型

 GenMsgStartDelay Time:指定系统开始后首帧报文的延迟发送时间

GenMsgFastOnStart:指定交互层启动后到周期报文开始发送的时间间隔

(9条消息) CANoe - 数据库常见属性说明_picoasis的博客-CSDN博客

2.面板设计

一个是control板块,里面是按钮,操纵后备箱的开关;一个是display面板,展示后备箱的开关。这里面的多帧图片都是自己做的,在画图软件中也可以做,就比如我要做个后备箱开关的图就可以找两张图,一张后备箱开着,一张后备箱关着,把他们缩放到一样大小,再复制一下关着的那张图,将他们按顺序挨着放一起,如果是两种状态,那么需要三张图,如下图

 0对应图中第二帧图,1对应图中第三帧图,这里有一点需要注意,就是第一帧图片一般用于初始状态的显示,就是工程还没开始运行时显示的状态,那么工程开始它会停在那个状态呢?

通过观察Trace

  •  可以看出首先报文首先发送的数据是0
  • 也就是说display与信号相连接收到的数据值就是0

  • 由上图可以看出第二帧图对应的值就是0
  • 所以最开始显示的是后备箱打开的图

这里又有一个问题,为什么报文首先发送的数据是0呢?

下面是信号的attributes

GenSiglnactive Value:定义信号的无效值

GenSigSendType:定义信号的发送类型

 GenSigStartValue:定义信号的初始值

NWM-WakeupAllowed:定义信号是否参与网络管理

 所以在上面紫色的地方就可以改变信号的初始值。

 总结一下:要使工程开始运行的时候显示的图片是多帧图里的第三帧有两种办法:

1)将上面的信号初始值改为1;

2)将这张图(面板display后备箱多帧图)里的状态0值改为1,状态1改为0;

我给信号OpenOrClose添加了ValueTable,有必要吗?

Value Table(数值表) 用来文字化地指定信号和环境变量的值所代表的含义。把信号的valuetable改成none了,对结果好像无影响。这个value table在CANoe 完成领导布置的任务这篇随笔中使用过,在那里面就能看出它的用途,输入和输出框显示的不是0,1这样的数字,而是他们指代的含义。同样我把系统变量的valuetable也取消了,对结果也不影响。所以可加可不加吧。

还有一个问题,我用系统变量传值和用信号传值有什么区别?我现在是将后备箱开关与系统变量绑定,那如果我这绑定的是信号有关系吗?

试验了一下,就如CANoe 完成领导布置的任务这篇随笔里一样,一个报文上有两个信号,直接信号数据传输也可以,所以用信号也可以。

那么既然用信号和系统变量都可以,这两个使用起来有什么区别呢?

目前不知道,等以后知道且我想起来再来补充(笑脸)

3.系统变量

由上面的分析大概都发现不需要它了,虽然我也定义了,也能实现。

4.CAPL

只要在Trunk节点写代码就行,代码如下

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

variables
{
  
}

on signal TrunkOpen::TrunkState1
{
  $OpenOrClose=$TrunkOpen::TrunkState1;
}

 

这是将信号与后备箱按键绑定的代码,系统变量也试过可以成功。

这里其实也有问题,如果我的代码如下

on signal TrunkOpen::TrunkState1
{
  $TrunkOpen::OpenOrClose=$this;
}

 

那么就会出现问题,在this这里

Error 1955 at (14,28): $this only allowed in communication object signal or PDU section. Trunk.can