Rambler's Top100 II Всероссийская конференция пользователей MATLAB >>
На первую страницу
Рубрика Matlab&Toolboxes
Российские MATLAB-разработки
Раздел "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.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 поддерживает следующие компиляторы:

  • 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-функции.

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

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


О получении локальных копий сайтов
  Всероссийская научная конференция "Проектирование научных и инженерных приложений в среде MATLAB" (май 2002 г.)
На первую страницу \ Сотрудничество \ MathWorks \ SoftLine \ Exponenta.ru \ Exponenta Pro   
E-mail: info@matlab.ru   
  Информация на сайте была обновлена 10.11.2003 Copyright 2001-2003 SoftLine Co 
  

 

Rambler's Top100    TopList   
Сайт управляется системой uCoz