在CAPL(CAN Access Programming Language)中,on errorActive 事件是一个特殊的事件处理程序,用于在CAN控制器的错误状态从Error Passive恢复到Error Active时执行特定的操作。CAN节点的错误状态分为三种:
- Error Active:节点可以正常发送和接收消息,并在检测到错误时发送主动错误帧(Active Error Frame)。
- Error Passive:节点的错误计数器较高,仍然可以发送和接收消息,但在检测到错误时只能发送被动错误帧(Passive Error Frame)。
- Bus-Off:节点的错误计数器超过阈值,节点被禁止发送和接收消息。
当CAN节点的错误状态从Error Passive恢复到Error Active时,on errorActive
事件会被触发。
1. on errorActive 事件的基本功能
- 触发时机:当CAN控制器的错误状态从Error Passive恢复到Error Active时触发。
- 主要用途:
- 检测CAN控制器的错误状态恢复。
- 记录状态恢复信息。
- 执行恢复后的操作(如重新启用某些功能)。
2. on errorActive 事件的语法
on errorActive
{
// 处理错误状态恢复的代码
}
3. on errorActive 事件的使用场景
场景1:记录状态恢复信息
在CAN控制器的错误状态恢复到Error Active时,记录状态恢复信息。
on errorActive
{
// 记录状态恢复信息
write("CAN controller returned to Error Active state at time: %f", timeNow());
}
场景2:执行恢复后的操作
在CAN控制器的错误状态恢复到Error Active时,执行恢复后的操作(如重新启用某些功能)。
on errorActive
{
// 执行恢复后的操作
write("Re-enabling normal communication...");
// 重新启用某些功能
setSignal(signal1, 1); // 启用信号1
}
场景3:生成状态恢复报告
在CAN控制器的错误状态恢复到Error Active时,生成状态恢复报告。
on errorActive
{
// 生成状态恢复报告
write("Generating error recovery report...");
reportGenerate("error_recovery_report.html");
}
4. on errorActive 事件的注意事项
- 触发条件:
on errorActive
事件仅在CAN控制器的错误状态从Error Passive恢复到Error Active时触发。 - 与错误计数器的关系:错误状态的恢复与CAN控制器的发送错误计数器(TEC)和接收错误计数器(REC)有关。当这两个计数器都低于错误被动阈值(通常为128)时,节点会恢复到Error Active状态。
- 多通道支持:如果系统中有多个CAN通道,可以为每个通道单独定义
on errorActive
事件。
5. 示例
以下是一个完整的CAPL脚本示例,展示了如何使用 on errorActive
事件检测错误状态恢复并执行相应操作:
variables
{
dword fileHandle;
}
on start
{
// 打开日志文件
fileHandle = openFile("error_recovery_log.txt", 2);
}
on errorActive
{
// 记录状态恢复信息
fileWrite(fileHandle, "CAN controller returned to Error Active state at time: %f", timeNow());
// 执行恢复后的操作
write("Re-enabling normal communication...");
setSignal(signal1, 1); // 启用信号1
}
on stop
{
// 关闭日志文件
closeFile(fileHandle);
}
6. 相关函数
-
canGetErrorState
:获取CAN控制器的当前错误状态。- 语法:
canGetErrorState(channel)
- 返回值:返回CAN控制器的错误状态(如
canERROR_ACTIVE
、canERROR_PASSIVE
、canBUS_OFF
)。 - 示例:
if (canGetErrorState(1) == canERROR_ACTIVE) { write("CAN controller is in Error Active state."); }
- 语法:
-
canGetErrorCounters
:获取CAN控制器的发送错误计数器(TEC)和接收错误计数器(REC)。- 语法:
canGetErrorCounters(channel, &tec, &rec)
- 参数:
channel
:CAN通道号。&tec
:发送错误计数器的引用。&rec
:接收错误计数器的引用。
- 示例:
dword tec, rec; canGetErrorCounters(1, &tec, &rec); write("TEC: %d, REC: %d", tec, rec);
- 语法:
7. 错误状态的恢复流程
- 检测错误状态:通过
on errorActive
事件或canGetErrorState
函数检测错误状态的恢复。 - 记录恢复信息:记录错误状态恢复的时间和相关数据。
- 执行恢复操作:在错误状态恢复后,执行必要的操作以恢复正常通信。
总结
on errorActive
事件是CAPL中用于检测CAN控制器错误状态恢复的重要事件处理程序。通过合理使用 on errorActive
事件,可以及时发现错误状态的恢复并执行相应的操作,从而确保CAN网络的稳定性和可靠性。