Инструментарий Simulink предоставляет пользователю два способа создания S-функций на языке C: с помощью автоматического построителя S-Function Builder и вручную, с использованием шаблона (аналогично созданию S-функций на языке MATLAB). И хотя наибольшими возможностями обладает именно второй способ, первый способ прост и наименее трудоемок, и, поэтому именно с помощью S-Function Builder пользователь может легко и быстро создать нужную ему S-функцию. При этом как во втором, так и в первом случаях S-функция будет создана в виде исполняемого dll-файла, что обеспечивает повышенное быстродействие этой функции.
Создание S-функции рассмотрим на примере двигателя постоянного тока независимого возбуждения. Его математическое описание дано в п. 16.7.6.1. Поскольку в стандарте языка C отсутствуют матричные операции, то уравнения (9) - (12) перепишем в обычной форме:
(15)
(16)
(17)
(18)
Значения элементов матриц даны в п. 16.7.6.1.
S-Function Builder оформлен в виде обычного блока Simulink и находится в библиотеке Function&Tables (функции и таблицы). Пиктограмма блока показана на рис.16.12.
Рис. 16.12 Пиктограмма блока S-Function Builder
Двойной щелчок на пиктограмме открывает окно S-Function Builder. Окно S-Function Builder(см. рис. 16.13) содержит панельпараметров (Parameters),в которой находится графа для ввода имени S-функции (S-function name) и графа для ввода начальныхзначений параметров, передаваемых через окно диалога блока S-function (S-function parameters). Также на этой панелинаходится кнопка Build,предназначенная для запуска процесса компиляции S-функции. В нижней части окна S-Function Builder находятся кнопки Help (вызов справки) и Close/Cancel (закрыть окно).
Среднюю часть окна занимают шестьвкладок, предназначенных для задания свойств S-функции
и фрагментов ее кода:
1. Initialization -Инициализация. На вкладке Initializationзадаются следующие свойства S-функции:
· Input port width -Число входных переменных (размерностьвходного вектора).
· Output port width -Число выходных переменных(размерность выходного вектора).
· Number of parameters -Количество параметров,передаваемых в S-функцию через окно диалога блока.
· Sample time -Шаг модельного времени. Может принимать значения (изсписка): Inherited -наследуемый, Continuous -непрерывный, Discrete-дискретный.
· Discrete sample time value -Шаг модельного времени длядискретной системы. Параметр доступен для ввода значения, если выбрандискретный шаг расчета.
· Number of discrete states -Число дискретныхпеременных состояния.
· Discrete states IC- Начальные значения дискретных переменных состояния. Значения вводятся через запятую.
· Number of continuous states -Число непрерывныхпеременных состояния.
· Continuous states IC -Начальные значения непрерывных переменных состояния. Значения вводятся череззапятую.
Окно S-Function Builderс открытой вкладкой Ininializationпоказано на рис.16.13. Для рассматриваемого примера число входных переменных равно двум (напряжение наобмотке якоря и момент сопротивления). Число выходных переменных равно двум(момент и скорость). Количество переменных состояния также равно двум (токякоря и скорость). Число параметров S-функции, передаваемых через окнодиалога равно 6(см. п. 16.7.6.2), шаг модельного времени -наследуемый, число дискретных переменных состояния - 0, начальныезначения дискретных и непрерывных переменных состояния нулевые.
2.Libraries -Библиотеки. На вкладке имеется три окна для ввода фрагментов С-кода:
· Library/Object/Source files -Имена подключаемых библиотечных(*.lib) иобъектных (*.obj) файлов. Указанные файлы должны находиться в текущей рабочей папке, либоследует полностью указать путь к этим файлам. Имена файлов указываются поодному в каждой строке.
· Includes -Директивы для подключения заголовочных (*.h) и обычных (*.с,*.сpp) файлов. Например: # include <math.h> # include "myutils.c"и т.п. В данном окне следует записать файлы, содержащие функциипользователя, которые будут использоваться в проекте.
· External Function Declarations -Объявления внешних функций, еслиони отсутствуют в заголовочных или иных подключаемых файлах. Например: extern double func(double a);
Окно S-Function Builderс открытой вкладкой Librariesпоказано на рис. 16.14.
3. Outputs - Выходы. Вкладка содержит текстовое окно,предназначенное для ввода выражений расчета выходных переменных. В расчетныхвыражениях можно использовать следующие переменные (не объявляя их специально):
· u0[0],u0[1],u0[2] … u1[0],u1[1],u1[2]… и т.д. - Входные сигналы блока S-function. Входные сигналы должны бытьдействительными и иметь тип double.
· y[0],y[1],y[2] и т.д. - Выходные сигналы блокаS-function. Выходные сигналы должны бытьдействительными и иметь тип double.
· param1[0],param2[0],param3[0]и т.д. - Параметры блока S-function, передаваемые через окнодиалога. Параметры быть действительными и иметь тип double.
· p_width0, p_width1, p_width2 - и т.д. Переменные целоготипа, значения которых равны размерности нулевого, первого, второго и т.д.параметров блока S-function, передаваемых через окнодиалога.
· u _ width -Фактическая размерность входного сигнала (переменная целого типа). Переменнаядоступна, если размерность входного сигнала на вкладке Initialization задана равной -1(минусодин). Если входной сигнал матрица - значением переменной u _ width будет вектор из двух элементов.
· y _ width -Фактическаяразмерность выходного сигнала (переменная целого типа). Переменная доступна,если размерность выходного сигнала на вкладке Initialization задана равной -1(минусодин). Если выходной сигнал матрица - значением переменной y _ width будет вектор из двух элементов.
· xC[0], xC[1], xC[2] и т.д. - Непрерывные переменныесостояния. Тип переменных - double.
· xD[0], xD[1], xD[2] и т.д. - Дискретные переменныесостояния. Тип переменных - double.
На вкладке имеется флажок для установки параметра Inputs are needed in the output function ( direct feedthrough )-использование входных сигналов длярасчета выходных (прямой проход).
Текст автоматически генерируемого метода mdl Outputs ,приведен ниже:
В примере на рис. 16.15 в первойстроке объявляются переменные - параметры электродвигателя, и этим переменнымприсваиваются значения параметров передаваемых в S-функцию через окно диалога. Во второйстроке объявляются и вычисляются переменные COO и С11, входящие вуравнения (17), (18). В третьей и четвертой строках записаны выражения длярасчета выходных сигналов в соответствии с уравнениями (17) и (18). Параметр Inputs are needed in the output function ( direct feedthrough ) не установлен, поскольку ввыражениях для расчета выходных сигналов отсутствуют входные. После генерации С-кодав тексте S-функциипоявится код, введенный в окне вкладки Outputs.
4. ContinuousDerivatives -Производные непрерывныхпеременных состояния. Вкладка содержит текстовое окно, предназначенное для ввода выраженийрасчета производных непрерывных переменных состояния. В расчетных выраженияхможно использовать те же переменные, что и на вкладке Outputs,за исключением дискретныхпеременных состояния xD. Сами производные обозначаются как dx[0], dx[1], dx[2] и т.п.
Текст автоматически генерируемого метода mdlDerivatives ,приведен ниже:
В примере на рис. 16.16 в первыхдвух строках объявляются переменные - параметры электродвигателя, и этимпеременным присваиваются значения параметров передаваемых в S-функцию через окно диалога. В следующихдвух строках объявляются и вычисляются переменные AOO … B11, входящие в уравнения (15),(16). В последних двух строках записаны выражения для расчета производныхнепрерывных переменных состояния в соответствии с уравнениями (15) и (16).
5. DiscreteUpdate- Расчет дискретных переменныхсостояния. В текстовом окне вкладки записываются выражения для расчетадискретных переменных состояния. В расчетных выражениях можно использовать те жепеременные, что и на вкладке Outputs,заисключением непрерывных переменных состояния xС. Сами дискретные переменныесостояния обозначаются как xD[0], xD [1], xD [2] и т.п.
Текст автоматически генерируемо метода mdlUpdate ,приведенниже:
Врассматриваемом примере отсутствуют дискретные переменные состояния, поэтому нарисунке дан лишь пример расчетного выражения.
6. Build Info -Информация о компоновке.На вкладке в окне Compilation diagnostics (диагностические сообщения о ходе компиляции) отображаетсяинформацию о процессе компоновки S-функции.
На вкладке Build Infoс помощью флажков можно установить следующиепараметры:
· Show compile steps -Отображать стадии компиляции. При установленном флажкев окне Compilation diagnosticsбудутотображены все сообщения компилятора о процессе компиляции. Данный параметржелательно устанавливать при сборке S -функции, использующей внешние функции.
· Create a debuggable MEX- file -Создаватьотлаживаемый исполняемый файл. При установленном флажке в процессе компиляциибудет создан файл, позволяющий выполнять отладку Simulink -модели.
· Generate wrapper TLC -Создавать TLC- файл . Флажокустанавливается, если предполагается использовать ускоренный режим расчетов илиRealtime Workshop .
· Save code only -Создавать только текстовый код. Если флажокустановлен, то будут созданы только текстовые файлы на языке С.
Передначалом компиляции необходимо выбрать (настроить) компилятор. Для этого вкомандном окне MATLAB следует ввести команду: