主要内容

本页采用了机器翻译。点击此处可查看英文原文。

实时信号记录与参数调优

此示例展示了如何使用 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/增益)。

  • 启动实时应用程序的运行。

  • 将输出数据存储在 outpyt 变量中。

  • 绘制当前运行数据。

任务 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);

另请参阅

主题