Рестарты проекта и пакета

Описание и приемы работы с функционалом рестартов

О рестартах

Расчет комплексных проектов, связанных с моделированием в реальном времени длительных процессов, либо процессов с большим объемом сложных вычислений, может занимать много времени. Для того, чтобы иметь возможность запускать моделирование не с начала, а с того места, на котором оно завершилось в прошлый раз, или с какого-то запомненного ранее состояния, в SimInTech предусмотрен механизм рестартов.

В начальный момент времени при инициализации расчета, всем переменным состояния модели (внутренним переменным, не зависящим явно от входных значений блоков и модели) должны быть присвоены те или иные значения, с которых будет начат расчет и численное интегрирование. Например, блок Интегратор должен быть инициализирован каким-то значением, с которого он начнет вычисление интеграла. Как правило, такие значения в модели (переменные состояния) присваиваются из начальных условий блоков, и пользователь задает это через свойства блоков. По сути, модель начинает расчет с начальных условий, описанных в блоках. В простых моделях и в учебных примерах этого бывает достаточно, однако для сложных моделей не всегда возможно задать равновесное (стационарное) начальное состояние. Кроме того, в сложной модели начальное состояние может быть не одно, а несколько заранее заготовленных, соответствующих тому или иному режиму работы моделируемого объекта. Например, модель автомобиля может иметь состояние "стоянка с выключенным двигателем", "стоянка с прогретым мотором", "прямолинейное движение со скоростью 60 км/ч на 4-й скорости" и т.п. Если мы хотим иметь возможность выполнять разные расчеты, исходя из различных начальных состояний, то функционала задания начальных условий через свойства блоков окажется недостаточно.

Попробуем дать определение рестартам: рестарт (от англ. restart, другие названия, в т.ч. и жаргонные: исходное состояние, "спасённое" состояние, сохранённое состояние, initial conditions (IC), ай-си) – записанное в файл(ы) состояние модели по её переменным состояния (или внутренним, независимым переменным), в какой-либо момент времени расчета модели. Фактически любая модель или проект содержит как минимум один рестарт – им является набор начальных значений всех переменных и сигналов модели.

Функционал рестартов позволяет создавать произвольное количество таких наборов, а именно: в любой момент расчета проекта, можно создать файл рестарта, который будет содержать в себе текущее состояние переменных проекта. Эта мера позволит в будущем загрузить состояние модели из файла, и моделирование начнется не с нулевого момента времени и не с начальных значений блоков, а продолжится с того момента модельного времени, в который был создан файл рестарта и из того состояния модели и значений ее переменных, которые были на момент записи файла рестарта. Также эта мера позволяет "сохраниться" (по аналогии с компьютерными играми), а именно: если при дальнейшем моделировании что-то "пойдет не так", то в следующий раз можно будет перезапустить расчет с того места, на котором произошло "сохранение". Другой вариант использования – сохранив один раз исходное состояние, можно моделировать различные сценарии и переходные режимы, которые начинаются из одного и того же состояния модели. Если подготовить несколько рестартов к проекту в разных состояниях модели, то можно начинать следующие расчеты из любого сохраненного ранее исходного состояния.

Прим.:
отметим, что как правило, рестарт жестко соответствует модели – при изменении модели (в части топологии схемы и/или количества используемых сигналов) необходимо заново создавать рестарты, т.к. рестарты от "старой" версии модели перестают корректно работать с "новой". Это справедливо почти для всех бинарных рестартов теплогидравлических моделей и моделей электрических сетей, и для большинства текстовых рестартов. Исключения составляют только некоторые случаи, в которых переменные записываются в рестарт именованным способом и тогда возможно использование рестартов от "старой" модели в "новой". При этом тем переменным, которых не окажется в рестарте, будут всё же присвоены начальные значения из блоков (или из поля формула/значение переменной).

В SimInTech для расчетных схем и для базы сигналов применён именованный способ записи переменных в рестарт – поэтому при малых изменениях расчетной схемы автоматики и/или базы сигналов для них остаются работоспособными рестарты сделанные для предыдущей версии проекта (в той части блоков и сигналов которые остались неизменными). Для теплогидравлических моделей и других расчетных плагинов это может быть не так. В общем случае рекомендуется пересохранять рестарты при любых, сколь угодно малых изменениях расчетной схемы.

