人们!
我正在尝试显示Simulink当前的模拟时间。我必须注意到,在我的情况下,一旦我使用load_system,系统就不可见了,知道模拟的进展非常有用。
为此,我已经读过我应该使用函数' ssGetT'。为了实现它,我正在使用S-function构建器块,我成功了。我的意思是,我能够获得当前的模拟时间。
但是,我抓住了这一点,因为我不知道如何将其显示为进度条或消息框或任何其他方式。重要的是,在S-function builder中从C环境中显示。
如果还有其他办法,请取悦我。 =)
如果有人能帮助我,我会非常感激。
答案 0 :(得分:2)
有几点需要注意:
在使用load_system
之前无需使用sim
。
与任何MATLAB命令一样,sim
阻止在m代码(或命令行)中该行之后进一步执行m代码,直到它完成执行(在这种情况下意味着模拟停止了。)
但是模型中的任何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);