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

How do I get the data from a callback function in Matlab for further processing?

我正在尝试使用回调函数从 UDP 套接字在 MatLab 中获取 16000 values/second。

这种方法目前有效,但我不知道如何获取接收到的包的值以供进一步 post 处理(例如将它们写入 SQL DB/plot 它们), 因为变量只是本地变量,没有写入我的工作区?

我目前使用的代码:

%% 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

我想你可以在这里使用一个嵌套函数作为 "closure"!创建一个变量用作函数外部的缓冲区,然后 reference/assign 到嵌套的 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 初始化旁边,它可能会更具可读性。