exponenta event banner

Почему чтение данных из dsp.AsyncBuffer Объект дает ошибку несоответствия измерений в функциональном блоке MATLAB?

При чтении данных из асинхронного буфера внутри блока MATLAB Function (Simulink) блок выдает ошибку несоответствия размеров, если выходные данные read не указан как сигнал переменного размера.

Вот bufferWrapper функция, содержащая алгоритм внутри функционального блока MATLAB. При вводе на 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 нажмите Edit Data, чтобы открыть диспетчер портов и данных.

  2. Для выходных данных yустановите флажок Размер переменной.

  3. Нажмите кнопку «Применить».

Запуск модели и просмотр выходных данных y во временной области.

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

См. также

Объекты

Связанные темы