Vector - CAPL - 等待并获取LIN数据

Posted 车载网络测试

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Vector - CAPL - 等待并获取LIN数据相关的知识,希望对你有一定的参考价值。

       ***摸鱼聊天、答疑解惑首选之地 --- 车载网络哪些事儿***

        LIN测试中,我们会遇到等待各种类型的LIN数据出现,并且对该数据进行处理;这种类型的测试无论是在CAN、LIN还是以太网,都会有类似响应的测试,今天的内容就是介绍等待特定类型的数据并且获取该类型数据,也是我自己做个笔记方便使用的时候查询。

目录

1、获取校验和错误及错误LIN数

TestWaitForLinCSError 

TestGetWaitLinCSErrorData

代码示例

2、获取LIN响应及数据

TestWaitForLinETFSingleResponse​

TestGetWaitLinETFSingleResponseData

代码示例

3、获取LIN Long Dominant信号出现及数据

TestWaitForLinLongDominantSignal

TestGetWaitLinLongDominantSignalData

代码示例

4、获取LIN Spike时间发生及获取数据

TestWaitForLinSpike

TestGetWaitLinSpikeData

代码示例


1、获取校验和错误及错误LIN数

TestWaitForLinCSError 

功能:在指定的时间内等待校验和错误。

说明:在调用函数之前,如果是是多条总线,需要提前设置需要检测的总线。

aTimeout:检查检验和超时时间

aFrameId:LIN报文ID

返回值:

-2:由于违反约束而恢复

-1:一般错误,例如功能不可用

0:超时后前未检测到错误

1:检查到LIN报文错误

TestGetWaitLinCSErrorData

功能:检索校验和错误的数据。

说明:

检索由上一条等待指令触发的校验和错误的数据。

第二个函数只能用于“已加入的事件”。“joind event”的编号(返回值为“testJoin…”)在这里被用作索引。

apEvent:带有校验和错误数据的数据结构;获取到的LIN报文数据

index:“joind event”的编号对应于“testJoin…”的返回值。

返回值:

0:成功访问数据

-1:数据访问失败–最后一次等待功能不是由校验和错误触发的

代码示例

以下代码为检测获取到LIN CS错误后,获取该帧LIN报文数据

testcase tcTFS_linCSError ()

   linCSError linCSErrorData;
   if (testWaitForLinCSError(5000) == 1)
   
      if (testGetWaitLinCSErrorData(linCSErrorData) == 0)
      
         testStep("Evaluation", "LIN CS Error event occurred for FrameId=0x%X", linCSErrorData.ID);
      
   

2、获取LIN响应及数据

TestWaitForLinETFSingleResponse

功能:将LIN事件触发的帧单一响应类型的事件添加到已加入的事件集。

说明: 

这是一个非阻塞函数。

在调用函数之前,请考虑始终在多总线环境中设置适当的总线上下文。

aETFFrameId:LIN事件触发的待等待帧的帧标识符。

aAssocFrameId:与等待的事件触发帧相关联的LIN无条件帧的帧标识符。

返回值:

-3:加入事件失败

-1:一般错误,例如,功能不可用

>0:已加入事件的编号

TestGetWaitLinETFSingleResponseData

功能:返回LIN时间触发单一响应类型事件的数据。

说明:

如果具有指定关联帧的单个响应的LIN事件触发帧是触发等待指令的最后一个事件,则可以使用此功能调用事件内容。

当触发事件是已联接事件的等待指令的一部分时,索引参数必须对应于“testJoin…”函数的返回值。

apEvent:带有校验和错误数据的数据结构;获取到的LIN报文数据

index:“joind event”的编号对应于“testJoin…”的返回值。

返回值:

0:成功访问数据

-1:无法执行数据访问,最后一个事件不是等待的事件

代码示例

testcase tcTFS_linETFSingleResponse ()

   linMessage 0 linETFSingleResponseData;
   if (testWaitForLinETFSingleResponse(0x3A, 0x36, 5000) == 1)
   
      if (testGetWaitLinETFSingleResponseData(linETFSingleResponseData) == 0)
      
         testStep("Evaluation", "LIN Event-triggered frame with a single response occurred for FrameId=0x%X", linETFSingleResponseData.ID);
      
   

3、获取LIN Long Dominant信号出现及数据

TestWaitForLinLongDominantSignal

功能:等待LIN长主导信号的出现。

说明:

如果帧没有出现在aTimeout时间到期之前,则结束等待返回值为0。

在调用函数之前,请考虑始终在多总线环境中设置适当的总线上下文。

aTimeout:应等待的最长时间[ms],(0:一直等待直到等到事件出现)

返回值:

-2:由于违反约束而恢复

-1:一般错误,例如,功能不可用

0:超时未接收到LIN报文

1:预期等待的LIN报文出现

TestGetWaitLinLongDominantSignalData

功能:如果LIN LongDominantSignal是触发等待指令的最后一个事件,则可以使用此函数调用帧内容。

说明:第二个函数只能用于已加入的事件。加入事件的编号(testJoin…的返回值)在这里被用作索引。

apEvent:带有校验和错误数据的数据结构;获取到的LIN报文数据

index:“joind event”的编号对应于“testJoin…”的返回值。

返回值:

0:成功访问数据

-1:无法执行数据访问,最后一个事件不是等待中的事件。

代码示例

testcase tcTFS_linLongDominantSignal ()

   linLongDominantSignal linLongDominantSignal;
   if (testWaitForLinLongDominantSignal (5000) == 1)
   
      if (testGetWaitLinLongDominantSignalData(linLongDominantSignal) == 0)
      
         testStep("Evaluation", "LIN LongDominantSignal event occurred. Signal length is %d ns", linLongDominantSignalData.length_ns);
      
   

4、获取LIN Spike时间发生及获取数据

TestWaitForLinSpike

功能:等待LIN Spike事件的发生。

说明:

如果事件没有在aTimeout时间到期之前发生,返回值为0。

在调用函数之前,请考虑始终在多总线环境中设置适当的总线上下文。

aTimeout:最长等待事件

返回值:

-2:由于违反约束而恢复

-1:一般错误,例如,功能不可用

0:超时事件未发生

1:在aTimeout时间内事件发生

TestGetWaitLinSpikeData

功能:如果LINspike是触发等待指令的最后一个事件,则可以使用tis功能调用帧内容。

说明:

如果LIN Spike是触发等待指令的最后一个事件,则可以使用第一个函数调用帧内容。

第二个函数只能用于已加入的事件。加入事件的编号(testJoin…的返回值)在这里被用作索引。

apEvent:带有校验和错误数据的数据结构;获取到的LIN报文数据

index:“joind event”的编号对应于“testJoin…”的返回值。

返回值:

0:数据访问成功

-1:无法执行数据访问,最后一个事件不是等待的事件

代码示例

testcase tcTFS_linSpikeEvent ()

   linSpikeEvent linSpikeEventData;
   if (testWaitForLinSpike (5000) == 1)
   
      if (testGetWaitLinSpikeData(linSpikeEventData) == 0)
      
         testStep("Evaluation", "LIN Spike event occurred. Signal length is %d ns", linSpikeEventData.length_ns);
      
   

以上是关于Vector - CAPL - 等待并获取LIN数据的主要内容,如果未能解决你的问题,请参考以下文章

Vector - CAPL - 实时时间on *(续2)

除了定时器,真的没法在Simulation Node 类型的CAPL节点中实现延时了吗?

车载测试系列:CANoe中环境变量和系统变量的区别

CANoe CAPL文件操作目录合集

CAPL语言概述

CAPL编程概述