【问题标题】:Is it possible to send commands between two MATLAB windows open on the same computer?是否可以在同一台计算机上打开的两个 MATLAB 窗口之间发送命令?
【发布时间】:2018-05-26 00:13:31
【问题描述】:

我想在同一台计算机上打开两个 MATLAB 窗口。期望的场景如下:MATLAB 窗口 1 不断运行一个与 MATLAB 窗口 2 无关的脚本。同时,MATLAB 窗口 2 运行一个脚本,不断检查某个条件,如果满足,然后它将终止在 MATLAB 窗口 1 上运行的脚本,然后也终止它自己的脚本。我想要两个 MATLAB 窗口而不是一个,因为我相信这对于我正在尝试做的事情会更有效率。我在http://au.mathworks.com/matlabcentral/fileexchange/40001-keyinject 找到了一个有趣的“KeyInject”程序,但我想知道 MATLAB 中是否已经内置了一种更简单的方法。

【问题讨论】:

  • 我看不出这是多么有效。如果您可以在单独的 MATLAB 中检查实时脚本中的条件,为什么不能只在一个实例中执行呢?
  • 在这里给出一些上下文;我实际上正在使用一个 MATLAB 窗口来控制激光发射晶体,并使用另一个 MATLAB 窗口来分析来自 CCD 的图像,以检查是否由于激光而导致晶体过度损坏。如果晶体损坏太多,那么我希望关闭激光。由于某些实验原因,让激光器连续运行和独立控制 CCD 很重要,因此需要两个 MATLAB 窗口。
  • 我看不出有任何理由说明您不能从同一个脚本控制您的硬件 - 设置您的激光,读取您的传感器。这是控制器实现中的标准。您创建一个带有退出条件的主循环。此循环中的第一步是读取您的传感器数据,其次是设置系统的输入......在您的情况下,您是否有理由无法这样做?
  • 我不能这样做,因为激光必须连续运行(这需要很少的计算机资源),但退出条件需要一些时间(可能 1 秒)来评估,如果它会中断激光包含在主循环中。这就是为什么我想要第二个 MATLAB 窗口同时检查激光持续运行的退出条件。
  • 也许你应该看看parallel computing toolbox

标签: matlab


【解决方案1】:

您想要简单的还是灵活的、可无限扩展的 1.0 版本?简单的方法是通过系统 B 创建的文件来触发系统 A。

简单会让系统 B 创建一个文件,然后系统 A 会使用命令检查文件

    if exist ( fileName, 'file' )

然后执行关机命令。在启动时,系统 A 会删除文件

delete ( fileName );

第二个选项是使用 udp 命令。 UDP 允许在进程之间发送任何数据,无论是在同一台计算机上还是通过网络。 (请参阅https://www.mathworks.com/help/instrument/udp.html 了解更多信息)。

【讨论】:

  • 谢谢,我认为文件方法是一个非常简单的解决方案!我会用这个。
【解决方案2】:

我看到了几种方法:

  1. 重组以避免这种情况XY problem

  2. 使用 (mat) 文件(如 Hoki 建议的那样),可能使用并行计算工具箱将所有内容保存在一个 MATLAB 会话中。

  3. 编写一些通过global pipe 相互通信的 MEX 函数。
  4. 编写一个Auto(Hot)key 脚本。

选项 2 可能是最简单的。看看events and listeners如果你用OOP写,否则你必须在循环中轮询

选项 3 更难实现,方式更耗时,但可以更快地检测条件,以及更快地在会话之间传输数据。仅在速度至关重要时才使用...但我想这不适用:)

选项 4:AutoHotkey 解决方案可能是您在已经是 Horrible Construction® 上可以做的最可怕的事情®,但哦,多么有趣!在两个 MATLAB 会话中,您分别创建了一个名称为 Window1Window2 的(隐藏)图形。 AutoHotkey 可以轻松跟踪这些窗口名称。如果满足条件,则更新相应的窗口名称,触发 AutoHotkey 脚本的其余部分:按下另一个窗口中的按钮!如果您需要在窗口之间传输数据:您可以在两个 GUI 中创建基本编辑框,并在它们之间复制粘贴数据。如果你在 Linux 上:你可以使用 Autokey 来达到同样的目的,但是到那时你基本上是在编写 Python 代码来完成繁重的工作,所以只需使用 Python。

或者,您知道,使用 KeyInject。少了点乐趣。

【讨论】:

  • 哈哈......我喜欢你的最后一个解决方案,我正在尝试一种更复杂的方法来实现它,但我认为你已经加满了!为开头的不同(更明智的)选择和帮助链接+1。
猜你喜欢
  • 2011-04-30
  • 1970-01-01
  • 2011-10-04
  • 1970-01-01
  • 2010-10-15
  • 2013-09-02
  • 2013-02-10
  • 2019-06-09
  • 1970-01-01
相关资源
最近更新 更多