0

伙计们!

我正在尝试显示 Simulink 当前仿真时间。我必须注意到,就我而言,一旦我使用 load_system,系统就无法查看,了解模拟的进展情况将非常有用。

为此,我已经读过我应该使用函数'ssGetT'。为了实现它,我使用了 S-function builder 块并且我成功了。我的意思是,我能够获得当前的模拟时间。

但是,我在这一点上被抓住了,因为我不知道如何以进度条或消息框或任何其他方式显示它。重要的是,从 S-Function builder 中的 C 环境显示。

如果有任何其他方法可以做到这一点,请告诉我。=)

如果有人可以帮助我,我将不胜感激。

4

2 回答 2

3

有几点需要注意:

  1. load_system使用前无需使用sim

  2. 与任何 MATLAB 命令一样,sim在您的 m 代码(或命令行)中的该行之后阻止 m 代码的进一步执行,直到它完成执行(在这种情况下意味着仿真已停止)。

但是模型中的任何 m 代码肯定会在模型执行期间被执行。

例如,创建一个模型,将 Clock 模块输入到 MATLAB Function 模块中。在 MATLAB Function 块中有以下代码

function fcn(t)
%#codegen
coder.extrinsic('fprintf');
persistent firstTime

if isempty(firstTime)
    firstTime = false;
    fprintf('Starting Now\n');
end

fprintf('time = %.4f\n',t);

这将在仿真运行时将每个时间步的仿真时间打印到 MATLAB 命令行窗口(无论模型如何启动)。

于 2014-07-22T03:07:25.677 回答
1

更新中...

为了在commad view中显示进度状态,我接受了 Phil 的建议。

我在 symulink 中实现了这个系统,其中fcn输入是时钟的模拟时间和最终的模拟时间。

SampleTimeDigital Clock块中定义为Final simulation time/steps,其中steps是您想要更新进度的次数。就我而言,我每 5% 更新一次,直到 100%,所以数是 20。

fnc块是:

function fcn(t,tsim)
coder.extrinsic('fprintf');

persistent firstTime

if isempty(firstTime)
    firstTime = false;
    fprintf('\nSimulating...\n\n');
end

prog = 100*t/tsim;
fprintf(' %1.0f%%',prog);
于 2014-07-23T11:11:56.887 回答