|
|
|||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||
![]() |
|||||||||||||||||||||||||||||||||
|
|
|||||||||||||||||||||||||||||||||
|
|
|
Вход | |||||||||||||||||||||||||||||||
| Раздел "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
|
|
|
|