TSL(Test Service library,测试服务库)包含一系列的检测函数(Check Descriptions)、状态报告函数(Status Report Functions)、激励函数(Stimulus Functions)以及检测控制函数(Check Control CAPL Functions),利用这些函数更方便组建测试用例。TSL是在测试功能集(TFS)基本函数的基础上,提供一些特殊函数,可以高效地解决某些特殊的测试问题。
TSL在测试运行中包含以下几个阶段:
(1)初始化(Initialization):程序中通过设定特定的参数来设置检测函数和激励发生器,以及事件被报告的方式。初始化设置可以发生在测量运行过程中的任何时间点。
(2)事件触发(Event):一旦满足检测条件,指定的事件将被触发,例如,回调函数被调用、测试结果和相应报文被写入测试报告。
(3)状态检测(Status Check):状态检测可以定义在CAPL程序的任何地方,检测状态会被转换为字符串,供后续处理。
(4)停止(Stop):检测或激励将被销毁。
检测函数
CANoe为用户提供了多种检测函数(Check Description),主要包括以下几个方面的检测。
(1)Signal Evaluation(信号验证):包括信号的数值有效性、周期和稳定性等检测。
(2)Message Evaluation(报文验证):包括报文丢失、周期、数据长度、错误帧等检测;
(3)Time Evaluation(时间验证):包括连续帧及超时等检测。
表9列出了常见检测函数的列表及功能描述。我们不难发现,TSL检测函数一般包含 ChkStart_ 开头和 ChkCreate_ 开头的两个函数,其中,ChkStart_ 函数已经包含检测的创建和开始。在日常测试时,一般会选择检测相关功能是否发生错误,来替代检验的正确性。这样方式的检验更加高效和准确,例如,一般习惯性使用类似 ChkCreate_CycleTimeViolation 这样的命名替代 ChkCreate_CycleTimeOK。
函数类别 | 函数 | 功能描述 |
---|---|---|
Absense of Defined Messages(定义的报文丢失) | ChkCreate_MsgOccurenceCount, ChkStart_MsgOccurenceCount | 用于检测总线上指定的报文是否出现丢帧 |
Burst Time Limit(连续帧时间限制) | ChkCreate_BurstTimeLimitViolation, ChkStart_BurstTimeLimitViolation | 用于检测总线最大连续帧时间 |
Cycle Time(周期时间) | ChkCreate_MsgAbsCycleTimeViolation, ChkStart_MsgAbsCycleTimeViolation ChkCreate_MsgRelCycleTimeViolation, ChkStart_MsgRelCycleTimeViolation ChkCreate_NodeMsgsRelCycleTimeViolation, ChkStart_NodeMsgsRelCycleTimeViolation | 用于检测周期性报文的周期是否在给定的范围内 |
DLC Monitoring(数据长度监测) | ChkCreate_InconsistentDLC, ChkStart_InconsistentDLC ChkCreate_InconsistentRxDLC, ChkStart_InconsistentRxDLC ChkCreate_InconsistentTxDLC, ChkStart_InconsistentTxDLC | 用于监测报文的数据长度 |
Error Frame(错误帧) | ChkCreate_ErrorFramesOccured, ChkStart_ErrorFramesOccured TestCheck::CreateNodeMsgSendCountViolation, TestCheck::StartNodeMsgSendCountViolation | 用于检测总线上错误帧事件 |
Message Distance(报文时间间隔) | ChkCreate_MsgDistViolation, ChkStart_MsgDistViolation用于检测指定两条报文之间的时间间隔 | |
Node Active(节点激活) | ChkCreate_AllNodesDead, ChkStart_ AllNodesDead ChkCreate_NodeDead, ChkStart_NodeDead | 用于检测节点是否处于激活状态 |
Node Inactive(节点休眠) | ChkCreate_AllNodesBabbling, ChkStart_AllNodesBabbling ChkCreate_NodeBabbling, ChkStart_NodeBabbling | 用于检测节点是否处于休眠状态 |
Occurrence Distance(报文发送间隔时间) | ChkCreate_NodeMsgsAbsDistViolation, ChkStart_NodeMsgsAbsDistViolation | 用于检测当前节点上所有报文最小传输间隔时间 |
Occurrence of a Message(报文间隔时间) | ChkCreate_MsgRelOccurrenceViolation, ChkStart_MsgRelOccurrenceViolation ChkCreate_NodeMsgsRelOccurrenceViolation, ChkStart_NodeMsgsRelOccurrenceViolation | 用于检测总线上指定报文的时间间隔 |
Payload Gaps Observation(有效数据) | ChkCreate_PayloadGapsObservation, ChkStart_PayloadGapsObservation ChkCreate_PayloadGapsObservationRx, ChkStart_PayloadGapsObservationRx ChkCreate_PayloadGapsObservationTx, ChkStart_PayloadGapsObservationTx | 用于检测数据有效性和报文的长度 |
Signal Values(信号数值) | ChkCreate_MsgSignalValueInvalid, ChkStart_MsgSignalValueInvalid ChkCreate_MsgSignalValueRangeViolation, ChkStart_MsgSignalValueRangeViolation | 用于检测信号/变量数值的有效性 |
Signal Value Constancy(信号值稳定性) | ChkCreate_SignalValueChange, ChkStart_SignalValueChange | 用于检测信号/变量数值的稳定性 |
Signal Cycle Time Absolute(信号绝对周期时间) | ChkStart_SignalCycleTimeViolation | 用于检测信号的周期性 |
Timeout(超时) | ChkCreate_Timeout, ChkStart_Timeout | 超时检测并产生超时事件 |
Unknown Message Received(收到未知报文) | ChkCreate_UndefinedMessageReceived, ChkStart_UndefinedMessageReceived | 用于检测总线上是否有数据库中未定义的报文 |
状态报告函数
在执行上面的检测函数以后,CANoe需要使用状态报告函数(Status Report Functions)来查询检测结果、基本状态信息等。状态报告函数作为检测的一个特殊部分,需要配合使用。状态报告函数又分为通用的状态报告函数和特殊的状态报告函数,如表10所示。如果在检测时调用了不支持的特殊报告函数,相关的警告信息会输出在Write窗口。
函数 | 功能描述 |
---|---|
Generic Status Report Functions(通用状态报告函数) | 这类函数返回当前任意检测函数创建或重置的次数。同时,也包括将检测状态转为字符并记录的函数。通用状态报告函数对所有检测函数有效。这类查询函数不会产生一个错误类而导致测量停止。 |
ChkQuery_NumEvents | 用于返回初始化后指定检测函数产生的事件次数 |
ChkQuery_Valid | 用于检查指定的检测ID是否有效 |
StmQuery_Valid | 用于检查指定的激励ID是否有效 |
Statistic Data Collection(统计数据集) | 这类函数返回指定事件的间隔时间。chkconfig_setprecision可以用来改变时间精度。 |
ChkQuery_StatEventFreePeriodAvg | 用于返回事件和检测开始/结束之间的平均间隔时间 |
ChkQuery_StatEventFreePeriodMax | 用于返回事件和检测开始/结束之间的最大间隔时间 |
ChkQuery_StatEventFreePeriodMin | 用于返回事件和检测开始/结束之间的最小间隔时间 |
ChkQuery_StatProbeIntervalAvg | 用于返回该时间段内该报文的平均周期间隔时间 |
ChkQuery_StatProbeIntervalMax | 用于返回该时间段内该报文的最大周期间隔时间 |
ChkQuery_StatProbeIntervalMin | 用于返回该时间段内该报文的最小周期间隔时间 |
Generic Textual Status Report Functions(通用文本状态报告函数) | 这些函数可以将事件状态以不同形式输出 |
ChkQuery_EventStatus | 用于将时间状态转为文本形式供输出 |
ChkQuery_EventStatusToLog | 用于将ChkQuery_EventStatus函数结果输出在logging文件中 |
ChkQuery_EventStatusToWrite | 用于将ChkQuery_EventStatus函数结果输出在Write窗口中 |
ChkQuery_StatNumProbes | 用于返回该时间段内测量次数 |
Check Specific Status Report Functions(特定状态报告函数) | 特定状态报告函数允许查询某些特定检测函数中的信息,包括该函数支持的检测函数的类型描述 |
ChkQuery_EventInterval | 用于返回最近一次事件间隔时间 |
ChkQuery_EventMessageId | 用于返回检测事件中的报文ID |
ChkQuery_EventMessageName | 用于返回检测事件中的报文名称 |
ChkQuery_EventSignalValue | 用于使能访问最近一次检测无效的信号的值 |
ChkQuery_EventSignalValueMin | 用于使能访问检测到的信号的最小值 |
ChkQuery_EventSignalValueMax | 用于使能访问检测到的信号的最大值 |
ChkQuery_EventSignalValue(for signals with positive values) | 用于使能访问最近一次检测无效的信号的值(仅针对正值) |
ChkQuery_EventTimeStamp | 用于获取最近一个开始检测的时间戳 |
所有状态报告函数都使用了统一的返回值和错误分类定义,表11提供了完整的状态报告函数的返回值及定义。但在一些特殊情况下,返回值是不需要的,简单检测只要返回一个大于0的值就够了。
返回值 | 返回值定义及错误类别 |
---|---|
0 | 查询执行成功 |
-1 | 检测不存在 类别:访问无效的检测 |
-2 | 检测不支持该查询 类别:无效的查询 |
-3 | 检测没有激活 类别:无效的查询 |
-4 | 无触发事件 类别:信息 |
-5 | 对CAPL参数指针为空 类别:无效的测试范围 |
-6 | 有多个对象匹配该查询 类别:模糊查询多个对象匹配查询 |
-7 | 节点层模块未激活,不能进行查询 |
激励函数
激励函数(Stimulus Functions)作为测试服务库的重要一部分,允许用户使用不同的数据源作为信号、环境变量或系统变量的激励发生器。TSL提供的激励函数的列表及功能描述如表12所示。
函数类别 | 函数 | 功能描述 |
---|---|---|
Stimulus Generator:Toggle Between Two Values (激励发生器:双值切换) | StmCreate_Toggle(limits taken from database) StmCreate_Toggle(limits user-defined) | 用于为信号、环境变量或系统创建一个激励发生器,在两个数值之间周期性切换 |
Stimulus Generator:Generate a Ramp (激励发生器:斜坡信号) | StmCreate_Ramp(limits taken from database) StmCreate_Ramp(limits user-defined) | 用于为信号、环境变量或系统创建一个斜坡激励发生器(上升沿/下降沿参数可以定义) |
Stimulus Generator:Environment Variable as Data Source (激励发生器:环境变量为数据源) | StmCreate_EnvVar | 用于微信号创建以环境变量为数据源的激励发生器 |
Stimulus Generator:CSV File as Data Source(激励发生器:CSV文件为数据源) | StmCreate_CSV(non-cyclical) StmCreate_CSV(cyclical) | 用于为信号创建以CSV文件数据为数据源的激励发生器 |
ASAM XIL API(ASAM XIL接口) | HILAPICreateSignalGenerator | 用于为信号创建来自ASAM XILAPI信号发生器定义文件的激励发生器 |
ASAM XIL API(ASAM XIL接口) | HILAPIDestroySignalGenerator | 用于销毁一个HILAPI信号发生器的一个实例 |
ASAM XIL API(ASAM XIL接口) | HILAPIGetSignalGeneratorElapsedTime | 用于返回一个HILAPI信号发生器的运行时间 |
ASAM XIL API(ASAM XIL接口) | HILAPIGetSignalState | 用于返回一个HILAPI信号发生器的状态 |
ASAM XIL API(ASAM XIL接口) | HILAPIPauseSignalGenerator | 用于暂停一个HILAPI信号发生器 |
ASAM XIL API(ASAM XIL接口) | HILAPIStartSignalGenerator | 用于开始或回复一个HILAPI信号发生器 |
ASAM XIL API(ASAM XIL接口) | HILAPIStopSignalGenerator | 用于停止一个HILAPI信号发生器 |
Stimulus Control(激励控制) | ChkConfig_Init | CAPL测试服务库(TSL)必须在CAPL程序pre-start中开始初始化 |
Stimulus Control(激励控制) | StmControl_Start, StmControl_Stop, StmControl_Reset, StmControl_Destroy | 用于在测量过程中控制发生器启动、停止、复位或销毁 |
检测控制函数
检测控制函数(Check Control CAPL Functions)用于对检测事件的控制操作,如初始化、开始、停止、销毁等。检测控制函数列表及功能描述如表13所示。
函数 | 描述 |
---|---|
ChkControl_Start | 用于开始或继续检测事件 |
ChkControl_Stop | 用于停止检测事件 |
ChkControl_Reset | 用于初始化检测事件状态 |
ChkControl_Destroy | 用于销毁检测事件对象 |
ChkControl_SetCallback | 用于设置检测事件对象的回调函数 |
参考文献:
[1] 杨金升,张可晨,唐新宇.CANoe开发从入门到精通[M].北京: 清华大学出版社,2019: 373-379.