Simulink是美国Mathworks公司推出的一种强大的可视化仿真工具,现已应用到包括汽车、航空、工业自动化等领域。Simulink不仅提供了多种特定功能的模块,还提供Simulink Function,Function Caller等模块,便于用户在开发过程中,定制化一些常用函数,摆脱了Simulink中固有Block的功能限制,有效的提升了开发效率。
这个功能无疑十分强大,但这却给测试工作提出了很大的挑战:受软件开发架构限制,Function的定义可能放置在软件底层,以便于上层软件进行多次调用。但当用户对上层软件的单元层级进行测试时,往往面临着无法调用底层定义的Function的窘态(有枪无弹)。此外,当客户在测试底层单元模块时,由于Function只有定义没有被调用,往往无法对Function的内部逻辑进行测试(有弹无枪)。
针对这两种测试场景,自动化的软件动态测试工具——TPT提供了便捷的解决方案。

图1模型
有枪无弹:
顾名思义,空有Function Caller而没有Function。如图1所示,如果要测试Calculate这个单元,这个单元调用了Function,而Function却定义在更底层,针对这种情况,TPT支持函数的插桩,提供Function Caller的接口,模拟函数的返回值。
TPT支持函数的插桩,在对这种只有Caller没有Function的层级(如图2)进行测试时,非常高效。在TPT的Platform Configuration中提供了这样的选项:Simulink Functions,如图3:

图2单元模块内部结构

图 3 Simulink Functions
回到图4平台配置窗口,加载好模型后 Import模型接口, TPT将以 server形式识别 callFunc函数,如图5。

图 4 Import模型接口、参数

图 5识别callFunc函数
该函数会被直接加载到 Functions中, 以便于在编写测试用例时调用。

图 6 callFunc被加载到Functions中
可以在 Declaration Editor中添加一个 channel形式的本地变量return_Func模拟函数的返回值,然后编写图 8所示用例来验证:

图 7添加channel本地变量

图 8测试用例
运行结果和信号曲线如下图所示,compare是简单的评估,结果可见模型的输出符合期望,由信号曲线可以观察到local量的值即函数的输出值。

图 9测试结果

图 10 Signal Viewer观测结果
有弹无枪:
上述方法并不能测到函数内部的逻辑,而实际上函数可以定义在模型的底层,如图1所示的模型wind_drag,Function定义在底层,没有对应的Function Caller,这就是有“弹”而无“枪”了。在单元测试阶段想要测试该函数的逻辑,因其没有相关的接口信息,测试工作无疑非常困难。

图 11被测函数逻辑
自动化测试工具TPT提供了m文件的接口,可以在配置测试环境或者测试执行过程中进行一些预处理,这就为测试该函数逻辑提供了绝佳的途径。

图 12 TPT提供的m文件接口
此处用m脚本编写一个函数,可以在TPT中实现对Function的调用。该函数主要有两个参数:
参数1:测试层级,可直接用TPT环境变量’${tpt.matlab.block.name}’
参数2:被调函数,例如:' F = wind_drag(Density,Speed) '
可以在 TPT\Platform Configuration\Original Model中可以编写相应的代码来加载m文件,并使用simulink_function_caller函数对模型中的SimulinkFunction进行调用,这无疑大大提升了测试的效率。

图 13 m文件加载及函数调用

图 14模型中自动配置FunctionCaller
依次在TPT中配置测试环境,导入接口时即可发现模型中出现了Simulink Function调用的相关接口信息。上一步中加载的m文件,实现了自动创建所测Function对应接口信息,以及Function Caller模块的功能,这些新建的模块和Function在同一层级,这样就能够对Simulink Function逻辑进行测试。

图 15导入接口信息
编写测试用例来测试该函数:

图 16测试用例
该函数是简单的计算风阻的函数,,其中C取0.3,S取2.05,编写评估验证该用例:

图 17测试评估
测试结果显示模型输出与函数运算结果一致:

图 18测试结果
两者的信号曲线也是完全重合:

图 19信号曲线
总结
本文介绍了使用TPT测试Simulink Function模块的两种方案,TPT还支持MATLAB Function的测试。
PikeTec公司是全球知名的基于模型的嵌入式系统测试工具TPT的软件供应商,总部位于德国柏林。北汇信息作为PikeTec在中国的独家合作伙伴,致力于帮助中国客户提升嵌入式控制系统的开发效率。目前,TPT已被众多国内知名主机厂和零部件企业认可,在新能源(VCU/BMS/MCU)以及ADAS等领域中被广泛应用。
-
TPT
+关注
关注
0文章
23浏览量
7021
发布评论请先 登录
相关推荐
Simulink与 Simscape的结合使用
Simulink与 MATLAB 的结合使用 Simulink中的信号处理方法
Simulink模型仿真与分析技巧
Simulink自定义模块开发教程 Simulink 在控制系统中的应用
升压模块可以升电流吗
Matlab R2016b创建STM32H743ZIT6控制工程当从Simulink库中拖入TIMx模块出现报错的原因?
Vivado 使用Simulink设计FIR滤波器
路灯竟然还可以这样玩-智慧路灯
电路仿真软件simulink的工作原理

评论