控制matlab脚本(暂停,重置)

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"更改为零.

Ada*_*ter 1

你的脚本是脚本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 调用该函数时,您都可以设置运行和重置的值。

如果您有脚本,请尝试从顶部删除运行和重置行,并在运行脚本之前在工作区中设置它们的值。我认为您正在通过运行脚本文件来覆盖工作区值。