exponenta event banner

Загрузка данных с помощью блока из рабочего пространства

В этом примере показано, как создавать и форматировать данные для загрузки из базового рабочего пространства с помощью блока «Из рабочего пространства». Чтобы загрузить данные с помощью блока Из рабочей области (From Workspace), необходимо создать или сохранить данные в формате, поддерживаемом блоком Из рабочей области (From Workspace) в базовой рабочей области, рабочей области модели или рабочей области маски. Можно программно создавать загружаемые данные, загружать данные, зарегистрированные в другом моделировании, или загружать реальные данные, собранные с датчиков или в лаборатории. Код из каждого раздела формата можно использовать в качестве шаблона, чтобы понять, как форматировать собственные входные данные моделирования.

Изучение модели

В этом примере используется простая модель. Блоки Два из рабочей области (Two From Workspace) загружают данные из базовой рабочей области и отправляют их в два блока Исходящий (Outport). Один блок Из рабочей области (From Workspace) использует значения по умолчанию для всех настроек блока, а другой настроен на загрузку данных для шины. Два блока области панели мониторинга в модели отображают данные, загруженные каждым блоком Из рабочей области (From Workspace). Модель также содержит несколько блоков кнопки обратного вызова, которые можно использовать для создания данных в базовой рабочей области с использованием различных форматов, поддерживаемых блоком «Из рабочей области».

Модель использует PreLoadFcn обратный вызов для определения simin с использованием переменной timeseries формат и busin переменная с использованием структуры timeseries при открытии модели. Один из блоков кнопки обратного вызова используется для создания данных в требуемом формате перед моделированием модели. Чтобы создать данные, щелкните, чтобы выбрать блок кнопки обратного вызова, и щелкните еще раз, чтобы запустить код. Код каждого блока кнопки обратного вызова можно просмотреть в диалоговом окне блоков или в инспекторе свойств.

Создание временных и сигнальных данных

Большинство форматов данных, поддерживаемых блоком «Из рабочей области», в основном состоят из вектора времени, спаренного со значениями сигнала. Вы можете использовать Structure without time формат для загрузки только входных значений данных без соответствующих значений времени, что иногда требуется для дискретного моделирования. (Дополнительные сведения см. в разделе Загрузка данных для тестирования дискретного алгоритма.) В этом примере создается и загружается десять секунд данных, представляющих синусоидальную волну.

Чтобы создать равномерно разнесенный вектор времени, начните с массива, который отсчитывает от нуля до требуемого количества шагов времени минус один (для первого шага времени, который уже определен). Умножьте массив на требуемый интервал выборки. Наконец, транспонируйте результирующую переменную времени так, чтобы она была вектором столбца, а не вектором строки.

sampleRate = 0.01;
numSteps = 1001;
time = sampleRate*[0:(numSteps-1)];
time = time';

Примечание

MATLAB ® поддерживает несколько других методов создания равномерно разнесенного вектора времени, но другие методы могут вводить ошибки округления с двойной точностью во временные данные, что может привести к неожиданным результатам моделирования. Например, не используйте linspsace функция или эта форма выражения MATLAB для создания равномерно разнесенного вектора времени для имитационных входных данных:

time = [startTime:stepSize:endTime]';
Результирующий вектор времени не эквивалентен вектору, созданному с помощью этого выражения:
time = stepSize*[startTime:(numSteps-1)]

Если вектор времени состоит из неравномерно разнесенных значений времени, для создания временных данных можно использовать любое допустимое выражение MATLAB.

Теперь создайте данные сигнала с помощью sin функция. В этом примере создается синусоидальная волна с периодом 3.

data = sin(2*pi/3*time);

Груз timeseries Данные

Загрузка Simulink ® и ведение журнала обычно используют MATLABtimeseries объекты для передачи данных временных рядов в моделирование и из моделирования. Код блока кнопки обратного вызова с меткой Create timeseries data to load создает временные и сигнальные данные, использует их для создания timeseries и назначает timeseries объект к переменной загрузки simin.

sampleRate = 0.01;
numSteps = 1001;
time = sampleRate*[0:(numSteps-1)];
time = time';
data = sin(2*pi/3*time);
simin = timeseries(data,time);

Для загрузки timeseries данные, можно запустить код для создания simin загрузка переменной в окне команд MATLAB или выберите и нажмите клавишу Create timeseries data to load Блок кнопки обратного вызова. Затем смоделируйте модель и просмотрите загруженные данные в блоке Область панели мониторинга.

Груз timetable Данные

MATLAB timetable - это другой формат, используемый для хранения данных временных рядов. Как следует из названия, данные форматируются как таблица. При загрузке данных с помощью timetable объект, timetable объект может содержать данные только в одном столбце для одного сигнала.

