【问题标题】:MATLAB code, linked to an EXCEL DDE, doesn't pause. What should I do?链接到 EXCEL DDE 的 MATLAB 代码不会暂停。我该怎么办?
【发布时间】:2021-08-16 15:32:12
【问题描述】:

我正在将 MATLAB 代码链接到 Excel 中的 DDE 应用程序。 它工作正常,但每当我尝试运行代码时,操作都是在不考虑每次暂停的情况下完成的。这部分以正确的方式暂停,应该是:

channel = ddeinit('excel','C:\VTScada\NewApplication\Application.xlsx')
%Inserire valori iniziali e finali
s_start = input('s_start','s')
pause(1)

当我运行 remaning 代码时,例如,就像 MATLAB 对所有暂停值求和一样。然后,一段时间后,它以非常快速的方式运行所有代码,而无需考虑每次暂停。

ddepoke(channel,'r18c2',1)
pause(10)
ddepoke(channel,'r18c2',0)
ddepoke(channel,'r18c2',1)
pause(10)
ddepoke(channel,'r18c2',0)

我尝试使用代码解决这个问题

pause('on')
pause(10)
pause('off')

但事实证明,在这种特殊情况下,MATLAB 根本不考虑暂停。情况似乎更糟了。我该怎么办?

【问题讨论】:

  • @CrisLuengo 是的,对不起,程序是 Matlab
  • 请注意,自 5.1 版(1997 年发布)以来,MATLAB 不再支持 DDE 客户端。您应该使用 COM 模型与 Excel 进行通信:mathworks.com/matlabcentral/answers/…
  • 我知道,但就我而言,它工作正常。唯一的问题只有我写的那个,Matlab不尊重暂停,我想如果我切换到COM模型我会遇到同样的问题
  • 你为什么这么认为?您使用的界面在大约 25 年内未随核心 MATLAB 的更改而更新。我对事情不再正常工作并不感到惊讶。
  • 根据您的描述,似乎 MATLAB 正在执行pause,但消息全部收集到 MATLAB 程序完成,然后发送出去。我不知道 MATLAB 对这些消息使用什么进程,但尝试在每个 pause 语句之后添加一个 drawnow 命令。

标签: excel matlab dde scada


【解决方案1】:

Matlab pause 命令不仅仅意味着“等待 N 秒”;它与图形管道和东西交互。

这是一个 hack,但请尝试这样做而不是 pause

java.lang.Thread.sleep(10 * 1000);

这是一个较低级别的操作,它将以更无条件的方式暂时停止程序的执行。 * 1000 之所以存在,是因为 sleep 以毫秒而不是秒为单位进行输入。

【讨论】:

  • 它一直工作到前 50 行,然后我收到错误:在调用“java.lang.Thread.sleep”期间未分配一个或多个输出参数
  • 嗯。 java.lang.Thread.sleep 没有任何输出参数。您是否可能在第 50 行附近有类似 x = java.lang.Thread.sleep(...) 的内容,试图获取不存在的输出参数?
  • 这就是我在第 50 行之前的全部内容 if(s_start== '1' && s_end== '2' || s_start == '2' && s_end =='1') { fprintf(' s_start %s, s_end %s', s_start, s_end) %Apertura selettori ddepoke(channel,'r1c2',0) ddepoke(channel,'r2c2',1) ddepoke(channel,'r3c2',0) ddepoke(channel, 'r4c2',1) %line 50 java.lang.Thread.sleep(10*1000)
  • 我只把我的程序输出给Excel,但问题是MATLAB只引用了java.lang.Thread.sleep命令,我不明白为什么
  • 我正在尝试使用 MATLAB 中的“etime”命令。我会看看它是如何工作的
【解决方案2】:

我通过删除 if 后的“{}”并添加“Java.lang.Thread.sleep()”方法而不是 Pause() 方法来解决问题。

感谢大家的帮助,无论如何

【讨论】:

  • 啊!我不记得在您发布的原始代码中?在 Matlab 中,{...} 大括号不定义控制流块;相反,它们构造了cell 数组,这是一种值。可能在那里搞砸了你的控制流。
猜你喜欢
  • 2021-03-16
  • 2016-11-25
  • 1970-01-01
  • 2021-11-01
  • 2022-12-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多