Как создавать блоки с помощью генератора кода на языке Си?

В данном разделе с помощью встроенного в программное обеспечение SimInTech генератора кода на языке Си будет разработан новый блок, который представляет собой ПИД-регулятор. ПИД-регулятор часто используется в системах автоматического управления для формирования управляющего сигнала с целью получения необходимых точности и качества переходного процесса. В SimInTech среди стандартных блоков ПИД регулятора нет, поэтому создание такого блока значительно упрощает проектирование АСУ ТП. Достигается существенный прирост скорости расчета, а также возможность по одному и тому же алгоритму рассчитывать несколько типовых объектов.

Прим.: Перед тем как приступить к созданию блоков с помошью генератора кода на языке Си рекомендуется ознакомиться с разделом справочной системы Введение в SimInTech.

Разработка схемы-шаблона ПИД регулятора

Создание нового проекта

Требуется разработать схему-шаблон ПИД регулятора, для которого будем генерировать код на языке Си. Для этого необходимо создать новый проект. Для создания нового проекта обще технического шаблона необходимо выполнить следующие действия:
  1. В главном окне SimInTech выбрать пункт «Файл» подпункт «Новый проект».
  2. В выпадающем меню выбрать пункт «Схема модели общего вида».

Откроется новое окно проекта «Схема модели общего вида».

Требуется сохранить созданный проект. Для этого:
  1. В главном окне войти в меню «Файл», выбрать подпункт «Сохранить проект как...».
  2. В появившемся окне выбрать или при необходимости создать папку, в которую будет сохранен данный проект.
  3. В появившемся окне в поле «Имя файла» указать желаемое имя проекта, либо оставить имя проекта по умолчанию и нажать на кнопку «Сохранить».

Добавление блоков на схему

Требуется поместить на схему следующие блоки:
  • 2 блока « href="../../../10_biblioteki_blokov/avtomatika/Signaly/3001.dita" format="xml">Входной контакт» из вкладки «Сигналы» - данные блоки необходимы для считывания переменных из исполнительной системы.
  • 1 блок « href="../../../10_biblioteki_blokov/avtomatika/Signaly/3002.dita" format="xml">Выходной контакт» из вкладки «Сигналы» - данный блок необходим для записи рассогласования ПИД-регулятора для отправки в исполнительный механизм.
Прим.: В рамках текущей задачи сгенерированный код будет применяться для создания нового блока в SimInTech, поэтому лучше использовать блоки « href="../../../10_biblioteki_blokov/avtomatika/Signaly/1020.dita" format="xml">Чтение из списка сигналов» и « href="../../../10_biblioteki_blokov/avtomatika/Signaly/1021.dita" format="xml">Запись в список сигналов» из вкладки «Сигналы», которые осуществляют запись и считывание локальных сигналов модели или сигналов из базы данных. Однако, для демонстрации возможностей SimInTech в генерации кода и применении его, например, для стыковки с программным обеспечением контроллера, используются блоки «Входной контакт» и «Выходной контакт», которые при локальном моделировании эквивалентны константам.

На первый вход блока «Входной контакт» будет подаваться уставка для регулируемой величины, а на второй вход блока «Входной контакт» фактическое значение величины, взятое с соответствующего датчика.

Также следует отметить, что в рамках данной задачи реализуется векторный ПИД-регулятор, что дает возможность одновременной обработки нескольких сигналов на одном блоке.

После размещения на схеме вышеуказанных блоков схема должна принять следующий облик:

Рисунок 1. Рабочая область проекта с размещенными блоками.

Задание свойств блоков

Необходимо задать свой блокам на схеме:
  1. Для верхнего блока «Входной контакт» оставить свойство «Имя контакта» равным «input:0».
  2. Для нижнего блока «Входной контакт» установить свойство «Имя контакта» равным «input:1».
  3. Для блока «Выходной контакт» оставить свойство «Имя контакта» равным «out:0».

    Рисунок 2. Рабочая область проекта с заданными именами для входных и выходных контактов

Входные блоки должны обладать возможностью векторной обработки сигналов и принимать тип данных «Float», векторный входной сигнал должен быть из 10 элементов с начальными значения для каждого входного сигнала равным «0», для этого требуется для двух блоков «Входной контакт» задать следующие свойства (Рисунок 3):
  • «Тип контакта» - «Float».
  • «Операция для нескольких контактов» - «Операция ИЛИ».
  • «Значение по умолчанию» - «10#0» .
При локальном моделировании блок будет выдавать на схему константу.

Рисунок 3. Окно «Свойства» верхнего блока «Входной контакт»

