on (start/prestart/stopmeasure/prestop)_Vector官方文档的翻译(AI翻译的)
准确的来说 on (start/prestart)是可以被“Start”触发,on (stopmeasure/prestop)可以被Stop触发。Pre开头的事件可以被称为“预事件”是先被触发的。如一个脚本中同时定义了,on (start/prestart)事件,当Start被按下时,prestart被先触发。是“测量”,这里测量原文中的单词就是Measure,对应的就是下文中两个图标“Start
事件过程执行时机
这些事件过程会在测量开始前、测量启动时以及测量结束时被调用。例如,您可以在此处初始化变量,使用write
函数将启动报告输出到 Write 窗口,启动定时器或在测量结束后输出统计信息。
[个人解读:上文标粗文字说明了,on (start/prestart/stopmeasure/prestop)这些事件的触发源 是“测量”,这里测量原文中的单词就是Measure,对应的就是下文中两个图标“Start,和Stop”]
准确的来说 on (start/prestart)是可以被“Start”触发,on (stopmeasure/prestop)可以被Stop触发。Pre开头的事件可以被称为“预事件”是先被触发的。怎么理解喃?如一个脚本中同时定义了,on (start/prestart)事件,当Start被按下时,prestart被先触发。可以直接在脚本中试一下,就知道了。
on preStart
过程
on preStart
过程仅用于初始化变量、在 Write 窗口显示消息以及从文件读取数据。当on preStart
过程执行时,系统(CANoe)的部分功能尚未完全可用。例如,此时无法通过output
函数向总线发送消息。
【记住,在on preStart事件中,output(函数是无法使用的)】
on preStop
处理程序
当请求停止测量后,on preStop
处理程序会被调用。该函数可用于执行某些必须在测量停止生效前完成的最终操作。
注意:若仅在on StopMeasurement
中执行环境变量设置等操作可能无效。若需要执行更复杂的预停止操作(如向连接的 ECU 发送关机消息并等待确认),可在on preStop
函数中调用DeferStop
来进一步延迟测量停止。如果 CAPL 节点中未调用DeferStop
,则所有预停止活动将在on preStop
处理程序结束后视为完成,即测量会立即停止(除非其他节点仍在延迟测量停止)。
[记住,如果在
on StopMeasurement事件被触发后,执行对环境变量的操作,则可能是无效的,复杂操作也可能是无效的,如在prestart中启动一个定时器,也是无效的。
]DeferStop函数:
如下图,就是一个延迟的函数,延迟关闭
针对 CANoe 用户的说明
在网络节点模型中,可能需要在测量启动时执行与环境变量变化时相同的操作。具体包括:
- 初始化环境变量
- 启动响应环境变量变化的定时器
- 使用环境变量的初始值向总线发送消息
1、怎么都在说环境变量,现在环境变量基本不是,不使用了
由于这些功能通常在模型的on envVar
事件过程中执行,CAPL 提供了CallAllOnEnvVar
函数,可用于调用模型中所有on envVar
事件过程。您应在on start
过程中执行此函数以初始化模型的环境变量。
针对 Test Feature Set 用户的说明
在测试单元和测试模块中,不建议在on prestart
处理程序中初始化变量,因为每次启动测试单元 / 模块时所有变量都会被清除。应使用测试场景本身进行变量初始化。更多细节请参考《CANoe 测试入门》。
示例代码
on preStart
过程
capl
on preStart
{
write("Measurement started!");
msg_Count = 0;
}
on start
过程
capl
on start
{
write("start Node A");
setTimer(cycTimer,20);
CallAllOnEnvVar(); // 仅适用于CANoe
}
on preStop
过程
capl
on preStop
{
message ShutdownReq m;
output(m);
DeferStop(1000);
}
on stopMeasurement
过程
capl
on stopMeasurement
{
write("Message 0x%x received: %d", msg.id, msg_Count);
}
CAPL 测试节点中使用处理程序的注意事项
对于on preStop
处理程序、事件处理程序和定时器处理程序:
如果测试被停止(测试模块处于非活动状态),这些处理程序将不会在 CAPL 测试节点中执行。
示例:
在 XML 测试模块中添加 CAPL 测试节点:
xml
<TestModule>
<CAPLTestNode>
on preStart
{
write ("start");
}
on preStop
{
write ("stop");
deferStop (5000);
}
</CAPLTestNode>
</TestModule>
当测试模块非活动时:
on preStart()
的write
输出会显示on preStop
不会执行
格式说明
- 代码块:保留原文缩进和语法高亮格式
- 注意事项:使用斜体标注并单独成段
- 函数名 / 变量名:保持 CAPL 原生写法(如
DeferStop
、msg_Count
) - XML 代码:保留标签结构和缩进
- 技术术语:采用行业标准译法(如 "measurement" 译为 "测量","environment variables" 译为 "环境变量")
更多推荐
所有评论(0)