RUN, INFO-функции блока, типы блоков

Математическая модель блока программно реализована в специальной функции, называемой RUN-функцией блока.

Каждый тип блока имеет свою RUN-функцию, причем эта функция имеет универсальный вид и не привязана к ядру среды моделирования. Это позволяет расширять элементную базу, в том числе со стороны пользователя, создавая новые библиотеки моделей в виде dll-приложений. При этом динамически подгружаемая библиотека представляет собой совокупность RUN-функций блоков, входящих в эту библиотеку, а также специальной функции GetLibInfo, в которой описываются общие характеристики блоков библиотеки (число блоков, их универсальные индексы, число, тип и описание параметров блоков и т.п.).

Графическое изображение блока на схеме, информация о входных и выходных портах, списки свойств и параметров блоков с их описанием и указанием типа данных содержатся в отдельном файле, с расширением *.csl (от английского ClassLib). Файл библиотеки блоков содержит набор блоков, предназначенный для использования в той или иной расчетной схеме для конкретного математического решателя (схема автоматики, схема теплогидравлики, схема электрики и т.д.).

На разных этапах работы со структурно заданной моделью расчетному ядру требуется получать информацию о тех или иных характеристиках математической модели блока в необходимом виде. В SimInTech это требование реализуется путем вызова RUN-функции блока и/или INFO-функции блока с различными флагами. В таблице (*) приводится перечень основных флагов вызова для INFO-функции. В таблице (*) приводится перечень основных флагов вызова для RUN-функции. Информационная функция вызывается на этапе инициализации (как правило, однократно) и предназначена для сообщения расчетному ядру информации о блоке – о его портах, количестве переменных состояния и т.п. RUN-функция вызывается на каждом шаге расчёта.

Таблица 1. Перечень основных флагов вызова INFO-функции блока
Обозначение Действие
i_GetBlockType Размерность входов/выходов блока
i_GetDifCount Число непрерывных состояний блока
i_GetAlgCount Получить число алгебраических переменных
i_GetCount Получить размерности входов\выходов
i_GetInit Получить флаг зависимости выходов от входов
i_GetPropErr Проверка правильности задания параметров блока (перед сортировкой)
i_HaveSpetialEditor RUN-объект имеет специализированный редактор блока
i_GetPostSection Блоку нужна пост-секция для выполнения run-функции
i_ReconnectPorts Действия, выполняемые до сортировки для переназначения портов блока
i_GetSyncPostSection Блоку нужна секция, выполняемая последовательно при синхронном получении данных
i_GetDisCount Получить к-во переменных для дискретных блоков

Таблица 2. Перечень основных флагов вызова RUN-функции блока
Обозначение Действие
f_InitState Запись (инициализация) переменных состояния начальными значениями, перед началом расчёта
f_UpdateOuts Обновить выходы на предварительном шаге
f_GoodStep Обновить выходы на "хорошем" шаге
f_GetDeri Вычислить значения правых частей дифференциальных уравнений
f_GetAlgFun Вычислить значения правых частей алгебраических уравнений
f_SetState Вычислить значения дискретных переменных состояния (после шага интегрирования)
f_UpdateProps Обновить список параметров (с учётом флага изменяемости)
f_UpdateJacoby Обновить выходы блока при расчёте матрицы Якоби (эквивалент f_UpdateOuts с дополни-тельным вызовом обновления дискретных состояний)
f_RestoreOuts Обновить выходы после рестарта (только если очень надо, т.к. выходы всё равно будут за-поминаться)
f_SetAlgOut Выставить выходы блока, содержащих алгебраические переменные
f_InitAlgState Выставить начальное приближение для алгебраические переменных
f_Stop Вызывается при остановке расчёта (конец моделирования)
f_InitObjects Инициализация объектов, массивов и т.д. (сразу после сортировки) (начало моделирования)
f_EndTimeTask Вызывается по окончании выполнения задачи (для проверки оптимизации и т.п.)
Примечание: флаги ниже используются для частотного анализа и расчётов Якобиана
f_GetDisState Получить значения дискретных переменных состояния блока
f_SetDisState Присвоить возмущение для дискретной переменной
f_GetDelayTime Получить время задержки блока (для частотного анализа)

Все блоки, задействованные в расчете, сгруппированы по основным типам (для сортировки, частотного анализа, синтеза) и каждый из блоков относится к одному из 8-ми типов. Перечень приведён в таблице (*)

Таблица 3. Типы блоков
Тип блока Описание
t_none = 0 Сервисный блок, в расчете не участвует
t_src = 1 Блок-источник сигнала
t_fun = 2 Функциональный блок
t_dst = 3 Блок-приемник информации
t_del = 4 Блоки запаздывания
t_ext = 5 Блоки-экстраполяторы
t_der = 6 Блоки-производные
t_imp = 7 Блоки-импортеры данных
t_exp = 8 Блоки-экспортеры данных