MATLAB.Exponenta
–Û·Ë͇ Matlab&Toolboxes

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). В тексте шаблона приняты следующие обозначения:

  • T - Текущее время.
  • X - Вектор непрерывных переменных состояния системы.
  • U - Вектор входных сигналов.
  • Y - Вектор выходных переменных.
  • X0 - Вектор начальных значений непрерывных переменных состояния системы.
  • DX - Вектор производных переменных состояния системы.
  • XNEW - Вектор новых значений дискретных переменных состояния системы.

Ниже приводится текст S-функции модели ДПТ НВ (файл DPT_Sfunc_1_For.f):

C===========================================================================C   Файл: DPT_Sfunc_1_For.forC   Пример S-функции на языке FORTRAN длЯ моделированиЯ двигателЯ постоЯнногоC   тока независимого возбуждениЯCC   В примере выполнЯетсЯ моделирование с помощью уравнений пространства-С   состоЯниЯ:C      x' = Ax + BuC      y  = Cx + DuC                  C   Copyright 2002, Chernykh ILyaC   $Revision: FreeC============================================================================CC Откомпилировать S-функцию можно командой:CC    mex DPT_Sfunc_1_For.f simulink.fCC    Copyright 2002, Chernykh ILyaC    $Revision: FreeCC============================================================================ 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 поддерживает следующие компиляторы:

  • Compaq Visual Fortran version 6.1
  • Compaq Visual Fortran version 6.6
  • Digital Visual Fortran version 6.0
  • Digital Visual Fortran version 5.0

Перед сборкой S-функции следует выбрать компилятор командой:

mex -setup.

Пример модели с разработанной S-функцией показан на рис. 16.20. На рисунке видно, что параметры модели передаются не через окно диалога блока S-function, а через входной порт.

Рис. 16.20 Модель ДПТ на основе Fortran S-функции.

[Скачать пример]

В оглавление книги \ К предыдущему разделу


Поиск по сайту:

Система Orphus

Яндекс.Метрика