在Matlab中处理并发UDP DatagramReceivedFcn执行

时间:2012-05-03 23:38:40

标签: matlab udp datagram

我正在尝试读取通过UDP数据包广播的多个频率的海洋深度值。我正在做的是告诉日志记录程序将深度值返回到特定的UDP端口,然后使用DatagramReceivedFcn在接收数据时运行一个函数,并基本上保存该深度。

u1 = udp(remoteip,dataport18,'ByteOrder','littleEndian','LocalPort',dataport18,'DatagramTerminateMode','off');
set(u1,'InputBufferSize',6000);
u1.DatagramReceivedFcn = {@receivedata18};
fopen(u1);

因此,当在'dataport18'中指定的端口上接收数据时,它将运行receiveata18()函数。但是,我正在尝试读取多个频率的深度数据,因此我创建了其他UDP对象:

u2 = udp(remoteip,dataport38,'ByteOrder','littleEndian','LocalPort',dataport38,'DatagramTerminateMode','off');
set(u2,'InputBufferSize',6000);
u2.DatagramReceivedFcn = {@receivedata38};
fopen(u2);

我发现的是,只保存了u1(18 kHz)的数据。我的猜测是,由于两个频率同时ping,它们都发送UDP数据包并尝试同时评估它们各自的功能,Matlab无法做到这一点。

这确实是怎么回事?如果是这样,有没有解决这个问题的方法,以便我可以同时读取两个独立的UDP数据包同时发送的深度数据?

谢谢!

更新

我想知道我是否需要并行计算工具箱才能执行此操作。我在Python中有一个类似的程序,它以基本相同的方式执行,但它没有问题。我假设必须是没有Parallel Computing Toolbox的Matlab不能同时运行函数

1 个答案:

答案 0 :(得分:0)

我想我应该在有人关心的情况下更新这个。这不是我的问题的答案,而是我目前正在做的工作。

我没有将数据发送到不同的UDP端口,而是将它们发送到同一个端口,然后按顺序读取它们。因此,我不会同步阅读它们,尽管这并没有真正减慢操作的速度。