Руководство системного программиста / Создание собственных блоков для SimInTech |
Для создания собственных блоков при помощи блока «Язык программирования» необходимо:
вставить на схему блок типа «Язык программирования» из закладки «Динамические»;
щёлкнуть по блоку двойным щелчком, откроется редактор скрипта для данного блока;
в появившемся редакторе скрипта блока задать текст программы на встроенном языке программирования для локального моделирования блока и для генерации Си-кода для данного блока. Описание встроенного скриптового языка программирования и основных его синтаксических конструкций доступно в справочной системе SimInTech;
закрыть окно редактора скрипта блока нажав на кнопку «Ok» в панели инструментов редактора скрипта;
изменить имя типа блока и сохранить его в библиотеку, аналогично тому как это делается при сохранении субмодели в библиотеку (см. предыдущий подраздел).
Для задания шаблона Си-кода для данного блока необходимо заполнить следующие текстовые свойства в списке свойств данного блока (это может делаться как через редактор свойств, так и через внутренний скрипт блока, т.е. свойство может динамически формироваться через скрипт):
Заголовок модуля – текст, включаемый в заголовочный файл (*.h) в сгенерированном коде;
Секция декларации переменных – текст, включаемый для декларации локальных переменных в подпрограмме RUN_FUNC шаблона расчётного модуля в самое её начало;
Основная секция кода – текст, включаемый в порядке сортировки блока в подпрограмме RUN_FUNC шаблона расчётного модуля в самое её начало;
Секция запоминания состояний – текст, включаемый в порядке сортировки блока в подпрограмме STATE_FUNC шаблона расчётного модуля в самое её начало. Данный текст вызывается всегда после RUN_FUNC;
Декларации переменных DBM – скрипт на встроенном языке программирования для деклараций переменных, вносимых в файлы описание переменных и соответствующие структуры в заголовочном файле. Для добавления своей переменной состояния или внешней переменной необходимо в данном свойстве вызвать функцию:
AddVar(
0, // 0 - внешняя, 1 - динамическая, 2 - алгебраическая, 3 - внутренее состояние, 4 - константа, 5 - локальная
"%unikname%_my_global_external_var", //Имя переменной
0, // тип данных 0 - вещественная, 1 - двоичная, 2 - целая
[1], //Размерность
floattostr(1), //Значение по умолчанию
"Внешняя переменная", //Описание переменной
2); //Направление 0-вход, 1-выход, 2-двунаправленная
если надо добавить несколько переменных, то AddVar пишется нужное количество раз;
Значения переменных по умолчанию – секция кода, включаемая в файл инициализации начальных переменных (функция INIT_FUNC);
Код вычисления производных –текст, включаемый в порядке сортировки блока в подпрограмме RUN_FUNC шаблона расчётного модуля в ветку, вызываемую по флагу Action = f_GetDeri для вычисления производных динамических переменных;
Код вычисления алгебраических переменных –текст, включаемый в порядке сортировки блока в подпрограмме RUN_FUNC шаблона расчётного модуля в ветку, вызываемую по флагу Action = f_GetAlgFun для вычисления функций алгебраических переменных. В приборах как правило расчёты систем нелинейных уравнений не используются;
Код остановки задачи – текст, включаемый в порядке сортировки блока в подпрограмме RUN_FUNC шаблона расчётного модуля в ветку, вызываемую по флагу Action = f_Stop при полной остановке задачи.
В шаблонах кода могут использоваться следующие специальные символы, которые заменяются при генерации кода на нужные имена:
Спецсимвол | На что заменяется |
%blockname% | уникальное имя блока в пределах данной схемы |
%unikname% | уникальное имя в пределах всего проекта (<префикс><имя алгоритма><blockname>) |
%input:<номер порта>% | имя переменной порта входа блока (начиная с нуля) |
%out:<номер порта>% | имя переменной порта выхода блока (начиная с нуля) |
%value:<имя переменной>% | подстановка значения локальной (или глобальной переменной) |
%prefix% | префикс имени переменных (v) |
%step% | имя переменной "Шаг интегрирования" |
%time% | имя переменной "Время", в секундах |
%component% | имя расчётного модуля |
Пример заполнения через скрипт шаблонов генерации кода для блока «Язык программирования» можно посмотреть если вставить из библиотеки блок на схему.