【问题标题】:communication between Matlab and external application (C++)Matlab 与外部应用程序之间的通信(C++)
【发布时间】:2015-03-19 00:19:10
【问题描述】:

我正在尝试将与图形相关的 C++ 开源库(称为 openFrameworks)连接到 Matlab/Simlink。

我想做的是在使用 Matlab 进行信号处理后,使用该图形应用程序可视化某些特征。因此在 Simlink S-Function 中,连续进行生物信号(例如 EEG)的记录,并在线进行用于提取某些特征的计算。我想将这些功能的值传递给 openFrameworks。然后它按照我编写的 C++ 代码的设计进行可视化。

我认为如果我可以制作 MEX 并在 Matlab 脚本中调用它,那将是可能的。我成功了,实际上它运行了。但是,openFrameworks 旨在永远持续更新图形,直到我结束应用程序。所以调用 MEX 后,MEX 一直在运行,我无法返回 Matlab。当我使用 MEX 时,可能在线将功能从 Matlab 发送到 MEX 并更新图形似乎很困难。

这两者之间有什么好的沟通方式吗?如果 MEX 使之成为可能,我将继续致力于 MEX。我认为并行运行 Matlab/Simlink 和 openFrameworks 并使用 UDP 将必要的数据从 Matlab 发送到 openFrameworks 是一个好方法。

我希望你给我你的意见。我不知道 UDP 是正确的方式,因为我从未处理过在应用程序之间发送数据的程序。如果是这样,我很高兴。如果我的想法是错误的,请在 MEX 和 UDP 方面纠正我。

提前谢谢你。

【问题讨论】:

  • 如何从 mex 文件向 openFrameWorks 发送数据?您应该使用持久数据(mexMakeArrayPersistent 或静态)保持该连接处于活动状态。然后,您应该在发送数据后立即从 mex 文件返回。

标签: c++ matlab udp communication mex


【解决方案1】:

既然您提到了 UDP,最好的解决方案可能是使用来自MATLAB Central File Exchange 的免费 TCP/UPD/IP 工具箱。它允许直接从 MATLAB 进行 UDP 通信。它是通过 MEX 文件实现的,正如您正在考虑的那样。

因此,您的解决方案将涉及将您想要的数据编码到缓冲区中,然后使用此工具箱进行传输。另一方面,您需要将您的可视化工具构建成一个带有侦听 UDP 套接字的独立应用程序。

请记住,不保证 UDP。如果您的可视化工具在偶尔丢失数据包的情况下也能正常工作,那么 UDP 正是正确的选择!如果没有,您可能想改用 TCP。 TCP 是面向流的,因此您必须创建自己的数据包结构来分隔数据单元。

【讨论】:

    【解决方案2】:

    冒着建议不良编码实践的风险 - 如果您开发的项目仅用于您自己的原型设计和研究用途(而不是用于外部部署),并且这是一次性事件,最简单的解决方案可能是编写到外部文件(例如使用 MATLAB 的 dlmwrite)并在 C++ 应用程序中侦听文件(例如在 while 循环中使用 ifstream)。

    这种方法有几个问题(它肯定不是最高性能),套接字当然是做到这一点的“正确”方法,但 MATLAB 的重点通常是让某些东西尽快工作而文件 I/O 不需要深奥的知识。

    【讨论】:

      猜你喜欢
      • 2017-04-30
      • 1970-01-01
      • 1970-01-01
      • 2012-12-21
      • 1970-01-01
      • 1970-01-01
      • 2013-08-28
      • 1970-01-01
      • 2016-07-27
      相关资源
      最近更新 更多