如何从 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
初始化旁边,它可能会更具可读性。
我正在尝试使用回调函数从 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
初始化旁边,它可能会更具可读性。