主要内容

本页采用了机器翻译。点击此处可查看英文原文。

getBufferedData

从实时应用程序的仪表缓冲区中获取数据

自 R2022b 起

说明

map_object = getBufferedData(instrument_object) 从 MATLAB® 开发计算机上的一个变量中的缓冲区中获取数据,用于实时应用程序仪表。如果 Speedgoat® 目标计算机没有足够的时间发送包含缓冲区数据的 TCP 数据包,可能会导致部分数据丢失。

在普通(非缓冲)数据模式下,可用于实时应用程序的仪表可以配置一个回调函数,该回调函数会在每次有数据可用时执行。仪表在正常数据模式下运行时,会将数据推送至回调函数。

在缓冲数据模式下(当 instrument.BufferData 标志启用时),数据到达时不会执行为该仪表配置的回调函数。相反,实时应用程序会将数据存储起来,而某个 App(例如仪表盘 App)可以通过调用 getBufferedData 函数来检索这些数据。调用此函数会返回缓冲的数据,随后该函数会从仪表中删除这些数据。该仪表会继续缓冲新数据,直到下次调用 getBufferedData 函数为止。仪表的缓冲模式运行允许 App 从仪表中拉取数据。

缓冲数据模式的示例应用场景是:当无法通过 Python-MATLAB 桥接器执行回调函数时。当您通过 Python 代码创建一个仪表时,该仪表无法在 Python 中执行回调,因为 Python-MATLAB API 不支持回调。缓冲数据模式允许您通过发出请求来从仪表中获取数据。

示例

示例

全部折叠

使用 getBufferedData 函数获取实时应用程序仪表的缓冲数据。该函数会获取从您通过启用 Instrument.BufferData 标志,将实时应用程序从正常(非缓冲)数据模式切换为缓冲数据模式时开始缓冲的数据。此标志仅影响 getBufferedData 函数的运行。

% Prepare target
tg = slrealtime;
mdlSTF = getSTFName(tg);
mdlName = 'slrt_ex_pendulum_100Hz';
mldatxName = 'slrt_ex_pendulum_100Hz.mldatx';
openExample(mdlName);
set_param(mdlName,"SystemTargetFile",mdlSTF);
slbuild(mdlName);
load(tg,mdlName);
removeAllInstruments(tg);

% Prepare slrealtime instrument object
instObj = slrealtime.Instrument(mldatxName);
instObj.addSignal('slrt_ex_pendulum_100Hz/Pendulum',1);

% Activate BufferData mode. Instrument data 
% will not be streamed to SDI.
instObj.BufferData = true;

% Add instrument object to target object
addInstrument(tg,instObj);

% Start simulation on target
start(tg);

% Wait for one second and retrieve buffered 
% data since start
pause(1);
logData = processBuffer(instObj);

% Wait for one second and retrieve buffered 
% data since last call to getBufferedData
pause(1);
logData = processBuffer(instObj);

% Stop simulation
stop(tg);

% Helper function
function logData = processBuffer(instObj)
   myMap = getBufferedData(instObj);
   logData = myMap.values;
   disp('New buffer data available:');
   struct2table(logData{1})
end

输入参数

全部折叠

要创建仪表对象,请使用 Instrument 函数。

示例: hInst

输出参量

全部折叠

map_object 返回 getBufferedData 函数调用缓冲的数据。

版本历史记录

在 R2022b 中推出