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

3.1 Генерация кода Си и создание DLL-библиотеки

Созданный в среде SimInTech алгоритм управления на базе логики конечных автоматов может быть автоматически преобразован в код Си и далее в DLL-библиотеку. Рассмотрим пример с управлением нагревателем.
Сохраните проект под именем Нагреватель.prt
Для создания кода Си, необходимо разделить общую модель на модель объекта и модель системы управления. Если на этапе подготовки модели модель управления была упакована в субструктуру «контроллер нагревателя», то достаточно вынести данную структуру в отдельный проект.
Создайте новый проект с именем «Контроллер_dll», и сохраните его в той же директории. скопируйте в него блок «контроллер нагревателя».
Для создания программы нам необходимо использовать специальные блоки входа – выхода.  Эти блоки «входной контакт S3» (рис.4) и «выходной контакт S3» (рис.5), расположенные в закладке «Данные».
 
Рис. 4. Блок входной контакт S3
 
Рис. 5. Блок входной контакт S3
 
Разместите на схеме два блока «входной контакт S3» и два блока «выходной контакт S3» и соедините их с блоком контроллер нагревателя. Схема должна выглядеть как показано на рис.6.
 
Рис. 6. Схема алгоритмов контроллера нагревателя в отдельном проекте
 
Для настройки входов войдите в свойства блоков (двойной клик на блоке) и настройте параметры входных портов следующим образом (рис.7):
      «Имя контакта» - input:0 для первого блока и input:1 для второго блока;
      «Тип контакта» - Float.
 
Рис. 7. Настройка входного сигнала в программу
 
Для настройки выходов войдите в свойства блоков и настройте параметры выходных портов следующим образом (рис.8):
      «Имя контакта» - out:0 для первого блока и out:1 для второго блока;
      «Тип контакта» - Float.
 
Рис. 8. Настройка сигналов выходов из программы управления
 
Для настройки имени программы или динамической библиотеки нажмите кнопку «Параметры расчета» на схемном окне, и в появившемся диалоговом окне, задайте имя будущей программы. В параметре «Имя (имена) алгоритмов» укажите controller_dll. (рис.9).
 
 
Рис. 9. Настройка имени программы
 
Сохраните проект под именем контроллер_dll.prt.
Настройки имени программы входов и выходов из субмодели достаточно, чтобы SimInTech мог генерировать код из модели. Для настройки генератора кода в главном меню программы выберите пункт «Кодогенератор». В диалоговом окне перейдите на закладку «Настройки» и выберите директорию кода шаблона «%codetemplates%VC2015\» (рис.10).
 
Рис. 10. Настройка шаблона генерации кода
 
Для генерации кода существует набор подготовленных шаблонов, настроенных под различные компиляторы. Разработчики SimInTech предлагают несколько вариантов шаблонов генерации кода для разных аппаратных платформ и ОС, в их числе генерация кода под Windows, Linux, QNX. С сайта разработчиков можно скачать набор инструментов MinGW для создания исполняемых файлов и библиотек по Windows. В случае, если не удалось найти дистрибутив интересующего вас компилятора, то информацию по актуальных источниках можно получить на официальных сайтах разработчика SimInTech https://3v-services.com/ и https://simintech.ru/ .
Для использования создаваемой DLL-библиотеки с программным комплексом EULER применим шаблон для компилятора Visual Studio 2015 (для работы достаточно Community-версии). Версию Visual Studio Community 2015, можно скачать с официального сайта https://beta.visualstudio.com/ru/ 
Основной текст программы создается в виде чистого Си кода, соответствующего стандарту ANSI. Этот текст размещается в заранее подготовленный шаблон для используемого компилятора.
Для генерации кода в главном меню программы выберете пункт «Инструменты» подпункт «Сгенерировать программу». Если выбрать этот пункт, то система сообщит об ошибке, в нижней части схемного окна появится соответствующее сообщение. Двойной клик на строке ошибки приводит к переходу на субмодель, где произошла ошибка и выделение блока, для которого не может быть сгенерирован программный код (рис.11).
 
Рис. 11. Сообщение об ошибке и выделение блока с ошибкой
 
В данном случае ошибка связана с тем, что в общем проекте мы использовали глобальны сигнал flash_time, для изменения времени срабатывания перехода из состояния включен в состояние выключен и обратно. После того, как мы перенесли часть схемы в новый проект, где данного сигнала нет, SimInTech показывает ошибку. Исправляется данная ошибка добавлением этого сигнала в новый проект. В главном меню главного окна SimInTech выберите пункт «Сервис» подменю «Сигналы» (рис.12).
 
Рис. 12. Вызов настройки сигналов проекта
 
Будет вызвано окно задания списка сигналов (рис.13), в нем можно задать сигналы проекта, доступ к которым имеют все используемые в проекте блоки.
Создайте новый сигнал (кнопка «добавить» внизу окна), задайте имя flash_time. Режим установите в «Ненаправленный» и задайте значение по умолчанию - 5 (рис.13).
 
Рис. 13. Добавление сигнала проекта
 
Закройте диалоговое окно кнопкой «ОК» и повторите процесс генерации кода в главном меню программы выберете пункт «Инструменты» подпункт «Сгенерировать программу». Если до этого вы выполнили все пункты правильно, то в окне сообщений появится следующий текст (рис.14):
 
Рис. 15. Окно сообщений о проекте
 
[Ошибка]:  "Модуль генерации кода не зарегистрирован. Максимальное допустимое количество блоков для схемы: 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 2015 установлена и настроена правильно, то открывается проводник, где видно, что все файлы находятся в той же папке где и исходный проект. (рис.16).
 
Рис. 16. Файлы, созданные генератором кода и компилятором