目录
1.CAN IG使用
2.Visual Sequence 自动发送报文序列,可以设置多个visual sequence,可用于重复的网络模拟和write窗口输出,比IG灵活,比CAPL简单
3.CANoe中的系统变量和环境变量都是一种用于存储和传递数据的变量,它们有以下区别和使用场景:
4.Panel Design
5.CAPL编程
1.CAN IG使用
2.Visual Sequence 自动发送报文序列,可以设置多个visual sequence,可用于重复的网络模拟和write窗口输出,比IG灵活,比CAPL简单
3.CANoe中的系统变量和环境变量都是一种用于存储和传递数据的变量,它们有以下区别和使用场景:
- 系统变量是在CANoe中定义的变量,它们可以在不同的节点、面板、图表等之间共享数据。系统变量可以有多种数据类型,例如整数、浮点数、字符串、结构体等。系统变量可以通过
@
或$
符号来访问,也可以通过CAPL函数来读写。系统变量适用于需要在CANoe内部进行数据交换的场景,例如控制和监视网络通信、执行测试用例、显示和记录数据等。 - 环境变量是在CAN数据库中定义的变量,它们可以在不同的网络节点之间共享数据。环境变量只有有限的数据类型,例如整数、浮点数、枚举等。环境变量可以通过
envVar
事件或CAPL函数来读写。环境变量适用于需要在CAN网络上进行数据交换的场景,例如模拟和控制网络节点、发送和接收诊断请求、实现网络管理等。
CANoe运行的时候可以通过symbol panel实时修改变量的值(修改后不影响初始值):
CANoe运行的时候可以通过Node panel实时修改节点相关的值:
Signal的值,改完之后立即生效
Message的值,改完之后点击update生效
4.Panel Design
在Panel design的时候,把系统变量或者 网络变量(Network symbols)直接拖拽到panel上的控件上即可关联起来
控件的属性修改:
Panel中一个控件多个状态切换的设置:
Panel之间切换,CANoe运行停止控件:
5.CAPL编程
CAPL是事件驱动型的,事件发生才会执行对应代码
CAPL 程序结构:头文件includes,全局变量variables,事件处理(on 开始)
局部变量是静态的,点一次闪电运行,只初始化一次
message,timer,ms Timer 是数据类型关键字
Switch 要和break搭配使用
CAPL实现发送CAN message:一种是 自定义报文;一种是发送数据库自带的报文
5.1发送自定义报文(Raw Message)
增加一个网络节点
5.2发送一条数据库里已定义的报文
可以直接对相应的信号进行赋值
注意:在CAPL编程中,对应数据库自定义的报文,如果输入报文(message)名称,例如"msg2."后没有下拉框可以选择signal,可能是由于这个CAPL文件没有保存,保存后再试一下就可以了。
5.3 signal 报文有两种,一种是信号值发送改变时触发-signal,另一种时信号发送到总线上时触发-signal_update
CAPL中的Value Object是一种用于存储和传递数据的对象,它们有以下几种类型:
- 信号(Signal):信号是CAN或其他网络上的消息中的一个数据字段,它们可以表示物理量或状态。信号可以通过
on signal
或on signal_update
事件来响应,也可以通过getSignal
或setSignal
函数来读写。信号可以使用数据库中定义的符号名称或值表。 - 环境变量(Environment Variable):环境变量是CAN数据库中定义的变量,它们可以在不同的网络节点之间共享数据。环境变量可以通过
on envVar
事件来响应,也可以通过getValue
或putValue
函数来读写。环境变量可以使用数据库中定义的符号名称或值表。 - 系统变量(System Variable):系统变量是在CANoe中定义的变量,它们可以在不同的节点、面板、图表等之间共享数据。系统变量可以通过
on sysVar
事件来响应,也可以通过@
或$
符号或CAPL函数来读写。系统变量可以有多种数据类型,例如整数、浮点数、字符串、结构体等。
以下是每一种类型的Value Object的使用示例:
- 信号(Signal):
// 响应信号EngineSpeed的变化
on signal EngineSpeed
{
// 打印信号的物理值
write("Engine speed is %f rpm", this.phys);
}
// 设置信号EngineTemp的物理值为80
setSignal(EngineTemp, 80);
复制
- 环境变量(Environment Variable):
// 响应环境变量Switch的变化
on envVar Switch
{
// 打印环境变量的原始值
write("Switch value is %d", this.raw);
}
// 设置环境变量Light的原始值为1
putValue(Light, 1);
复制
- 系统变量(System Variable):
// 响应系统变量IO::DI_0的变化
on sysVar IO::DI_0
{
// 打印系统变量的原始值
write("IO value is %d", this.raw);
}
// 设置系统变量Debug::MotorValues::EngineSpeed的物理值为2000
@Debug::MotorValues::EngineSpeed = 2000;