API 流和 stream_to_file | MATLAB
流媒体选项
有关 API 的更多详细信息,请访问我们的 数据记录器 | API 参考
streaming stream_to_file MATLAB 数据流示例
stream_to_file 方法
当您想要记录数据但又不想使用 mokucli 在外部进行转换时,此功能非常有用,请参阅API 下载日志文件并转换 | MATLAB了解此用例。这会在下载文件时对其进行转换,并在流式传输会话完成后即可进行分析。
% moku example: Datalogger Stream to File
% (c) 2025 Liquid Pty. Ltd.
% Connect to your Moku
i = MokuDatalogger('192.168.###.###', 'force_connect', false);
try
% Set-up the Datalogger
i.set_acquisition_mode('mode','Precision');
i.set_samplerate(1e3);
i.generate_waveform(1, 'Sine', 'amplitude',1, 'frequency',10e3);
% Start a streaming session and stream to a file, include the file type in the
% file name; csv, hdf5, npy, or mat
i.start_streaming('duration', 10);
now = datetime('now', 'Format','yyyyMMdd_HHmmSS');
file_name = 'DataStreamingData_' + string(now) + '.mat';
i.stream_to_file(file_name);
fprintf('Streaming to file: %s\n', file_name);
status = i.get_stream_status();
fprintf('Status: %s\n', status.status);
% Track progress percentage of the data streaming session
while strcmp(status.status, 'RUNNING')
pause(0.5);
status = i.get_stream_status();
end
% Wait for the file to become accessible
pause(5);
channels = 2;
fprintf('%s\n', file_name);
catch ME
i.relinquish_ownership();
rethrow(ME);
end
% Close the connection to the Moku device
i.relinquish_ownership();
% Check for the file, then open the file and create data struct
if ~isfile(file_name)
error('Streaming failed, no file received');
end
data = struct('time', [], 'ch1', []);
file = load(file_name);
data.time = file.moku.data(:, 1);
for i = 1:channels
data.(['ch', num2str(i)]) = file.moku.data(:, i+1);
end
% Display the streamed data
keys = fieldnames(data);
for k = 1:numel(keys)
key = keys{k};
disp([key, ': ', mat2str(data.(key)(1:3)), ' ... [', num2str(data.(key)(end)), ']']);
end
% Plot the streamed data
fig = figure('Position', [100, 100, 1000, 300]);
hold on;
for i = 1:channels
plot(data.time, data.(['ch', num2str(i)]), 'DisplayName', ['Channel ', num2str(i)]);
end
title('Streamed to File Data');
grid on;
xlabel('Time (s)');
ylabel('Voltage (V)');
legend show;
hold off;
示例输出:
Streaming to file: DataStreamingData_20250117_103569.mat
Status: RUNNING
DataStreamingData_20250117_103569.mat
time: [0;0.001;0.002] ... [9.999]
ch1: [0.00191093314060709;0.0016939521851782;0.00161954084887839] ... [0.0017355]
ch2: [0.014444866169697;0.01442298048255;0.0143560728104148] ... [0.014131]

对于流式传输其他文件类型:
file_name = 'DataStreamingData_' + string(now) + '.npy';
i.stream_to_file(file_name);
file_name = 'DataStreamingData_' + string(now) + '.hdf5';
i.stream_to_file(file_name);
file_name = 'DataStreamingData_' + string(now) + '.csv';
i.stream_to_file(file_name);
流式传输方法
当您想要实时分析数据而不是等待流会话完成时,此方法很有用。
% moku example: Datalogger Streaming
% (c) 2025 Liquid Pty. Ltd.
i = MokuDatalogger('192.168.###.###', 'force_connect', false);
try
% Set-up the Datalogger
i.set_acquisition_mode('mode','Precision');
i.set_samplerate(100);
i.generate_waveform(1, 'Sine', 'amplitude',1, 'frequency',10e3);
% Stream the data for 10 seconds
i.start_streaming('duration', 10);
% Plot the streamed data
fig = figure('Position', [100, 100, 1000, 300]);
hold on;
grid on;
ylim([0, 0.016]);
title('Streamed Data');
xlabel('Time (s)');
ylabel('Voltage (V)');
data = i.get_stream_data();
lh1 = plot(data.time, data.ch1, 'DisplayName', 'Channel 1');
lh2 = plot(data.time, data.ch2, 'DisplayName', 'Channel 2');
legend show;
while 1
data = i.get_stream_data();
if ~isempty(data) & ~isempty(data.time)
set(lh1,'XData',data.time,'YData',data.ch1);
set(lh2,'XData',data.time,'YData',data.ch2);
xlim([data.time(1), data.time(end)]);
pause(0.1)
end
end
catch ME
i.relinquish_ownership();
rethrow(ME);
end
% Close the connection to the Moku device
i.relinquish_ownership();