Существует несколько способов использовать функционал рестартов - для проекта индивидуально и для пакета проектов "массово", централизованно для всего проекта. Далее рассмотрим каждый способ отдельно.

Настройка рестарта проекта

Рассмотрим работу c рестартом автономного проекта (одного prt-файла). Интерфейс работы с настройкой рестарта находится на вкладке "Рестарт" окна "Параметры проекта", которое вызывается нажатием кнопки "Параметры расчёта" в окне проекта.



Рис. 1. Кнопка вызова окна "Параметры проекта"


Рис. 2. Интерфейс управления расчетом и настройки рестарта
Вкладка "Управление расчётом" окна параметров проекта, представленная на рисунке (Рис. 2), в части рестартов имеет 3 раздела – один управляет автоматическим сохранением рестарта проекта, второй – автоматической загрузкой, третий - ручным управлением сохранением и загрузкой рестарта проекта.

Когда галочки "Сохранять рестарт" и "Загружать рестарт при инициализации" не установлены, то запуск проекта каждый раз происходит с нулевого момента времени и с начальных условий, прописанных в блоках. Такое поведение настроено по умолчанию в шаблонах проектов, то есть по умолчанию функционал рестартов не задействован и не используется. Так как рестарт сохраняется в файл, и считывается из файла, то имя файла имеет важное значение. Имя файла может иметь любое имя и расширение, однако рекомендуется не использовать пробелы и другие служебные символы, а расширение задавать как *.rst при использовании одного рестарта, или *.000, *.001, *.002 и так далее при множественных рестартах у модели, где три цифры обозначают номер рестарта или какую-либо еще информацию о состоянии модели в данном рестарте.

Сохранение рестарта. Установка галочки "Сохранять рестарт" означает включение режима автоматического сохранения рестарта. При этом, необходимо выбрать один из двух вариантов: сохранять рестарт при останове расчёте или с заданным шагом. Вариант при останове расчёта означает, что каждый раз при остановке расчета проекта (нажатием на Рис. 3 или по факту достижения модельным временем конечного времени расчета), состояние проекта будет сохраняться в файл, указанный в поле "Имя файла".



Рис. 3. Кнопка "Стоп" главного окна и окна проекта

В том случае, если выбран вариант "Сохранять рестарт с шагом", в указанный файл будет автоматически записываться состояние проекта каждые N секунд моделирования, где N – число, установленное в поле "Шаг сохранения рестарта, с", которое становится активным при этом выборе (Рис. 4). Обратите внимание, что секунды отсчитываются не реального времени, а модельного!



Рис. 4. Настройка сохранения рестарта с шагом модельного времени

Еще одной возможностью сохранить рестарт проекта является ручное сохранение с помощью кнопки "Сохранить сейчас", которая становится доступна, когда проект запущен на расчет. То есть в любой момент расчета проекта, можно зайти на вкладку "Управление расчётом" окна "Параметры проекта" и нажать там кнопку "Сохранить сейчас". При этом текущее состояние проекта будет сохранено в файл, указанный в соответствующем поле "Имя файла". Режим ручного сохранения можно использовать как независимо, так и совместно с режимами автоматического сохранения с шагом и/или при остановке. При этом следует иметь в виду, что при включенном сохранении рестарта при останове будет перезаписан рестарт, сделанный вручную, если вы укажете одинаковое имя в обеих полях (т.е. совместное их использование с одинаковым именем файла либо не предполагается, либо до остановки расчета надо скопировать сделанный вручную рестарт в файл(ы) с другим именем).

Загрузка рестарта. На той же вкладке "Управление расчётом" окна "Параметры проекта" есть раздел, посвящённый загрузке рестарта проекта. Этот режим позволяет автоматически при запуске проекта на расчет, либо в ручном режиме в процессе моделирования, загружать состояние проекта из файла рестарта.

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

При загрузке рестарта проекта также есть возможность изменить модельное время, сохраненное в рестарте, на новое, значение которого задается здесь же после установки галочки "Изменять модельное время". Это удобно, например, в случае сохранения стационарного состояния модели (например, номинального состояния установки) и принятии этого момента времени за ноль для последующей серии расчетов.

Пример использования рестарта проекта

