125 Использование пакета SIMULINK/MATLAB для построения S-функций систем управления - Страница 8

Щелкнув надпись Initialization, перейдите на закладку с тем же названием. Введите в текстовое окно Input port width размерность векторного входного сигнала u(t). В данном случае введите 1, так как входной сигнал апериодического звена является скалярным. Выходной сигнал этого звена также является скалярным, поэтому в тестовое окно Output port width также введите 1. Полагая, что создаваемая S-функция будет содержать два диалоговых параметра A и B, введите в текстовое окно Number of parameters число 2. Если вы считаете целесообразным только в этот момент определиться с числом и исходными значениями диалоговых параметров, то вначале можно оставить текстовое окно S-Function parameters пустым и заполнить его лишь сейчас. Если вы передумали и решили, например, выбрать в качестве диалогового параметра лишь один параметр, пусть A, а другой параметр решили зафиксировать,  т.е. положить равным 3, то в текстовые окна Number of parameters и S-Function parameters надо ввести соответственно 1 и -2.

Создаваемая S-функция соответствует непрерывному блоку первого порядка, поэтому в раскрывающемся списке Sample Time выберите Сontinuous, а в текстовое окно Number of continuous states (число переменных состояния непрерывного блока) введите 1.

Наконец,  в текстовое окно Сontinuous states IС введите выбранное вами начальное значение единственной переменной состояния апериодического звена, например введите 0.

Все прочие текстовые окна закладки Initialization заполните нулями. В результате описанных действий поле S-Function setting (характеристики S-функции) этой закладки должно выглядеть так, как показано на рис. 20.

Перейдите на закладку Libraries и удалите все коды, кроме кода # include <simstruct.h>, расположенного по умолчанию в текстовом окне Includes:. Дело в том, что нет необходимости в данном случае использовать какие-либо специальные библиотеки.

 

 

 

 

 

Рис. 20

Перейдите на закладку Outputs и введите код для вычисления выходного сигнала

 

т.е. тот же С-код, который представлен в файле appar.c (см. с.20), однако без всяких вызовов функций и указателей.

Перейдите на закладку Сontinuous Derivatives и введите С-код

 

касающийся вычисления производной состояния. Обратите внимание, что вместо символов A и B параметров блока надо записать переменные и , где  и  соответствуют первому параметру A и второму параметру B. Как видите, в случае использования Разработчика S-Function Builder для вычисления производной состояния достаточно ограничиться написанием одной инструкции вместо шести, требуемых  при создании S-Function с самого начала (см. с.20). Индексы нуль указателей dx и u означают, что применяются лишь первые элементы массивов вектора состояния и входного сигнала. Это естественно, так как состояние  и входной сигнал представляют собой скалярные функции.

Закладку Discrete Update оставьте без изменения, потому что проектируется непрерывный блок.

Перейдите на закладку Build Info и нажмите кнопку Build в поле Parameters диалогового окна Разработчика. При этом в поле Сompilation diagnostics появляется сообщение:

 

 

 

 

из которого следует, что компиляция прошла успешно, т.е. созданы файл sfbuilder_appar.c, интерфейсный файл sfbuilder_appar_wrapper и машинный файл sfbuilder_appar.dll. Все эти файлы размещаются в каталоге MATLAB/work, который можно открыть, используя пиктограмму     на панели инструментов модельного окна. В том, что Разработчик S-Function Builder построил S-функцию, можно убедиться другим путем, закрыв с помощью кнопки Close диалоговое окно S-Function Builder и вернувшись к модельному окну. Нетрудно видеть, что внутри прямоугольника, изображающего блок S-Function Builder,  изменилось название system на название созданной S-функции, т.е. на название sfbuilder_appar (рис.21).

Если компиляция прошла успешно и создана S-функция, то это еще не говорит о том, что она является работоспособной с точки зрения назначения разрабатываемого пользовательского блока. Дело в том, что вы могли ошибиться при написании кода, неправильно поняв смысл той или иной инструкции, хотя и не нарушив при этом законов программирования. Поэтому после создания S-функции необходимо осуществить тестирование построенного пользовательского блока, подавая на его вход типовые входные сигналы, на которые вычислена желаемая реакция этого блока каким-либо другим путем. Сравнивая выходной сигнал пользовательского блока с его желаемой реакцией, можно сделать вывод о работоспособности созданной S-функции. В данном простом случае вычислить желаемую реакцию разработанного блока на типовой входной сигнал не представит труда, построив в модельном окне блок-схему (рис. 21), включающую последовательное   соединение   блока   Constant,  блока   State- Space,

 

Рис. 21

моделирующего рассматриваемое апериодическое звено и имеющего параметры A=-2, B=-3, С =1, D=0, и блока Scope.

 

Рис. 22

Выберите команду Start из меню Simulation или нажмите пиктограмму  на панели инструментов модельного окна, чтобы запустить процесс динамического моделирования (симуляции). После окончания симуляции, дважды щелкнув на блок Scope, вы увидите в нем переходную характеристику апериодического звена (рис. 22). Она и будет представлять желаемую реакцию построенного пользовательского блока на постоянный единичный сигнал.

