Создание собственных блоков при помощи блока "Язык программирования"

Для создания собственных блоков при помощи блока "Язык программирования" необходимо:

  • вставить на схему блок типа "Язык программирования" из закладки "Динамические";

  • щёлкнуть по блоку двойным щелчком, откроется редактор скрипта для данного блока;

  • в появившемся редакторе скрипта блока задать текст программы на встроенном языке программирования для локального моделирования блока и для генерации Си-кода для данного блока. Описание встроенного скриптового языка программирования и основных его синтаксических конструкций доступно в справочной системе 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% имя расчётного модуля

Пример заполнения через скрипт шаблонов генерации кода для блока "Язык программирования" можно посмотреть если вставить из библиотеки блок на схему.