CAPL的CAN控制器事件-02 on errorActive

在CAPL(CAN Access Programming Language)中,on errorActive 事件是一个特殊的事件处理程序,用于在CAN控制器的错误状态从Error Passive恢复到Error Active时执行特定的操作。CAN节点的错误状态分为三种:

  1. Error Active:节点可以正常发送和接收消息,并在检测到错误时发送主动错误帧(Active Error Frame)。
  2. Error Passive:节点的错误计数器较高,仍然可以发送和接收消息,但在检测到错误时只能发送被动错误帧(Passive Error Frame)。
  3. 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_ACTIVEcanERROR_PASSIVEcanBUS_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. 错误状态的恢复流程

  1. 检测错误状态:通过 on errorActive 事件或 canGetErrorState 函数检测错误状态的恢复。
  2. 记录恢复信息:记录错误状态恢复的时间和相关数据。
  3. 执行恢复操作:在错误状态恢复后,执行必要的操作以恢复正常通信。

总结

on errorActive 事件是CAPL中用于检测CAN控制器错误状态恢复的重要事件处理程序。通过合理使用 on errorActive 事件,可以及时发现错误状态的恢复并执行相应的操作,从而确保CAN网络的稳定性和可靠性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

正当少年

随缘

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值