c++ - Matlab 与外部应用程序(C++)之间的通信

标签 c++ matlab udp communication mex

我正在尝试将与图形相关的 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方面纠正我。

提前谢谢你。

最佳答案

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

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

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

关于c++ - Matlab 与外部应用程序(C++)之间的通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28050969/

相关文章:

c++ - 为什么 const 关键字对于定义模板参数是强制性的?

matlab - 如何删除uitable中选定的行?

客户端到客户端的连接?

c++ - GTK最大化Form c++

c++ - 析构函数/释放内存的问题

matlab - 旋转圆形图像

algorithm - MATLAB:在矩阵中使用函数时避免循环

java - 如何在 Spring Boot 中实现 UDP 服务器以读取来自客户端的输入

java - 安卓广播地址

c++ - boost::optional deprecated get_value_or