Unsuccesful binblockread with Tektronix DPO 2014

조회 수: 6 (최근 30일)
Wilko ten Hove
Wilko ten Hove 2015년 11월 9일
답변: Vinod 2015년 11월 20일
Hello,
I'm trying to run an experiment but after some time the system crashes. The measurement is performed with at Tektronix DPO2014. The problem seems to be in the binblockread() function. Based on another MATLAB answer I turned the header off. To make sure the terminator character is cleared, I also added a clrdevice(). However, I still get the following error.
Warning: Unsuccessful read: A binblock is not available to be read.
Warning: Unsuccessful read: A binblock is not available to be read.
Warning: Unsuccessful read: A timeout occurred before the binblock was read.
Subscripted assignment dimension mismatch.
Error in measure (line 71)
RawSignal(:, p) = ymult * (curve - yoff) - yzero;
Error in test (line 16)
measure
The measure.m script:
% DPO2014 measure
if Test == 1 && Iteration == 1
dpo2014 = visa('ni', 'USB0::0x0699::0x0373::C010615::INSTR');
dpo2014.InputBufferSize = 10000000;
fopen(dpo2014);
fprintf(dpo2014, 'HEAD %s\n', 'OFF');
end
if Iteration == 1
RawSignals = [];
end
% Setup acquisition
fprintf(dpo2014, 'ACQ:MOD %s\n', 'AVE');
fprintf(dpo2014, 'ACQ:NUMAV %d\n', Averages);
fprintf(dpo2014, 'HOR:DEL:MOD %s\n', 'OFF');
fprintf(dpo2014, 'HOR:POS %d\n', 0);
fprintf(dpo2014, 'HOR:RECO %d\n', RecordLength);
RecordLength = query(dpo2014, 'HOR:RESO?', '%s', '%d');
for i = 1 : 4
fprintf(dpo2014, 'SEL:CH%d?\n', i);
active = fscanf(dpo2014, '%d');
if active == 1
fprintf(dpo2014, 'CH%d:POS %d\n', [i 0]);
fprintf(dpo2014, 'CH%d:SCA %d\n', [i 10]);
end
end
fprintf(dpo2014, 'TRIG:A:TYP %s\n', 'EDG');
fprintf(dpo2014, 'TRIG:A:EDGE:SOU %s\n', TriggerSource);
fprintf(dpo2014, 'TRIG:A:EDGE:SLO %s\n', TriggerSlope);
fprintf(dpo2014, 'TRIG:A:LEV %d\n', TriggerLevel);
% Run acquisition
fprintf(dpo2014, 'ACQ:STOPA %s\n', 'SEQ');
fprintf(dpo2014, 'ACQ:STATE %s\n', 'RUN');
% Wait until the acquisition stops
fprintf(dpo2014, '%s\n', '*WAI');
% Fetch waveform
fprintf(dpo2014, 'DAT:ENC %s\n', 'SRI');
fprintf(dpo2014, 'DAT:WID %s\n', 2);
RawSignal = zeros(RecordLength, 2);
p = 1;
for k = 1 : 4
fprintf(dpo2014, 'SEL:CH%d?\n', k);
active = fscanf(dpo2014, '%d');
if active == 1
channel = sprintf('CH%d', k);
fprintf(dpo2014, 'DAT:SOU %s\n', channel);
fprintf(dpo2014, 'DAT:STAR %d\n', 1);
fprintf(dpo2014, 'DAT:STOP %d\n', RecordLength);
fprintf(dpo2014, '%s\n', 'CURVE?');
curve = binblockread(dpo2014, 'int16');
clrdevice(dpo2014);
ymult = query(dpo2014, 'WFMO:YMU?', '%s', '%e');
yoff = query(dpo2014, 'WFMO:YOF?', '%s', '%e');
yzero = query(dpo2014, 'WFMO:YZE?', '%s', '%e');
RawSignal(:, p) = ymult * (curve - yoff) - yzero;
p = p + 1;
end
end
RawSignals = [RawSignals; RawSignal];
if Iteration == Measurements
save(File, 'RecordLength', 'Averages', 'RawSignals')
clear File RecordLength Average RawSignals
end
if Iteration == Measurements && Stop == 1
fclose(dpo2014);
delete(dpo2014);
end
Does anybody have a suggestion to make this work?

채택된 답변

Vinod
Vinod 2015년 11월 20일
The CURVE? command can take some time to execute. This is likely why the BINBLOCK data is not available to read.
Rather than rewriting the SCPI code, have you tried using the Quick-control Oscilloscope functionality?
>> doc oscilloscope
for more info.

추가 답변 (0개)

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by