12
Руководство пользователя
×

3.3 Особенности генерации кода Си в SimInTech

В рассматриваемом примере, несоответствие работы кода исходной модели связано с особенностями кодогенератора. В среде SimInTech в режиме моделирования любое свойство может быть задано как переменная и рассчитано с использованием скриптового языка, что и сделано при создании конечного автомата, управляющего индикацией. Вовремя моделирования возможно любое изменение свойств блока, математическое ядро SimInTech это учитывает в процессе сортировки блоков и моделирования. Схема работы блока «Выдержка состояния» в среде SimInTech приведена на рис.22.
 
 
Рис. 22. Схема работы блока «Выдержка состояния» в среде SimInTech
 
Возможность изменения параметров «на ходу» значительно повышает гибкость системы, позволяет производить подбор параметров средствами оптимизации SimInTech, а также производить настройку регуляторов на различных режимах модели.
При создании сертифицированного кода Си необходимо иметь однозначное соответствие между входами и выходами блока, при заданных параметрах. При генерации кода Си возможность изменять параметры приводит к тому, что возникает неопределенность с формированием кода, в котором должно быть четкое разделение между входными величинами, свойствами блоков и результатом вычислений функции блока. Для устранения этой неопределённости все свойства блока при генерации кода преобразуются в константы. Схема работы блока «Выдержка состояния» в коде Си приведена на рис.23.
 
Рис. 23. Схема работы блока «Выдержка состояния» в коде Си
 
Для того, чтобы изменять свойство блока при работе в коде Си необходимо явно указать, что сигнал flash_time изменяется в ходе работы кода, для генератора кода данное свойство превращается в обычный вход, и неопределённость со свойствами блока снимается. Схема работы блока «Выдержка состояния» будет выглядеть так, как представлено на рис.24.
 
Рис. 24. Схема работы блока с переменным временем выдержки в коде Си
 
Для устранения возникшей некорректности необходимо исправить контроллер с учетом выше изложенных особенностей генерации кода Си в SimInTech.
Откройте проект Контроллер_ dll.prt и перейдите двойным кликом в субмодель контроллер нагревателя, далее в состояние включен, удалите из схемы блок «Язык программирования». Поместите на схему блок «Запись в список сигналов» из закладки «Данные» (рис.25).
 
Рис. 25. Схема состояния «выключен» после исправления
 
В свойства блока «Запись в список сигналов» укажите имя сигнала – flash_time. (рис.26)
 
Рис. 26. Свойства блока «Запись в список сигналов»
 
Повторите данную процедуру для состояния «включен». Можно скопировать два блока «Константа» и «Запись в список сигналов» и вставить их в блоке состояния включен. На вход в блок подайте константу 1 (время переключения в режим нагрева). Схема блока состояния «включен» должна выглядеть как показано на рис.27.
 
Рис. 27. Схема работы в состоянии «включен».
 
Таким образом мы явно указали, что хотим менять сигнал из схемы состояния при генерации кода. Перейдем к настройке конечного автомата индикации. Войдите в субмодель автомата индикации и далее в состояние «выключен». Удалите блок «Выдержка состояния» и установите блок «Переменная выдержка состояния» из закладки «Конечные автоматы». Поместите так же на схему блок «Чтение из списка сигналов» из закладки «Данные». Установите в качестве имени сигнала flash_time. Схема должна выглядеть как показано на рис.28.
 
Рис. 28. Схема состояния «включен» в автомате работы таймера
 
Повторите тоже самое для состояние «выключен», схема должна выглядеть так, как показано на рис.29.
 
Рис. 29. Схема состояния «выключен».
 
Таким образом, мы явно указываем генератору кода, что хотим менять значение времени выдержки в состоянии (интервал мигания индикатора).
Сохраните проект.
Повторите процесс генерации кода, в главном меню программы выберете пункт «Инструменты» подпункт «Сгенерировать программу». Если все изменения модели выполнены корректно, то будет сформирована dll-библиотека, созданная из кода Си.
Откройте проект Нагреватель_загрузчик_dll. Запустите его на расчет и убедитесь, что теперь автомат индикации работает правильно и меняет частоту индикации в зависимости от режима. (рис.30).
 
Рис. 30. Работа нагревателя с контроллером из dll-библиотеки