Для обеспечения возможности обработки векторных сигналов необходимо для блока «Выходной контакт» установить свойство «Операция для нескольких контактов» равным «Копирование» (Рисунок 4).

Рисунок 4. Окно «Свойства» блока «Выходной контакт»

Задание свойств для элементов ПИД-регулятора

Следующим шагом будет обеспечение возможности задания свойств для каждого элемента ПИД-регулятора. К ним относятся:
  • коэффициент усиления для пропорциональной составляющей регулятора;
  • коэффициент усиления для интегральной составляющей регулятора;
  • начальное условие для интегральной составляющей регулятора;
  • коэффициент усиления для дифференциальной составляющей регулятора;
  • постоянная времени для дифференциальной составляющей регулятора;
  • начальное условие для дифференциальной составляющей регулятора.
Для этого необходимо разместить блок «Субмодель» из вкладки «Субструктуры» и добавить ему подпись «Входные параметры».

Рисунок 5. Рабочая область проекта с добавленным блоком «Субмодель» с подписью «Входные параметры»

Войти в блок «Субмодель» с подписью «Входные параметры» двойным нажатие правой кнопкой мыши по блоку. Поскольку ПИД-регулятор имеет шесть свойств, описанных выше, то требуется добавить на схему 6 блоков «Входной контакт» из вкладки «Сигналы».

Первый входной контакт должен считывать извне коэффициент усиления для пропорциональной составляющей. Этот коэффициент будет являться свойством создаваемого блока. Для этого необходимо в блоке «Входной контакт» установить свойство «Имя контакта» равным «Property:P», что означает, что данный блок будет считывать значение свойства создаваемого звена с именем «P».

Рисунок 6. Окно «Свойства» блока «Входной контакт» внутри субмодели с подписью «Входные параметры»

Для остальных блоков «Входной контакт» установить свойство «Имя контакта» равным: «Property:I», «Property:I0», «Property:D», «Property:Td», «Property:D0». А также установить следующие свойства:
  • «Тип контакта» - «Float».
  • «Операция для нескольких контактов» - «Операция ИЛИ».

Для блоков «Входной контакт» c установленным свойством «Имя контакта» равным «Property:P», «Property:I», «Property:D», «Property:Td» установить для свойства «Значение по умолчанию» формулу «10#1».

Для остальных блоков «Входной контакт» c установленным свойством «Имя контакта» равным «Property:I0», «Property:D0» установить для свойства «Значение по умолчанию» формулу «10#0»

Добавить на схему 6 блоков « href="../../../10_biblioteki_blokov/avtomatika/Substruktury/1008.dita" format="xml">В память» из вкладки «Субструктуры». Соединить блоки линиями связи «href="../../../10_biblioteki_blokov/avtomatika/Substruktury/1008.dita" format="xml">В память» и задать для свойства «Имена контактов» соответствующие имена из рисунка (Рисунок 7).

Рисунок 7. Рабочая область субмодели с подписью «Входные параметры»

Добавление составляющих ПИД-регулятора

Выйти из субмодели с подписью «Входные параметры» выполнив двойное нажатие правой кнопкой мыши по пустому месту окна схемы. Добавить блок « href="../../../10_biblioteki_blokov/avtomatika/Operatory/0038.dita" format="xml">Сравнивающее устройство» из вкладки «Операторы» перенесем на схему блок. Этот блок является векторным и будет вычислять рассогласование между заданной извне уставкой и показанием датчика. Соединить блоки линиями связи согласно рисунку (Рисунок 8).

Рисунок 8. Рабочая область проекта с добавленным блоком «Сравнивающее устройство»

Добавить на схему следующие блоки:
  • 1 блок «Векторный усилитель» из вкладки «Векторные».
  • 1 блок «Интегратор» из вкладки «Динамические».
  • 1 блок «Инерционно-дифференцирующее звено » из вкладки «Динамические».
  • 6 блоков « href="../../../10_biblioteki_blokov/avtomatika/Substruktury/1009.dita" format="xml">Из памяти» из вкладки «Субструктуры».
  • 6 блоков « href="../../../10_biblioteki_blokov/avtomatika/Substruktury/3016.dita" format="xml">Блок записи свойств» из вкладки «Субструктуры».
  • 1 блок « href="../../../10_biblioteki_blokov/avtomatika/Operatory/0024.dita" format="xml">Сумматор» из вкладки «Операторы».
Увеличить количество входных сигналов для блока «Сумматор» установив в свойствах блока «Весовые множители для каждого из входов» значение «[1 , 1 , 1]». Разместить и соединить, а также задать для блоков « href="../../../10_biblioteki_blokov/avtomatika/Substruktury/1009.dita" format="xml">Из памяти» значение свойства «Имена контактов» согласно рисунку (Рисунок 9).

