Matlab代码生成之SIL/PIL测试

  • 一、SIL与PIL测试流程
  • 二、Top Model的SIL/PIL仿真
  • 三、基于模型的SIL(PIL)测试
  • 四、基于SIL(PIL)控制模块测试

一、SIL与PIL测试流程

1.SIL(Software in the Loop),使用SIL可以在PC端进行测试生成的代码。   PIL(Processor in the Loop),使用PIL可以在实际目标硬件或指令集模拟器   上运行源代码进行测试。

  测试标准:将PIL(SIL)结果与正常模型测试结果进行对比,可以得到生代码的执行效果。

2.需要配置与PC端的直接连接参数

二、Top Model的SIL/PIL仿真

特点:

1.可以直接使用独立的代码接口进行测试
2.可以配置模型从Workspace中加载测试向量和激励输入
3.便捷地在Top model、Normal、SIL、PIL之间进行切换

官方链接:官方链接1

在matlab command window中输入以下命令:

model='rtwdemo_sil_topmodel';
close_system(model,0)    //关闭不保存
open_system(model)      //打开model

之后在Simulink中打开如下模型:

在matlab command window中输入以下命令:

set_param(gcs, 'RecordCoverage','off');                            /*关闭模型覆盖率记录*/
coverageSettings = get_param(model, 'CodeCoverageSettings');
coverageSettings.CoverageTool='None';                               /*关闭代码覆盖率记录*/
set_param(model, 'CodeCoverageSettings',coverageSettings);
set_param(model, 'CodeExecutionProfiling','off');                 /*关闭执行时间分析*/
[ticks_to_count, reset, counter_mode, count_enable] = ...rtwdemo_sil_topmodel_data(T);                                   /*设置输入参数*/set_param(model, 'LoadExternalInput','on');
set_param(model, 'ExternalInput','ticks_to_count, reset, counter_mode, count_enable');
set_param(model, 'SignalLogging', 'on');
set_param(model, 'SignalLoggingName', 'logsOut');                  /*设置相关参数*/set_param(model,'SimulationMode','normal')
[~, ~, yout_normal] = sim(model,10);                               /*运行normal 模型(结果存储在yout_normal)*/set_param(model,'SimulationMode','Software-in-the-Loop (SIL)')
[~, ~, yout_sil] = sim(model,10);                                  /*运行SIL模型(结果存储在yout_sil)*/fig1 = figure;
subplot(3,1,1), plot(yout_normal), title('Counter Output for Normal Simulation')
subplot(3,1,2), plot(yout_sil), title('Counter Output for SIL Simulation')
subplot(3,1,3), plot(yout_normal-yout_sil), ...    title('Difference Between Normal and SIL');                       /*绘制图像,观看两者差异*/

模型中有关的设置:

  整个模型的执行就是,从外部输入控制参量然后进行执行,然后对比SIL与normal模型下的运行结果进行分析。

三、基于模型的SIL(PIL)测试

model='rtwdemo_sil_modelblock';
open_system(model);                    /*打开模型*/coverageSettings = get_param(model, 'CodeCoverageSettings');
coverageSettings.CoverageTool='None';
set_param(model, 'CodeCoverageSettings',coverageSettings);
open_system('rtwdemo_sil_modelblock')
set_param('rtwdemo_sil_modelblock', 'CodeExecutionProfiling','off');
open_system('rtwdemo_sil_counter')
set_param('rtwdemo_sil_counter', 'CodeExecutionProfiling','off');
currentFolder=pwd;
save_system('rtwdemo_sil_counter', fullfile(currentFolder,'rtwdemo_sil_counter.slx'))
/*关闭代码覆盖率、执行时间分析*/set_param([model '/CounterA'], 'CodeInterface', 'Top model');     /*设置模型的运行方式*/
out = sim(model,20);                /*开始运行*/

yout = find(out,'logsOut');
yout_sil = yout.get('counterA').Values.Data;
yout_normal = yout.get('counterB').Values.Data;
fig1 = figure;
subplot(3,1,1), plot(yout_normal), title('Counter Output for Normal Simulation')
subplot(3,1,2), ...plot(yout_sil), title('Counter Output for Model Block SIL (Top-Model) Simulation')
subplot(3,1,3), plot(yout_normal-yout_sil), ...title('Difference Between Normal and SIL');                   /*绘制图表进行分析*/

  这种模式下是normal和SIL(PIL)各自封装成一个测试模块同时执行(如图中的CounterA与CounterB),对比执行后的结果。

四、基于SIL(PIL)控制模块测试

model='rtwdemo_sil_block';
close_system(model,0)
open_system(model)                  /*打开模型*/out = sim(model,10);
yout_normal = find(out,'yout');
clear out                          /*启动模型*/  这里是normal模型的仿真set_param(model,'CreateSILPILBlock','SIL');
close_system('untitled',0);
rtwbuild([model '/Controller'])controllerBlock = [model '/Controller'];
blockPosition = get_param(controllerBlock,'Position');
delete_block(controllerBlock);
add_block('untitled/Controller',[controllerBlock '(SIL)'],...'Position', blockPosition);
close_system('untitled',0);
clear controllerBlock blockPosition

之后出现一个新的model构建框:

