【发布时间】:2011-07-03 12:40:27
【问题描述】:
我正在尝试创建一个由外部 VBA 脚本控制的 matlab 脚本(m 文件)。
对于一定数量的循环,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' 和 'reset' 将由 VBA 脚本设置或取消设置。 为什么我不能手动中止循环,有什么合理的理由吗?
感谢您的建议!
你好,波斯克伦
编辑:
似乎脚本在开始之前加载了一次变量,并且在运行时不再加载...是否有可能显式访问工作区变量?
编辑 2:
我目前使用 Matlab 2010b,没有额外的工具箱
编辑 3:
我发现,Matlab 中有几个“工作区”或 RAM。如果我的函数正在运行,则变量存储在“base”(?)工作区中,这不是您可以单击并更改每个值的 matlab 工作区。所以我必须访问这个不祥的“基地”空间并将“运行”标志更改为零。
【问题讨论】:
-
r.e.编辑 3:没有什么不祥的,函数有自己的变量堆栈,工作空间另一个(你不希望用户函数改变你的工作空间变量,反之亦然!)。如果您需要跨工作区和用户函数全局访问变量,请在工作区和您使用的任何函数中使用 global 关键字,即
global run-- mathworks.com/help/techdoc/matlab_prog/f0-38052.html#f0-38470 -- 这是假设你的循环没有阻塞外部接口... -
@Edit 3:有这样一个函数:
assigning,非常不推荐。 -
@Juhl:为什么这个功能非常不推荐?我认为没有任何反对意见 O.o
-
它的行为方式与全局变量几乎相同,并且通过在 others 工作空间中声明变量更进一步。如果您正在破解,使用它没问题,但是在将它用于大型程序等时我会意识到它。