Рисунок 9. Схема ПИД-регулятора

Однако, такое построение схемы-шаблона имеет один существенный недостаток, связанный с заданием начальных условий для блоков «xref href="../../../10_biblioteki_blokov/avtomatika/Dinamicheskie/DAT_0027.dita" format="xml">Интегратор» и «xref href="../../../10_biblioteki_blokov/avtomatika/Dinamicheskie/DAT_0032.dita" format="xml">Инерционно-дифференцирующее звено». Начальное условие – это свойство, которое используется только при инициализации модели. Поэтому в качестве начальных условий для вышеупомянутых блоков будут приняты величины, заданные в свойствах звеньев по умолчанию, а не те значения, которые задаются извне.
  • Если задавать начальные условия для блоков «Интегратор» и «Инерционно-дифференцирующее звено» нет необходимости, то схема ПИД-регулятора остается прежней (Рисунок 9).

  • Если есть необходимость задавать начальные условия, то:
    • во-первых, сгенерированный программой код на языке Си можно править, воспользовавшись соответствующей средой разработки.
    • во-вторых, среди стандартных блоков в SimInTech есть звено « href="../../../10_biblioteki_blokov/avtomatika/Dinamicheskie/DAT_0114.dita" format="xml">Интегратор с изменяемыми н.у», использование которого поможет решить появившуюся проблему.

Изменение схемы ПИД-регулятора

Изменить схему ПИД-регулятора, добавив и удалив следующие блоки:
  • Добавить 3 блока «Субмодель» из вкладки «Субструктуры».
  • Удалить блок «Векторный усилитель».
  • Удалить блок «Интегратор».
  • Удалить блок «Инерционно-дифференцирующее звено ».
  • Удалить блоки «Из памяти».
  • Удалить блоки «Блок записи свойств».
Разместить блоки и добавить подписи для каждого добавленного блока «Субмодель» согласно рисунку (Рисунок 10)

Рисунок 10. Рабочая область проекта с измененной схемой

Войти в блок «Субмодель» с подписью «П», который будет выполнять функцию пропорционального звена. Для реализации пропорционального усиления входного сигнала необходимо добавить следующие блоки:
  • 1 блок «Порт входа», 1 блок «Порт выхода» и 1 блок «Из памяти» из вкладки «Субструктуры»;
  • 1 блок «Перемножитель» из вкладки «Операторы».
Двойным нажатием на блок «Порт входа» открыть окно «Порт субмодели» и изменить имя порта на «Вход», аналогично изменить имя порта для блока «Порт выхода» на «Выход». Для блока «Из памяти» установить приемник «P» для источника «P». Разместить блоки и соединить их линиями связи согласно рисунку (Рисунок 11).

Рисунок 11. Рабочая область субмодели с подписью «П» с пропорциональной составляющей регулятора

Пропорциональный элемент ПИД-регулятора создан. Выйти из субмодели с подписью «П». Теперь субмодель «П» имеет два порта «Вход» и «Выход».

Войти в блок «Субмодель» с подписью «И», который будет выполнять функцию интегрирующего звена. Динамика интегрирующего звена описывается следующим уравнением:

где xi(t) – вектор входных сигналов, yi(t) – вектор выходных сигналов, ki – вектор коэффициентов усиления.

Для реализации интегрирующего элемента регулятора необходимо добавить следующие блоки:
  • 1 блок «Порт входа», 1 блок «Порт выхода» и 1 блок «Из памяти» из вкладки «Субструктуры»;
  • 1 блок «Перемножитель» из вкладки «Операторы»;
  • 1 блок «Интегратор с изменяемыми н.у.» из вкладки «Динамические».
Изменить имя порта для блока «Порт входа» на «Вход» и изменить имя порта для блока «Порт выхода» на «Выход». Для блока «Из памяти» установить приемник «I» для источника «I». Разместить блоки и соединить их линиями связи согласно рисунку (Рисунок 12).

Рисунок 12. Рабочая область субмодели с подписью «И» c интегрирующей составляющей регулятора

Интегрирующий элемент ПИД-регулятора создан. Выйти из субмодели с подписью «И». Теперь субмодель «И» имеет два порта «Вход» и «Выход».

Осталось предусмотреть возможность задания начальных условий для интегрирующего звена. Начальные условия для интегратора задаются с помощью блока «Интегратор с изменяемыми н.у» путем установки следующего алгоритма: как только управляющий сигал становится больше 0.5, значение, накопленное интегратором, сбрасывается, и на выход подается величина новых начальных условий.

