从零学习VH6501 —— Trigger Configuration类干扰触发条件的设置

Posted 蚂蚁小兵

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从零学习VH6501 —— Trigger Configuration类干扰触发条件的设置相关的知识,希望对你有一定的参考价值。

相关文章

系列用的CANoe演示工程我放在了Git上,不定时根据博客更新。

CANoe-Demn


前言

  • 测试软硬件环境:
    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 —— 环境搭建

从零学习VH6501 —— Sequences 类的理解

从零学习VH6501 —— 采样点测试

从零学习VH6501 —— Repetitions 干扰触发的次数配置

从零学习VH6501 —— Bus Off 的基本理解和测试用例设计

500K通讯速率下标称位宽度为320ticks