【发布时间】:2016-05-06 17:25:10
【问题描述】:
作为一名学生,我目前正在从事 Matlab Simulink 项目。我对使用 Matlab/Simulink 很陌生(几周)。
我想实现并运行一个 Matlab “.m” 文件,我可以使用它打开 Simulink 并开始仿真。目的是进行 24 小时测试,将称重传感器切成 1 小时“块”,并每小时将数据保存到 Excel 文件的不同工作表中。所以我的模拟运行了 1 小时,停止并重新开始,依此类推。通过 Matlab 和“for”循环,我做了 24 次测量。
在测量步骤之间,我必须等待 simulink 完成测量并保存文件,以便 Simulink 窗口能够被close_system('Thesis_SerDatTransm_Simulink') 关闭。
所以我尝试使用 while 循环来实现延迟,并检查我得到的度量是否适合大小大于 449 的数组(我测量 449 个值):
for k=0:1:24
% Load Simulink
load_system('Thesis_SerDatTransm_Simulink.slx')
% Open Simulink
open_system('Thesis_SerDatTransm_Simulink.slx')
% Start Simulation
set_param('Thesis_SerDatTransm_Simulink', 'SimulationCommand', 'Start');
% Save Data
my_cell = sprintf('A%d',k);
xlswrite('file.xlsx',y,my_cell)
% Wait for Simulation
while 1
test=size(y)>=449;
if (test)
close_system('Thesis_SerDatTransm_Simulink')
break
end
end
end
现在的问题是,该程序卡在 while 循环中。 Simulink 已启动,但未进行仿真或数据收集。
所以我想知道是否有人可以检查我的 While 循环是否有问题,因为程序的其余部分在没有循环的情况下一切正常(但收到一条错误消息,在模拟期间,Simulink 窗口无法关闭)。
我知道有一种方法可以在 matlab 中使用waitfor创建延迟并创建另一个我可以调用的function,但我还不知道该怎么做。
谢谢
问候
hohmchri
【问题讨论】:
-
您的问题提到了
449值...但您的代码正在测试499值...哪个是正确的? -
您只需加载和关闭系统一次。另外,如果您已经使用了 load_system,我认为您不需要使用 open_system。所以我认为你不需要在这里完成什么,因为 close_system 函数实际上可能在 For 循环之外。
-
@gariepy,是的,我的错。有一个错字。我将其更改为 449,这是我要检查的正确值的数量。我明天再做一次测试。我希望它会起作用。谢谢!
-
@m_power 感谢您的回复。我明天试试这个。如前所述,我对使用 Matlab 和一般编程很陌生。再次感谢!