Для этого необходимо изменить схему субмодели с подписью «Входные параметры». Войти в блок «Субмодель» с подписью «Входные параметры». Для генерации управляющего сигнала для интегратора необходимо добавить следующие блоки:
  • 1 блок «xref href="../../../10_biblioteki_blokov/avtomatika/Istochniki/0000.dita" format="xml">Часы» и 1 блок «xref href="../../../10_biblioteki_blokov/avtomatika/Istochniki/0208.dita" format="xml">Шаг интегрирования» из вкладки «Источники»;
  • 1 блок «xref href="../../../10_biblioteki_blokov/avtomatika/Logicheskie/0068.dita" format="xml">МЕНЬШЕ ИЛИ РАВНО» из вкладки «Логические»;
  • 1 блок «xref href="../../../10_biblioteki_blokov/avtomatika/Substruktury/1008.dita" format="xml">В память» из вкладки «Субструктуры»;
  • 1 блок «xref href="../../../10_biblioteki_blokov/avtomatika/vektornye/0105.dita" format="xml">Размножитель» из вкладки «Векторные».
Изменить в свойствах блока «В память» свойство «Имена контактов» на «time». Разместить и соединить блоки линиями связи согласно рисунку (Рисунок 13). Алгоритм добавленной схемы следующий: пока модельное время меньше шага интегрирования (или равно ему), сигнал остается равным 1.

Рисунок 13. Рабочая область субмодели с подписью «Входные параметры» с добавленной схемой задания начальных условий интегратора

Поскольку векторный сигнал имеет 10 составляющих элементов, то необходимо установить размерность управляющего сигнала. Для этого необходимо в блоке «Размножитель» установить свойство «Коэффициенты размножения» равным «10#1», что соответствует вектору «[1,1,1,1,1,1,1,1,1,1]».

Выйти из субмодели с подписью «Входные параметры» и войти субмодель с подписью «И». Добавить на схему еще два блока «Из памяти». Для блоков «Из памяти» установить приемник «time» для источника «time» и установить приемник «I0» для источника «I0».Разместить и соединить блоки линиями связи согласно рисунку (Рисунок 14)

Рисунок 14. Рабочая область субмодели с подписью «И» с интегральной составляющей регулятора с возможностью задания н.у.

Интегрирующий элемент ПИД-регулятора с возможностью задания начальных условий создан. Выйти из субмодели с подписью «И».

Войти в блок «Субмодель» с подписью «Д», который будет выполнять функцию инерционно-дифференцирующее звена. Динамика инерционно-дифференцирующее звена описывается следующим уравнением:

где xi(t) – вектор входных сигналов, yi(t) – вектор выходных сигналов, ki – вектор коэффициентов усиления, Ti – вектор постоянных времени.

Блок инерционно-дифференцирующего звена ПИД-регулятора, по аналогии с интегрирующим звеном, должен иметь возможность задания начальных условий. Для реализации инерционно-дифференцирующего элемента регулятора с возможностью задания н.у. необходимо добавить следующие блоки:
  • 1 блок «Порт входа», 1 блок «Порт выхода» и 5 блоков «Из памяти» из вкладки «Субструктуры»;
  • 3 блока «Перемножитель», 2 блока «Делитель», 1 блок «Сравнивающее устройство» и 1 блок «Сумматор» из вкладки «Операторы»;
  • 1 блок «Интегратор с изменяемыми н.у.» и 1 блок «Производная» из вкладки «Динамические».
  • 1 блок «Задержка на шаг интегрирования» из вкладки «Нелинейные».
Изменить имя порта для блока «Порт входа» на «Вход» и изменить имя порта для блока «Порт выхода» на «Выход». Для блока «Из памяти» установить приемник «D», «Td», «time», «D0» для соответствующих источников. Для блоков «Делитель» установить свойство «Сигнализировать о делении на 0» равным «Нет». Изменить положение портов, разместить и соединить блоки линиями связи согласно рисунку (Рисунок 15).

Рисунок 15. Рабочая область субмодели с подписью «Д» с инерционно-дифференцирующей составляющей регулятора

Для блока «Производная» задать свойство «Начальные условия» равным «10#0», Для блока «Задержка на шаг интегрирования» задать свойство «Начальные условия» равным «10#0». Инерционно-дифференцирующей элемент ПИД-регулятора с возможностью задания начальных условий создан.

Выйти из субмодели с подписью «Д». Блок «Сумматор» необходим для сложения трех составляющих регулятора: «П», «И» и «Д». Изменить размеры, разместить и соединить блоки линиями связи согласно рисунку (Рисунок 16). Сохранить схему в созданной папке под именем «Схема-шаблон».

