×
 

2.2 Генерация кода Си и создание DLL-модуля

Созданный в среде SimInTech алгоритм управления на базе логики конечных автоматов может быть автоматически преобразован в код Си и далее в DLL-модуль. Рассмотрим пример с управлением нагревателем.
Сохраните проект под именем Нагреватель.prt.
Для создания кода Си, необходимо разделить общую модель на модель объекта и модель системы управления. Если на этапе подготовки модели модель управления была упакована в субструктуру «контроллер нагревателя», то достаточно вынести данную структуру в отдельный проект.
Создайте новый проект с именем «Контроллер_dll», и сохраните его в той же директории. скопируйте в него блок «контроллер нагревателя».
Для создания программы нам необходимо использовать специальные блоки входа – выхода.  Эти блоки «входной контакт S3» (см. рис. 11) и «выходной контакт S3» (см. рис. 12), расположенные в закладке «Данные».
 
Рис. 11. Блок входной контакт S3
 
Рис. 12. Блок входной контакт S3
 
Разместите на схеме два блока «входной контакт S3» и два блока «выходной контакт S3» и соедините их с блоком контроллер нагревателя. Схема должна выглядеть как показано на рис. 13.
 
Рис. 13. Схема алгоритмов контроллера нагревателя в отдельном проекте
 
Для настройки входов войдите в свойства блоков (двойной клик на блоке) и настройте параметры входных портов следующим образом (см. рис. 14):
−    «Имя контакта» - input:0 для первого блока и input:1 для второго блока;
−    «Тип контакта» - Float.
 
Рис. 14. Настройка входного сигнала в программу
 
Для настройки выходов войдите в свойства блоков и настройте параметры выходных портов следующим образом (см. рис. 15):
−    «Имя контакта» - out:0 для первого блока и out:1 для второго блока;
−    «Тип контакта» - Float.
 
Рис. 15. Настройка сигналов выходов из программы управления
 
Для настройки имени программы или DLL-модуля нажмите кнопку «Параметры расчета» на схемном окне, и в появившемся диалоговом окне, задайте имя будущей программы.
В параметре «Имя (имена) алгоритмов» укажите controller_dll. (см. рис. 16).
 
Рис. 16. Настройка имени программы
 
Сохраните проект под именем контроллер_dll.prt.
Настройки имени программы входов и выходов из субмодели достаточно, чтобы SimInTech мог генерировать код из модели. Для настройки генератора кода в главном меню программы выберите пункт «Кодогенератор». В диалоговом окне перейдите на закладку «Настройки» и выберите директорию шаблона кода «%codetemplates%VC2022_Euler\» (см. рис. 17).
 
Рис. 17. Настройка шаблона генерации кода
 
Для генерации кода существует набор подготовленных шаблонов, настроенных под различные компиляторы. Разработчики SimInTech предлагают несколько вариантов шаблонов генерации кода для разных аппаратных платформ и ОС, в их числе генерация кода под Windows, Linux, QNX. С сайта разработчиков можно скачать набор инструментов MinGW для создания исполняемых файлов и библиотек для Windows. В случае, если не удалось найти дистрибутив интересующего вас компилятора, то информацию по актуальных источниках можно получить на официальных сайтах разработчика SimInTech https://3v-services.com/ и https://simintech.ru/ .
Для использования создаваемого DLL-модуля с программным комплексом EULER применим шаблон для компилятора Visual Studio 2022 (для работы достаточно Community-версии). Версию Visual Studio Community 2022, можно скачать с официального сайта https://visualstudio.microsoft.com/ru/vs/community/.
Основной текст программы создается в виде чистого Си кода, соответствующего стандарту ANSI. Этот текст размещается в заранее подготовленный шаблон для используемого компилятора.
Для генерации кода в главном меню программы выберете пункт «Инструменты» подпункт «Сгенерировать программу». Если выбрать этот пункт, то система сообщит об ошибке, в нижней части схемного окна появится соответствующее сообщение. Двойной клик на строке ошибки приводит к переходу на субмодель, где произошла ошибка и выделение блока, для которого не может быть сгенерирован программный код (см. рис. 18).
 
Рис. 18. Сообщение об ошибке и выделение блока с ошибкой
 
В данном случае ошибка связана с тем, что в общем проекте мы использовали глобальны сигнал flash_time, для изменения времени срабатывания перехода из состояния включен в состояние выключен и обратно. После того, как мы перенесли часть схемы в новый проект, где данного сигнала нет, SimInTech показывает ошибку. Исправляется данная ошибка добавлением этого сигнала в новый проект. В главном меню главного окна SimInTech выберите пункт «Сервис» подменю «Сигналы» (см. рис. 19).
 
Рис. 19. Вызов настройки сигналов проекта
 
Будет вызвано окно задания списка сигналов (рис. 20), в нем можно задать сигналы проекта, доступ к которым имеют все используемые в проекте блоки.
Создайте новый сигнал (кнопка «добавить» внизу окна), задайте имя flash_time. Режим установите в «Ненаправленный» и задайте значение по умолчанию - 5 (см. рис. 20).
 
Рис. 20. Добавление сигнала проекта
 
Закройте диалоговое окно кнопкой «ОК» и повторите процесс генерации кода в главном меню программы выберете пункт «Инструменты» подпункт «Сгенерировать программу». Если до этого вы выполнили все пункты правильно, то в окне сообщений появится следующий текст (см. рис. 21):
 
Рис. 21. Окно сообщений о проекте
 
[Ошибка]:  "Модуль генерации кода не зарегистрирован. Максимальное допустимое количество блоков для схемы: 200"
[Ошибка]:  "Количество блоков в проекте: 56"
 
Первые две строки сообщений, сообщают об ошибке - не зарегистрированном модуле генерации кода. В незарегистрированном виде модуль позволяет генерировать код для схем, количество блоков которых не превышает 200. Рассматриваемый в примере проект содержит 56 блоков, поэтому происходит генерация кода.
 
[Информация]:  "Исходный текст сохранён в c:\simintech\demo\automatic\Карты состояний - state flow\Контроллер нагревателя\controller_dll.inc"
[Информация]:  "Секция состояний сохранена в c:\simintech\demo\automatic\Карты состояний - state flow\Контроллер нагревателя\controller_dll_state.inc"
[Информация]:  "Заголовок сохранён в c:\simintech\demo\automatic\Карты состояний - state flow\Контроллер нагревателя\controller_dll.h"
[Информация]:  "Заголовок сохранён в c:\simintech\demo\automatic\Карты состояний - state flow\Контроллер нагревателя\controller_dll_init.inc"
[Информация]:  "Исходные тексты программы сгенерированы"
 
Следующие сообщения информируют пользователя, о том, что созданы файлы исходных кодов и где они расположены. Если иное не указано специально в настройках кодогенератора, то файлы сохраняются в той же директории где сохранен проект.
 
[Информация]:  "Используется шаблон кода C:\SimInTech\bin\CodeTemplates\VC2015\"
[Информация]:  "Запуск сборочного скрипта compile.bat "c:\simintech\demo\automatic\Карты состояний - state flow\Контроллер нагревателя\controller_dll" 192.168.1.1 root root"
 
Далее SimInTech сообщает какой шаблон кода используется (в какой директории он находится).
Последняя строка сообщает, о том, запущен скрипт сборки controller_dll. Если программная среда Visual Studio 2022 установлена и настроена правильно, то открывается проводник, где видно, что все файлы находятся в той же папке где и исходный проект (см. рис. 22).
 
Рис. 22. Файлы, созданные генератором кода и компилятором