Создание 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) = 0C Число разрывных корней системы 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, а через входной порт.

Создание S-функций на языке Fortran - student2.ru

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

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

Приложение 1. Система меню обозревателя библиотек программы Simulink

· File (Файл) — Работа с файлами библиотек.

· Edit (Редактирование)— Добавление блоков и их поиск.

· View (Вид) — Управление показом элементов интерфейса.

· Help (Справка) — Вызов справочной системы.

Таблица П.1

Команда Назначение
Меню File (Файл)
New Открыть окно новой блок-диаграммы
  Model (Ctrl-N) Открыть окно для создания Simulink-модели.
Library Открыть окно для создания новой библиотеки Simulink.
Open … (Ctrl - O) Открыть существующий mdl-файл. При выборе данного пункта открывается окно диалога, с помощью которого можно отыскать и открыть требуемый файл модели.
Close (Ctrl – W) Закрыть окно модели (и соответствующий mdl-файл). В том случае, если модель изменялась, то перед закрытием окна MATLAB запросит подтверждение на закрытие файла.
Preferences… Настройка Simulink.Задает параметры создаваемых моделей.
Меню Edit (Редактирование)

Продолжение таблицы П.1

Команда Назначение
Add to the current model Добавить выделенный блок в текущую модель.
Find block... Найти блок с заданным именем. Команда выводит окно с запросом имени блока.
Find next block... Найти следующий блок с заданным именем. Эту же операцию выполняет и команда Find next в окне задания слова для поиска.
Меню View (Вид)
Toolbar Вывод/скрытие панели инструментов.
Status bar Вывод/скрытие строки состояния.
Description Вывод/скрытие окна сообщений.
Stay оn top Установка статуса окна обозревателя библиотек “поверх всех окон”.
Collapse entire Browser Закрытие текущего раздела библиотеки.
Expand entire Browser Раскрытие текущего раздела библиотеки.
Large icons Отображение пиктограмм блоков в увеличенном размере.
Small icons Отображение пиктограмм блоков в уменьшенном размере.
Show Parameters for selected block Вывод окна установки параметров отмеченного блока.
Help (Справка)
Help on the selected block Справка по выделенному блоку.
Simulink help Вывод окна справочной системы Simulink.
Tip of the day Полезные советы каждый день.

Приложение 2. Система меню окна модели

· File (Файл) — Работа с файлами моделей.

· Edit (Редактирование) — Изменение модели и поиск блоков.

· View (Вид) — Управление показом элементов интерфейса.

· Simulation (Моделирование)— Задание настроек для моделирования и управление процессом расчета.

· Format (Форматирование) — Изменение внешнего вида блоков и модели в целом.

· Tools (Инструментальные средства) — Применение специальных средств для работы с моделью (отладчик, линейный анализ и т.п.)

· Help (Справка)— Вывод окон справочной системы.

Таблица П.2

Команда Назначение
Меню File (Файл)
New Открыть окно новой блок-диаграммы
  Model (Ctrl-N) Открыть окно для создания Simulink-модели.
Library Открыть окно для создания новой библиотеки Simulink.
Open … (Ctrl - O) Открыть существующий mdl-файл. При выборе данного пункта открывается стандартная диалоговая панель файловой системы Windows, с помощью которой можно найти и открыть требуемый файл модели.
Close (Ctrl – W) Закрыть окно блок-диаграммы (и соответствующий mdl-файл). В том случае, если в блок-диаграмму вносились изменения, которые не были сохранены в файле на диске, то перед закрытием окна MATLAB запрашивает подтверждение на закрытие файла.
Save (Ctrl – S) Cохранить (записать на диск) mdl-файл; если данный файл записывается впервые, то при выборе этой команды открывается стандартная диалоговая панель, с помощью которой пользователь может указать новое имя файла (вместо untitled) и каталог, в котором будет производиться запись; если же файл уже записывался на диск ранее, то при выполнении команды Save он будет сохранен под прежним именем и в том же каталоге (без открытия диалоговой панели).
Save as... Команда позволяет сохранить файл под новым именем или в другом каталоге; для ее выполнения также используется стандартная диалоговая панель Windows.
Source Control... Управление источниками сигналов.
  Check in... Проверка входа. Позволяет ввести расширенное текстовое описание источника.
