Создание S-функций на языке C с помощью S-Function Builder

Инструментарий Simulink предоставляет пользователю два способа создания S-функций на языке C: с помощью автоматического построителя S-Function Builder и вручную, с использованием шаблона (аналогично созданию S-функций на языке MATLAB). И хотя наибольшими возможностями обладает именно второй способ, первый способ прост и наименее трудоемок, и, поэтому именно с помощью S-Function Builder пользователь может легко и быстро создать нужную ему S-функцию. При этом как во втором, так и в первом случаях S-функция будет создана в виде исполняемого dll-файла, что обеспечивает повышенное быстродействие этой функции.

Создание S-функции рассмотрим на примере двигателя постоянного тока независимого возбуждения. Его математическое описание дано в п. 16.7.6.1. Поскольку в стандарте языка C отсутствуют матричные операции, то уравнения (9) - (12) перепишем в обычной форме:

Создание S-функций на языке C с помощью S-Function Builder - student2.ru (15)
Создание S-функций на языке C с помощью S-Function Builder - student2.ru (16)
Создание S-функций на языке C с помощью S-Function Builder - student2.ru (17)
Создание S-функций на языке C с помощью S-Function Builder - student2.ru (18)

Значения элементов матриц даны в п. 16.7.6.1.

S-Function Builder оформлен в виде обычного блока Simulink и находится в библиотеке Function&Tables (функции и таблицы). Пиктограмма блока показана на рис.16.12.

Создание S-функций на языке C с помощью S-Function Builder - student2.ru
Рис. 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, начальные значения дискретных и непрерывных переменных состояния нулевые.

Создание S-функций на языке C с помощью S-Function Builder - student2.ru
Рис. 16.13 Окно S-Function Builder(вкладка Ininialization)

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.

Создание S-функций на языке C с помощью S-Function Builder - student2.ru
Рис. 16.14 Окно S-Function Builder( вкладка Libraries)

3. Outputs - Выходы. Вкладка содержит текстовое окно, предназначенное для ввода выражений расчета выходных переменных. В расчетных выражениях можно использовать следующие переменные (не объявляя их специально):

· u 0[0] ,u 0[1] ,u 0[2] … u 1[0] ,u 1[1] ,u 1[2]… и т.д. - Входные сигналы блока S - function . Входные сигналы должны быть действительными и иметь тип double .

· y [0] ,y [1] ,y [2] и т.д. - Выходные сигналы блока S - function . Выходные сигналы должны быть действительными и иметь тип double .

· param 1[0] ,param 2[0] ,param 3[0]и т.д. - Параметры блока S - function , передаваемые через окно диалога. Параметры быть действительными и иметь тип double .

· p _ width 0, p _ width 1, p _ width 2 - и т.д. Переменные целого типа, значения которых равны размерности нулевого, первого, второго и т.д. параметров блока 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 ,приведен ниже:

void sfun_Outputs_wrapper(const real_T *u,real_T *y,const real_T *xD, /* optional */const real_T *xC, /* optional */const real_T *param0, /* optional */int_T p_width0 /* optional */real_T *param1 /* optional */int_t p_width1 /* optional */int_T y_width, /* optional */int_T u_width) /* optional */{/* Место для ввода расчетного кода */} ,

гдеsfun -имя S -функции.

Окно S - Function Builderс открытой вкладкой Output s показано на рис. 16.15.

Создание S-функций на языке C с помощью S-Function Builder - student2.ru
Рис. 16.15 Окно S-Function Builder(вкладка Outputs)

В примере на рис. 16.15 в первой строке объявляются переменные - параметры электродвигателя, и этим переменным присваиваются значения параметров передаваемых в S -функцию через окно диалога. Во второй строке объявляются и вычисляются переменные COO и С11, входящие в уравнения (17), (18). В третьей и четвертой строках записаны выражения для расчета выходных сигналов в соответствии с уравнениями (17) и (18). Параметр Inputs are needed in the output function ( direct feedthrough ) не установлен, поскольку в выражениях для расчета выходных сигналов отсутствуют входные. После генерации С-кода в тексте S-функции появится код, введенный в окне вкладки Outputs .

