Компоненты и технологии, № 2'2004
SystemView + Matlab + Simulink
Данная статья описывает использование возможностей программы МаНаЬ для моделирования в программе SystemView.
Иосиф Златин
[email protected] Сергей Кадышев
Matlab — одна из старейших, тщательно проработанных систем автоматизации математических расчетов, построенная на расширенном представлении матричных операций.
Связь между SystemView и Matlab осуществляется при помощи опции M-Link, пиктограмма которой расположена на панели дополнительных библиотек. Опция M-Link программы SystemView обеспечивает интегрирование .m и Mex-файлов системы Matlab в моделирование SystemView. Это интегрирование позволяет:
• объединять моделирование, существующее в Matlab, с проектами SystemView;
• включать библиотеки, созданные в Matlab, в проекты SystemView;
• включать пользовательские элементы, описанные на языке Matlab, в проекты SystemView;
• импортировать и экспортировать параметры сигналов Matlab и SystemView;
• исследовать результаты моделирования, используя SystemView и средства анализа Matlab;
• алгебраически связывать функциональные параметры Matlab с системными переменными и глобальными постоянными SystemView;
• создавать, редактировать и отлаживать программы, написанные в Matlab, в пределах SystemView. При этом на компьютере должен быть установлен пакет Matlab и в конфигурации Windows указан путь к нему.
SystemView + Matlab
Опция M-Link определяет совокупность функций Matlab в пределах SystemView, редактирует эти функции и создает новые, устанавливает параметры и использует любые отдельные или все эти функции в проектах SystemView. Все эти задачи выполняются через дружественный интерфейс с большинством тех же характеристик, что и в стандартном библиотечном интерфейсе SystemView.
Опция M-Link может содержать любое число функций Matlab. Эти функции легко создаются или добавляются опцией M-Link, которая выбирается из меню Tools программы SystemView.
После выбора файла Matlab (файлы с расширением .m или .dll) для включения в опцию M-Link вы должны определить число входов и выходов функции (элемента), а также ее (его) параметры.
Вы можете также каждому из них присвоить свой заголовок.
Для каждого элемента должны быть установлены значения параметров и размерность каждого входа и выхода.
Фактически любой файл Matlab — .m или Mex — может быть включен в блок-схему SystemView. Это выполняется при создании библиотеки функций Matlab в пределах SystemView с последующим выбором функции из этой библиотеки для использования с данной блок-схемой SystemView. Опция M-Link — просто набор ссылок на существующие файлы Matlab .m или Mex .dll на вашем компьютере.
После того как библиотека функций создана, любая или все эти функции могут использоваться в будущем моделировании SystemView. В любое время могут быть добавлены новые функции, а существующие функции могут быть удалены.
Чтобы добавить одну или несколько функций к вашей опции M-Link, в меню Tools выберите Matlab, затем Library (или перетяните элемент Matlab И из панели дополнительных библиотек SystemView в область функциональных схем Design и дважды щелкните по элементу). Появится окно опции M-Link (рис. 1).
Это окно позволяет добавлять или удалять функции Matlab в вашей библиотеке и создавать новые функции Matlab внутри SystemView. После выбора
Рис. 1. Диалоговое окно опции M-Link
Компоиеиты и технологии, № 2'2004
Таблица 1. Параметры диалогового окна опции M-Link
Параметр Описание
Поле Matlab Functions Содержит все функции Matlab, которые являются в настоящее время элементами вашей опции M-Link. Чтобы использовать функцию Matlab, выберите ее из этого окна, добавьте существующий файл Matlab или создайте новый файл, как будет описано ниже.
Поле Matlab Tokens Содержит перечень всех элементов Matlab, используемых в текущей системе SystemView.
Кнопка Add Existing... Добавляет уже существующую функцию Matlab к вашей опции M-Link.
Кнопка Create New. Служит для создания новой функции Matlab и добавления ее к вашей опции M-Link.
Кнопка Remove Удаляет функцию Matlab из вашей опции M-Link.
Кнопка Define. Служит для определения выбранной функции Matlab. Определение функций Matlab в пределах SystemView будет описано ниже.
Кнопка Specify Matlab Function Editor. Служит для выбора предпочтительного редактора .m-файлов.
файла Matlab для включения в опцию M-Link вы должны определить число входов и выходов функции, а также задать параметры. Каждому из входов и выходов можно присвоить свой заголовок. Порядок работы для определения функции Matlab описан ниже.
Параметры этого окна приведены в таблице 1.
После щелчка по кнопке Define в окне опции M-Link вы увидите окно Function Definition (Определение функции), показанное на рис. 2.
последовательности. Названия переменных приведены в таблице 3.
Если вы нуждаетесь в использовании одинарных кавычек в синтаксисе функции, используйте пару одинарных кавычек.
После того как функциональный элемент Matlab задан, следует установить его индивидуальные параметры. Установка параметров элемента Matlab в SystemView подобна установке параметров стандартного функционального элемента. Пользователь может щелкнуть по кнопке Parameters... в диалоговом окне библиотеки или щелкнуть правой кнопкой мыши на элементе и в появившемся меню выбрать Edit Parameters. Появится диалоговое окно, подобное приведенному на рис. 3.
Значения параметров вводят в поля, описанные заголовками, заданными для элемента. Значение строкового параметра (должно
Таблица 2. Параметры диалогового окна Function Definition
использоваться один раз) должно быть введено без кавычек. Помимо параметров функции функциональный элемент Matlab имеет дополнительные параметры, которые задают размеры входных и выходных буферов.
Элементы Matlab могут быть выбраны как элементы SystemView Variable, и их параметры, включая размеры буферов, могут быть глобально связаны (Globally Linked) так же, как это делается для большинства других таких же элементов SystemView.
Файлы примеров, находятся в папке: SystemView\Examples\Matlab. Рассмотрим примеры, иллюстрирующие устройство и использование функций Matlab в рамках SystemView.
Параметры этого диалогового окна описаны в таблице 2.
Содержимое .m-файла может быть отредактировано в окне Function Definition (Определение функции). Команды меню Save Script и Save Script As. позволяют сохранить изменения.
Количество входов, выходов и параметров, все заголовки и синтаксис функции могут быть запомнены как комментарии (%SVU ...) в пределах скрипта функции или в отдельном файле (.prm). Чтобы их запомнить в другом файле, используйте меню Save Function Definition As. Они могут быть загружены позже с помощью команды Open Function Definition File. (Открыть файл определения функции.). Чтобы запомнить их непосредственно в скрипте функции, используйте кнопку Add Definition (%SVU) и вставьте специальные комментарии в текст.
Формой специального комментария в определении является «%SVU <заданные операторы:». Они могут быть добавлены в скрипт вручную. Специально названным переменным, использующим синтаксис языка Matlab, могут быть назначены только постоянные численные значения или числовые
Параметр Описание
Поле Number of Inputs Установка числа назначаемых входов функции
Поле Input Captions Установка заголовков входов
Поле Number of Outputs Установка числа назначаемых выходов функции
Поле Output Caption Установка заголовков выходов
Поле Number of Parameters Установка количества числовых параметров функции
Поле Parameter Captions Установка заголовков параметров
Поле Use String Parameter Установите галочку, если функция SystemView использует строковый параметр
Поле String Caption Установка заголовка для строкового параметра
Селектор Function Attribute (Source, General, Sink) Определяет тип функции для SystemView. Этот селектор автоматически отрегулирован согласно числу входов и выходов (например, если количество выходов равно О, автоматически выбирается атрибут анализатор данных (Sink)). И наоборот, количество входов и выходов автоматически регулируется согласно установленным атрибутам (например, если атрибут - Источник (Source), количество входов становится равным О).
Кнопка Custom Picture Служит для назначения функции другой пиктограммы
Поле Function Syntax (Синтаксис функции) Это поле содержит выражение, которому Matlab дает оценку. Входы, выходы и параметры соответствуют названиям их заголовков, и эти названия должны использоваться в выражении. Входные векторы посылаются в Matlab, и если используются различные типы данных, тип преобразования должен быть включен в выражение. Параметры функции, за исключением строкового параметра, в процессе вычисления могут использоваться как переменные рабочего пространства Matlab, так как их значения сохраняются между запросами. Параметры не являются глобальными переменными.
Кнопка Get Definitions (%SVU) Загружает определение функции, указанное в специальных комментариях в .m-файле
Кнопка Add Definitions (%SVU) Служит для вставки определения функции в специальные комментарии в .m-файле
Кнопка Launch Editor. Запускает редактор .m-файла
Кнопка Refresh. Заставляет SystemView перечитать текущий файл
Кнопка New Function. Служит для замены функции в перечне библиотеки. Эта кнопка используется также после редактирования скрипта функции для запоминания его под другим именем.
Auto Update & Save Script Контроль автоматического сохранения определения функции и любых изменений в скрипте функции, когда вы щёлкаете по кнопке OK для завершения процесса задания функции.
Таблица З. Название переменных
Переменная величина Название переменной
Number of Assigned Inputs (Число назначенных входов) Ninputs, nIn или nin
Assigned Input Captions (Заголовки, присвоенные входам) InputCaptionX, InX или inX, где X — число, 0 X < nInputs
Number o Assigned Outputs (Число назначенных выходов) Noutputs, nOut или nout
Assigned Output Captions (Заголовки, присвоенные выходам) OutputCaptionX, OutX или outX, где X — число, 0 X < nOutputs
Number of Parameters (Число параметров) nParameters, nParam или nparam
Parameter Captions (Заголовки параметров) ParameterCaptionX, ParamX или paramX, где X — число, 0 X < nParameters
Function Syntax (Синтаксис функции) FunctionSyntax, Function, function, Syntax или syntax
е
Компоненты и технологии, № 2'2004
Пример 1. ConstOffset.svu В данном примере вычисляется сумма сигнала на входе «x» с постоянным параметром «c».
Скрипт функции Matlab Const0ffset.m следующий:
function y=Const0ffset(x, c)
% 0ffset the input by a constant value y=x+c;
Установки по умолчанию элемента Matlab могут быть использованы без изменения. Эти установки следующие:
• один вход размерностью 1, озаглавленный «In_0»;
• один выход размерностью 1, озаглавленный «0ut_0»;
• один параметр равный 0, озаглавленный «Param_0»;
• строкового параметра нет;
• синтаксис функции «[0ut_0]=Const0ffset (In_0, Param_0)» может быть использован без каких-либо изменений.
Пример 2. ConstOffset2.svu Если название входа изменено на «х», выхода — на «y» и параметра на «c», то и синтаксис функции должен быть изменен на «у=Const0ffset (х, c);». Чтобы автоматизировать установку заголовков, скрипт должен быть изменен:
function y=Const0ffset(x,c)
% 0ffset the input by a constant value y=x+c;
%svu nIn=1; In0='x';
%svu n0ut=1; 0ut0='y';
%svu nParam=1; Param0='c';
%svu Syntax='y=Const0ffset(x,c);';
В данном случае установки функции будут следующие:
• один вход размерностью 1, озаглавленный «х»;
• один выход размерностью 1, озаглавленный «y»;
• один параметр равный 0, озаглавленный «c»;
• строкового параметра нет;
• синтаксис функции «[ y ]=ConstOffset ( x , c )». Пример 3. ConstOffset3.svu Выражение также может быть напечатано в синтаксисе функции непосредственно, то есть «y=x+c;» вместо вызова функции в целом. Скрипт может быть сокращен до следующего вида:
% Offset the input by a constant value
%
%svu nIn=1; In0='x';
%svu nOut=1; 0ut0='y';
%svu nParam=1; Param0='c';
%svu Syntax='y=x+c;';
Даже притом, что подключать файл .m нет необходимости, он должен существовать, чтобы быть введенным в опцию M-Link. Рекомендуем поместить комментарии для
элемента в этот файл. Создание таких файлов комментария — главное предназначение кнопки CreateNew... при диалоговом определении элемента МайаЬ.
Пример 4. SvuFFT.svu
БПФ (быстрое преобразование Фурье), идентичное вычисляемому элементом т из библиотеки операторов 8у51ешУ1е'^ выполняется следующим образом:
x=xReal+i*xImag;
у^^Ы^^(х));
n=length(y);
у = [у(2:п)',у(1)']';
yReal=real(y);
yImag=imag(y);
В данном случае используется 2 входа, озаглавленные как «xReal», «xImag» и 2 выхода «yReal», «yImag». Все входные и выходные размерности устанавливаются равными 2”. Для подтверждения идентичности полученного функционального элемента ЗуиББТ функциональному элементу РБТ из библиотеки операторов промоделируем их при одновременной подаче идентичных сигналов на эти элементы. Схема и результаты моделирования приведены на рис. 4.
Пример 5. SvuSurf.svu
Этот пример использует инструменты анализа Matlab для создания поверхностных графиков. Анализатор данных создает трехмерный чертеж матричного произведения его входов: «$итАх*у');», где входы должны быть векторами одного размера:
Схема и результаты моделирования трехмерного матричного произведения синфазной и квадратурной составляющих линейно частотно-модулированного (ЛЧМ) сигнала приведена на рис. 5.
Рис. 5. Схема и результаты моделирования трехмерного матричного произведения синфазной и квадратурной составляющих линейно частотно-модулированного (ЛЧМ) сигнала
Компоненты и технологии, № 2'2004
^ by^omVlew МВШНГО I ik‘i\Synl«N»iV»ewUxAinpl<4V. Sy*t«»V»«w Analysis • FHll.n
Рис. 6. Схема и результаты моделирования воздействия суммы трех синусоидальных сигналов на полосовой фильтр
Пример 6. В данном примере элемент Matlab реализует полосовой фильтр. Этот пример набран в редакторе файлов .m и сохранен под именем «BandpassIIR.m». В SystemView, установлены размерности входа (In0) и выхода (OutO) равные 100, а также параметры ParamO и Paraml, соответствующие нижней и верхней граничным частотам фильтра.
Строки со 2-й по 5-ю содержат комментарии и не являются обязательными, а строки с 13-й по 22-ю содержат определение функции и добавляются SystemView в скрипт автоматически.
Скрипт полосового фильтра выглядит следующим образом:
function Y=BandpassIIR(s,Fl,Fh)
% Этот пример описывает полосовой фильтр.
% Фильтр представлЯет КИХ (фильтр с конечной импульсной характеристикой)
% 8-го порЯдка с граничными частотами полосы пропускания Fl и Fh Гц.
%
Fs=length(s);
[b,a]=ellip(4,0.1,40,[Fl Fh]*2/Fs);
[H,w]=freqz(b,a,512);
plot(w*Fs/(2*pi),abs(H));
sf=filter(b,a,s);
Y=sf;
%Start SystemView Definition ----------
%SVU nInputs=1;
%SVU InputCaption0='In0';
%SVU nOutputs=1;
%SVU OutputCaption0='Out0';
%SVU nParameters=2;
%SVU ParameterCaption0='Param0';
%SVU ParameterCaption1='Param1';
%SVU FunctionSyntax='[Out0] = BandpassIIR(In0,Param0,Param1);'; %End SystemView Definition-------------
На вход фильтра подается сумма трех синусоидальных сигналов с частотами 5, 15 и 30 Гц и амплитудами 2, 1 и 2 В соответственно. Нижнюю и верхнюю граничные частоты фильтра устанавливаем в 10 и 20 Гц соответственно. Результаты моделирования полосового фильтра приведены на рис. 6. На выходе фильтра присутствует синусоидальный сигнал с f=15 Гц и амплитудой 1 В.
Полностью заданный функциональный блок Matlab связан в пределах системы подобно любому другому элементу SystemView. Однако чтобы гарантировать надлежащее моделирование элемента и его использование, если ваша функция использует векторные входы и выходы, следует соблюдать особую осторожность:
• Входные частоты должны быть синхронизированы так, чтобы все входные буферы заполнялись одновременно.
• При установке начальных условий выходные частоты определяются входом с самой высокой частотой.
• В течение времени, пока входные буферы заполняются в первый раз, выходы блоков устанавливаются в ноль.
• Если хотя бы один входной буфер имеет размер больше чем 1, выходные данные начнутся на выборке, следующей после последней входной выборки, которая была записана в буфер (таким же образом, как для элемента FFT (БПФ)) библиотеки операторов SystemView.
• Будучи запущенным, Matlab после оценки выражения формирует выходные данные размером, отличным от указанного для блока: выходные данные будут или обрезаны (если они слишком длинные), или дополнятся нулями (если слишком короткие). Вы должны также знать следующее:
• Если Matlab использует в выражениях глобальные переменные, последовательность выполнения системы должна быть тщательно рассмотрена.
• Анализаторы данных Matlab не формируют выходные данные для окна Analysis программы SystemView.
Когда система, содержащая один или несколько функциональных элементов Matlab, моделируется впервые в течение данного сеанса SystemView, запускается аппарат Matlab. Если процедура была закрыта пользовате-
лем, она будет автоматически заново запущена, когда начнется следующий сеанс моделирования. Когда закроется SystemView, автоматически закроется Matlab (только в том случае, если он не был запущен до запуска SystemView).
Пока идет моделирование, Matlab и SystemView обмениваются данными, поэтому в это время программа Matlab не может быть закрыта. Диагностика не будет производиться до тех пор, пока не будут сформированы некоторые выходные данные блока. Важно, что команды Matlab в тексте программы (скрипте) и синтаксисе функции блока должны заканчиваться точкой с запятой.
Хорошее знание синтаксиса, использующегося при работе в программе Matlab, полезно при отладке функций и решении проблем с текстами программ в Matlab. Программа отладки Matlab может быть запущена в окне процедуры Matlab, то есть Window launched (Запущенное окно) из SystemView (используйте или автоматически созданное окно, когда выполняете моделирование, или в меню SystemView выберите Tools, затем Matlab и Launch Matlab Engine).
Другой путь — это запуск Matlab вручную, чтобы создать входной массив и параметры под теми же названиями, что их заголовки в SystemView, а затем напечатать точно такое же выражение, как в синтаксисе функции элемента.
SystemView + Simulink
Simulink одно из самых мощных приложений программы Matlab, предназначенное для моделирования линейных и нелинейных динамических систем, построенных из типовых блоков.
Моделирование Simulink может быть выполнено из командной строки Matlab, с использованием директивы sim. Директива использует название модели, временной интервал для просмотра, опции установки модели и входы модели как его аргументы, и вырабатывает временные выборки, состояние модели и выходные данные модели, соответствующие этим временам.
Входы и выходы модели создаются при помощи входных (inport) и выходных (outport) портов, находящихся в библиотеке Simulink Connections.
Состояние модели — вектор, размер которого зависит от блоков, составляющих модель. Оно может быть запомнено из модели и загружено обратно в модель, что делает во многих случаях возможным запуск модели в режиме «stop and go» («остановись и иди»).
Возможные проблемы, с которыми можно столкнуться в этом режиме — несовместимые установки модели, которые могут быть легко установлены при редактировании параметров модели для моделирования.
Следующие примеры показывают два возможных пути записи текста программы (скрипта) Matlab для выполняемых моделей Simulink с SystemView. Программа svfxdsim.m инициирует запуск модели с использованием решающего устройства фиксированного ша-
е
Компоненты и технологии, № 2'2004
га с временными интервалами SystemView, а программа svadpsim.m запускает модель с ее собственным решающим устройством и затем повторно производит выборку выходных данных с частотой выборки SystemView, используя интерполяцию.
Для запуска модели Simulink с фиксированным шагом программа svfxdsim.m берет из SystemView две или большее количество выборок одновременно и управляет моделью Simulink с помощью этих выборок. Затем она запоминает состояние модели, и когда вызывается со следующей группой выборок, возобновляет выполнение модели из этого состояния. Модель открыта в Matlab во время выполнения.
Соответствующий функциональный блок SystemView может быть анализатором данных или общим блоком: даже если модель является источником Simulink, ей нужно обеспечить выполнение зависимости выходного параметра от времени.
Ниже представлены аргументы и возвращаемые значения программы:
• model (модель) — строка с именем модели, ряд параметров функционального блока.
• state (состояние) — переменная рабочего пространства. Создание этой переменной состоит в том, чтобы поместить следующий код перед фактическим запросом к программе: «if not(exist('state')); state=[]; end;». State не может быть сделано параметром элемента, так как оно может быть равно нулю.
• start (старт) — время начала моделирования SystemView лучше всего сделать глобально связанным параметром элемента.
• step (шаг) — шаг времени моделирования SystemView также лучше всего сделать глобально связанным параметром элемента.
• time (время) — входная временная выборка SystemView, лучше всего получается подачей входного сигнала через элемент Custom Function программы SystemView, алгебраическое выражение — «ct».
• in1, in2 и т. д. — входы элемента SystemView для соответствующих входных портов модели (inports); они все должны прийти к одной и той же частоте синхронно с входным временем. Входная размерность должна быть одинаковой для них всех и равна 2 или больше.
• out1, out2 и т. д. — выходы элемента SystemView из соответствующих выходных портов (outports) модели.
Описание скрипта функции:
1. Первая строка является описанием синтаксиса функции. Строки со 2 по 15, и другие, начинающиеся со знака «%», являются комментариями и содержат пояснения.
2. Временной интервал для директивы sim формируется в строках 16-23. Метод Matlab для создания расположенных с равными интервалами элементов выборки отличается от подхода SystemView, требуя преобразования, выполненного в строках 18-20.
3. Модель опций решающего устройства осуществляет переход к методу фиксированного шага с размером шага, импортированного из SystemView в строках 26-27.
4. Модель запущена, и начальные и конечные состояния переменных назначены в строках 30-40.
5. Входы форматируются для директивы sim в строках 43-47.
6. Время слегка уточнено, чтобы избежать мешающих влияний, моделирование выполнено, и выходы отформатированы для экспорта в рабочее пространство (строки 50-56).
7. Состояние моделирования запоминается в строке 59.
Листинг svfxdsim.m:
01 function [state,varargout]=svfxdsim(model,state,start,step,time,varargin)
02 %Step through the Simulink model
03 % [state,out1,out2,...]=svfxdsim(model,state,start,step,time,in1,in2,...)
04 %where
05 % model is the Simulink model name in the string parameter
06 % state is internal to the script
07 % start is the token start time in a parameter
08 % step is the token time step in a parameter
09 % time is the token time, must be supplied on a special input
10 % in are all the regular inputs (other than the time input)
11 % out are the outputs
12 %Note: in and out must correspond to the inports and outports in the Simulink
13 %model (they are found in the Connections library)
14
15 %Adjust time
16 tlen = length(time);
17 if tlen > 1
18 t = start:step:(time(tlen) + step / 2);
19 tmp = length(t);
20 t = t((tmp — tlen + 1):tmp)';
21 else
22 error('The Simulink model must run for 2 or more samples in order to obtain results.');
23 end
24
25 %Force one at a time fixed step execution with SystemView step
26 opt = simset('Solver', 'FixedStepDiscrete', 'FixedStep', step);
27 opt = simset(opt, 'OutputPoints', 'all', 'OutputVariables', 'y', 'MaxRows', 0);
28
29 %Prepare to load initial and save final states
30 if start < time(1)
31 set_param(model, 'LoadInitialState', 'on');
32 set_param(model, 'InitialState', 'state');
33 else
34 eval(model);
35 set_param(model, 'LoadInitialState', 'off');
36 set_param(model, 'SaveFinalState', 'on');
37 set_param(model, 'FinalStateName', 'finstate');
38 state = [];
39 end
40 finstate = [];
41
42 %Check if there are any inports
43 if nargin > 5
44 ut = [t, varargin{:}];
45 else
46 ut = [];
47 end
48
49 %Check if there are any outports and run
50 t(1) = t(1) — step / 1024;
51 if nargout > 1
52 [t, x, y] = sim(model, t, opt, ut);
53 varargout = num2cell(y, 1);
54 else
55 sim(model, t, opt, ut);
56 end
57
58 %Save state
59 state = finstate;
60
61 %If anything goes wrong there will be an error message from Matlab
Для адаптивного выполнения модели Simulink программа svadpsim.m берет одну или несколько выборок одновременно из SystemView и управляет моделью Simulink от начала моделирования SystemView до времени получения последней выборки. Этот режим следует использовать в тех случаях, когда метод фиксированного шага неэффективен. Модель открыта в Matlab во время моделирования.
Соответствующий функциональный элемент SystemView может быть анализатором данных или общим элементом.
Ниже представлены аргументы и возвращаемые значения программы:
• model (модель) — строка с названием модели, строковый параметр элемента.
• inhistory — переменная рабочего пространства. Эта переменная создается перед фактическим запросом к программе следующим кодом: <dfnot(exist('inhistory')); inhistory=[]; end;». Она не может быть сделана параметром элемента, так как должна быть нулевой в начале моделирования.
• start (начало) — время начала моделирования SystemView. Сделайте глобально связанным параметром элемента.
• step (шаг) — шаг времени моделирования SystemView. Также сделайте глобально связанным параметром элемента.
• time (время) — время выборки входных данных SystemView, получается подачей входного сигнала через элемент SystemView Custom Function, алгебраическое выражение — «ct».
• in1, in2 и т. д. — входы элемента SystemView для соответствующих входных портов модели (inports); они все должны прийти к одной и той же частоте, синхронно с временным входом. Входная размерность должна быть одинаковой для них всех и может быть любым положительным числом.
• out1, out2 и т. д. — выходы элемента SystemView из соответствующих выходных портов (outports).
Описание скрипта функции:
1. Модель запускается, затем ее установки выставляются и регулируются так, чтобы моделирование произвело вычисление всех ее точек на строках 16-20.
2. Временной интервал для директивы sim формируется в строках 23-34. Если из SystemView одновременно поступает больше, чем одна выборка, заключительное время слегка увеличивается, чтобы осуществить интерполяцию из возможных результатов.
3. Входы добавляются в конец к входному списку истории, который затем форматируется для директивы sim на строках 37-42.
4. Выполняется моделирование, и интерполируются выходные данные, чтобы соответствовать временной выборке SystemView, а затем форматируются для экспорта в рабочее пространство на строках 45-55.
Листинг svadpsim.m:
01 function [inhistory,varargout] =svadpsim(model,inhistory,start,step ,time,varargin)
02 %Run the Simulink model to the specified time
03 % [inhistory,out1,out2,...]=svadpsim(model,inhistory,start,step, time,in1,in2,... )
04 %where
05 % model is the Simulink model name in the string parameter
06 % inhistory is internal to the script
07 % start is the token start time in a parameter
08 % step is the token time step in a parameter
09 % time is the token time, must be supplied on a special input
10 % in are all the regular inputs (other than the time input)
11 % out are the outputs
12 %Note: in and out must correspond to the inports and outports in the Simulink
13 %model (they are found in the Connections library)
Компоненты и технологии, № 2'2004
Рис. 7. Схема и результаты моделирования схемы SimVdp
14
15 %Force all points output
16 if start == time(1)
17 eval(model);
18 inhistory = [];
19 end
20 opt = simset(simget(model), '0utputPoints', 'all', '0utputVariables', 'ty', 'MaxRows', 0);
21
22 %Adjust time
23 tlen = length(time);
24 mlabt = (start:step:(time(tlen) + step / 2))';
25 t = [start, time(tlen)];
26 if tlen > 1
27 t(2) = t(2) + step;
28 else
29 if start == time
30 t = time;
31 else
32 t(2) = time;
33 end
34 end
35
36 %Check if there are any inports
37 if nargin > 5
38 inhistory = [inhistory', varargin{:}']';
39 ut = [mlabt, inhistory];
40 else
41 ut = [];
42 end
43
44 %Check if there are any outports
45 if nargout > 1
46 [t, x, y] = sim(model, t, opt, ut);
47 if tlen > 1
48 y = interp1(t, y, time);
49 else
50 y = y(length(t),:);
51 end
52 varargout = num2cell(y, 1);
53 else
54 sim(model, t, opt, ut);
55 end
56
57 %If anything goes wrong there will be an error message from Matlab
Пример 7. SimVdp.svu
В этом примере модель Simulink — источник с двумя выходами. Он привнесен в SystemView как общий элемент Matlab, получивший системное время из элемента Time Source. Пример Matlab Vdp не может быть выполнен методом фиксированного шага, поэтому используется адаптивный скрипт. Для ускорения моделирования он обрабатывает 100 выборок одновременно.
Каждая модель, вообще говоря, нуждается в ее собственной копии скрипта, так как модели могут иметь различные номера входов и выходов, и опция М-Ьтк устанавливает эти номера для каждой функции в библиотеке.
Однако маленькая программа-скрипт, содержащая определения модели ввода-вывода Ц/О), удовлетворяет в данном случае программе sv0a2sim.m, описывающей общую модель без входов, но с двумя выходами, запускаемую с использованием svadpsim.m.
Данная модель описывается известным нелинейным дифференциальным уравнением второго порядка Ван-дер-Поля. Эта модель представляет собой усилитель с нелинейным элементом Бсп, позволяющим задать тип нелинейности в цепи положительной обратной
связи и имеющим в своем тракте блоки, ослабляющие как высокие, так и низкие частоты. Колебания в такой системе возникают на некоторой частоте, для которой выполняется баланс фаз и баланс амплитуд. Характер развития колебательного процесса в решающей мере зависит от характера нелинейности, заданного в блоке Fcn = 1-u*u. Схема и результаты моделирования приведены на рис. 7.
Поведение системы второго порядка удобно представить фазовым портретом колебаний. Для этого модель дополним графопостроителем XY Graph, входы которого подключим к выходным портам 0ut 1 и 0ut 2. В качестве Fcn выберем функцию 1-1.1* exp(-u). В данном случае параметры нелинейности подобраны таким образом, что колебательный процесс возникает только в начале включения системы. Затем за несколько периодов они затухают практически до нуля. Результаты моделирования приведены на рис. 8.
Ниже даны детальные инструкции для использования программ Elanix svfxdsim.m и svadpsim.m для включения ваших моделей Simulink в моделирование SystemView.
Модель Simulink может быть включена в SystemView, только если она имеет один или более входных (inports) или выходных портов (outports) (описанных в библиотеке Simulink Connections).
• Модель без входных портов — Simulink Source (Источник).
• Модель с входными и выходными портами — Simulink General (Общий).
• Модель без выходных портов — Simulink Sink (Анализатор данных).
Никакая модель Simulink не может быть источником SystemView, так как они все требуют временной зависимости выходных данных. Модели Simulink Sources и General соответствуют общим элементам SystemView. Анализатор данных Simulink, однако, соответствует анализатору данных SystemView.
Рис. 8. Модель системы второго порядка с новыми данными и фазовый портрет ее колебаний
е
Компоненты и технологии, № 2'2004
Элемент Simulink Source (источник) с N выходными портами задается следующим образом:
• Количество входных портов (Number of inputs): 1.
• Входные заголовки (Input captions): time.
• Количество выходов (Number of outputs): N.
• Заголовки выходов (0utput captions): out1,..., outN.
• Число параметров (Number of parameters): 2.
• Заголовки параметра (Parameter captions): start, step.
• Заголовок строкового параметра (String parameter caption): model.
Элемент Simulink General (общий) с М входными и N выходными портами определяется следующим образом:
• Количество входных портов: M+1.
• Заголовки входов: time, in1, ..., inM.
• Количество выходов: N.
• Заголовки выходов: out1, ..., outN.
• Число параметров: 2.
• Заголовки параметров: start, step.
• Заголовок строкового параметра: model. Элемент Simulink Sink (анализатор данных) с М входными портами должен быть задан следующим образом:
• Количество входных портов: M+1.
• Заголовки входов: time, in1, ..., inM.
• Количество выходов: 0.
• Число параметров: 2.
• Заголовки параметров: start, step.
• Заголовок строкового параметра: model. Синтаксис функции для модели Simulink с М
входными портами и N выходными портами должен быть определен следующим образом:
Для метода фиксированного шага:
if not(exist('state')); state=[]; end;
[state,out1,.,outN] = svfxdsim(model,state,start,step,in1,.,inM); Для адаптивного метода: if not(exist('state')); state=[]; end;
[state,out1,.,outN] = svadpsim(model,state,start,step,in1,.,inM);
Строковый параметр должен иметь название модели Simulink (без расширения .mdl). Другие параметры элемента должны быть глобально связаны:
• start (начало) связан с ct;
• step (шаг) связан с dt;
• time length (продолжительность) связана с G0;
• ini,., inM lengths связаны с тем же G0;
• outi,..., outN lengths связаны с тем же G0. G0 задается положительным числом; для
метода фиксированного шага это должно быть по крайней мере 2.
В случае если используется адаптивный метод, а все входные и выходные размерности установлены в 1, соединять их не нужно.
Вход синхронизации и входы входного порта должны иметь одну и ту же частоту. Все выходы также будут иметь ту же частоту. Временная зависимость Simulink Source может быть получена при помощи элемента SystemView Time Source с усилением 1.
Входы синхронизации элементов Simulink General и Sink могут быть получены разветвлением любого из входных портов (так как все они имеют одну и ту же частоту) и прохождением его через элемент Custom Function программы SystemView с алгебраическим выражением «ct».
• Некоторые модели Simulink не могут работать при использовании метода фиксиро-
ванного шага. Поэтому используйте адаптивный метод для этих моделей.
• Некоторые блоки библиотеки Simulink требуют строгой зависимости между размером шага моделирования и их внутренним размером шага. Выставьте шаг времени SystemView или параметры блока Simulink, чтобы выполнить это требование.
• Параметр моделирования Simulation Load
Initial State (на положении Workspace I/0) должен быть заблокирован для адаптивного метода. ИИ
Литература
1. Разевиг В. Д., Лаврентьев Г. В., Златин И. Л. SystemView — Средство системного проектирования радиоэлектронных устройств / Под ред. В. Д. Разевига. М.: Горячая линия — Телеком. 2002.
2. Дьяконов В. П., Абраменкова И. В. MATLAB 5.0/5.3. Система символьной математики. М.: Нолидж. 1999.
3. Златин И. Новые возможности SystemView // Компоненты и Технологии. 2003. № 1.
4. Разевиг В. Д. Златин И. Л. Новые возможности SystemView // EDA Express. М.: Издат-во ОАО «Родник Софт». 2003. № 7.
5. Златин И. Пользовательские библиотеки (Custom Library) и многостанционный доступ с кодовым разделением каналов (CDMA) в SystemView // Компоненты и Технологии. 2003. № 8.
6. Златин И. Пользовательская библиотека WNL 80211g в SystemView // Компоненты и Технологии. 2003. № 9.