从零学习VH6501 —— Trigger Configuration类干扰触发条件的设置
Posted 蚂蚁小兵
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从零学习VH6501 —— Trigger Configuration类干扰触发条件的设置相关的知识,希望对你有一定的参考价值。
相关文章
系列用的CANoe演示工程我放在了Git上,不定时根据博客更新。
前言
-
测试软硬件环境:
VH6501 CAN Disturbance Interface
CANoe 11 SP2
Win10 X64 -
如下图这是整个VH6501能够用到的所有
类
本章节将继续讲解Trigger Configuration
文章目录
Class: CanDisturbanceFrameTrigger 干扰报文的条件设置
这个最常用的类,可以通过这个类定义 干扰的报文,干扰报文的位置
① 下面的这个脚本是对一个指定报文进行干扰的典型case
testcase TC_03()
CanDisturbanceFrameTrigger frameTrigger;
CanDisturbanceSequence sequence;
dword deviceID;
long valditiyMask;
message 0x100 triggerMessage;
long validityMask;
long result;
//clear the sequence
sequence.Clear();
deviceID = 1;
//configure the message should be triggered
//ID must standard ID and a CAN message must on the bus
validityMask = @sysvar::CanDisturbance::Enums::ValidityMaskFlags::IDBase
| @sysvar::CanDisturbance::Enums::ValidityMaskFlags::IDE
| @sysvar::CanDisturbance::Enums::ValidityMaskFlags::FDF ;
frameTrigger.SetMessage(triggerMessage, deviceID, validityMask);
//trigger position is the CRC delimiter
frameTrigger.TriggerFieldType =
@sysvar::CanDisturbance::Enums::FieldType::CRCDel;
frameTrigger.TriggerFieldOffset = 0;
//configure a sequence 320 FPGA ticks long and send a recessive bit at the Ack slot
//bit on the bus.
result = sequence.AppendToSequence(320, 'R');
//Configure the frame trigger and the sequence to the CANstress device
if(result == 1)
result = canDisturbanceTriggerEnable(deviceID, frameTrigger, sequence);
if(result == 1)
write("Trigger is enabled");
else
write("Enable trigger error Result =%d", result);
② 运行结果,可以看到ID = 0x100报文报的一个 ACK slot 位的一个错误
frameTrigger.TriggerFieldType = @sysvar::CanDisturbance::Enums::FieldType::CRCDel;
脚本设置的是CRC 空闲位,实际触发的是ACK 位 。
因为触发总在设置的下一位
因为触发总在设置的下一位
因为触发总在设置的下一位
③ canDisturbanceFrameTrigger::SetMessage 注解:
canDisturbanceFrameTrigger 类只有这 一个方法,作用是设置触发的条件
validymask
是一个位字段,
它定义了帧对象的哪些字段对帧触发配置应该是重要的。所有其他字段与匹配帧无关,因此是不相关的。
可能的值可以通过系统变量sysvar::CanDisturbance::Enums::ValidityMaskFlags来访问。如果要使用多个字段,则可以将该系统变量的值与逻辑或组合在一起
-
总线上要收到ID = 0x100的报文,才能 触发干扰,如果总线上收不到0x100,是无法触发干扰的
-
如果想要 任意报文都可以触发干扰,我们常常可以简单的将 validityMask = 0 ;
//ID must standard ID and a CAN message must on the bus
validityMask = @sysvar::CanDisturbance::Enums::ValidityMaskFlags::IDBase
| @sysvar::CanDisturbance::Enums::ValidityMaskFlags::IDE
| @sysvar::CanDisturbance::Enums::ValidityMaskFlags::FDF ;
④ canDisturbanceFrameTrigger::TriggerFieldType注解:
canDisturbanceFrameTrigger 类只有这 一个属性,用于设置触发的报文帧结构的位置
触发总在设置的下一bit 位
比如本case设置的是CRC 空闲位,实际触发的是ACK 位 。
总结
本章博客,讲解了VH6501的函数库中的干扰触发条件的设置
更全面的VH6501学习请参考帮助文档和官方示例
C:\\Users\\Public\\Documents\\Vector\\CANoe\\Sample Configurations 11.0.55\\CAN\\MoreExamples\\CANDisturbanceInterface
- 要有最朴素的生活,最遥远的梦想,即使明天天寒地冻,路遥马亡!
- 如果这篇博客对你有帮助,请 “点赞” “评论”“收藏”一键三连 哦!码字不易,大家的支持就是我坚持下去的动力。
以上是关于从零学习VH6501 —— Trigger Configuration类干扰触发条件的设置的主要内容,如果未能解决你的问题,请参考以下文章
从零学习VH6501 —— Repetitions 干扰触发的次数配置