- 🍅 我是蚂蚁小兵,专注于车载诊断领域,尤其擅长于对CANoe工具的使用
- 🍅 寻找组织 ,答疑解惑,摸鱼聊天,博客源码,点击加入👉【相亲相爱一家人】
- 🍅 玩转CANoe,博客目录大全,点击跳转👉
目录
- 帧传输时间
- 报头时间检测函数(ChkStart_LINHeaderToleranceViolation)
帧传输时间
- 同步间隔段由同步间隔(Break)和同步间隔段间隔符(Break Delimiter)构成,同步间隔是至少持续13 位(以主机节点的位速率为准)的显性电平,由于帧中的所有间隔或总线空闲时都应保持隐性电平,并且帧中的任何其它字段都不会发出大于9 位的显性电平,因此同步间隔可以标志一个帧的开始。
- 同步间隔段的间隔符是至少持续1 位的隐性电平。
帧在总线上传输的时间计算下图 所示。
TFrame_Maximum
为帧在总线上传输的最大时间;THeader_Maximum
为帧头在总线上传输的最大时间;TResponse_Maximum
为应答在总线上传输的最大时间;THeader_Nominal
为帧头额定传输时间(34比特):同步间隔段(包含同步间隔和同步间隔段间隔符)的最小传输时间 +同步段传输时间 + 受保护ID段传输时间;- 帧头的余量
THeader_Rest
包含字节间间隔,规定为帧头额定传输时间的0.4 倍; TResponse_Nominal
为应答额定传输时间:数据段传输时间 + 校验和段传输时间;- 应答的余量
TResponse_Rest
包含应答间隔以及字节间间隔,规定为应答额定传输时间的0.4 倍;Ndata表示数据段包含N个字节。
报头时间检测函数(ChkStart_LINHeaderToleranceViolation)
- 检查LIN报头的时间。如果测量长度(以比特时间为单位)超出指定范围,将产生一个事件,并在测试报告或者Write窗口中打印 出来。
- LIN报头最小为34比特长度,不能超过34*1.4 = 47比特
测试示例代码如下:
- 测试结果为Pass,不会触发该事件。
{
dword checkId;
float retVal;
checkId = ChkStart_LINHeaderToleranceViolation(40);
TestAddCondition(checkId);
TestWaitForTimeout(10*1000);
lastMeasuredSyncBreakLength = ChkQuery_EventTiming(checkId);
retVal = ChkQuery_EventTiming(checkId);
testStep("Evaluation", "Last measured LIN Header length is %.2f bits", retVal);
TestRemoveCondition(checkId);
}
- 如果将 checkId = ChkStart_LINHeaderToleranceViolation(
40
);改为 checkId = ChkStart_LINHeaderToleranceViolation(0
);,则可能会触发该检测事件,如下图所示,测的LIN报头长度为36比特。
- 🚩要有最朴素的生活,最遥远的梦想,即使明天天寒地冻,路遥马亡!
- 🚩如果这篇博客对你有帮助,请 “点赞” “评论”“收藏”一键三连 哦!码字不易,大家的支持就是我坚持下去的动力。