如何从Matlab的回调函数中获取数据以进行进一步处理?

问题描述 投票:0回答:1

我正在尝试通过使用回调函数从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
matlab function callback udp
1个回答
0
投票

我认为您可以在此处使用充当“关闭”功能的嵌套函数!创建一个变量以用作函数外部的缓冲区,然后引用/分配给嵌套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初始化旁边,它可能会更具可读性。

© www.soinside.com 2019 - 2024. All rights reserved.