Смоделируйте систему в пространстве состояний Используя разработчика S-функции

В этом примере вы будете использовать основные методы в Разработчике S-функции смоделировать 2D вход, 2D выход дискретная система в пространстве состояний с двумя состояниями. Матрицы пространства состояний являются параметрами к S-функции, и S-входной-параметр-функции и выход являются векторами.

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

Сконфигурируйте разработчика S-функции настройки

Задайте количество дискретных состояний и их начальных условий, демонстрационного режима и шага расчета S-функции. Этот пример содержит два дискретных состояния, каждый инициализированный к 1, и дискретный демонстрационный режим с шагом расчета 1. Убедитесь, что Direct feedthrough выбран, потому что текущие значения 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 на модели.

  • Используйте Block Parameters из контекстного меню.

В качестве альтернативы можно сохранить матрицы пространства состояний в переменных в рабочей области MATLAB® и ввести имена переменных в поле Value для каждого параметра. Введите значения в изображение для параметров пространства состояний на поле Value таблицы Block Parameters.

S Function Builder block parameters table

Задайте Выходной метод

В этом примере, Outputs_wrapper метод вычисляет S-функцию выход как функция входных векторов и векторов состояния и матриц пространства состояний. В выходном коде ссылочные S-параметры-функции с помощью названий параметра заданы на таблице Ports and Parameters. Индексируйте в 2D матрицы с помощью скалярного индекса, снова имея в виду, что 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-имена-параметров-функции и индекс в 2D матрицы с помощью скалярного индекса, имея в виду, что 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 и выберите следующие опции:

  • Show compile steps

  • Create a debuggable MEX-file

  • Generate wrapper TLC

Чтобы узнать больше, что делает каждая опция, смотрите S-функции Сборки Автоматически Используя Разработчика S-функции.

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

Смотрите также

|

Похожие темы