Структура и принципы функционирования / Описание блока структурной схемы |
Математическая модель блока программно реализована в специальной функции, называемой RUN-функцией блока.
Каждый тип блока имеет свою RUN-функцию, причем эта функция имеет универсальный вид и не привязана к ядру среды моделирования. Это позволяет расширять элементную базу, в том числе со стороны пользователя, создавая новые библиотеки моделей в виде dll-приложений. При этом динамически подгружаемая библиотека представляет собой совокупность RUN-функций блоков, входящих в эту библиотеку, а также специальной функции GetLibInfo, в которой описываются общие характеристики блоков библиотеки (число блоков, их универсальные индексы, число, тип и описание параметров блоков и т.п.).
Графическое изображение блока на схеме, информация о входных и выходных портах, списки свойств и параметров блоков с их описанием и указанием типа данных содержатся в отдельном файле, с расширением *.csl (от английского ClassLib). Файл библиотеки блоков содержит набор блоков, предназначенный для использования в той или иной расчетной схеме для конкретного математического решателя (схема автоматики, схема теплогидравлики, схема электрики и т.д.).
На разных этапах работы со структурно заданной моделью расчетному ядру требуется получать информацию о тех или иных характеристиках математической модели блока в необходимом виде. В SimInTech это требование реализуется путем вызова RUN-функции блока и/или INFO-функции блока с различными флагами. В таблице (*) приводится перечень основных флагов вызова для INFO-функции. В таблице (*) приводится перечень основных флагов вызова для RUN-функции. Информационная функция вызывается на этапе инициализации (как правило, однократно) и предназначена для сообщения расчетному ядру информации о блоке – о его портах, количестве переменных состояния и т.п. RUN-функция вызывается на каждом шаге расчёта.
Обозначение | Действие |
i_GetBlockType | Размерность входов/выходов блока |
i_GetDifCount | Число непрерывных состояний блока |
i_GetAlgCount | Получить число алгебраических переменных |
i_GetCount | Получить размерности входов\выходов |
i_GetInit | Получить флаг зависимости выходов от входов |
i_GetPropErr | Проверка правильности задания параметров блока (перед сортировкой) |
i_HaveSpetialEditor | RUN-объект имеет специализированный редактор блока |
i_GetPostSection | Блоку нужна пост-секция для выполнения run-функции |
i_ReconnectPorts | Действия, выполняемые до сортировки для переназначения портов блока |
i_GetSyncPostSection | Блоку нужна секция, выполняемая последовательно при синхронном получении данных |
i_GetDisCount | Получить к-во переменных для дискретных блоков |
Обозначение | Действие |
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-ми типов. Перечень приведён в таблице (*)
Тип блока | Описание |
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 | Блоки-экспортеры данных |