在CAPL(CAN Access Programming Language)中,on start 事件是一个特殊的事件处理程序,用于在仿真节点(Simulation Node)启动时执行特定的操作。这个事件通常用于启动仿真后的初始化操作、启动定时器、发送初始消息等。
1. on start 事件的基本功能
- 触发时机:在仿真节点启动时触发。
- 主要用途:
- 启动仿真后的初始化操作。
- 启动定时器。
- 发送初始消息。
- 设置仿真环境的初始状态。
2. on start 事件的语法
on start
{
// 初始化代码
}
3. on start 事件的使用场景
场景1:启动定时器
在仿真启动时,启动一个定时器以周期性地执行某些操作。
variables
{
msTimer timer1;
}
on start
{
// 启动定时器,周期为100 ms
setTimer(timer1, 100);
}
on timer timer1
{
// 定时器触发时执行的操作
write("Timer triggered!");
// 重新启动定时器
setTimer(timer1, 100);
}
场景2:发送初始消息
在仿真启动时,发送一条初始消息。
on start
{
// 发送初始消息
message Msg1;
Msg1.id = 0x100;
Msg1.dlc = 8;
Msg1.byte(0) = 0x01;
output(Msg1);
}
场景3:设置仿真环境的初始状态
在仿真启动时,设置仿真环境的初始状态(如初始化变量)。
variables
{
int gCounter = 0;
}
on start
{
// 初始化变量
gCounter = 0;
write("Counter initialized to 0");
}
场景4:启动多个操作
在仿真启动时,执行多个初始化操作。
on start
{
// 初始化变量
int gCounter = 0;
// 启动定时器
msTimer timer1;
setTimer(timer1, 100);
// 发送初始消息
message Msg1;
Msg1.id = 0x100;
Msg1.dlc = 8;
Msg1.byte(0) = 0x01;
output(Msg1);
}
4. on start 事件的注意事项
- 执行顺序:
on start
事件在仿真节点启动时执行,确保所有初始化操作在仿真开始后立即完成。 - 仅适用于仿真节点:
on start
事件仅适用于仿真节点,不适用于测试模块或测量节点。 - 避免耗时操作:由于
on start
事件在仿真启动时执行,应避免执行耗时操作,以免延迟仿真运行。
5. 示例
以下是一个完整的CAPL脚本示例,展示了如何使用 on start
事件进行初始化和配置:
variables
{
int gCounter = 0;
msTimer timer1;
message Msg1;
}
on start
{
// 初始化变量
gCounter = 0;
write("Counter initialized to 0");
// 启动定时器
setTimer(timer1, 100);
// 发送初始消息
Msg1.id = 0x100;
Msg1.dlc = 8;
Msg1.byte(0) = 0x01;
output(Msg1);
}
on timer timer1
{
// 定时器触发时执行的操作
gCounter++;
write("Timer triggered! Counter: %d", gCounter);
// 重新启动定时器
setTimer(timer1, 100);
}
on message Msg1
{
// 处理接收到的消息
write("Received Msg1");
}
6. on start 与 on preStart 的区别
- 触发时机:
on preStart
:在仿真节点启动之前触发。on start
:在仿真节点启动时触发。
- 主要用途:
on preStart
:用于仿真前的初始化和配置(如设置总线参数、加载配置文件)。on start
:用于仿真启动后的初始化和操作(如启动定时器、发送初始消息)。
总结
on start
事件是CAPL中用于在仿真节点启动时执行初始化操作的重要事件处理程序。通过合理使用 on start
事件,可以确保仿真启动后的正确配置和初始化,从而提高仿真脚本的可靠性和效率。