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
как сигнал переменного размера.
В Редакторе блока MATLAB function нажмите Edit Data, чтобы открыть Порты и Менеджер данных.
Для вывода y
установите флажок Variable size.
Нажмите Apply.
Запустите модель и просмотрите вывод y
в Осциллографе Времени.
С cmd = 0
никакие данные не записаны в буфер. Поэтому вывод 0. Записать входным данным u
в буферное, набор cmd = 1
. После того, как вы запишете некоторые данные, если вы возвращаете cmd
к 0, выходные Time Scope изменения в следующем.