Код блока кнопки обратного вызова с меткой Create timetable data to load создает временные и сигнальные данные, использует их для создания timetable и назначает timetable объект к переменной загрузки simin. timetable объект требует, чтобы время ввода составляло datetime или duration вектор. В этом примере создается вектор длительности, secs, с использованием seconds функция.

sampleRate = 0.01;
numSteps = 1001;
time = sampleRate*[0:(numSteps-1)];
time = time';
data = sin(2*pi/3*time);
secs = seconds(time);
simin = timetable(secs,data);

Для загрузки timetable данные, можно запустить код для создания simin загрузка переменной в окне команд MATLAB или выберите и нажмите клавишу Create timetable data to load Блок кнопки обратного вызова. Затем смоделируйте модель и просмотрите загруженные данные в блоке Область панели мониторинга.

Загрузить данные структуры

Блок «Из рабочей области» поддерживает загрузку данных для сигнала с использованием структуры, соответствующей Structure или Structure with time форматы регистрации. Модель содержит блок кнопки обратного вызова, который создает данные, соответствующие Structure with time формат. Structure формат соответствует Structure with time формат, за исключением Structure формат не имеет time поле.

Структура имеет два поля верхнего уровня, time и signals. При регистрации данных с помощью Structure with time формат, signals поле может представлять собой массив структур, которые содержат данные для нескольких сигналов. При загрузке данных с помощью Structure with time формат, signals поле может содержать только одну структуру с данными для одного сигнала. Структура для signals поле содержит values поле и должно содержать dimensions поле, если сигнал не является скалярным.

Код блока кнопки обратного вызова с меткой Create structure with time data to load создает временные и сигнальные данные и использует их для построения структуры с требуемыми полями и иерархией. Код начинается с удаления любой существующей переменной с именем simin который может быть объектом с именами свойств, соответствующими именам полей структуры.

clear simin;
sampleRate = 0.01;
numSteps = 1001;
time = sampleRate*[0:(numSteps-1)];
time = time';
data = sin(2*pi/3*time);
simin.time = time;
simin.signals.values = data;

Для загрузки данных структуры можно выполнить код для создания simin загрузка переменной в окне команд MATLAB или выберите и нажмите клавишу Create structure data to load Блок кнопки обратного вызова. Затем смоделируйте модель и просмотрите загруженные данные в блоке Область панели мониторинга.

При загрузке данных для многомерного сигнала добавьте еще одну строку кода для назначения размеров сигнала simin.signals.dimensions. Если данные сигнала скалярны, установите в поле размеров значение 1, если его включить. Если каждое значение сигнала является вектором строки, можно указать размеры как [1 n] или как n, где n - количество столбцов. Когда каждое значение сигнала равно Mоколо-N матрица, укажите значение поля размеров как [M N].

При необходимости загрузки входных данных моделирования без временных данных используйте Structure формат, который не включает time и укажите требуемую частоту выборки в параметре Sample time. Дополнительные сведения см. в разделе Загрузка данных для тестирования дискретного алгоритма.

Загрузить данные массива

Блок «Из рабочей области» можно использовать для загрузки данных сигнала, отформатированных как массив, где первый столбец массива содержит временные данные, а последующие столбцы содержат данные сигнала. При загрузке данных в формате массива значения сигнала могут содержать только одну строку.

Код блока кнопки обратного вызова с именем Create array data to load создает временные и сигнальные данные и объединяет два вектора строк в массив.

sampleRate = 0.01;
numSteps = 1001;
time = sampleRate*[0:(numSteps-1)];
time = time';
data = sin(2*pi/3*time);
simin = [time,data];

Чтобы загрузить данные массива, можно запустить код для создания simin загрузка переменной в окне команд MATLAB или выберите и нажмите клавишу Create array data to load Блок кнопки обратного вызова. Затем смоделируйте модель и просмотрите загруженные данные в блоке Область панели мониторинга.

Загрузить данные шины

При загрузке данных шины с помощью блока «Из рабочего пространства» необходимо указать параметр «Тип выходных данных» в качестве Simulink.Bus объект, определяющий шину. Для блока «Из рабочей области», загружающего данные шины, задан тип выходных данных: Bus: SinusoidBus. PreLoadFcn обратный вызов для модели и код для Create bus data to load Блок кнопки обратного вызова определяет SinusoidBus объект.

A Bus объект определяет иерархию шины, а также свойства элементов в шине, такие как имя и тип данных. Bus объект в этом примере определяет иерархию шины, имена сигналов, содержащихся в шине, и тип данных для вложенной шины. Шина, SinusoidBus, содержит один сигнал, Cosineи вложенную шину с именем SineBus, который содержит два сигнала, Sine и BigSine.

elems(1) = Simulink.BusElement;
elems(1).Name = 'Sine';
elems(2) = Simulink.BusElement;
elems(2).Name = 'BigSine';
SineBus = Simulink.Bus;
SineBus.Elements = elems;