Рассмотрим пример использования рестарта проекта. Создадим на базе шаблона модели общего вида простой проект, состоящий из блоков типа Линейный источник, Интегратор и Временной график (см. рисунок Рис. 5).



Рис. 5. Проект для проверки функции рестарта

Не используя функции рестарта, каждый повторный запуск модели на расчет будет начинаться с нулевого момента модельного времени и начального значения параметров модели. В нашем простом случае, начальные условия интегратора нулевые, и график строится из точки (0,0). Произведем настройку рестарта проекта, установив галочку "Сохранять рестарт" и "Загружать рестарт при инициализации" и укажем один и тот же файл, в который будет сохраняться состояние проекта при остановке расчета, и из которого оно будет загружаться при следующем запуске (см. рисунок Рис. 6).

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


Рис. 6. Окно настройки рестарта программы для проверки работы режима

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

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


Рис. 7. Результаты первого запуска модели

Как видно из графика, расчет начался с нулевой секунды (т.к. файла рестарта на диске еще не существовало) и продолжался чуть больше шести секунд. Снова нажмем на "Пуск" - при этом файл рестарта прочитается с диска т.к. только что при останове расчета он был записан. Через некоторое время снова остановим расчет (см. Рис. 8).



Рис. 8. Результаты второго запуска модели

Как видно из графика на рисунке (Рис. 8), расчет начался с момента времени t ≈ 6,5 секунды, то есть с того, на котором завершился предыдущий первый расчет. При этом стоит отметить, что во втором расчете значения функции, в моменты времени предшествующие значению 4, недоступны на графике. То есть при сохранении рестарта, запоминаются только мгновенные значения параметров (время моделирования и значения всех независимых сигналов, т.е. переменные состояния модели). Об этом нужно помнить, если необходимо иметь все значения какой-либо функции во все моменты времени, начиная с нуля.

Прим.:
В последних версиях SimInTech, механизм рестартов был доработан, с возможностью сохранять и загружать данные, накопленные во время расчета в менеджере данных. При этом возможно загружать также "предысторию" расчета для графиков и других объектов менеджера данных. Для этого надо активировать соответствующие галочки в окне настроек рестарта проекта.

Обратите также внимание, что рестарт не сохраняет свойства блоков, или значения выходов у блоков-источников или функциональных блоков (у которых значения выхода явно зависят от значений входов). Если вы в схеме поменяете какую-то константу или коэффициент усиления у блока на новое значение, то при загрузке рестарта, переходной процесс пойдет по-другому, т.к. расчетная схема изменилась в части значений свойств блоков. Также, если выход блока зависит от текущего значения модельного времени (как у блока Линейный источник, например), то если при загрузке рестарта будет указана опция сбрасывать модельное время к 0.0, то при загрузке рестарта такие блоки начнут вычисления с нулевого момента времени, и процесс будет идти не так, как он шел на момент записи рестарта (когда модельное время не было нулевым).

Настройка рестарта пакета

Функционал рестартов доступны не только для отдельного файла проекта, но и для пакета, включающего в себя несколько проектов.

Однако прежде всего нужно отметить, что механизм рестарта всего пакета основан на том, что в каждый проект передаются команды для сохранения либо загрузки рестарта. То есть технически, с каждым проектом происходят те же самые процедуры, что и в случае рестарта автономного проекта. Это значит, что в настройках рестарта каждого из проектов, входящих в составе пакета, для которых необходимо записывать и считывать рестарты, должны быть указаны файлы рестарта. Исключениями могут быть проекты (в пакете проектов), которые не выполняют вычислений, то есть не относятся непосредственно к математической модели. Например, проекты виртуальных панелей управления, или проекты связи с другими устройствами и т.п.

Настройки рестарта пакета находятся в окне "Настройки пакета", вызываемом по нажатию одноименной кнопки в окне пакета (Рис. 9).



Рис. 9. Кнопка "Настройки пакета"

Раздел рестарта пакета состоит из поля базового имени файлов рестартов и двух кнопок: "Сохранить сейчас" и "Загрузить сейчас" (Рис. 10).



Рис. 10. Окно настроек пакета

Таким образом, предполагается сохранение и загрузка рестартов пакета только в ручном режиме, с помощью нажатия соответствующих кнопок. Однако даже сугубо ручной режим настройки имеет несколько вариантов.

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