Рисунок 16. Рабочая область проекта со схемой-шаблоном ПИД-регулятора для генерации кода

Генерация кода

Настройка конфигурации генератора кода

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

Для генерации кода существует набор подготовленных шаблонов, настроенных под различные компиляторы. В SimInTech реализовано несколько вариантов шаблонов генерации кода, предназначенных для разных аппаратных платформ и ОС. В их числе – генерация кода под Windows, Linux, QNX. С сайта http://www.simintech.ru можно скачать набор инструментов MinGW для создания исполняемых файлов и библиотек под Windows. В данном примере будет пользоваться именно этот набор инструментов.

Поскольку создаваемый DLL-файл будет иметь имя проекта, в котором создана схема-шаблон, то необходимо изменить имя будущего DLL-файла. Для этого необходимо открыть «Параметры расчета» и в группе «Генерация кода» для параметра «Имя (имена) алгоритма» установить «pid_dll».

Рисунок 17. Окно «Параметры расчета»

Далее настройка конфигурации кодогенератора. Для этого необходимо в главном окне SimInTech перейти в меню «Кодогенератор», в появившемся списке выбрать «Кодогенератор Си». Откроется окно «Кодогенератор Си», в котором необходимо перейти на вкладку «Настройки». В строке «Директория шаблона кода» нужно выбрать интересующий шаблон для кодогенерации. Как было сказано выше, это шаблон для создания DLL-файлов под Windows «MinGW», поэтому требуется выбрать «%codetemplates%MinGW_DLL\».

Прим.: Если необходима сборка с помощью компилятора от компании Microsoft, то требуется выбрать «%codetemplates%VC2015\».
Строка «Директория исходников» остается пустой для того, чтобы генерация кода осуществлялась в папку с разработанным проектом со схемой-шаблоном.

Рисунок 18. Окно «Кодогенератор Си» с измененными настройками конфигурации кодогенератора

Теперь требуется сохранить конфигурацию кодогенератора. Для этого необходимо в окне «Кодогенератор Си» перейти во вкладку «Загрузка» и нажать на кнопку «Сохранить конфигурацию». Откроется окно проводника операционной системы, где необходимо выбрать папку, в которой сохранен проект со схемой-шаблоном, установить имя файла «Конфигурация кодогенератора» и нажать на кнопку «Сохранить».

Генерация кода

Теперь необходимо добавить проект «Схема-шаблон.prt» для генерации кода. Для этого необходимо в окне «Кодогенератор Си» открыть вкладку «Загрузка» нажать на кнопку «Добавить файлы». Откроется окно «Добавление файла», в котором нужно выбрать проект «Схема-шаблон.prt». В окне «Кодогенератор Си» отобразится добавленный файл.

Рисунок 19. Окно «Кодогенератор Си» с добавленным проектом

Далее требуется пересобрать модули и конфигурацию. Для этого необходимо в окне «Кодогенератор Си» нажать на кнопку «Пересобрать модули и конфигурацию». Откроется окно сохранения всех проектов, в котором необходимо нажать на кнопку «Да». Начнется процесс сборки и генерации файлов. По завершению процесса в окне «Кодогенератор Си» отобразятся следующие уведомления.

Прим.: Если в текущей версии программного обеспечения SimInTech отсутствует нужный компилятор, то откроется автоматически сайт, где можно его скачать. После скачивания и установки компилятора (если это потребуется) повторить вышеописанное действие еще раз.

В процессе генерации кода система в окне сообщений отобразятся следующие уведомления (Рисунок 20)

Рисунок 20. Окно уведомлений

Как видно из рисунка (Рисунок 20), система информирует, что максимально допустимое количество блоков для текущей версии лицензии не достигнуто, а также генерация DLL-файла прошла успешно. Убедится в этом возможно, зайдя в папку, где находится схема-шаблон. Там появился ряд новых файлов:

  • файл, имеющий расширение «.log». Это файл журнала, который, как правило, хранится в формате обычного текстового файла и используется для хранения информации о системных процессах и их работе. Открыв этот файл с помощью блокнота, отобразится, что никаких ошибок в процессе генерации кода не возникло.
  • файл, имеющий расширение «.h». В нем хранится информация о декларации и привязке переменных, о входах и выходах блока, о константах, переменных состояния и т.д. (размерность, тип данных).
  • файлы, имеющие расширение «.inc». В них осуществляется запись начальных состояний блока и происходит непосредственно обработка блока. Эти файлы содержат в себе код, написанный на языке Си.
  • DLL-файл, содержащий ПИД-регулятор.

