CANoe 完成领导布置的任务

wangyihe20000719 / 2023-07-17 / 原文

任务

建立一个CANoe工程,要求:
(1)建立2个CAN通道,用CAPL脚本在CAN1通道循环发送0x100报文;
(2)0x100报文包含两个信号Signal1和Signal2,Signal1为Value Table型(0:OFF,1:ON,2:Error),起始位为0;Siganl2为10bit长,起始位为22;
(3)使用Panel对Signal1和Signal2进行输入输出,使用input/output作为输入,使用Combo-Box作为输出(即不可输入);
(4)根据Easy Demo工程,建立两个记录模块,一个记录所有数据,保存为.asc格式,另一个只记录0x123报文,保存为.blf格式

建立2个通道在新建的时候选择的是就是两个通道,建立数据库的时候新建了ID为0x100的报文和两个信号,一个信号是Value Table型,以我现在只学习了基础的理解而言,就是该信号有三个值,信号的长度还不知道该怎么定义,就定义了8bit。

面板设计有两个框,一个输入,一个输出,还有两个通道是为啥???

暂定先这样理解吧:有一个通道,面板上有一个输入的对话框,一个输出的对话框,输入的对话框与signal_1绑定,输出的对话框与signal_2绑定,当在输入框中输入0,1,2时,信号signal_1发生变化,所以触动事件是信号事件,当触动了就把signal_1的值赋给signal_2,因为signal_2与输出对话框绑定,所以输出对话框就会自动输出值。

 

下面是对信号时间的说明

 LightSwitch应该为报文名,所以写代码时这样写

on signal_update Message_1::Signal_1
{

}

接下去就要解决信号赋值怎么赋。

CANoe使用教程 (xjx100.cn)

在里面复制了一段

 

  • 信号(Signal):信号是CAN或其他网络上的消息中的一个数据字段,它们可以表示物理量或状态。信号可以通过on signalon signal_update事件来响应,也可以通过getSignalsetSignal函数来读写。信号可以使用数据库中定义的符号名称或值表。

1.先用setSignal试一下

于是

setSignal(Message_1::Signal_2,Message_1::Signal_1);

但是报错了

Error      1154 at (15,3): types of parameters do not match.    tran.can

(15,3)处出现错误1154:参数类型不匹配.tran.can

所以不可以。

2.上一篇描写的是信号值赋给系统变量,用那个方法试一下。

//读取当前的系统变量svSwitch的值,并赋给报文的信号bsSwitch
  msg.bsSwitch=sysGetVariableInt(sysvar::MyNamespace::svSwitch);
 //读取报文的信号bsSwitch值,并赋给系统变量svLight
  sysSetVariableInt(sysvar::MyNamespace::svLight,this.bsSwitch);
于是有了以下代码
sysSetVariableInt(sysvar::MyNamespace::trans,Message_1.Signal_1);
 Message_1::Signal_2=sysGetVariableInt(sysvar::MyNamespace::trans);

但是,还是报错

Error 1154 at (15,3): types of parameters do not match. tran.can

3.无语了,看了一下另一个仿真工程的代码,就试着加了$,结果就好了。

$Message_1::Signal_2=$Message_1::Signal_1;

知识点:

 

  • 代码结束了,面板出问题了,真真无语了。

 重新去绑定了信号,ok。

最后结果还是有问题,再改改

问题找到了,没有把报文由哪个节点发出给指定,所以报文发不出来。