exponenta event banner

Моделирование системы State-Space с использованием построителя S-функций

В этом примере будут использованы основные методы S-Function Builder для моделирования системы дискретного пространства с двумя входами и двумя выходами с двумя состояниями. Матрицы state-space являются параметрами для S-функции, а входные и выходные S-функции являются векторами.

Если требуется изучить написанную вручную версию созданной S-функции, см. раздел dsfunc.c. Обратите внимание, что для создания S-функции из примера модели S-Function Builder необходимо сначала построить модель.

Настройка параметров S-Function Builder

Укажите количество дискретных состояний и их исходные условия, режим выборки и время выборки S-функции. Этот пример содержит два дискретных состояния, каждое из которых инициализировано в 1и режим дискретной выборки с временем выборки 1. Убедитесь, что выбран прямой канал, поскольку текущие значения входов S-функции используются для вычисления ее выходов.

S-function builder settings with the number of discrete states set to 2, discrete states set to 1 comma 1, number of continuous states set to 0. Array layout set to column-major. Sample mode set to discrete. Sample time value is grayed out. Number of P works set to 0. Enable access to SimStruct is unchecked. Direct feedthrough is checked.

Определение портов и параметров

Используйте таблицу Ports and Parameters в нижней части редактора для определения портов и параметров S-функции. В этом примере имеется один входной порт, один выходной порт и четыре параметра.

Чтобы задать или изменить значения параметров блока, можно:

  • Дважды щелкните блок S-Function Builder в модели.

  • Используйте команду «Параметры блока» в контекстном меню.

Можно также сохранить матрицы состояния-пространства в переменных в рабочей области MATLAB ® и ввести имена переменных в поле Значение (Value) для каждого параметра. Введите значения в изображении для параметров пространства состояний в поле «Значение» таблицы «Параметры блока».

S Function Builder block parameters table

Определение метода вывода

В этом примере, Outputs_wrapper способ вычисляет выходной сигнал S-функции как функцию входного вектора и вектора состояния и матрицы состояния-пространства. В коде вывода укажите параметры S-функции, используя имена параметров, определенные в таблице Ports and Parameters. Индексировать в 2-D матрицы с помощью скалярного индекса, опять же памятуя, что S-функции используют индексирование на основе нуля. Например, для доступа к элементу C(2,1) в параметре S-функции C, использовать C[1]в коде S-функции.

void dsfunc_builder_Outputs_wrapper(const real_T *u,
                                    real_T *y,
                                    const real_T *xD,
                                    const real_T *xC,
                                    const real_T *A, const int_T p_width0,
                                    const real_T *B, const int_T p_width1,
                                    const real_T *C, const int_T p_width2,
                                    const real_T *D, const int_T p_width3)
{
/* Output_BEGIN */
    y[0]=C[0]*xD[0]+C[2]*xD[1]+D[0]*u[0]+D[2]*u[1];
    y[1]=C[1]*xD[0]+C[3]*xD[1]+D[1]*u[0]+D[3]*u[1];
/* Output_END */
}

Определение метода обновления

Update_wrapper метод обновляет дискретные состояния. Как и в случае выходного кода, используйте имена параметров S-функции и индекс в 2-D матрицы, используя скалярный индекс, памятуя о том, что S-функции используют индексирование на основе нуля. Например, для доступа к элементу A(2,1) в параметре S-функции A, использовать A[1]в коде S-функции. Переменная xD сохраняет конечные значения дискретных состояний. Введите следующий код в поле Update_wrapper функция.

void dsfunc_builder_Update_wrapper(const real_T *u,
                                   real_T *y,
                                   real_T *xD,
                                   const real_T *A, const int_T p_width0,
                                   const real_T *B, const int_T p_width1,
                                   const real_T *C, const int_T p_width2,
                                   const real_T *D, const int_T p_width3)
{
/* Update_BEGIN */
    real_T   tempX[2] = {0.0, 0.0};
    tempX[0]=A[0]*xD[0]+A[2]*xD[1]+B[0]*u[0]+B[2]*u[1];
    tempX[1]=A[1]*xD[0]+A[3]*xD[1]+B[1]*u[0]+B[3]*u[1];
   			 
    xD[0] = tempX[0];
    xD[1] = tempX[1];
/* Update_END */
}

Создание государственной космической системы

Щелкните стрелку под Build и выберите следующие опции:

  • Показать шаги компиляции

  • Создание настраиваемого MEX-файла

  • Создание TLC-оболочки

Дополнительные сведения о том, что делает каждый параметр, см. в разделе Автоматическое создание S-функций с помощью S-Function Builder.

Чтобы создать S-функцию, нажмите кнопку Создать на панели инструментов, чтобы создать исполняемый файл для этой S-функции. Теперь можно запустить модель и сравнить вывод с исходной дискретной S-функцией состояния-пространства, содержащейся в sfcndemo_dsfunc.

См. также

|

Связанные темы