Подключение DLL-файла

Создание собственного блока из блока «Внешняя DLL»

В прошлой главе был сгенерирован DLL-файл под операционную систему Windows, который содержит разработанную ранее модель векторного ПИД-регулятора. В этой главе будет показано, как загружать написанные на языке Си DLL-файлы в SimInTech.

Первым шагом необходимо создать новый проект, в который необходимо загрузить DLL-файл. Для создания нового проекта обще технического шаблона необходимо выполнить следующие действия:
  1. В главном окне SimInTech выбрать пункт «Файл» подпункт «Новый проект».
  2. В выпадающем меню выбрать пункт «Схема модели общего вида».

Откроется новое окно проекта «Схема модели общего вида». Требуется сохранить созданный проект.

Добавить на схему блок «xref href="../../../10_biblioteki_blokov/Vneshnie_modeli/3063.dita" format="xml">Внешняя DLL» из библиотеки «Внешние модели».

Рисунок 21. Рабочая область нового проекта с размещенным блоком «Внешняя DLL»

Теперь необходимо корректно задать свойства блока «Внешняя DLL» в соответствии с размерностями входов, выходов и свойств блока. Блок должен иметь два входных порта, поэтому в свойствах блока для свойства «Количество портов» необходимо задать в поле «Значение» значение равным «2». Выход должен быть один размерностью 10, поэтому для свойства «Массив размерностей выходов» требуется задать «[10]». В свойстве «Имена загружаемых DLL» можно указать полный путь к DLL-файлу, а можно указать только его имя в случае, если данный проект, с размещенным блоком «Внешняя DLL», сохранен в одной директории с DLL-файлом. Установить для свойства «Имена загружаемых DLL» значение «pid_dll.dll». В свойство «Имена файлов проектов для отладки» задать равным «Схема-шаблон.prt». В данном случае также нет необходимости указывать полный путь к файлу. Это свойство в процессе работы модели поможет осуществить отладку созданной ранее схемы-шаблона.

Рисунок 22. Окно «Свойства» блока «Внешняя DLL»

Задать тип элемента для блока «Внешняя DLL» для подтверждения создания нового блок для SimInTech. Для этого необходимо открыть свойства блока и во вкладке «Общие» изменить свойство «Тип элемента» на «ПИД». Перейти во вкладку «Порты» и изменить расположение второго порта входа «input2», указав в разделе «Параметры порта» вкладки «Порты» для параметра «Расположение» равным «Снизу». Теперь в окне проекта второй вход блока «ПИД» размещен снизу, первый вход - справа, выход - слева.

Рисунок 23. Изменено расположение портов

Теперь требуется изменить графическое изображения блока «ПИД» с помощью панели примитивов. Для этого необходимо в свойствах блока «ПИД» перейти во вкладку «Общие» и нажать в поле «Значение» свойства «Графическое изображение» на кнопку редактора. Откроется окно «Графический редактор», в котором требуется изменить надпись «DLL» примитива «Перевернутый текст» на «ПИД». Для этого необходимо двойным нажатием на примитив «Перевернутый текст» с надписью «DLL» открыть окно «Редактирование текста» и изменить текст «DLL» на «ПИД».

Рисунок 24. Окно «Редактирование текста» с измененным текстом

Нажать на кнопку «Применить и закрыть», закрыть окно «Графическое изображение», появится окно подтверждения изменения изображения. Нажать на кнопку «Да». После этого в окне проекта блок «ПИД» примет следующий вид (Рисунок 25)

Рисунок 25. Рабочая область проекта с измененным графическим изображением блока

Далее требуется добавить новые свойства для блока. Для этого необходимо открыть контекстное меню блока «ПИД» и выбрать пункт «Изменить блок». Добавить 6 новых свойств:
  • «Коэффициент усиления П»;
  • «Коэффициент усиления И»;
  • «Начальное условие И»;
  • «Коэффициент усиления Д»;
  • «Начальное условие Д»;
  • «Постоянная времени Д»;
Для этого необходимо в окне «Редактирование блока» в левом нижнем углу нажать на кнопку «Добавить свойство», после этого в таблице свойств отобразится новое добавленное свойство. добавить 6 новых свойств задать им имя и параметры согласно рисунку (Рисунок 26). Внимание, имена свойств надо задавать строго в соответствии с именами, которые присвоены на рисунке при создании схемы-шаблона. По умолчанию все коэффициенты усиления и постоянная времени равны единице, а начальные условия равны нулю. При использовании ПИД-регулятора по назначению эти коэффициенты требуют настройки.

