在 CAPL(CAN Access Programming Language)中,事件处理函数用于响应特定的事件(如消息接收、定时器触发、键盘输入等)。这些事件处理函数是 CAPL 脚本的核心部分,用于实现交互式、动态的仿真和测试逻辑。
CAPL 中的事件处理函数分类
1. 脚本生命周期事件
这些事件与 CAPL 脚本的生命周期相关,用于在脚本启动、停止或预启动时执行特定操作。
-
on start
当 CAPL 脚本启动时触发。on start { write("CAPL 脚本启动!"); }
-
on preStart
在 CAPL 脚本启动之前触发。on preStart { write("CAPL 脚本即将启动!"); }
-
on stop
当 CAPL 脚本停止时触发。on stop { write("CAPL 脚本停止!"); }
2. 消息事件
这些事件用于处理 CAN 消息的接收和发送。
-
on message
当接收到特定消息时触发。on message <messageName|messageId> { // 处理消息 }
示例:
on message 0x100 { write("接收到消息 0x100"); }
-
on message *
当接收到任意消息时触发。on message * { write("接收到消息,ID: 0x%X", this.id); }
3. 定时器事件
这些事件用于处理定时器的触发。
on timer
当定时器触发时执行。
示例:on timer <timerName> { // 定时器触发时的操作 }
variables { timer msTimer1; } on start { setTimer(msTimer1, 100); // 启动定时器 } on timer msTimer1 { write("定时器触发!"); setTimer(msTimer1, 100); // 重新启动定时器 }
4. 键盘事件
这些事件用于响应键盘输入。
on key
当按下特定按键时触发。
示例:on key '<key>' { // 按键触发时的操作 }
on key 'a' { write("按下按键 A"); }
5. 环境变量事件
这些事件用于响应环境变量的变化。
on envVar
当环境变量的值发生变化时触发。
示例:on envVar <envVarName> { // 环境变量变化时的操作 }
on envVar EngineSpeed { write("EngineSpeed 的值已更新: %f", @EngineSpeed); }
6. 错误事件
这些事件用于处理总线错误或系统错误。
on error
当发生总线错误时触发。on error { write("检测到总线错误!"); }
7. 诊断事件
这些事件用于处理诊断相关的操作。
on diagResponse
当接收到诊断响应时触发。on diagResponse <requestName> { // 处理诊断响应 }
8. 网络管理事件
这些事件用于处理网络管理相关的操作。
on nmMessage
当接收到网络管理消息时触发。on nmMessage <messageName|messageId> { // 处理网络管理消息 }
9. 用户界面事件
这些事件用于与 CAPL 浏览器或面板进行交互。
on panel
当面板控件值发生变化时触发。on panel <panelName> { // 处理面板事件 }
示例:综合使用事件处理函数
示例 1:消息接收与定时器结合
variables {
timer msTimer1;
int counter = 0;
}
on start {
setTimer(msTimer1, 100); // 启动定时器
}
on timer msTimer1 {
counter++;
write("定时器触发,计数器值: %d", counter);
setTimer(msTimer1, 100); // 重新启动定时器
}
on message 0x100 {
write("接收到消息 0x100");
}
示例 2:键盘输入与环境变量结合
on key 's' {
@EngineSpeed = 1000; // 设置环境变量 EngineSpeed
write("EngineSpeed 设置为 1000");
}
on envVar EngineSpeed {
write("EngineSpeed 的值已更新: %f", @EngineSpeed);
}
总结
CAPL 中的事件处理函数主要包括以下几类:
- 脚本生命周期事件:如
on start
、on preStart
、on stop
。 - 消息事件:如
on message
。 - 定时器事件:如
on timer
。 - 键盘事件:如
on key
。 - 环境变量事件:如
on envVar
。 - 错误事件:如
on error
。 - 诊断事件:如
on diagResponse
。 - 网络管理事件:如
on nmMessage
。 - 用户界面事件:如
on panel
。
通过灵活使用这些事件处理函数,可以实现复杂的仿真、测试和分析逻辑,满足各种 CAN 总线开发需求。