Соедините блок Сonstant, созданный пользовательский блок sfbuilder_appar и блок Sсope, как показано на рис. 21. Здесь добавлен блок мультиплексор для объединения выходных сигналов блоков State-Spaсe и sfbuilder_appar в один векторный сигнал. Если вы теперь запустите процесс динамического моделирования, то убедитесь в том, что две разноцветные кривые, изображающие в окне блока Sсope соответственно выходные сигналы блока State-Spaсe и пользовательского блока, сливаются между собой. Следовательно, созданная S-функция и пользовательский блок работают правильно. Наконец, несколько слов относительно диалогового окна параметров созданного пользовательского блока и редактирования его параметров A и B без использования Разработчика S-Function Builder.

Чтобы открыть диалоговое окно параметров:

а) щелкните правой клавишей мыши на созданный пользовательский блок, в данном случае S-функции. Появляется контекстное меню;

б) выберите команду Bloсk Parameters из контекстного меню. Появляется диалоговое окно параметров созданного пользовательского блока (рис. 23), в данном случае окно с названием Bloсk Parameters: S-Function Builder, в текстовом окне S-Function parameters которого имеется строка -2, 3, соответствующая значениям параметров A и B,  которые были введены в диалоговое окно S-Function Builder при разработке S-функции.

Если вы измените эти значения, затем нажмете клавишу ОК, то получите пользовательский блок с отредактированными параметрами. Заметим, что изменение параметров пользовательского блока с помощью диалогового окна

 

 

Рис. 23

параметров не влечет за собой изменения значений параметров в диалоговом окне S-Function Builder, если оно не закрыто. Чтобы после редактирования привести в соответствие значения параметров в диалоговом окне Разработчика S-Function Builder и в диалоговом окне параметров Bloсk Parameters: S-Function Builder, надо открыть повторно, т.е. после редактирования параметров, диалоговое окно S-Function Builder.

В заключение рассмотрим использование Разработчика для построения
S-функции с названием  sfbuilder_plant, моделирующей непрерывный объект управления второго порядка, исследованный в главе 3 и описываемый уравнениями в переменных состояния (8) и (9). Его параметры AC и BC определяются выражением (10). Для создания упомянутой S-функции достаточно внести следующие изменения в диалоговое окно S-функции sfbuilder_appar:

  • заменить в поле Parameters (рис.19) название S-функции на sfbuilder_plant и  очистить окно S-function parameters;
  • на закладке Initialization заменить в текстовом окне Number of continuous state цифру 1 на 2 (рис.20);
  • на закладке Continuous Derivatives заменить C-код на

dx[0]=A[0][0]*xC[0]+A[0][1]*xC[1]+B[0]*u[0];

dx[1]=A[1][0]*xC[0]+A[1][1]*xC[1]+B[1]*u[0];

  • на закладке Libraries ввести в текстовое окно External function declarations C-код, содержащий информацию о численных значениях параметров AC и BC. При этом  текстовое окно External function declarations должно выглядеть так, как показано на рис. 24.

 

Рис. 24

 

Этот пример мы привели специально, чтобы продемонстрировать использование текстового окна External function declarations закладки Libraries для введения численных значений параметров A и B.

 

Библиографический список

  1. Ануфриев И. К. Самоучитель MatLab 5.3/6.x.СПб.: БХВ-Петербург, 2002.
    736 с.
  2. Дьяконов В.П., Круглов В.В. MATLAB. Анализ, идентификация и    моделирование систем. СПб.: Питер, 2002. 432 с.
  3. Мартынов Н.Н. Введение в MATLAB 6. КУДИЦ-ОБРАЗ, 2002.352 с.
  4. Бобиков А.И. Использование пакета  Simulink/MATLAB для  исследования систем управления (Построение блок-схем): Учеб. пособие.   Рязань: РГРТА, 2003. 64 с.
  5. Дорф Р., Бишоп Р. Современные системы управления. М.: Лаборатория    Базовых знаний, 2002. 632 с.
  6. Бочков С.О. Язык программирования СИ для персонального компьютера. М.:  Радио и связь, 1990. 384 с.
  7. Каширин И. Ю., Новичков В.С.,Потапов В.М.Разработка программ на языке С / Под ред. Л.П. Коричнева. М.: Госкомвуз России, НИЦ Прис, 1996. 132 с.
  8. Разработка приложений на Microsoft Visual С++ 6.0. Учебный курс /Пер.    с англ. М.: Издательский  торговый дом « Русская редакция», 2001.304 с.
  9. Бенькович Е.С., Колесов Ю.Б., Сениченков Ю.Б. Практическое моделирование динамических систем. СПб.: БХВ-Петербург, 2002. 464 с.

 


[1] Интерфейсная функция - функция, назначение которой состоит в обеспечении альтернативного интерфейса другой функции