Рисунок 26. Окно «Редактирование блока» с добавленными новыми свойствами

Подключение сгенерированного DLL-файла

Задать входные сигналы блоку «ПИД». Для этого необходимо добавить следующие блоки:
  • 5 блоков «Синусоида» из вкладки «Источники»;
  • 1 блок «xref href="../../../10_biblioteki_blokov/avtomatika/vektornye/0019.dita" format="xml">Мультиплексор» из вкладки «Векторные».
Открыть свойства блока «Мультиплексор» и изменить свойство «Количество портов» на «10». Открыть свойства блоков «Синусоида» и задать им амплитуды равными: 1, 2, 3, 4, 5 соответственно. Расположить и соединить блоки линиями связи согласно рисунку (Рисунок 27)

Рисунок 27. Рабочая область проекта с добавленными первыми входными сигналами

На выходе из ПИД-регулятора расположить блок «xref href="../../../10_biblioteki_blokov/avtomatika/Dinamicheskie/DAT_0027.dita" format="xml">Интегратор» из вкладки «Динамические», который будет имитировать простейший исполнительный механизм. Задать блоку «xref href="../../../10_biblioteki_blokov/avtomatika/Dinamicheskie/DAT_0027.dita" format="xml">Интегратор» свойства согласно рисунку (Рисунок 28).

Рисунок 28. Окно «Свойства» блока «Интегратор»

Добавить на схему следующие блоки:
  • 1 блок «xref href="../../../10_biblioteki_blokov/avtomatika/Vyvod_dannyh/1001.dita" format="xml">Временной график» из вкладки «Вывод данных»;
  • 1 блок «xref href="../../../10_biblioteki_blokov/avtomatika/Substruktury/3015.dita" format="xml">Уровень не подсоединенных портов» из вкладки «Субструктуры».
  • 1 блок «xref href="../../../10_biblioteki_blokov/avtomatika/Istochniki/0002.dita" format="xml">Константа» из вкладки «Источники».
Блок «Уровень не подсоединенных портов» необходим для задания значений неподключенных портов (некоторые из портов мультиплексора остались неподключенными). Блок «Константа» будет указывать на уровень не подсоединенных портов, поэтому в свойствах данного блока необходимо указать свойству «Значение» равным «0». Разместить и соединим все элементы линиями связи согласно рисунку.

Рисунок 29. Рабочая область проекта со схемой проверки работы блока «ПИД»

Сохранить проект в директорию, где находится сгенерированный DLL-файл, под именем «Схема-загрузчик».

Запуск проекта на моделирование

Перед запуском проекта на расчет необходимо настроить параметры расчета проекта установив конечное время расчета – 100 секунд, максимальный шаг интегрирования уменьшить до 0.01 для повышения точности, а также включить синхронизацию с реальным временем. Для этого необходимо в параметрах расчета установить следующие параметры:
  • «Конечное время расчета» - «100»;
  • «Максимальный шаг» - «0.01».
  • во вкладке «Синхронизация» активировать параметр «Синхронизировать с реальным временем».
Запустить проект на моделирование. По окончанию расчета открыть двойным нажатием по блоку «Временной график» окно «График». Результаты моделирования представлены на графике (Рисунок 30) доказывают корректность работы регулятора.

Рисунок 30. График регулируемых величин

Для запуска отладчика в процессе моделирования требуется дважды нажать на блок «ПИД», после чего откроется окно проекта «Схема-шаблон» в режиме отладчика. С помощью линий связи в окне отладчика можно осуществлять контроль работы сгенерированного DLL-файла, тем самым выполняя отладку схемы-шаблона (Рисунок 31).

Рисунок 31. Окно отладчика

Создание новой библиотеки

Создание новой библиотеки блоков

В этой главе будет показан процесс создания новых библиотек и заполнения их блоками в SimInTech.

Первым делом для создания новой библиотеки нужно загрузить пустую библиотеку, на основе которой будем создавать свою собственную. Для этого необходимо нажать в главном окне SimInTech меню «Файл», в открывшемся списке выбрать «Загрузить библиотеку». Выбираем пустую библиотеку под названием «ClassLib».

Теперь требуется сохранить библиотеку, для этого необходимо открыть редактор библиотеки. Для этого необходимо нажать в главном окне SimInTech меню «Файл, в открывшемся списке выбрать «Редактировать библиотеку...». Откроется окно «Редактирование библиотеки», в котором необходимо нажать на кнопку «Сохранить библиотеку в файл».

Рисунок 32. Окно «Редактирование библиотеки» с выделенной кнопкой «Сохранить библиотеку в файл»

