Обработка на едновременни изпълнения на UDP DatagramReceivedFcn в Matlab

Опитвам се да прочета стойности на дълбочината на океана на множество честоти, които се излъчват чрез UDP пакети. Това, което правя, е да кажа на програмата за регистриране да върне стойностите на дълбочината към конкретен 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). Предполагам, че тъй като и двете честоти пингват едновременно, и двете изпращат своите UDP пакети и се опитват да оценят съответните си функции едновременно, което Matlab не е в състояние да направи.

Това наистина ли се случва? Ако е така, има ли някакъв начин да се заобиколи този проблем, така че да мога едновременно да чета данни за дълбочина, които се изпращат едновременно от два отделни UDP пакета?

Благодаря!

Актуализация

Чудя се дали ще имам нужда от Parallel Computing Toolbox, за да изпълня това. Имам подобна програма в Python, която се изпълнява по същество по същия начин, но няма проблеми. Предполагам, че трябва да е така, че Matlab не може да изпълнява едновременни функции без Parallel Computing Toolbox


person Josiah    schedule 03.05.2012    source източник
comment
Какви са получените функции 38/18? Те какво правят? Предавате ли им правилната препратка към udp обекта? Може би имат достъп до един и същ буфер? Също така, какво имате предвид под честота? Вярвам, че трябва да използвате асинхронни режими за обектите, за да може вашият код да работи правилно.   -  person Jorge    schedule 06.05.2012
comment
Получените функции 18/38 са обвързани съответно с обекта u1 и u2. Следователно, когато се получат данни на портовете u1 и u2, тези функции се изпълняват и четат входния буфер на u1 и u2. Така че да, предава им се правилната препратка. Те имат достъп до същия буфер само ако задам dataport18 равен на dataport38. Може би трябва да разгледам използването на асинхронен режим. Благодаря.   -  person Josiah    schedule 09.05.2012


Отговори (1)


Реших, че трябва да актуализирам това, в случай че някой се интересува. Това всъщност не е отговор на въпроса ми, но това, което правя в момента, работи.

Вместо данните да се изпращат на различен UDP порт, аз просто ги изпращам на същия порт и след това ги чета последователно. Така че не ги чета синхронно, въпреки че това изобщо не забавя много операцията.

person Josiah    schedule 27.09.2012