第二十期 回顾 - CAPL 事件概述
- 知识回顾: 再次强调,CAPL 是一种什么驱动模型的编程语言?
- 知识回顾: 教程中将 CAPL 常见的事件大致分为了哪几类?(至少说出三类)
- 知识回顾:
on start和on stopMeasurement事件分别在测量过程的哪个阶段触发? - 知识回顾:
on message和on signal事件的主要区别在于它们关注的对象是什么? - 逻辑推理: 如果你想在 CANoe 测量一开始就立即发送一个初始化报文,你应该将发送报文的代码放在哪个测量生命周期事件处理程序中(
on preStart还是on start)?为什么? - 知识回顾:
on signal和on signal_update这两个事件都需要哪个前提条件才能有效使用? - 知识回顾: 教程中提到系统变量 (System Variable) 事件主要与什么应用场景相关(虽然未详细展开)?
- 逻辑推理: 根据事件驱动模型,如果一个 CAPL 脚本中只写了
on message 0x123 { ... },但总线上从未出现 ID 为 0x123 的报文,那么这个脚本中的代码会被执行吗? - 知识回顾:
on key事件属于教程中划分的哪一类事件? - 逻辑推理: 假设一个信号 A 每 100ms 更新一次,但其值连续 1 秒都保持不变。在这 1 秒内,
on signal A会触发几次?on signal_update A大约会触发几次?
第二十一期 回顾 - 系统测量事件
- 知识回顾: 系统测量生命周期事件按典型触发顺序排列是怎样的?
- 知识回顾: 为什么不能在
on preStart事件处理程序中调用output()函数发送报文? - 知识回顾: 哪个事件表示 CANoe 测量已准备就绪,可以开始进行总线通讯(如发送报文)?
- 知识回顾:
on preStop事件在什么时候触发?它表示测量已经完全停止了吗? - 知识回顾: 在
on preStop事件中执行发送报文等耗时操作时,可能会遇到什么问题?应该使用哪个 CAPL 函数来解决? - 逻辑推理:
deferStop(3000);这句代码的作用是什么?它会影响on preStop事件本身的触发时间吗?它会影响哪个后续事件的触发时间? - 知识回顾: 哪个事件表示 CANoe 测量已完全停止并脱离总线?在此事件中通常执行什么类型的任务?还能发送报文吗?
- 逻辑推理: 如果在一个 CAPL 节点中只编写了
on start { write("Started"); }和on stopMeasurement { write("Stopped"); },运行并立即停止该 CANoe 工程,Write 窗口会输出什么?顺序如何? - 逻辑推理: 如果在
on preStop中需要确保发出一条报文,并且这条报文的发送可能需要 10ms,但你没有调用deferStop,那么这条报文一定能成功发送到总线上吗?为什么? - 知识回顾: 总结
on start和on preStop在执行总线操作(如发送报文)方面的关键区别。
第二十二期 回顾 - 事件之 on message
- 知识回顾:
on message事件在什么条件下会被触发? - 知识回顾:
on message关键字后面可以跟哪些类型的报文指定符?(至少列举三种) - 知识回顾: 在
on message事件处理程序内部,关键字this代表什么?它是什么数据类型? - 知识回顾: 如何通过
this关键字获取当前接收到的报文的 ID 和 DLC?获取到的 ID 是十进制还是十六进制? - 逻辑推理: 如果编写
on message 0x100-0x200 { write("ID: 0x%X", this.id); },当收到 ID 为 0x150 的报文时,会输出什么?当收到 ID 为 0x201 的报文时,会输出什么? - 知识回顾: 在
on message事件中,如果想访问报文中的某个信号(如EngineSpeed),前提条件是什么?使用的语法是什么?获取的是物理值还是原始值? - 知识回顾: 如果没有 DBC 文件,或者需要访问原始字节数据,可以通过
this结合哪些选择器来获取数据?(至少列举两种) - 逻辑推理: 收到报文
msg (ID=0x300, DLC=2, Data=0xAB 0xCD),在on message 0x300事件中执行word w = this.word(0);,变量w的值是多少(十六进制)?(假设字节序使得低字节在前) - 逻辑推理:
on message * { ... }和on message 0x000-0x7FF { ... }(对于标准 CAN ID)的作用是否等效? - 逻辑推理: 如果一个 ECU 周期性(如 50ms)发送 ID 为 0x1F0 的报文,你在 CAPL 中写了
on message 0x1F0 { counter++; },那么 1 秒钟后,变量counter大约会增加多少?
第二十三期 回顾 - 事件之 on signal / on signal_update
- 知识回顾:
on signal <SignalName>事件和on signal_update <SignalName>事件触发的主要区别是什么? - 知识回顾: 使用
on signal或on signal_update事件的前提条件是什么? - 逻辑推理: 一个信号
SigA的值序列是 5, 5, 5, 10, 10, 5。on signal SigA会触发几次?on signal_update SigA会触发几次(假设每次值都被更新)? - 知识回顾: 在
on signal或on signal_update事件处理程序中,关键字this代表什么?其数据类型是什么? - 知识回顾: 如何通过
this获取信号的物理值和原始值?使用什么选择器? - 知识回顾: 除了在信号事件中使用
this,在 CAPL 其他地方(如on key)可以通过哪几种主要方式主动获取信号的当前值?(至少列举两种) - 逻辑推理: 执行
float val = $EngineSpeed;和float val = getSignal(EngineSpeed);获取到的值是否相同?都是物理值还是原始值? - 逻辑推理: 如果信号
SigB在 DBC 中定义的 Factor 为 2,Offset 为 10。当收到包含SigB的报文,其原始值为 50 时,执行write("%f", this);(在on signal_update SigB中) 会输出什么?执行write("%f", this.raw);会输出什么?(假设this直接代表物理值) - 知识回顾: 如果信号名
MySignal在两个不同的报文MsgA和MsgB中都存在,如何明确指定我想响应的是MsgA中的MySignal变化?(写出on signal的可能写法) - 逻辑推理: 在
on signal MySig { if (this > 10) { ... } }中,this > 10比较的是物理值还是原始值?
第二十四期 回顾 - 事件之 on sysvar / on sysvar_update
- 知识回顾: 系统变量 (System Variable) 主要用于什么目的?(至少说出两点)
- 知识回顾: 在 CANoe 的哪个菜单下可以创建和管理系统变量?
- 知识回顾: 创建系统变量时,除了名称和数据类型,通常还会设置哪些重要属性(如命名空间、初始值等)?
- 知识回顾:
on sysvar <VarFullName>和on sysvar_update <VarFullName>事件触发的主要区别是什么? - 知识回顾: 在 CAPL 中修改或读取系统变量的值,推荐使用哪种简洁的语法?(涉及
@符号) - 知识回顾: 除了
@符号,还可以使用哪个系列的 CAPL 内置函数来设置和获取系统变量的值? - 逻辑推理: 在
on sysvar_update Control::Counter { write("Updated"); }中,执行@Control::Counter = @Control::Counter;(将变量赋给自己当前的值) 会触发write语句吗?如果换成on sysvar事件呢? - 知识回顾: 在
on sysvar或on sysvar_update事件处理程序中,关键字this代表什么?它返回的数据类型是什么? - 逻辑推理: 如果系统变量
MyVar定义为整型,在on sysvar MyNamespace::MyVar { int v = this; ... }中,是否需要像教程中那样写成int v = (int)this;?为什么? - 逻辑推理: 你创建了一个 Panel 面板,上面有一个开关控件关联到系统变量
Control::LightSwitch(0=Off, 1=On)。你想在开关状态改变时发送一条 CAN 报文,你应该将发送报文的代码主要放在哪个事件处理程序中 (on sysvar还是on sysvar_update)?