作为一名学生,我目前正在开发一个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
答案 0 :(得分:1)
如上所述,您应该使用matlab pause命令。这会使您的执行停止X秒。
您还应该将代码优化为m_power状态
答案 1 :(得分:1)
执行此操作的正确方法是使用sim函数运行模型(而不是您拥有的load_system
,open_system
和set_param
的序列。
sim
将阻止m代码的执行,直到模型完成执行。数据可以返回到工作空间(当没有输出参数使用时),也可以作为调用sim
的输出返回。 (然后你就可以把它写到Excel中了。)
不使用sim
并且可能使用您拥有的命令的唯一原因是模型需要很长时间才能初始化,并且您不希望每次都打开和关闭它通过循环。但是,即使在这种情况下,您的代码也不正确。 load_system
将在循环之外; open_system
不是必需的;在while
循环中,您将轮询模型的SimulationStatus
属性以查看它是否仍在运行(不是y
变量的大小) ;并且close_system
将在循环之后(如其中一条评论中的@m_power所示)。