CANoe 完成领导布置的任务
任务
建立一个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 signal或on signal_update事件来响应,也可以通过getSignal或setSignal函数来读写。信号可以使用数据库中定义的符号名称或值表。
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。
最后结果还是有问题,再改改
问题找到了,没有把报文由哪个节点发出给指定,所以报文发不出来。