实时信号记录与参数调优
此示例展示了如何使用 Simulink® Real-Time™ 进行实时信号记录和参数调优。在示例完成模型构建并将实时应用程序 slrt_ex_param_tuning 下载至目标计算机后,该示例执行多次运行,并在每次运行前调整增益参数'Gain1/Gain'。增益从 0.1 到 0.7 以 0.05 为步长进行扫描。
该示例使用一个 Simulink Real-Time File Log 模块,在每次应用程序运行期间捕获感兴趣的信号。记录的信号被上传至开发计算机并绘制成图。显示振荡器输出随时间和增益变化的三维图。
创建目标对象并连接
为默认目标计算机创建目标对象,并连接到目标计算机。在命令行窗口中,输入:
tg = slrealtime; connect(tg);
打开、构建并将模型下载至目标计算机
打开模型,slrt_ex_param_tuning。模型配置参数用于选择与已连接目标计算机 tg 对应的系统目标文件 (STF)。构建该模型将生成一个实时应用程序 slrt_ex_param_tuning.mldatx,该程序在目标计算机上运行。
model = 'slrt_ex_param_tuning'; open_system(model); modelSTF = getSTFName(tg); set_param(model,"SystemTargetFile",modelSTF); set_param(model,'RTWVerbose','off'); set_param(model,'StopTime','0.2');

构建模型并将实时应用程序 slrt_ex_param_tuning.mldatx 下载到目标计算机。
配置为非详细输出构建。
构建并下载应用程序。
evalc('slbuild(model)');
load(tg,model);
运行模型,扫描增益参数,绘制记录数据
这段代码实现了多项任务。
任务 1:创建目标对象
创建名为 MATLAB® 的变量 tg,该变量包含目标对象 Simulink Real-Time。此对象可让您与目标计算机进行通信并控制它。
创建一个名为 Simulink Real-Time 的目标对象。
将停止时间设置为 0.2 秒。
任务 2:运行模型并绘制结果
运行模型,在每次运行前遍历并改变增益(阻尼参数)。绘制每次运行的结果。
如果不存在图例,则创建图例。
如果该图例存在,则将其设为当前图例。
任务 3:遍历阻尼因子 z
设置阻尼系数(增益 1/增益)。
启动实时应用程序的运行。
将输出数据存储在
outp、y和t变量中。绘制当前运行数据。
任务 4:创建三维图(振荡器输出与时间与增益的关系)
循环遍历阻尼系数。
绘制振荡器输出随时间和增益变化的曲线图。
创建三维图。
figh = findobj('Name', 'parsweepdemo'); if isempty(figh) figh = figure; set(figh, 'Name', 'parsweepdemo', 'NumberTitle', 'off'); else figure(figh); end y = []; flag = 0; for z = 0.1 : 0.05 : 0.7 if isempty(find(get(0, 'Children') == figh, 1)) flag = 1; break; end load(tg,model); tg.setparam([model '/Gain1'],'Gain',2 * 1000 * z); tg.start('AutoImportFileLog',true, 'ExportToBaseWorkspace', true); pause(0.4); outp = logsOut{1}.Values; y = [y,outp.Data(:,1)]; t = outp.Time; plot(t,y); set(gca, 'XLim', [t(1), t(end)], 'YLim', [-10, 10]); title(['parsweepdemo: Damping Gain = ', num2str(z)]); xlabel('Time'); ylabel('Output'); drawnow; end if ~flag delete(gca); surf(t(1 : 200), 0.1 : 0.05 : 0.7, y(1 : 200, :)'); colormap cool shading interp h = light; set(h, 'Position', [0.0125, 0.6, 10], 'Style', 'local'); lighting gouraud title('parsweepdemo: finished'); xlabel('Time'); ylabel('Damping Gain'); zlabel('Output'); end
Importing Log file 1 of 1 ... Importing Log file 1 of 1 ... Importing Log file 1 of 1 ... Importing Log file 1 of 1 ... Importing Log file 1 of 1 ... Importing Log file 1 of 1 ... Importing Log file 1 of 1 ... Importing Log file 1 of 1 ... Importing Log file 1 of 1 ... Importing Log file 1 of 1 ... Importing Log file 1 of 1 ... Importing Log file 1 of 1 ... Importing Log file 1 of 1 ...

关闭模型
操作完成后,关闭模型。
bdclose(model);