В открывшемся проводнике задать имя новой библиотеки «Regulators.csl». Все библиотеки SimInTech хранятся в директории …\SimInTech\bin и имеют расширение «csl».

Теперь нужно сделать созданную только что библиотеку активной. Для этого необходимо в главном окне SimInTech нажать на меню «Файл», в открывшемся списке выбрать «Загрузить библиотеку» в открывшемся окне проводника выбрать библиотеку «Regulators.csl».

Далее необходимо загрузить библиотеку в рабочее пространство. Для этого необходимо в главном окне SimInTech нажать на меню «Файл», в открывшемся списке выбрать «Параметры». В открывшемся окне «Параметры» перейти на вкладку «Библиотеки блоков». В открывшемся списке подключенных библиотек для автозагрузки необходимо добавить библиотеку «Regulators.csl». Для этого необходимо нажать на кнопку добавить и выбрать в открывшемся проводнике библиотеку «Regulators.csl». Подтвердить добавление нажатием на кнопку «Открыть». Теперь в представленном списке подключенных библиотек для автозагрузки есть библиотека «Regulators.csl». Добавление библиотеки в этот перечень нужно для автозагрузки, если поменяется активная библиотека. В рамках текущей задачи достаточно сделать библиотеку активной.

Рисунок 33. Окно «Параметры» с выделенной кнопкой «добавить» и с добавленной новой библиотекой «Regulators.csl»

Подготовка блока к добавлению в библиотеку

Осталось добавить созданное звено ПИД-регулятора в новую библиотеку. Однако перед этим необходимо подготовить блок к загрузке в новую библиотеку. Для этого необходимо открыть контекстное меню блока «ПИД» и выбрать «Изменить блок» и установить во вкладке «Общие» следующее (Рисунок 34):
  • Задать для свойства «Имя объекта» значение «ПИД».
  • Скрыть ненужные для использования блока в качестве регулятора свойства: «Тип сортировки», «Количество портов», «Массив размерностей выходов», «Имена загружаемых DLL», «Имена оборудования», «Имена файлов проектов для отладки», «Создавать по умолчанию не существующие переменные», «Выдавать предупреждения если сигнал не найден», «Количество потоков», путем задания имен указанных свойств в свойстве «Список невидимых свойств». Для свойства «Список невидимых свойств» задать имена: «SortType; nport; outdims; dllnames; componentnames; prjnames; useemptyvars; showsigwarning; nthread».

Рисунок 34. Окно «Свойства» блока «ПИД» с измененными свойствами

Нажать на кнопку «Применить» и «Ok», в результате окно свойств блока ПИД-регулятора примет вид:

Рисунок 35. Окно «Свойства» блока ПИД-регулятор

Добавление блока в библиотеку

Теперь требуется добавить блок «ПИД» в библиотеку «Regulators». Для этого необходимо выделить блок и нажать в главном окне SimInTech на меню «Файл», в открывшемся списке выбрать «Сохранить в библиотеку». В появившемся окне задать имя блока. Имя блока в библиотеке желательно задавать одинаковым с типом элемента (из свойств объекта). Нажать на кнопку «Ok».

Блок добавлен, однако в панели инструментов блок не отображается. Для отображения блока в библиотеке необходимо в главном окне SimInTech на меню «Файл», в открывшемся списке выбрать «Редактировать библиотеку». В открывшемся окне в колонке «Все записи» отобразился блок «ПИД». В колонке «Страницы» нужно добавить новую запись, для этого необходимо нажать на кнопку «Добавить» и изменить имя страницы с «Страница 1» на «Регуляторы».

Рисунок 36. Окно «Редактирование библиотеки» с добавленной страницей «Регуляторы»

Выделить запись «ПИД» и нажать по зеленой стрелке, указывающей налево. Блок переместиться в столбец «Записи страницы». Открыть вкладку «Свойства записей» и в строке «Группа» указать «МВТУ», определив, что библиотека будет отображаться только при разработке модели «Схема общего вида».

Осталось создать изображение бока для панели инструментов. Изображение должно представлять файл графического формата разрешением 32x32 пикселя. Добавить графическое изображение в колонку «Изображение кнопки в палитре» путем вставки из буфера обмена скопированного изображения, нажатием на кнопку «Из буфера», или путем выбора из окна проводника нужного изображениям нажатием на пустое поле под текстом «Изображение кнопки в палитре». Нажать на кнопку «Ок».

В главном окне SimInTech на панели инструментов появилась новая библиотека «Регуляторы», в которой находится блок «ПИД», теперь данный блок можно добавлять на схемы.

Рисунок 37. Панель инструментов