我正在尝试通过使用回调函数从UDP套接字在MatLab中获得16000个值/秒。
目前这种工作方式,但是我不知道如何获取接收到的包的值以进行进一步的后期处理(例如,将其写入SQL DB /对其进行绘图),因为变量只是局部变量,而不是写入我的工作区?
我目前正在使用的代码:
%% Specify a Server (host name or IP address) with Port 8080
u = udp('192.168.0.164', 8080); %UDP Object
u.InputBufferSize = 1024;
u.ReadAsyncMode = 'continuous';
u.DatagramReceivedFcn = @DatagramReceivedFcn;
u.DatagramTerminateMode = 'on';
u.Terminator = '!';
%% Oeffnen der Verbindung
fopen(u);
if (~strcmp(u.Status,'open'))
NetworkError(u,'Connection failed!');
end
%% Start Data transmission by trigger
fprintf(u, 'Requesting Data')
%% Callback Funktion
function DatagramReceivedFcn(u,~)
%avail = u.BytesAvailable;
datagram = fscanf(u);
disp('Data Received!');
disp(datagram);
end
我认为您可以在此处使用充当“关闭”功能的嵌套函数!创建一个变量以用作函数外部的缓冲区,然后引用/分配给嵌套DatagramReceivedFcn
函数内部的变量。]>
要使此功能正常工作,您的其余所有代码都必须在函数本身中。
function DoTheThing %% Specify a Server (host name or IP address) with Port 8080 u = udp('192.168.0.164', 8080); %UDP Object % Here's your buffer in the enclosing function myBuffer = {}; u.InputBufferSize = 1024; u.ReadAsyncMode = 'continuous'; u.DatagramReceivedFcn = @DatagramReceivedFcn; % [...] %% Start Data transmission by trigger fprintf(u, 'Requesting Data') %% Callback Function function DatagramReceivedFcn(u,~) %avail = u.BytesAvailable; datagram = fscanf(u); disp('Data Received!'); disp(datagram); myBuffer{end+1} = datagram; % References myBuffer in the enclosing function! end end
并且如果您将回调函数上移到
myBuffer
初始化旁边,它可能会更具可读性。