exponenta event banner

Сохранение и восстановление рабочей точки моделирования

В этом примере показан рабочий процесс и преимущества сохранения и восстановления расчетной рабочей точки с помощью объекта ModelOperatingPoint.

Объект ModelOperatingPoint содержит полный снимок всех переменных, связанных с моделированием модели. После сохранения объекта ModelOperatingPoint в конце моделирования Simulink ® может перезагрузить операционную точку и продолжить моделирование с момента сохранения объекта ModelOperatingPoint. Это действие приводит к таким же результатам моделирования, как если бы моделирование никогда не прерывалось.

Этот пример иллюстрирует:

  • Как сохранить конечные состояния (зарегистрированные состояния), не всегда достаточно для полного и точного восстановления состояния моделирования.

  • Как можно сохранить и восстановить полную рабочую точку моделирования, что ускоряет рабочие процессы моделирования

Трудности с моделями с переменной задержкой транспортировки

Состояния, регистрируемые во время моделирования, являются подмножеством всей информации, необходимой для полного описания состояния моделирования. Некоторые блоки зависят от внутренней информации, которая не регистрируется как часть регистрации состояния и экспорта конечного состояния. Одним из таких блоков является блок задержки передачи. Модели с блоками задержки переноса обычно трудно полностью восстановить до определенного состояния, поскольку состояние задержки переноса не сохраняется в формате структуры или в формате массива как часть регистрации данных «Final states».

Чтобы проиллюстрировать эту проблему, сравните результаты моделирования для двух случаев:

1. Смоделировать модель, содержащую блок задержки переноса, от 0 до 5 секунд и сохранить значения «Final states» в рабочей области. Затем загрузите этот первый набор конечных состояний и смоделируйте от 5 до 10 секунд.

2. Смоделировать ту же модель в диапазоне от 0 до 10 секунд и принудительно выдать выходные данные через 5 секунд. Мы называем результат этого моделирования базовым результатом, потому что это нестопное моделирование.

Результаты первого моделирования соответствуют первой половине базового результата. Если состояние моделирования первого моделирования было полностью восстановлено, результаты второго моделирования будут соответствовать второй половине базовой линии.

Для начала загрузите эту модель:

mdl = 'slexVariableTransportDelay';
load_system(mdl);

Смоделировать до времени 5 и сохранить конечное состояние в формате структуры:

out = sim(mdl, 'StopTime', '5', 'SaveFinalState', 'on',...
          'FinalStateName','xFinal', 'SaveFormat','Structure');
y1 = out.ScopeData;

Загрузите конечное состояние из последнего моделирования и выполните команду 10:

assignin('base', 'xFinal', out.get('xFinal'));
out1 = sim(mdl, 'StartTime', '5', 'StopTime', '10', ...
           'SaveFinalState', 'off', ...
           'LoadInitialState', 'on', 'InitialState', 'xFinal');
y2 = out1.ScopeData;

Запустите нестопное моделирование, которое будет использоваться в качестве базового результата:

out2 = sim(mdl, 'OutputOption', 'AdditionalOutputTimes' ,...
             'OutputTimes','[0 5 10]', 'LoadInitialState', 'off');
y = out2.ScopeData;

Постройте график результатов. Обратите внимание, что вторая половина базового результата не соответствует моделированию от 5 до 10 секунд, начальное состояние которого было восстановлено из конечного состояния, сохраненного через 5 секунд:

figure;
for idx=1:3
    subplot(3, 1, idx);
    plot(y.time,y.signals(idx).values);
    hold on;
    plot([y1.time; y2.time],...
        [y1.signals(idx).values;y2.signals(idx).values],'r--');
    hold off;
    grid on;
end

Сохранение и восстановление полной рабочей точки моделирования

Полную конечную операционную точку можно сохранить в объекте Simulink.op.ModelOperatingPoint. Объект ModelOperatingPoint содержит все переменные, необходимые для восстановления результатов моделирования. Используя полный ModelOperatingPoint, Simulink может полностью восстановить состояние моделирования и воспроизвести результаты моделирования базовой линии.

Задайте параметр Simulink для сохранения полной рабочей точки в конце моделирования.

out3 = sim(mdl, 'StopTime', '5', 'SaveFinalState', 'on', ...
          'LoadInitialState', 'off', 'SaveOperatingPoint', 'on',...
          'FinalStateName', 'xFinal');
y1 = out3.ScopeData;

Загрузите ModelOperatingPoint из последнего моделирования и запустите его в течение дополнительных 5 секунд. Значение времени начала должно оставаться равным 0,0 (это значение было временем начала исходного моделирования). Программа сохраняет исходное время начала моделирования в xFinal. Это значение должно соответствовать времени начала текущего моделирования, чтобы разрешить восстановление состояния моделирования.

assignin('base', 'xFinal', out3.get('xFinal'));
out4 = sim(mdl, 'StopTime', '10', 'SaveFinalState', 'off', ...
          'LoadInitialState', 'on', 'InitialState', 'xFinal');
y2 = out4.ScopeData;

Постройте график результатов и сравните их с моделированием базовой линии. Обратите внимание, что на этот раз состояние моделирования было полностью восстановлено, и результаты моделирования после восстановления рабочей точки соответствуют базовой линии.

figure;
for idx=1:3
    subplot(3, 1, idx);
    plot(y.time,y.signals(idx).values);
    hold on
    plot([y1.time; y2.time],...
        [y1.signals(idx).values;y2.signals(idx).values],'r--');
    hold off;
    grid on;
end

Закройте модель и очистите переменные, использованные в этом примере

close_system(mdl, 0);
clear mdl idx xFinal y y1 y2 y3 out out1 out2 out3 out4