Сохранение рестарта пакета с использованием базового имени. Базовое имя – общая (базовая) часть имени файлов рестарта всех проектов, входящих в состав пакета. То есть, например, если базовое имя файлов рестарта задано как RES, то имя файла рестарта каждого проекта будет иметь конструкцию: "RES<уникальная часть имени файла рестарта проекта>". При этом базовое имя может стоять не только в начале, но и в любой части имени файла рестарта проекта - расположение базового имени указывается пользователем в настройках рестарта каждого из проектов.

Базовое имя указывается в настройках пакета в поле "Базовое имя файлов рестарта". При этом имя файла рестарта каждого проекта должно содержать специальное слово $PACKRESTART, которое в процессе сохранения (чтения) файла рестарта заменяется на базовое имя файлов рестарта, указанное в настройках пакета.

Пример:

В настройках пакета из двух проектов указано базовое имя файлов рестарта – myrestart (Рис. 11).



Рис. 11. Настройки базового имени рестартов пакета

При этом имена файлов рестарта каждого проекта содержат специальное слово $PACKRESTART и еще свою уникальную часть (рисунки Рис. 12 и Рис. 13).



Рис. 12. Настройка имени файла рестарта первого проекта в составе пакета при использовании базового имени


Рис. 13. Настройка имени файла рестарта второго проекта в составе пакета при использовании базового имени

При таких настройках, каждый раз во время нажатия кнопок "Сохранить сейчас" или "Загрузить сейчас" в окне настройки пакета, будет происходить перезапись или считывание соответственно файлов myrestart_001.rstдля первого проекта и myrestart_002.rst для второго проекта в составе пакета.

Такой механизм удобен тем, что можно прямо во время расчета пакета, изменять базовое имя и сохранять разные версии рестартов с разными базовыми именами. То есть, возвращаясь к примеру с двумя проектами и базовым именем myrestart, можно прямо во время расчета изменить базовое имя, скажем, на myrestart2и получить еще один комплект файлов рестарта для всех проектов. Это значит, что в дополнение к файлам myrestart_001.rstи myrestart_002.rst, будут созданы еще и myrestart2_001.rst и myrestart2_002.rst. Таким образом, удается получить удобный инструмент для записи рестартов всех файлов пакета в разные моменты времени и также быстро загружать любой из них, то есть начинать расчет с любого, ранее записанного, состояния всего пакета.

Настройка рестарта пакета с заменой файлов

Рассмотрим еще один способ - сохранение рестарта пакета с использованием замены файлов.

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

Рассмотрим на примере одного проекта: при времени моделирования 1 час, записываем рестарт проекта в файл restart.rst. Затем копируем его содержимое в файл restart1.rst. Еще через час моделирования опять записываем рестарт проекта в рабочий файл restart.rst (он настроен в проекте) и сторонними средствами копируем его содержимое в файл restart2.rst. И так каждый час. В результате будем иметь рабочий файл restart.rst, на работу с которым настроен проект, и несколько файлов, отражающих состояние системы в конце каждого часа моделирования (restart1.rst, restart2.rst, restart3.rst и т. д.). В случае необходимости возобновить работу с конкретного момента, содержимое соответствующего файла копируется в основной рабочий файл restart.rst и проект запускается на расчет, при этом загружается рестарт из рабочего файла, но туда "подложен" требуемый рестарт.

При использовании сторонних средств групповой работы с файлами (например, bat-файл с необходимыми командами), данный способ может стать удобной альтернативой работе с базовыми именами рестартов проектов пакета.

Сопутствующие материалы

Примеры использования рестартов для теплогидравлических схем приведены в демо-примерах: Рестарты.

Описание особенностей рестартов для кода TPP: Рестарты схемы TPP, их особенности.

Осуществлять запись и чтение рестарта как для проекта, так и для пакета проектов можно средствами языка программирования, см. набор функций: Рестарты (исходные состояния).

loadpackrestart и savepackrestart загружают и сохраняют рестарт для пакета. Функция packrestartname задает или возвращает имя рестарта пакета.

Функции для работы с рестартами проекта: loadprojectrestart, readprojectrestart, saveprojectrestart, writeprojectrestart, writerestartpoint.

Пример использования функции рестарта: Функции рестарта