![]() |
|||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||
![]() |
![]() |
![]() |
![]() |
||||||||||||||||||||||||||||||
![]() |
![]() |
||||||||||||||||||||||||||||||||
![]() |
![]() |
![]() |
![]() |
||||||||||||||||||||||||||||||
![]() |
![]() |
Вход | ![]() |
Раздел "Simulink" И.В.Черных. "Simulink: Инструмент моделирования динамических систем" В оглавление книги \ К следующему разделу \ К предыдущему разделу 16.10. Создание S-функций на языке Fortran При создании S-функции на языке Fortran могут использоваться два подхода. Первый поход (первый уровень) подразумевает использование только языка Fortran. Второй подход (второй уровень) предусматривает совместное использование программных модулей, написанных на языках Fortran и C. Наилучшими возможностями обладает второй способ. Однако, первый подход наиболее прост и позволяет создать Fortran S-функцию в сжатые сроки. В данном параграфе будет рассмотрен именно такой способ. Ограничения второго способа, по сравнению с первым, заключаются, в основном, невозможности передать параметры S-функции через окно диалога блока S-function. Данное ограничение легко преодолевается передачей параметров через входы блока S-function. Создание Fortran S-функции рассмотрим на примере двигателя постоянного тока независимого возбуждения (п. 16.7.6). В качестве основы использован файл шаблона sfuntmpl_fortran.f (папка ...\simulink\src). В тексте шаблона приняты следующие обозначения:
Ниже приводится текст S-функции модели ДПТ НВ (файл DPT_Sfunc_1_For.f): C=========================================================================== C Файл: DPT_Sfunc_1_For.for C Пример S-функции на языке FORTRAN длЯ моделированиЯ двигателЯ постоЯнного C тока независимого возбуждениЯ C C В примере выполнЯетсЯ моделирование с помощью уравнений пространства- С состоЯниЯ: C x' = Ax + Bu C y = Cx + Du C C Copyright 2002, Chernykh ILya C $Revision: Free C============================================================================ C C Откомпилировать S-функцию можно командой: C C mex DPT_Sfunc_1_For.f simulink.f C C Copyright 2002, Chernykh ILya C $Revision: Free C C============================================================================ C Функция: SIZES. Задает размерность вектора size. C C SIZES возвращает вектор, который задает характеристики модели. C Вектор содержит информацию о числе переменных состояния и другие параметры, C а именно: C SIZE(1) Число непрерывных переменных состоЯниЯ C SIZE(2) Число дискретных переменных состоЯниЯ C SIZE(3) Число выходных переменных C SIZE(4) Число входов C SIZE(5) Число разрывных корней системы C SIZE(6) Флаг, задающий возможность передачи входных переменных на выход C C============================================================================ C SUBROUTINE SIZES(SIZE) C .. Массив аргументов функции INTEGER*4 SIZE(*) C .. Параметры .. INTEGER*4 NSIZES PARAMETER (NSIZES=6) SIZE(1) = 2 C Число непрерывных переменных состояния (ток якоря и скорость C вращения вала) SIZE(2) = 0 С Число дискретных переменных состоЯниЯ C Параметр равен 0, поскольку модель непрерывнаЯ SIZE(3) = 2 C Число выходных переменных (скорость вращениЯ и момент на валу) SIZE(4) = 2+6 C Число входов. Параметр равен 2 + 6 (напряжение на обмотке якоря и C момент сопротивлениЯ + параметры двигателя). SIZE(5) = 0 C Число разрывных корней системы SIZE(6) = 1 C Прямой проход (1 - есть, 0 - нет). C В данном случае проход входных сигналов на выход есть, С поскольку параметры двигателя передаются через входной порт RETURN END C C============================================================================ C Функция: OUTPUT . Рассчитывает значения непрерывных выходных переменных. C============================================================================ C SUBROUTINE OUTPUT(T,X,U,Y) C .. Параметры .. C T - Текущее времЯ C X - Вектор непрерывных переменных состоЯниЯ системы C U - Вектор входных сигналов C Y - Вектор выходных переменных (возвращаемые значениЯ) C REAL*8 T REAL*8 X(*), U(*), Y(*) C REAL*8 L,R,J,Cm,Cw,Fi C Объявление переменных - параметров двигателя постоЯнного тока C L,R,J,Cm,Cw,Fi L=U(3) R=U(4) J=U(5) Cm=U(6) Cw=U(7) Fi=U(8) C C Расчет выходных переменных: Y(1) = Cm*Fi*X(1) Y(2) = X(2) RETURN END C C C===================================================== C Функция: INITCOND. Задает начальные значения переменных состояния. C===================================================== C SUBROUTINE INITCOND(X0) C .. Параметры .. C X0 - Вектор начальных значений переменных состояния системы C (возвращаемые значениЯ) REAL*8 X0(*) X0(1)=0 X0(2)=0 C В данном случае начальные условиЯ нулевые RETURN END C===================================================================== C Функция: DERIVS. Рассчитывает значения производных вектора состояния C системы X. C===================================================================== C SUBROUTINE DERIVS(T,X,U,DX) REAL*8 T, X(*), U(*), DX(*) C REAL*8 L,R,J,Cm,Cw,Fi C Объявление переменных - параметров двигателя постоЯнного тока L=U(3) R=U(4) J=U(5) Cm=U(6) Cw=U(7) Fi=U(8) C DX(1) = (-R/L)*X(1)-(Cw*Fi/L)*X(2)+(1/L)*U(1) DX(2) = (Cm*Fi/J)*X(1)-(1/J)*U(2) C RETURN END C C================================================================ C Функция: TSAMPL. Задает вектор модельного времени и смещениЯ C================================================================ C SUBROUTINE TSAMPL(T, X, U, TS, OFFSET) REAL*8 T,TS,OFFSET,X(*),U(*) TS=0. C Шаг модельного времени. OFFSET=0. C Смещение. RETURN END C C===================================================== C Шаблоны не используемых в данном примере функций. C===================================================== C C C==================================================================== C Функция: DSTATES. Рассчитывает новые значения дискретных переменных C состояния. C==================================================================== C .. Параметры .. SUBROUTINE DSTATES(T, X, U, XNEW) C XNEW - Вектор новых значений дискретных переменных состоЯниЯ системы REAL*8 T, X(*), U(*), XNEW(*) C --- Ничего не выполняется RETURN END C=================================================================== C Функция: DOUTPUT. Рассчитывает новые значения дискретных выходных переменных C=================================================================== C SUBROUTINE DOUTPUT(T, X, U, Y) REAL*8 T, X(*), U(*), Y(*) C --- Ничего не выполняется RETURN END C Сборку S-функции следует произвести командой: mex DPT_Sfunc_1_For.f simulink.f . Файл simulink.f предварительно необходимо скопировать из папки ...MATLAB6p5\simulink\src в рабочую папку. Естественно, что компилятор языка Fortran должен быть дополнительно установлен на компьютере. Matlab 6.5 поддерживает следующие компиляторы:
Перед сборкой S-функции следует выбрать компилятор командой: mex -setup. Пример модели с разработанной S-функцией показан на рис. 16.20. На рисунке видно, что параметры модели передаются не через окно диалога блока S-function, а через входной порт.
Рис. 16.20 Модель ДПТ на основе Fortran S-функции. В оглавление книги \ К следующему разделу \ К предыдущему разделу |
![]() |
||
Всероссийская научная конференция "Проектирование научных и инженерных приложений в среде MATLAB" (май 2002 г.) |
||
На первую страницу \ Сотрудничество \ MathWorks \ SoftLine \ Exponenta.ru \ Exponenta Pro | ||
E-mail: info@matlab.ru | ||
Информация на сайте была обновлена 10.11.2003 |
Copyright 2001-2003 SoftLine Co
|
|