poe*_*orn 8 matlab controls loops
我正在尝试创建一个matlab脚本(m文件),该脚本应由外部VBA脚本控制.
对于一定数量的循环,matlab脚本每次都应该执行相同的操作(即使参数更改,但这不是本例中的问题).如果我看对了,我可以在VBA中使用matlab funktions:http://www.mathworks.de/help/techdoc/matlab_external/f135590.html#f133975
我的主要问题是如何实现这个问题的matlab部分......目前我的控件部分看起来像这样:
start.m:
run = 1;
reset = 0;
while run ~= 0 % Loop until external reset of 'run' to '0'
if reset ~= 0
doReset(); % Reset the parameters for the processing
reset = 0;
disp('I did a reset');
end
disp('I am processing');
doProcess();
pause(1)
end
disp('I am done');
Run Code Online (Sandbox Code Playgroud)
重置部分在通过脚本更改值时非常正常,但是当我手动尝试将"运行"或"重置"的值更改为工作空间中的任何其他值时,没有任何反应...我的脚本不会中止,重置 - 如果它的工作也没有...在我看来,脚本无法识别工作区中的任何变化?!
之后,变量'run'和'reset'将由VBA脚本设置或取消设置.有什么合理的理由让我不能手动中止循环吗?
谢谢你的建议!
迎接,poeschlorn
编辑:
似乎脚本在启动之前加载变量一次,而在运行时期间从不再加载......是否有可能显式访问工作空间变量?
编辑2:
我现在使用Matlab 2010b,没有额外的工具箱
编辑3:
我发现,Matlab中有几个"工作空间"或RAM.如果我的函数正在运行,变量将存储在"base"(?)工作空间中,而不是matlab工作空间,您可以在其中单击并更改每个值.所以我必须访问这个不祥的"基础"空间并将标志"run"更改为零.
你的脚本是脚本m文件还是函数?
如果它是一个函数,您将丢失工作区变量的范围,这就是它不起作用的原因。我会将你的代码变成这样的函数:
function processRun(run,reset)
while run ~= 0 % Loop until external reset of 'run' to '0'
if reset ~= 0
doReset; % Reset the parameters for the processing
reset = 0;
disp('I did a reset');
end
disp('I am processing');
[run,reset] = doProcess;
pause(1)
end
Run Code Online (Sandbox Code Playgroud)
然后,每次从 VBA 调用该函数时,您都可以设置运行和重置的值。
如果您有脚本,请尝试从顶部删除运行和重置行,并在运行脚本之前在工作区中设置它们的值。我认为您正在通过运行脚本文件来覆盖工作区值。
归档时间: |
|
查看次数: |
4227 次 |
最近记录: |