И.В.Черных
При создании 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-функции.
Приложение 1. Система меню обозревателя библиотек программы Simulink
Таблица П.1
Команда |
Назначение |
|
|
||
New |
Открыть окно новой блок-диаграммы |
|
Model (Ctrl-N) |
Открыть окно для создания Simulink-модели. |
|
Library |
Открыть окно для создания новой библиотеки Simulink. |
|
Open … (Ctrl - O) |
Открыть существующий mdl-файл. При выборе данного пункта открывается окно диалога, с помощью которого можно отыскать и открыть требуемый файл модели. |
|
Close (Ctrl – W) |
Закрыть окно модели (и соответствующий mdl-файл). В том случае, если модель изменялась, то перед закрытием окна MATLAB запросит подтверждение на закрытие файла. |
|
Preferences… |
Настройка Simulink. Задает параметры создаваемых моделей. |
|
|
Продолжение таблицы П.1
Команда |
Назначение |
Add to the current model |
Добавить выделенный блок в текущую модель. |
Find block... |
Найти блок с заданным именем. Команда выводит окно с запросом имени блока. |
Find next block... |
Найти следующий блок с заданным именем. Эту же операцию выполняет и команда Find next в окне задания слова для поиска. |
|
|
Toolbar |
Вывод/скрытие панели инструментов. |
Status bar |
Вывод/скрытие строки состояния. |
Description |
Вывод/скрытие окна сообщений. |
Stay оn top |
Установка статуса окна обозревателя библиотек “поверх всех окон”. |
Collapse entire Browser |
Закрытие текущего раздела библиотеки. |
Expand entire Browser |
Раскрытие текущего раздела библиотеки. |
Large icons |
Отображение пиктограмм блоков в увеличенном размере. |
Small icons |
Отображение пиктограмм блоков в уменьшенном размере. |
Show Parameters for selected block |
Вывод окна установки параметров отмеченного блока. |
|
|
Help on the selected block |
Справка по выделенному блоку. |
Simulink help |
Вывод окна справочной системы Simulink. |
Tip of the day |
Полезные советы каждый день. |
Приложение 2. Система меню окна модели
Таблица П.2
Команда |
Назначение |
||
|
|||
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. |
||
|
|||
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) |
Обновить окно модели. Команду необходимо использовать в следующих случаях:
|
|||
|
||||
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%) |
Восстановить стандартный масштаб изображения. |
|||
|
||||
Start |
Начать моделирование. При запуске модели команда Start заменяется командой Pause, которая позволяет приостановить сеанс моделирования. Кроме того, становится доступной команда Stop, расположенная ниже. При прерывании моделирования с помощью команды Pause она заменяется альтернативной командой — Continue. |
|||
Stop |
Завершить моделирование. Позволяет остановить моделирование досрочно, то есть либо до истечения заданного интервала моделирования, либо до реализации предусмотренных условий окончания сеанса моделирования. Команда становится доступной после запуска модели на исполнение |
|||
Simulation parameters ... |
По данной команде открывается диалоговое окно настроек параметров моделирования. |
|||
Normal |
Обычный (не ускоренный) режим расчета. Команда доступна, если установлено приложение Simulink Performance Tool. |
|||
Accelerator |
Ускоренный режим расчета. Команда доступна, если установлено приложение Simulink Performance Tool. В этом режиме, после запуска модели на исполнение, создается исполняемый файл модели в виде динамической библиотеки (файл с расширением dll). В результате скорость расчета возрастает в несколько раз. Ускоренный режим расчета не поддерживается для моделей имеющих замкнутые алгебраические контуры. |
|||
|
||||
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 |
Вывод порядкового номера блока в последовательности выполнения расчета. |
|||
|
||||
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 для исследования и разработки систем управления). |
|||
|
||||
Simulink help |
Справка по работе с программой Simulink. |
|||
Blocks |
Справка по выделенному блоку или библиотеке блоков в целом. |
|||
Shortcuts |
Справка по управлению программой Simulink с помощью нажатия комбинаций клавиш. |
|||
S-functions |
Справка по созданию S-функций. |
|||
Demos |
Запуск системы демонстрационных примеров. |
|||
About Simulink |
Вывод окна с номером версии Simulink. |