Check out Проверка выхода. Позволяет ввести расширенное текстовое описание источника.
Undo Check out Отмена проверки выхода.
Preferences Команда выводит окно настроек пакета Simulink (окно Preferences) с открытой панелью General > Source control, что позволяет выбрать схему управления источниками.
Model Properties Команда вызова компоненты управления версиями Simulink-модели.
Print (Ctrl – P) Команда обеспечивает вывод на печать блок-диаграмму модели и некоторую дополнительную информацию по ней. При выполнении этой команды открывается диалоговое окно, обеспечивающее настройку параметров печати
Print setup Команда настройки параметров вывода на печать. Установка параметров выполняется с помощью стандартной диалоговой панели Windows
Exit MATLAB Завершение работы с системой Matlab.
Меню Edit (Редактирование)
Undo Отменить предыдущую команду редактирования. В некоторых случаях команда Undo может уточняться, например, после добавления в блок-диаграмму линии связи между блоками она называется Undo Add Line (Отменить добавление линии). Если нельзя отменить предыдущее действие, то команда Undo заменяется сообщением Can't Undo.
Redo Отменить выполнение команды Undo. Эта команда также может видоизменяться (например, Redo Add Line), либо сообщать о невозможности отмены (Can't Redo).
Cut Вырезать (переместить в буфер обмена) один или несколько блоков. Соответствующие блоки должны быть выделены.
Copy Копировать один или несколько блоков. Копируемые блоки должны быть предварительно выбраны. Данная команда используется совместно с командой Paste.
Paste Вставить копируемый или удаленный в буфер обмена участок модели. Для того чтобы указать позицию вставки, необходимо предварительно щелкнуть в соответствующей точке окна блок-диаграммы (этой точке будет соответствовать верхний левый угол вставляемой области).
Clear Очистить (удалить) выделенную область. Область в буфере обмена не сохраняется, но может быть восстановлена с помощью команды Undo.
Select All (Ctrl - A) Выделить все элементы блок-диаграммы.
Copy Model to Clipboard Копировать модель в буфер обмена. Запись графического изображения блок-диаграммы в буфер обмена Windows для передачи в другие Windows-приложения в качестве графического объекта.
Find … (Ctrl - F) Поиск объекта в модели
Block Parameters… Вызов диалогового окна для установки параметров выбранного блока.
Block Properties… Вызов диалогового окна для установки дополнительных атрибутов выбранного блока.
       
Signal Properties Вызов окна диалога окна для установки атрибутов сигнала, передаваемого по выбранной линии связи. Окно содержит следующие элементы: • текстовое поле Signal Name (Имя сигнала), предназначенное для ввода имени (текстового атрибута) сигнала; метка отображается в блок-диаграмме рядом с соответствующей линией связи, • текстовое поле Description (Описание), позволяющее вводить пояснения к данному сигналу, • текстовое поле Document Link (Связь с документом), в котором вводится выражение (команда) MATLAB, формирующее ссылку на источник дополнительной информации по данному сигналу, • флажок Simulink Global(Test Point) (Визуализация контрольной точки). Если он установлен, то во время моделирования соответствующая линия связи “подсвечивается” при наличии в ней сигнала.
Create Subsystem (Ctrl - G) Создать подсистему. По этой команде выбранная часть модели (один или несколько блоков) “сворачиваются” в подсистему, и заменяются в блок-диаграмме одним блоком — Subsystem..
Mask Subsystem… (Ctrl – M) Маскировать подсистему. Команда обеспечивает вызов редактора “маски” подсистемы. Команда становится доступна, если в модели выделена подсистема (блок типа Subsystem). Маскированная подсистема — это подсистема, используемая в модели как один неделимый блок, содержимое которого скрыто под “маской”, с помощью которой осуществляется задание параметров подсистемы. Если выделенная подсистема уже имеет “маску”, т. е. является маскированной, то команда Mask Subsystem принимает вид Edit Mask.
Look Under Mask (Ctrl - U) Заглянуть под маску. Команда открывает окно блок-диаграммы маскированной подсистемы. Команда доступна только в том случае, если выбранный блок является маскированной подсистемой
Link options Настойка связей блока
  Go To Library Link Перейти к связанной библиотеке. Команда открывает раздел библиотеки, к которому относится выделенный блок; доступна только в том случае, если блок взят из библиотеки пользователя или из раздела Simulink Extras.
Disable Link Разорвать связь с библиотекой. Команда позволяет сделать библиотечный блок "независимым", не связанным с библиотекой, что дает возможность его редактирования. Данная команда работает для тех же разделов библиотеки, что и предыдущая.
Unlock Library Разблокировать библиотеку. Команда доступна только в окне библиотеки (Library). После ее выполнения становится возможным редактирование соответствующего раздела, при этом на месте команды выводится признак Library Unlocked (Библиотека разблокирована), который сохраняется до закрытия окна редактируемого раздела.
Update Diagram (Ctrl - D) Обновить окно модели. Команду необходимо использовать в следующих случаях: · после изменения библиотечных блоков, копии которых используются в модели; · после добавления в конфигурацию MATLAB нового раздела библиотеки, блоки из которого используются в открытой модели; · после изменения параметров одного или нескольких блоков модели из командного окна MATLAB; · после изменения S-функции, используемой в модели (при добавлении или удалении входных и/или выходных портов соответствующего блока).
Меню View (Вид)
Go to Parent Переход из подсистемы в систему высшего уровня иерархии (“родительскую систему”). Команда доступна только, если открыта подсистема.
Toolbar Показать/скрыть панель инструментов
Statusbar Показать/скрыть строку состояния
Model Browser Options Параметры обозревателя модели.
  Model Browser Вызов обозревателя модели
Show Library Links Показывать в окне обозревателя библиотечные подсистемы, то есть подсистемы, созданные пользователем и включенные им в состав собственной библиотеки. При выборе этой команды окно блок-диаграммы модели дополняется подокном, отображающим ее иерархическую структуру в виде дерева
Show Masked Subsystems Показывать в окне обозревателя маскированные подсистемы.
Block Data Tips Options Справка по параметрам блока. Содержит команды управления всплывающей подсказкой (tips) для блоков модели. О том, что соответствующий режим установлен, свидетельствует маркер в виде птички. Подсказка появляется на экране, если задержать на некоторое время указатель мыши над пиктограммой блока.
  Block name Показывать название блока
Parameter names and values Показывать имена и значения параметров настройки блока.
User description string Показывать описание блока заданное пользователем с помощью команды Edit/Block Properties…
Show Library Browser Показывать окно обозревателя библиотек блоков.
Zoom In Увеличить масштаб. Увеличить масштаб изображения блок-диаграммы; каждое обращение к команде дает увеличение масштаба в полтора раза (на 50%).
Zoom Out Уменьшить масштаб. Уменьшить масштаб изображения блок-диаграммы; каждое обращение к команде дает уменьшение масштаба в полтора раза.
Fit system to view Подготовить систему для просмотра. Увеличить масштаб изображения выбранного элемента блок-диаграммы. Команда обеспечивает N-кратное увеличение (кратность увеличения зависит от исходного размера элемента), и позиционирует элемент по центру окна блок-диаграммы. Повторное применение дополнительного эффекта не дает.
Normal (100%) Восстановить стандартный масштаб изображения.
Меню Simulation (Моделирование)
Start Начать моделирование. При запуске модели команда Start заменяется командой Pause, которая позволяет приостановить сеанс моделирования. Кроме того, становится доступной команда Stop, расположенная ниже. При прерывании моделирования с помощью команды Pause она заменяется альтернативной командой — Continue.
Stop Завершить моделирование. Позволяет остановить моделирование досрочно, то есть либо до истечения заданного интервала моделирования, либо до реализации предусмотренных условий окончания сеанса моделирования. Команда становится доступной после запуска модели на исполнение
Simulation parameters ... По данной команде открывается диалоговое окно настроек параметров моделирования.
Normal Обычный (не ускоренный) режим расчета. Команда доступна, если установлено приложение Simulink Performance Tool.
Accelerator Ускоренный режим расчета. Команда доступна, если установлено приложение Simulink Performance Tool. В этом режиме, после запуска модели на исполнение, создается исполняемый файл модели в виде динамической библиотеки (файл с расширением dll). В результате скорость расчета возрастает в несколько раз. Ускоренный режим расчета не поддерживается для моделей имеющих замкнутые алгебраические контуры.
Меню Format (Форматирование)
Font... Выбор шрифта для текстовой информации, отображаемой блоком.
Text Alignment Выравнивание текста. Задает способ расположения текста в текстовой области.
Flip Name Изменить положение имени блока (над или под изображением блока).
Hide Name/ Show Name Скрыть/показать имя блока.
Flip Block Развернуть изображение блока относительно вертикальной оси симметрии на 180°.
Rotate Block Повернуть изображение блока относительно вертикальной оси симметрии на 90° (по часовой стрелке).
Show/Hide Drop Shadow Показать/скрыть “тень” блока.
Hide/Show Port Labels Скрыть/показать метки портов блока. Данная команда применима только к блокам-подсистемам (Subsystem), содержащим внутренние входные или выходные порты, то есть блоки In и Out. Если такие блоки имеются в подсистеме, то их метки по умолчанию выводятся на пиктограмме блока-подсистемы.
Foreground Color Основной цвет. Выбор цвета контура и символов на пиктограмме выбранного блока (группы блоков).
Background Color Цвет фона. Выбор цвета фона пиктограммы выбранного блока (группы блоков).
Screen Color Выбор цвета фона блок-диаграммы.
Library Link Display Отображение связей с библиотеками.
Sample Time Colors Подсветка блоков, управляемых параметром Sample time. Блоки, работа которых зависит от величины шага модельного времени, а также соединяющие их линии связи при выполнении данной команды выделяются на блок-диаграмме красным цветом.
Wide nonscalar lines Широкие линии связи для не скалярных величин. Линии связи, по которым передаются векторные и матричные величины, выводятся более “жирными”.
Signal dimensions Размерность векторных и матричных линий связи. Для векторных или матричных линий связи выводится в цифровой форме размерность передаваемого сигнала, то есть число элементов вектора.
Port Data Types Тип порта. Рядом с линиями связи отображаются наименования типов данных, установленных для портов, с которыми они соединены.
Storage class Класс памяти.
Execution order Вывод порядкового номера блока в последовательности выполнения расчета.
Tools (Инструментальные средства)
Data explorer… Обозреватель данных. Позволяет просмотреть значения переменных находящихся в рабочей области MATLAB.
Simulink debugger… Отладчик моделей. Позволяет в пошаговом режиме протестировать модель.
Data Class Designer… Инструмент создания классов данных.
Model differences… Сравнение моделей.
  Merge/Compare two models… Объединить/Сравнить две модели.
Compare to last saved model… Сравнить текущее состояние модели с вариантом который был сохранен на диске в последний раз.
Profiler Создание отчета о процессе моделирования. Команда должна быть выполнена до начала процесса моделирования. По окончании моделирования создается и выводится на экран отчет в котором можно просмотреть временные затраты при выполнении расчета.
Coverage Setting… Открытие окна настроек отчета по моделированию.
Linear Analysis… Исследование линейных стационарных систем. Команда доступна, если установлен инструмент Control System Toolbox (Приложение к MATLAB для исследования и разработки систем управления).
Help (Справка)
Simulink help Справка по работе с программой Simulink.
Blocks Справка по выделенному блоку или библиотеке блоков в целом.
Shortcuts Справка по управлению программой Simulink с помощью нажатия комбинаций клавиш.
S-functions Справка по созданию S-функций.
Demos Запуск системы демонстрационных примеров.
About Simulink Вывод окна с номером версии Simulink.
         

Наши рекомендации