1

问题

我有一个相当大的液压气动系统模型,由大约 20-25 个不同的子系统组成。然后,每个子系统都由数字逻辑、边沿延迟块和通往外部输出端口(实际输出)的网关组成。此外,一些小型构建块是作为 S-Function 导入的遗留 C 代码,以最大限度地提高成本效益比。每个子系统模型都是在 SIMULINK 中使用基本模块组设计的,即没有使用附加的商业模块组(例如,航空航天、simscape、simMechanics 等)。

主要问题是我对 SIMULINK 中的测试模型没有足够的了解。我知道 Mathworks 为测试和验证提供了一个定制的单元测试框架。问题是我不太确定这将如何与我的域相关。此外,我的子系统本身非常复杂,对它们中的每一个进行单元测试都是一场噩梦。但是,如果使用输入和输出进行黑盒测试是唯一的方法,那就这样吧,我很乐意接受。

虽然我的问题是关于在 SIMULINK 中测试大规模和复杂的系统,但我的目标是从有经验的 SIMULINK 用户那里获得建议,他们过去已经做过并且将来会做很多事情。我之前在 SIMULINK 中进行过单元测试,但所有这些测试都没有靠近我的正确设计。

任何帮助将不胜感激!!

更新自@PHILGODDARD 的评论

我忘了上面提到我熟悉 HIL 和 PIL。但是,只有当您的目标实时平台可用于循环测试时,它们才有效。如果有人想做软实时测试怎么办?

我正在等待在一两天内完成 Mathworks 大型系统测试网络研讨会。有希望地,我可以通过它得到一些更好的答案/建议吗?

更新自 @AM304 的评论

为了进一步澄清上下文,我们在软件中对所有交互系统进行建模,而不涉及任何物理设备,即在软件中对所有系统进行建模和仿真,输出显示在操作员/讲师终端中......例如,我们电气、空调和液压气动系统协同工作,但我们已经在软件中对其进行了建模。因此,当我们模拟它时,所有必要的信号都是从软件模型的行为中产生的,没有实际的硬件/物理设备参与提供这些行为输出。

4

3 回答 3

2

我会研究Simulink Design VerifierSimulink Verification&Validation。具体来说,它们提供了自动化测试生成和覆盖分析等功能,我认为这些功能适用于您的问题。

作为旁注...

关于您在帖子中提到的 matlab单元测试框架,这基本上是xUnit框架的 MATLAB 实现。因此,如果您希望能够将 xUnit 设计模式应用于 MATLAB 代码测试,它显然会派上用场。

该框架可用于为 Simulink 模型编写测试,但请记住,您必须能够在 MATLAB 代码中编写测试。所以这只是意味着使用 Simulink 命令行界面(例如set_param和之类的命令sim)来设置和练习您的模型,然后使用框架的验证方法(例如verifyEqual)来比较实际结果和预期结果。

于 2013-09-12T21:39:54.183 回答
0

可以使用 TPT 测试 C 代码和 Simulink 模型。测试开发和测试评估没有区别,但测试执行环境不同。对于测试 C 代码,可以决定是否应在 Simulink 中以所谓的 SiL 模式测试 C 代码,其中 C 代码嵌入在 Simulink 中作为所谓的 S-function。S-Function 的生成可以由依赖于代码生成器的 m 脚本自动完成。

对于 Simulink Coder 可以使用以下 MATLAB 命令来强制 SiL:

set_param(<testFrameName>,'RTWSystemTargetFile','rtwsfcn.tlc');
set_param(<testFrameName>,'RTWTemplateMakefile','rtwsfcn_default_tmf');
rtwbuild(<subsystem to be tested>); 

对于 TargetLink,脚本使用 TargetLink 命令“tl_built_host”和“tl_set_sim_mode”:

tl_build_host('Model', <testFrameName>, 'TlSubsystems', <subsystem to be tested>);
tl_set_sim_mode('Model', <testFrameName>, 'TlSubsystems', <subsystem to be tested>, 'SimMode', 'TL_CODE_HOST');

或者,在 TPT 中,C 代码可以通过其他两种方式进行测试,不需要 Simulink,但需要一些手动编程和编译。

第一种选择是使用所谓的 EXE 平台,其中测试工具内置在 C 代码中,并由用户通过其自己的编译器进行编译。TPT 的 EXE 平台配置对话框支持生成测试工具。

第二种选择是所谓的 FUSION 平台,它是一个协同仿真环境。FUSION 是一个开放式架构,用户可以在其中使用定义明确且文档化的 API 来调整他们自己的测试 C 代码系统。c 代码与 API 一起形成所谓的节点,可以在 FUISON 平台上作为单个节点或与其他节点一起模拟。然而,在自动代码生成的情况下,大多数用户在 Simulink 中使用 MiL 和 SiL 测试,因为它可以完全自动完成,包括 MiL 和 SiL 之间的背靠背回归测试。

为什么要测试 C 代码而不是模型?原因是大多数功能开发是用浮点表示法完成的,而目标 ECU 中的实现是用定点表示法完成的。缩放和定点计算的过程至少对于 TargetLink 是在代码生成期间完成的。因此,浮点 (MiL) 结果将与定点实现 (SiL) 进行比较,因为根据经验,缩放会引入许多错误。

如果 100% 的语句或条件覆盖率在 TPT 中有一个称为 TASMO 的功能。TASMO 尝试自动生成测试用例,以实现 Simulink 或 TargetLink 模型的最大覆盖范围。该算法基于优化并且基于搜索。请注意,自动测试用例生成不应取代功能测试用例。可以使用 CTC++、V&V 工具箱或 TargetLink 等代码覆盖率工具来检查覆盖率目标,这些工具会带来自己的覆盖率测量。通过查看覆盖结果,用户可以自行决定如何刺激盲点并识别死代码。

我是 TPT 开发人员之一。有关TPT的更多信息,您可以访问我们的网站。

于 2015-03-23T12:32:59.923 回答
0

MathWorks 在 R2017b(2017 年 9 月)更改了其 V&V 产品。我建议查看以下链接,了解它们如何帮助在 Simulink/Stateflow 中对设计进行单元和集成级别测试。

  1. Simulink Test - 提供测试 Simulink/Stateflow 设计的环境
  2. Simulink Coverage - 生成覆盖率指标以确定您的设计有多少已经过测试
  3. Simulink Design Verifier - 自动生成满足功能或覆盖标准的测试

MathWorks 网站上有一个概述页面,提供了有关验证、确认和测试的整体产品的更多详细信息。

于 2017-10-05T21:46:49.257 回答