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

时间:2015-01-20 16:56:42

标签: 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方面纠正我。

提前谢谢。

2 个答案:

答案 0 :(得分:0)

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

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

请记住,UDP无法保证。如果你的可视化工具偶尔错过了一个数据包就可以正常工作,那么UDP就是正确的选择!如果没有,您可能希望使用TCP。 TCP是面向流的,因此您必须建立自己的数据包结构来分离数据单元。

答案 1 :(得分:0)

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

这种方法存在一些问题(当然不是最高性能),而套接字肯定是“正确”的方法,但MATLAB的重点通常是尽可能快地完成工作。和文件I / O是不需要深奥知识的东西。