Почему делает данные о чтении из объекта dsp.AsyncBuffer, дают ошибку несоответствия размерности в блоке MATLAB function?

Если вы считываете данные из асинхронного буфера в блоке MATLAB function, блок выдает ошибку несоответствия размерности, если вывод метода read не задан, чтобы быть сигналом переменного размера.

Вот функция bufferWrapper, которая содержит алгоритм в блоке MATLAB function. Когда введено на cmd портом является 1, объект dsp.AsyncBuffer пишет ввод данных, u, к буферу. Когда введено на cmd портом является 0, объект считывает данные из буфера.

function [y,isData] = bufferWrapper(u,cmd) 

persistent asyncBuff 
if isempty(asyncBuff) 
   asyncBuff = dsp.AsyncBuffer; 
   setup(asyncBuff,u);
end
 
if cmd % write
    write(asyncBuff,u);
    y = zeros(3,1);
    isData = false;
else % read
    y = read(asyncBuff,3);
    isData = true;
end

Необходимо инициализировать буфер путем вызова или write или setup перед первым вызовом read.

Во время операции записи первым выводом, y, является zeros(3,1), и второй вывод, isData, 0. Во время операции чтения y является данными в буфере, и isData равняется 1.

Запустите модель, и следующая ошибка происходит.

Вывод read(asyncBuff,3) на строке 14 переменный измеренный. Вывод переменный измеренный, потому что размер сигнала, выведенного функцией read, зависит от входных параметров к read. Чтобы разрешить эту ошибку, задайте y как сигнал переменного размера.

  1. В Редакторе блока MATLAB function нажмите Edit Data, чтобы открыть Порты и Менеджер данных.

  2. Для вывода y установите флажок Variable size.

  3. Нажмите Apply.

Запустите модель и просмотрите вывод y в Осциллографе Времени.

С cmd = 0 никакие данные не записаны в буфер. Поэтому вывод 0. Записать входным данным u в буферное, набор cmd = 1. После того, как вы запишете некоторые данные, если вы возвращаете cmd к 0, выходные Time Scope изменения в следующем.

Смотрите также

Системные объекты

Похожие темы