controllerBlock = [model '/Controller'];
blockPosition = get_param(controllerBlock,'Position');
delete_block(controllerBlock);                                          //删除原来模型中的模块add_block('untitled/Controller',[controllerBlock '(SIL)'],...           //将生成的Model替代原来模型中的模块'Position', blockPosition);
close_system('untitled',0);
clear controllerBlock blockPositionout = sim(model,10);                                                    //启动仿真machine_precision = eps(single(yout_normal));
tolerance = 4 * machine_precision;                                      //设置仿真容许误差yout_sil = find(out,'yout');
tout = find(out,'tout');
fig1 = figure;
subplot(3,1,1), plot(yout_normal), title('Controller Output for Normal Simulation')
subplot(3,1,2), plot(yout_sil), title('Controller Output for SIL Simulation')
subplot(3,1,3), plot(tout,abs(yout_normal-yout_sil),'g-', tout,tolerance,'r-'), ...title('Normal and SIL Difference and Error Tolerance');                //绘制图像close_system(model,0);
if ishandle(fig1), close(fig1), end
clear fig1
simResults={'out','yout_sil','yout_normal','tout','machine_precision'};
save([model '_results'],simResults{:});
clear(simResults{:},'simResults')                                          //关闭图像

五、总结

PIL测试方面,可以验证测试生成代码。C2000的测试与以上相仿,具体说明链接如下:官方链接

Matlab代码生成之SIL/PIL测试相关推荐

  1. MIL/SIL/PIL/HIL定义梳理

    本文主体内容转自以下两篇文章,略有删改. http://www.ind4.net/html/news/newsDetail_7007.html http://www.ind4.net/html/new ...

  2. MIL/SIL/PIL/HIL/VIL

    MIL:Model in the loop 模型在环,对模型在模型的开发环境下(如SIMULINK)进行仿真,通过输入一系列的测试用例,验证模型是否满足设计的功能需求.验证控制算法模型是否准确地实现了 ...

  3. matlab水印剪切攻击程序,可以运行的水印matlab程序(嵌入,提取,攻击测试等).doc

    可以运行的水印matlab程序(嵌入,提取,攻击测试等).doc IMREAD YUANSHITUXIANGBMP SUBPLOT2,2,1IMSHOWTITLE 原始图像 WATERIMREAD W ...

  4. c语言随机生成int64_t类型的数据_手把手教你代码生成(上):MATLAB代码生成

    FrancisZhao:专栏文章列表以及一些说明​zhuanlan.zhihu.com FrancisZhao:手把手教你代码生成(下):SIMULINK代码生成​zhuanlan.zhihu.com ...

  5. Matlab代码生成任意边长等间距正六边形采样点

    Matlab代码生成任意边长等间距正六边形采样点 https://blog.csdn.net/Hanghang_/article/details/87064184 本文以n代表正六边形在x轴正轴上的长 ...

  6. matlab编写转台程序,基于Matlab三轴惯导测试转台结构分析.doc

    基于Matlab三轴惯导测试转台结构分析 基于Matlab三轴惯导测试转台结构分析 摘 要:三轴惯导测试转台作为惯导测试设备,其精度直接影响惯导设备的精度,而中框回转精度在三轴精度相对较差.影响其中框 ...

  7. Matlab代码生成报错——Failed to generate all binary outputs

    Matlab代码生成时,有时候会报如下错误:Failed to generate all binary outputs 可查看是否存在如下问题: 1.查看被执行的模型路径中是否带有空格,若有,删掉空格 ...

  8. matlab中codegen是什么,从 MATLAB 代码生成 C/C++ 代码。 - MATLAB codegen - MathWorks 中国...

    -c生成 C/C++ 代码,但不调用 make 命令. -config:dll使用默认配置参数生成动态 C/C++ 库. -config:exe使用默认配置参数生成静态 C/C++ 可执行文件. -c ...

  9. matlab am-pm,AM-AM和AM-PM测试的奇怪结果

    这几天测试了我的CMOS PA,发现AM-AM和AM-PM测试结果十分奇怪,如图所示,第一个图是测试的结果,第二个是正常情况下的结果,请大家分析一下可能的原因,谢谢 你确定测试数据是这样的?还是你已经 ...

最新文章

  1. Java动态调用方法
  2. android 覆盖安装问题
  3. Qt QObject::connect: Parentheses expected错误原因
  4. 使用Intersection Observer API创建无限加载组件
  5. endnote按照apa6th格式复制_使用Endnote进行文献引用
  6. 马哥linux_linux自学!拥有15万粉丝的Linux专研者 带你0基础学习linux!
  7. SolidWorks工程图做到一半切换工程图模板的方法
  8. . mindoc linux amd64,linux安装Mindoc文档管理系统
  9. unity material以及各种贴图介绍
  10. h2o api java_h2o H2OAutoEncoderEstimator
  11. 6.1 CUDA: pinned memory固定存储
  12. SSM框架超市进销存出库入库仓库管理系统(idea开发javaweb-javaee-j2ee-springboot) 退货管理 销售管理 供应商管理 客户管理 员工管理 以及库存统计和盘存统计
  13. 为Metabase Pulses添加slack代理支持
  14. W ndows 10模拟器,手机windows10模拟器
  15. openCV calcHist函数的使用
  16. Java的字符串转int算法
  17. 计算机二级C语言中isdigit,C使用带字符串的标准算法,带有isdigit的count_if,函数转换...
  18. WINCE里随时用HOT KEY切出中文输入法
  19. 在linux用utorrent下载文件,utorrent在ubuntu上怎么使用
  20. Android应用市场发布

热门文章

  1. aws s3 静态网站_如何使用AWS S3,CloudFront和命令行管理静态网站
  2. 双向绑定 / proxy 代理 整理
  3. 更新map中已存在的value值
  4. 在一个老外微信PM的眼中,中国移动App UI那些事儿
  5. 实践是检验真理的唯一标准 (转)
  6. 带用户名密码的ftp访问路径
  7. 电弧故障断路器全国产化电子元件推荐方案
  8. 删除群晖NAS回收站中的临时文件
  9. Python+Matplotlib绘制曲线并实现鼠标跟随的放大镜
  10. 台达伺服ASDA-B2调试