clear elems;
elems(1) = Simulink.BusElement;
elems(1).Name = 'SineBus';
elems(1).DataType = 'Bus: SineBus';
elems(2) = Simulink.BusElement;
elems(2).Name = 'Cosine';
SinusoidBus = Simulink.Bus;
SinusoidBus.Elements = elems;
Дополнительные сведения об определении шин с помощью Simulink.Bus см. раздел Задание свойств шины с помощью Simulink.Bus Object Data Types.

Create bus data to load Блок кнопки обратного вызова создает структуру timeseries объекты с иерархией и именами полей, которые соответствуют иерархии и именам элементов SinusoidBus объект. Можно также создать структуру timetable объекты для загрузки в качестве входных данных для шины.

sampleRate = 0.01;
numSteps = 1001;

time = sampleRate*[0:(numSteps-1)];
time = time';

data = sin(2*pi/3*time);
cosdata = cos(2*pi/3*time);
ampdata = 2*data;

busin.Cosine = timeseries(cosdata,time);
busin.SineBus.Sine = timeseries(data,time);
busin.SineBus.BigSine = timeseries(ampdata,time);

Для загрузки данных шины можно запустить код для создания busin загрузка переменной в окне команд MATLAB или выберите и нажмите клавишу Create bus data to load Блок кнопки обратного вызова. Затем смоделируйте модель и просмотрите загруженные данные в блоке Область панели мониторинга.

Загрузка частично указанных данных шины

При загрузке входных данных для шины с помощью блока «Из рабочего пространства» нет необходимости предоставлять данные для каждого элемента шины. Чтобы частично указать входные данные для шины, можно опустить соответствующее поле в структуру или указать его значение как [].

Create partially specified bus data to load Блок кнопки обратного вызова создает структуру timeseries объекты с иерархией и именами полей, которые соответствуют иерархии и именам элементов SinusoidBus объект. Он не указывает данные для Cosine элемент шины.

sampleRate = 0.01;
numSteps = 1001;

time = sampleRate*[0:(numSteps-1)];
time = time';

data = sin(2*pi/3*time);
ampdata = 2*data;

busin.Cosine = [];
busin.SineBus.Sine = timeseries(data,time);
busin.SineBus.BigSine = timeseries(ampdata,time);

Для загрузки данных шины можно запустить код для создания busin загрузка переменной в окне команд MATLAB или выберите и нажмите клавишу Create partially specified bus data to load Блок кнопки обратного вызова. Затем смоделируйте модель и просмотрите загруженные данные в блоке Область панели мониторинга.

При частичном указании данных для шины, включающей вложенную шину или вложенный массив шин, можно указать всю вложенную шину или вложенный массив шин как [] и блок Из рабочей области (From Workspace) предоставляет базовые значения для всех элементов вложенной шины или массива шин. Можно также частично указать данные для массива шин, пропустив данные для одной или нескольких шин, содержащихся в массиве шин.

Загрузка массива данных шин

При использовании блока «Из рабочего пространства» для загрузки данных для массива шин необходимо указать параметр «Тип выходных данных» в качестве Simulink.Bus объект, определяющий шины, содержащиеся в массиве шин. Все шины в массиве должны быть определены одним и тем же Simulink.Bus объект. Для блока "Из рабочей области", загружающего данные для массива шин, установлен тип выходных данных " Bus: SinusoidBus. Для получения подробной информации об определении Bus см. раздел Загрузка данных шины.

Create array of buses data to load Блок кнопки обратного вызова создает массив, содержащий две структуры timeseries объекты с именами иерархии и полей, которые совпадают с именами иерархии и элементов SinusoidBus объект. Вторая структура, bus2, использует те же данные, что и первый, сдвинутый вниз на один, чтобы вы могли видеть все шесть сигналов в блоке области панели мониторинга.

sampleRate = 0.01;
numSteps = 1001;

time = sampleRate*[0:(numSteps-1)];
time = time';

data = sin(2*pi/3*time);
cosdata = cos(2*pi/3*time);
ampdata = 2*data;

bus1.Cosine = timeseries(cosdata,time);
bus1.SineBus.Sine = timeseries(data,time);
bus1.SineBus.BigSine = timeseries(ampdata,time);

bus2.Cosine = timeseries((cosdata-1),time);
bus2.SineBus.Sine = timeseries((data-1),time);
bus2.SineBus.BigSine = timeseries((ampdata-1),time);

busin = [bus1,bus2];

Чтобы загрузить массив данных шин, можно запустить код для создания busin загрузка переменной в окне команд MATLAB или выберите и нажмите клавишу Create array of buses data to load Блок кнопки обратного вызова. Затем смоделируйте модель и просмотрите загруженные данные в блоке Область панели мониторинга.

См. также

Блоки

Объекты

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