Создание 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, а через входной порт.
Рис. 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. | |||