显示Simulink当前模拟时间

时间:2014-07-20 10:46:24

标签: time simulation simulink s-function

人们!

我正在尝试显示Simulink当前的模拟时间。我必须注意到,在我的情况下,一旦我使用load_system,系统就不可见了,知道模拟的进展非常有用。

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

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

如果还有其他办法,请取悦我。 =)

如果有人能帮助我,我会非常感激。

2 个答案:

答案 0 :(得分:2)

有几点需要注意:

  1. 在使用load_system之前无需使用sim

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

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

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

    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命令窗口。

答案 1 :(得分:1)

更新...

要在 commad视图中显示进度状态,我接受了Phil的建议。

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

我将数字时钟块中的SampleTime定义为最终模拟时间/步骤,其中步骤是时间你想要更新进度。在我的情况下,我每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);