主要内容

测试生成的代码与硅和公益诉讼模拟

测试数值之间的等价模型组件和产品代码生成的组件通过使用software-in-the-loop(银)和processor-in-the-loop(公益诉讼)模拟。

SIL仿真,测试源代码开发计算机上。公益诉讼仿真,测试编译后的目标代码,你打算在生产运行目标代码部署在真正的目标硬件或一个指令集模拟器。确定模型组件和生成的代码是数值相等,比较SIL和公益诉讼的结果和正常模式的结果。

有三种方法的硅和公益诉讼模拟运行。您可以使用高级模型,模型块,或银和公益诉讼块创建从一个子系统。看到选择银或公益诉讼的方法

为公益诉讼目标连接配置

在公益诉讼模拟运行之前,您必须配置目标连接。目标连接配置使公益诉讼仿真:

  • 构建目标应用程序。

  • 下载、启动和停止应用程序的目标。

  • 金宝app支持模型和目标之间的沟通。金宝app

产生一个目标的连接配置,您可以使用提供的目标连接API。有关详细信息,请参见为模型创建公益诉讼目标连接配置金宝app

对于硬件金宝app支持,您可以使用目标支持包。有关详细信息,请参见嵌入式硬件编码器支持金宝app

银或公益诉讼仿真模型

测试生成的模型代码通过运行一个顶级模特SIL或公益诉讼模拟。用这种方法:

  • 您从顶部生成测试代码模型,它使用独立的代码接口。

  • 你配置模型加载测试向量或刺激输入MATLAB工作区。

  • 你可以很容易地切换之间的顶级模特正常,银,公益诉讼模拟模式。

打开一个简单的柜台面模型。

模型=“SILTopModel”;close_system(模型中,0)open_system(模型)

专注于数字等价测试,关闭:

  • 模型覆盖

  • 代码覆盖率

  • 执行时间分析

set_param (gcs,“RecordCoverage”,“关闭”);coverageSettings = get_param(模型,“CodeCoverageSettings”);coverageSettings.CoverageTool =“没有”;set_param(模型,“CodeCoverageSettings”,coverageSettings);set_param(模型,“CodeExecutionProfiling”,“关闭”);

配置输入刺激数据。

[ticks_to_count,重置,counter_mode count_enable] =SILTopModelData (T);

在模型中配置日志记录选项。

set_param(模型,“LoadExternalInput”,“上”);set_param(模型,“ExternalInput”,“ticks_to_count,重置,counter_mode, count_enable”);set_param(模型,“SignalLogging”,“上”);set_param(模型,“SignalLoggingName”,“logsOut”);set_param(模型,“SaveOutput”,“上”)

正常模式模拟运行。

set_param(模型,“SimulationMode”,“正常”)sim_output = sim(模型、10);yout_normal = [sim_output.yout.signals (1)。值sim_output.yout.signals (2) . values);

运行一个顶级模特SIL模拟。

set_param(模型,“SimulationMode”,“Software-in-the-Loop (SIL)”)sim_output = sim(模型、10);yout_sil = [sim_output.yout.signals (1)。值sim_output.yout.signals (2) . values);
# # #开始构建过程:SILTopModel # # #成功完成构建过程:SILTopModel模型建立目标:总结构建模型重建行动的原因= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = SILTopModel代码生成和编译。代码生成信息文件不存在。1 1模型的建立(0模型已经更新)构建持续时间:0 h 0米7.9793秒# # #准备开始SIL模拟……建筑与gcc。墨西哥人成功完成。# # #更新代码生成报告与SIL文件…# # #起始SIL仿真组件:SILTopModel # # #应用程序停止了# # #停止SIL模拟组件:SILTopModel

除非存在最新的代码模型,生成新的代码和编译。生成的代码作为单独的进程运行在您的计算机上。

情节和比较正常和SIL模拟的结果。观察结果匹配。

图一=图;次要情节(1,1)、情节(yout_normal)、标题(计数器输出正常的模拟的)次要情节(3、1、2),图(yout_sil)、标题(“银计数器输出模拟”)次要情节(3、1、3),情节(yout_normal-yout_sil),标题(区别正常和硅的);

清理。

close_system(模型中,0);如果ishandle(图一),关闭(图一),结束清晰的图一simResults = {“yout_sil”,“yout_normal”,“模型”,“T”,“ticks_to_count”,“重置”};保存([模型“_results”),simResults {:});明确(simResults {:},“simResults”)

银块或公益诉讼仿真模型

测试生成的模型代码通过使用测试工具模型,模型块SIL模式运行。用这种方法:

  • 你可以从上面模型生成测试代码或引用的模型。上面的代码模型使用独立的代码接口。中的代码引用的模型使用模型参考代码接口。有关更多信息,请参见代码接口SIL和公益诉讼

  • 你使用测试工具模型或系统模型提供测试向量或刺激输入。

  • 你可以很容易地切换模型块之间的正常,银,和公益诉讼模拟模式。

