Создание собственных блоков при помощи блока "Язык программирования"
Для создания собственных блоков при помощи блока "Язык программирования" необходимо:
-
вставить на схему блок типа "Язык программирования" из закладки "Динамические";
-
щёлкнуть по блоку двойным щелчком, откроется редактор скрипта для данного блока;
-
в появившемся редакторе скрипта блока задать текст программы на встроенном языке программирования для локального моделирования блока и для генерации Си-кода для данного блока. Описание встроенного скриптового языка программирования и основных его синтаксических конструкций доступно в справочной системе 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% | имя расчётного модуля |
Пример заполнения через скрипт шаблонов генерации кода для блока "Язык программирования" можно посмотреть если вставить из библиотеки блок на схему.