4. Continuous Derivatives -Производные непрерывных переменных состояния. Вкладка содержит текстовое окно, предназначенное для ввода выражений расчета производных непрерывных переменных состояния. В расчетных выражениях можно использовать те же переменные, что и на вкладке Outputs ,за исключением дискретных переменных состояния xD . Сами производные обозначаются как dx [0], dx [1], dx [2] и т.п.

Текст автоматически генерируемого метода mdl Derivatives ,приведен ниже:

void sfun_Derivatives_wrapper(const real_T *u,const real_T *y,real_T *dx,real_T *xC,const real_T *param0, /* optional */int_T p_width0, /* optional */real_T *param1,/* optional */int_T p_width1, /* optional */int_T y_width, /* optional */int_T u_width) /* optional */{/*Место для ввода расчетного кода */}

Окно S-Function Builderс открытой вкладкой Continuous Derivatives показано на рис . 16.15.

Создание S-функций на языке C с помощью S-Function Builder - student2.ru
Рис . 16.16 Окно S-Function Builder( вкладка Continuous Derivatives )

В примере на рис. 16.16 в первых двух строках объявляются переменные - параметры электродвигателя, и этим переменным присваиваются значения параметров передаваемых в S -функцию через окно диалога. В следующих двух строках объявляются и вычисляются переменные AOO … B 11 , входящие в уравнения (15), (16). В последних двух строках записаны выражения для расчета производных непрерывных переменных состояния в соответствии с уравнениями (15) и (16).

5. Discrete Update- Расчет дискретных переменных состояния. В текстовом окне вкладки записываются выражения для расчета дискретных переменных состояния. В расчетных выражениях можно использовать те же переменные, что и на вкладке Outputs ,за исключением непрерывных переменных состояния x С . Сами дискретные переменные состояния обозначаются как xD [0], xD [1], xD [2] и т.п.

Текст автоматически генерируемо метода mdl Update ,приведен ниже:

void sfun_Update_wrapper(const real_T *u,const real_T *y,real_T *xD,const real_T *param0, /* optional */int_T p_width0, /* optional */real_T *param1,/* optional */int_T p_width1, /* optional */int_T y_width, /* optional */int_T u_width) /* optional */{/* Место для ввода расчетного кода */}

Окно S - Function Builderс открытой вкладкой Discrete Update показано на рис. 16.17.

Создание S-функций на языке C с помощью S-Function Builder - student2.ru
Рис . 16.17 Окно S-Function Builder( вкладка Discrete Update ).

В рассматриваемом примере отсутствуют дискретные переменные состояния, поэтому на рисунке дан лишь пример расчетного выражения.

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 следует ввести команду:

Mex - setup

и далее следовать диалогу с компилятором. С программой MATLAB поставляется компилятор Lcc . Ниже приводится пример такого диалога:

Please choose your compiler for building external interface (MEX) files:

Would you like mex to locate installed compilers [y]/n? n -Ответ пользователя

Select a compiler: [1] Borland C++Builder version 5.0 [2] Borland C++Builder version 4.0 [3] Borland C++Builder version 3.0 [4] Borland C/C++ version 5.02 [5] Borland C/C++ version 5.0 [6] Borland C/C++ (free command line tools) version 5.5 [7] Compaq Visual Fortran version 6.1 [8] Compaq Visual Fortran version 6.5 [9] Digital Visual Fortran version 6.0 [10] Digital Visual Fortran version 5.0 [11] Lcc C version 2.4 [12] Microsoft Visual C/C++ version 6.0 [13] Microsoft Visual C/C++ version 5.0 [14] WATCOM C/C++ version 11 [15] WATCOM C/C++ version 10.6

[0] None

Compiler: 11 -Ответ пользователя

Наши рекомендации