打开模型中有两个样例模型块引用相同的模型。在仿真中,您运行一个模型块SIL模式和其他模型块在正常模式。

模型=“SILModelBlock”;open_system(模型);

关闭:

  • 代码覆盖率

  • 执行时间分析

coverageSettings = get_param(模型,“CodeCoverageSettings”);coverageSettings.CoverageTool =“没有”;set_param(模型,“CodeCoverageSettings”,coverageSettings);open_system (“SILModelBlock”)set_param (“SILModelBlock”,“CodeExecutionProfiling”,“关闭”);open_system (“SILCounter”)set_param (“SILCounter”,“CodeExecutionProfiling”,“关闭”);currentFolder = pwd;save_system (“SILCounter”fullfile (currentFolder“SILCounter.slx”))

配置状态日志的模型。

set_param (“SILCounter”,“SaveFormat”,“数据集”);save_system (“SILCounter”fullfile (currentFolder“SILCounter.slx”)set_param(模型,“SaveFormat”,“数据集”);set_param(模型,“SaveState”,“上”);set_param(模型,“StateSaveName”,“xout”);

测试顶级模特的代码

为模型块在银模式中,指定代名模代码,使用独立的代码接口。

set_param([模型' / CounterA '),“CodeInterface”,“高级模式”);

运行测试工具的仿真模型。

= sim(模型、20);
# # #开始构建过程:SILCounter # # #成功完成构建过程:SILCounter模型建立目标:总结构建模型重建行动的原因= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = SILCounter代码生成和编译。代码生成信息文件不存在。1 1模型的建立(0模型已经更新)构建持续时间:0 h 0米7.7405秒# # #准备开始SIL模拟……建筑与gcc。墨西哥人成功完成。# # #更新代码生成报告与SIL文件…# # #起始SIL仿真组件:SILCounter # # #应用程序停止了# # #停止SIL模拟组件:SILCounter

模型块SIL模式作为单独的进程运行在您的计算机上。在工作文件夹中,你会发现独立的代码生成的参考模型,除非存在前一次构建生成的代码。

比较模型在正常和硅块的行为模式。比赛的结果。

你= out.logsOut;yout_sil = yout.get (“counterA”).Values.Data;yout_normal = yout.get (“counterB”).Values.Data;图一=图;次要情节(1,1)、情节(yout_normal)、标题(计数器输出正常的模拟的)次要情节(3、1、2),情节(yout_sil)、标题(“计数器输出模式块银(顶级模特)模拟的)次要情节(3、1、3),情节(yout_normal-yout_sil),标题(区别正常和硅的);

比较模型的登录状态从正常和硅块模式模拟。

xout = out.xout;xout_sil = xout {1} .Values.Data;xout_normal = xout {2} .Values.Data;图一=图;次要情节(1,1)、情节(xout_sil)、标题(“正常的模拟状态日志”)次要情节(3、1、2),情节(xout_normal)、标题(模型的状态日志块银(顶级模特)模拟的)次要情节(3、1、3),情节(xout_normal-xout_sil),标题(区别正常和硅的);

测试模型的参考代码

为模型块在银模式中,指定代引用模型代码,使用模型参考代码接口。

set_param([模型' / CounterA '),“CodeInterface”,“模型参考”);

运行测试工具的仿真模型。

out2 = sim(模型、20);
# # #开始串行代码生成建立模型参考。# # #开始构建过程:SILCounter # # #成功完成构建过程:SILCounter构建代码生成目标构建:总结模型重建行动的原因= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = SILCounter代码生成和编译。SILCounter。c并不存在。1 1模型的建立(0模型已经更新)构建持续时间:0 h 0米5.6378秒# # #准备开始SIL模拟……建筑与gcc。墨西哥人成功完成。# # #更新代码生成报告与SIL文件…# # #起始SIL仿真组件:SILCounter # # #应用程序停止了# # #停止SIL模拟组件:SILCounter

模型块SIL模式作为单独的进程运行在您的计算机上。在工作文件夹,您将看到该模型参考前一次构建代码生成,除非代码存在。

比较模型在正常和硅块的行为模式。比赛的结果。

yout2 = out2.logsOut;yout2_sil = yout2.get (“counterA”).Values.Data;yout2_normal = yout2.get (“counterB”).Values.Data;图一=图;次要情节(1,1)、情节(yout2_normal)、标题(计数器输出正常的模拟的)次要情节(3、1、2),情节(yout2_sil)、标题(块SIL的计数器输出模型(模型参考)模拟的)次要情节(3、1、3),情节(yout2_normal-yout2_sil),标题(区别正常和硅的);

比较模型的登录状态从正常和硅块模式模拟。

xout2 = out.xout;xout2_sil = xout2 {1} .Values.Data;xout2_normal = xout2 {2} .Values.Data;图一=图;次要情节(1,1)、情节(xout2_sil)、标题(“正常的模拟状态日志”)次要情节(3、1、2),情节(xout2_normal)、标题(模型的状态日志块银(模型参考)模拟的)次要情节(3、1、3),情节(xout2_normal-xout2_sil),标题(区别正常和硅的);

清理。

close_system(模型中,0);如果ishandle(图一),关闭(图一),结束、清晰图一simResults = {“出”,“你”,“yout_sil”,“yout_normal”,“out2”,“yout2”,“yout2_sil”,“yout2_normal”,“SilCounterBus”,“T”,“重置”,“ticks_to_count”,“增量”};保存([模型“_results”),simResults {:});明确(simResults {:},“simResults”)

银或公益诉讼块模拟

测试生成子系统的代码通过使用硅或公益诉讼块在一个模拟世界中。用这种方法:

  • 你从子系统生成测试代码,使用独立的代码接口。

  • 你提供一个测试工具或系统模型提供输入测试向量或刺激。

  • 你替换原始子系统生成的硅或公益诉讼。

打开一个简单的模型,它包含一个控制算法和植物模型在一个封闭的循环。控制算法调节装置的输出。

模型=“SILBlock”;close_system(模型中,0)open_system(模型)

正常模式模拟运行

= sim(模型、10);yout_normal = out.yout;清晰的

配置构建过程来创建银块进行测试。

set_param(模型,“CreateSILPILBlock”,“银”);

生产硬件上测试行为,指定一个公益诉讼。

创建银块,为控制算法子系统生成的代码。你看到银块的构建过程。其输入和输出端口匹配的控制算法子系统。

close_system (“无题”,0);slbuild([模型“/控制器”])
# # #开始构建过程:控制器# # #成功完成构建过程:控制器# # #创建银块……建筑与gcc。墨西哥人成功完成。模型建立目标:总结构建模型重建行动的原因= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =控制器代码生成和编译。代码生成信息文件不存在。1 1模型的建立(0模型已经更新)构建持续时间:0 h 0米12.935秒

或者,您可以右键单击该子系统和选择C / c++代码>构建这个子系统。在打开的对话框中,单击Build。

执行SIL的模拟控制器和植物模型在一个封闭的循环,替换原来的控制算法与新硅块。为了避免失去原来的子系统,不保存您的模型在这个状态。

controllerBlock =[模型“/控制器”];blockPosition = get_param (controllerBlock,“位置”);delete_block (controllerBlock);add_block (“untitled /控制器”,(controllerBlock' (SIL) '),“位置”,blockPosition);close_system (“无题”,0);清晰的controllerBlockblockPosition

银仿真运行。

= sim(模型、10);
# # #准备开始银块模拟:< a href = " matlab: targets_hyperlink_manager(“运行”,1);" > SILBlock /控制器(SIL) < / >…# # #起始SIL仿真组件:SILBlock # # #应用程序停止了# # #停止SIL模拟组件:SILBlock

控制算法采用单精度浮点运算。你可以预期的数量级差异SIL和正常模拟接近机器精密单精确数据。

定义一个错误容忍SIL仿真结果是基于单精度的机器精度,正常的仿真结果。

machine_precision =每股收益(单(yout_normal));公差= 4 * machine_precision;

比较正常和SIL仿真结果。第三,模拟之间的差异均在公差定义的错误。

yout_sil = out.yout;兜售= out.tout;图一=图;次要情节(1,1)、情节(yout_normal)、标题(“正常的模拟控制器输出”)次要情节(3、1、2),图(yout_sil)、标题(“银模拟控制器输出”)次要情节(3、1、3),情节(宣传、abs (yout_normal-yout_sil),“g -”吹捧,宽容,的r -),标题(“正常和硅的区别和错误宽容”);

清理。

close_system(模型中,0);如果ishandle(图一),关闭(图一),结束清晰的图一simResults = {“出”,“yout_sil”,“yout_normal”,“兜售”,“machine_precision”};保存([模型“_results”),simResults {:});明确(simResults {:},“simResults”)

硬件实现设置

运行安全完整性模拟时,您必须配置您的硬件实现设置(特征如本族词大小),允许编译您的开发计算机。这些设置可以不同于硬件实现设置构建的模型时,您使用您的生产硬件。避免需要改变硬件实现硅和公益诉讼模拟之间的设置,使便携式字大小。有关更多信息,请参见配置硬件实现设置

相关的话题