dsp.AsyncBuffer Объект дает ошибку несоответствия размерности в блоке MATLAB Function?Если вы считываете данные из асинхронного буфера в блоке MATLAB Function (Simulink), блок выдает ошибку несоответствия размерности если выход 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 в Time Scope.

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