2012-05-03 15 views
1

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

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

因此,当在'dataport18'中指定的端口接收到数据时,它将运行receivedata18()函数。不过,我想读取多个频率的深度数据,所以我创建附加的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中有一个类似的程序,它以基本相同的方式执行,但它没有问题。我假设它必须是Matlab无法运行并行计算工具箱的同时运行的功能

+0

receiveata38/18函数是什么?他们在做什么?你是否将正确的引用传递给了udp对象?也许他们访问相同的缓冲区?另外,“频率”是什么意思?我相信你必须为对象使用异步模式才能使代码正常工作。 – Jorge

+0

receivedata18/38函数被重新绑定到u1和u2对象。因此,当在u1和u2端口接收到数据时,这些功能会运行并读取u1和u2上的输入缓冲区。所以是的,他们通过了正确的参考。如果我将dataport18设置为等于dataport38,它们只能访问相同的缓冲区。也许我需要考虑使用异步模式。谢谢。 – Josiah

回答

0

想到我应该更新这个以防万一有人在乎。这不是我的问题的真正答案,但我目前正在做的工作。

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