文章目录
- 前言
- 一、状态管理
- 二、实现过程
- 三、response_error信号的变化条件
- 四、节点内部报告
- 五、测试应用
- 方式1:LIN ISC
- 方式2:CAPL脚本方式
前言
在LIN专栏的文章中,我们介绍了
LIN的网络管理:LIN网络管理:休眠&唤醒测对了吗
LIN的状态机测试:一文搞懂LIN节点的State Machine状态机测试
还不太清楚这些内容的可以看之前的文章,本文主要介绍LIN的状态管理。
一、状态管理
LIN状态管理的目的是:检测运行过程中的错误。也就是对LIN节点进行状态监测。
一旦发现节点错误,有两种措施排除:
- 简单替换掉错误节点;
- 让出现问题的节点进行limp home状态,不参与通信过程。
二、实现过程
LIN网络的状态管理在主节点上进行。主节点监视来自每个从节点的状态报告,并对报告进行过滤/集成,以判断是否有一个或多个节点出现故障。每个从节点都要在它发布的某个无条件帧中包含一个长度为1 bit的标量信号response_error,向主节点报告自身状态,主节点接收信号并执行分析。
三、response_error信号的变化条件
- 当从节点发送或接收的帧(事件触发帧的响应除外)在帧响应中包含错误时,应设置response_error信号。
- 当包含response_error信号的无条件帧被成功传输时,response_erropr信号将被清除。
- 如果没有收到响应(这里指的是数据和校验和),则不能设置reesponse_error信号。该帧不会被任何从节点接收。
注:事件触发帧是允许冲突,能够解决LDF调度表的冲突问题,因此它不影响response_error信号(它既不是成功传输,也不是响应错误)。但是如果在冲突解决调度表中的无条件帧出现错误,将被视为错误,会发送response_error=1
四、节点内部报告
节点提供两个状态位,用于在自己的节点内进行状态管理;Error_in_response和successful_transfer。当发送或接收应答的时候发现错误,将置位 Error_in_response;成功传输则置位 Successful_transfer。
五、测试应用
在CANoe-Simulation-LIN ISC中,不知道大家注意过没有,当我们加载需要仿真发送的Frame时,无条件帧中的某些信号前面有一个小图标,如下图。而其他信号却没有这个图标。这就是LIN节点用于状态管理的response_error信号(信号命名不一定完全一致,resp_err\LinError等等形式)。当接入真实控制器测试时,当控制器内部出现某些故障时,该控制器发出的无条件帧中携带的response_error信号会置为1,告诉主节点自身出现错误。
而当没有真实控制器时,我们在仿真报文模拟节点状态故障时有两种方式:
方式1:LIN ISC
如上图所示,在LIN ISC中添加需要仿真发送的报文,对response_error置1处理。但是需要注意的是,这种方式只能触发一次response_error=1,后续的帧中response_error=0,而不像其他信号设置值后会一直保持。
方式2:CAPL脚本方式
当我们想一直触发response_error=1在LIN ISC中就无法实现,这时可以使用CAPL脚本的方式。通过linSetRespError(1)函数来设置/重置调用从节点的响应错误标志,使用For循环来让response_error持续置为1。如下图Trace窗口展示了函数调用后的结果。