Главная страница

И.В.Черных. Simulink. И. В. Черных. "Simulink Инструмент моделирования динамических систем"


Скачать 3.7 Mb.
НазваниеИ. В. Черных. "Simulink Инструмент моделирования динамических систем"
Дата21.09.2022
Размер3.7 Mb.
Формат файлаdoc
Имя файлаИ.В.Черных. Simulink.doc
ТипДокументы
#689048
страница15 из 26
1   ...   11   12   13   14   15   16   17   18   ...   26

if strcmp(Freq_param,'on'); % Если значение переменной Freq_param есть 'on'
                            % (внутренний источник сигнала заданиЯ на частоту), то
    enable={'on','on','on','on','on'}; % всем элементам вектора enable присваиваются
                            % значениЯ равные 'on' (все параметры окна диалога
                            % должны быть активны).
else; % Если значение переменной Freq_param не равно 'on'
              % (внешний источник сигнала заданиЯ на частоту), то
    enable={'on','off','on','on','on'}; % второму элементу вектора enable присваивается
                            % значение 'off' (второй параметр должен быть не % активным).
end; % Завершение конструкци if … else
set_param(gcb,'MaskEnables',enable);
% Присвоение параметру маскированной подсистемы
                            % MaskEnables значениЯ вектора enable.
                            % Параметр MaskEnables устанавливает режим
                            % активности параметров окна диалога маскированной
                            % подсистемы.

Функция проверяет значение параметра Internal_freq. Если значение этого параметра есть 'on', то вектор enable имеет все элементы равные 'on', если же значение параметра Internal_freq равно 'off' (используется внешний источник сигнала задания на частоту), то второй элемент вектора enable имеет значение 'off' и функция set_param(gcb,'MaskEnables',enable); сделает не активной графу для ввода второго параметра (частота внутреннего источника).

Функция call_back_magn (файл call_back_magn.m) выглядит следующим образом:

Magn_param=get_param(gcb,'Internal_magn'); % Присвоение переменной Magn_param
                    % значениЯ параметра Internal_magn (тип
                    % источника сигнала заданиЯ на амплитуду:
                    % внутренний или внешний).
                    % Параметр Internal_magn ЯвлЯетсЯ пЯтым
                    % в списке параметров окна диалога.
if strcmp(Magn_param,'on'); % Если значение переменной Magn_param есть 'on'
                    % (внутренний источник сигнала заданиЯ на амплитуду),
    visible={'on','on','on','on','on'}; % то всем элементам вектора visible присваиваютсЯ
                    % значениЯ равные 'on' (все параметры окна диалога
                    % должны быть видимы).
else; % Если значение переменной Magn_param не равно 'on'
                % (внешний источник сигнала заданиЯ на на амплитуду), то
    visible={'on','on','on','on','off'}; % пЯтому элементу вектора visible присваиваетсЯ
                    % значение 'off' (пЯтый параметр окна диалога должен
                    % быть не видимым).
end; % Завершение конструкци if ... else
set_param(gcb,'MaskVisibilities',visible);
% Присвоение параметру маскированной подсистемы
                    % MaskVisibilities значениЯ вектора visible.
                    % Параметр MaskVisibilities устанавливает режим
                    % видимости параметров окна диалога маскированной
                    % подсистемы.

Функция проверяет значение параметра Internal_magn. Если значение этого параметра есть 'on', то вектор visible имеет все элементы равные 'on', если же значение параметра Internal_magn равно 'off' (используется внешний источник сигнала задания на амплитуду), то пятый элемент вектора visible имеет значение 'off' и функция set_param(gcb,'MaskVisibilities',visible); сделает не отображаемой графу для ввода пятого параметра (амплитуда внутреннего источника).

Для правильной работы такого окна диалога необходимо чтобы файл модели и файлы функций обработки находились в одной папке, и данная папка являлась рабочей. Согласно документации по Simulink текст callback-функций можно записывать также явным образом в вызове функции set_param.

Внешний вид окна диалога генератора для случая использования внешних источников сигналов задания на частоту и амплитуду показан на рис. 9.10.14.


Рис. 9.10.14.Окно диалога генератора

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

При разработке динамически изменяемых окон диалога можно также переопределять с помощью функции set_param следующие параметры маскированной подсистемы:

MaskType – Название блока.

MaskDescription – Описание маскированной подсистемы.

MaskPromptString – Названия параметров, задаваемые в окне диалога.

MaskValueString – Значения параметров, задаваемые в окне диалога.

9.10.6. Управление портами маскированной подсистемы

В предыдущем параграфе рассматривалась методика создания динамически обновляемых окон диалога. В приведенном примере задание на амплитуду или частоту генератора сигналов может задаваться как параметр окна диалога блока, либо поступать от внешнего источника через входной порт подсистемы. При этом внешний вид блока, когда внешние источники не задействованы, оказывается точно таким же, как и при их использовании. Это неудобно, поскольку внешний вид блока (наличие на пиктограмме входных портов) вводит в заблуждение относительно фактических источников сигналов задания. Выходом из создавшейся ситуации является создание callback-функций убирающих или восстанавливающих входные порты в подсистеме. Основная идея при этом заключается в том, чтобы в случае, если внешний источник не используется – заменить входной порт подсистемы на блок Ground, а если внешний источник используется – выполнить обратную замену. Такие замены легко выполняются с помощью команд управления Simulink-моделью (команды подробно рассмотрены в документации на Simulink). Для повышения наглядности пиктограммы генератора стандартные названия входных портов In1 и In2 заменены на M (входной порт для сигнала задания на амплитуду) и F (входной порт сигнала задания на частоту). Пиктограмма генератора и его схема показаны на рис. 9.10.15.



Рис. 9.10.15 Функциональный генератор.

Текст callback-функции задающей вид источника сигнала задания на частоту (файл call_back_freq.m) приведен ниже.

                    % ПерваЯ часть (управление окном диалога)
Freq_param=get_param(gcb,'Internal_freq');
if strcmp(Freq_param,'on');
    enable={'on','on','on','on','on'};
else;
    enable={'on','off','on','on','on'};
end;
set_param(gcb,'MaskEnables',enable);

                    % ВтораЯ часть (управление портами)
Magn_param=get_param(gcb,'Internal_magn'); % Присвоение переменной Magn_param
                    % значениЯ параметра Internal_magn (тип источника
                    % сигнала заданиЯ на амплитуду: внутренний или внешний).

In_2_BlockType=get_param([gcb,'/F'],'BlockType'); % Определение типа блока в подсистеме,
                    % имеющего метку F .

if strcmp(Freq_param,'on')&(In_2_BlockType=='Inport');% Если значение переменной
                    % Freq_param равно 'on' (внутренний источник сигнала
                    % заданиЯ на частоту), а тип блока, имеющего метку F,
                    % есть 'Inport', то
    replace_block(gcb,'Name','F','Ground','noprompt') % выполнЯетсЯ замена блока, имеющего
                    % метку F (второго входного порта) на блок Ground.
                    % Порт с меткой F с пиктограммы блока исчезает.
                    % Величина заданиЯ на частоту генератора
                    % определЯетсЯ параметром, задаваемым в окне диалога.
end; % Завершение конструкции if.

if strcmp(Freq_param,'off')&(In_2_BlockType=='Ground'); % Если значение переменной
                    % Freq_param равно 'off' (внешний источник сигнала
                    % заданиЯ на частоту), а тип блока, меющего метку F,
                    % есть 'Ground', то
    replace_block(gcb,'Name','F','Inport','noprompt')% выполнЯетсЯ замена блока Ground
                    % на блок Inport. Порт с меткой F на пиктограмме блока
                    % поЯвлЯетсЯ. Величина заданиЯ на частоту генератора
                    % определЯетсЯ сигналом поступающим на данный порт.
end; % Завершение конструкци if.

if strcmp(Freq_param,'off')&strcmp(Magn_param,'off') % Если значениЯ переменных
                    % Freq_param и Magn_param равны 'off' (частота и амплитуда
                    % генератора задаетсЯ внешними источниками), то должна быть
                    % выполнена проверка правильности нумерации входных портов.
                    % Порт, имеющий метку М должен быть первым, а порт, имеющий
                    % метку F должен быть вторым.
    Port_1_param=get_param([gcb,'/M'],'port'); % Переменной Port_1_param присваиваетсЯ
                    % значение номера порта имеющего метку M.
    Port_2_param=get_param([gcb,'/F'],'port'); % Переменной Port_2_param присваиваетсЯ
                    % значение номера порта имеющего метку F.
    if (Port_1_param = = '2')&(Port_2_param = = '1'); % Если нумерациЯ портов нарушена, то
        replace_block(gcb,'Name','F','Ground','noprompt') % порт, имеющий метку F
                    % (через который поступает задание на частоту) временно заменЯетсЯ
                    % на блок Ground. При этом оставшемусЯ порту
                    % автоматически присваиваетсЯ первый номер.
        replace_block(gcb,'Name','F','Inport','noprompt') % Блок, имеющий метку F заменЯетсЯ на
                    % блок входного порта. При этом ему автоматически присваиваетсЯ
                    % второй номер.
    end; % Завершение внутренней конструкци if.
end;
% Завершение внешней конструкци if.

Первая часть функции управляет окном диалога (она полностью повторяет приведенную в предыдущем параграфе), а вторая часть выполняет управление входным портом F (задание на частоту).

Текст callback-функции задающей вид источника сигнала задания на амплитуду (файл call_back_magn.m) аналогичен тексту функции call_back_freq и приводится ниже без комментариев.

Magn_param=get_param(gcb,'Internal_magn');
if strcmp(Magn_param,'on');
    visible={'on','on','on','on','on'};
else;
    visible={'on','on','on','on','off'};
end;
set_param(gcb,'MaskVisibilities',visible);

Freq_param=get_param(gcb,'Internal_freq');
In_1_BlockType=get_param([gcb,'/M'],'BlockType');
if strcmp(Magn_param,'on')&(In_1_BlockType=='Inport');
    replace_block(gcb,'Name','M','Ground','noprompt')
end;
if strcmp(Magn_param,'off')&(In_1_BlockType= ='Ground');
    replace_block(gcb,'Name','M','Inport','noprompt')
end;

if strcmp(Freq_param,'off')&strcmp(Magn_param,'off')
    Port_1_param=get_param([gcb,'/M'],'port');
    Port_2_param=get_param([gcb,'/F'],'port');
    if (Port_1_param = = '2')&(Port_2_param = = '1')
        replace_block(gcb,'Name','F','Inport','noprompt')
    end;
end;


Первая часть функции call_back_freq управляет окном диалога, и аналогична приведенной в предыдущем параграфе. Вторая часть – управляет первым входным портом подсистемы. Вторая часть функции содержит также команды проверяющие правильность нумерации портов и восстанавливающие ее, если нумерация портов нарушена.

На рис.9.10.16 приведена модель генератора для случая, когда источник задания на амплитуду сигнала является внутренним, а источник задания на частоту – внешним.



Рис. 9.10.16 Модель функционального генератора при использовании внутреннего источника задания на амплитуду сигнала.

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

На рисунке видно, что при выборе внутреннего источника сигнала задания на амплитуду (флажок Internal source of magnitude signal установлен) соответствующий входной порт на пиктограмме отсутствует, а в самой модели генератора входной порт M заменен блоком Ground. При этом задание на амплитуду сигнала поступает от блока Constant2 внутри подсистемы, а задание на частоту выходного сигнала – от внешнего источника через входной порт с меткой F.

10. Редактор дифференциальных уравнений DEE

Simulink содержит специальный блок – Differential Equation Editor (редактор дифференциальных уравнений). С помощью этого блока можно задавать системы дифференциальных уравнений в явной форме Коши и выполнять их решение. Вызов редактора выполняется вводом команды dee в окне MATLAB.

Использование редактора рассмотрим на примере расчета переходных процессов в последовательном колебательном контуре. Задача заключается в нахождении тока протекающего в электрической цепи и напряжения на конденсаторе C после замыкания ключа. Схема цепи показана на рис. 10.1. Начальные условия полагаем нулевыми (ток в цепи отсутствует, и конденсатор не заряжен).



Рис.10.1. Расчетная электрическая схема

Предварительно составляем систему дифференциальных уравнений, описывающую электрическую цепь:

,

,

где i – ток в цепи, - напряжение на конденсаторе

Записываем данную систему уравнений в явной форме Коши:

,

.

Вводим “машинные” переменные:

В итоге система уравнений примет вид:

,

Введение “машинных” переменных, связано с тем, что редактор дифференциальных уравнений требует задавать в виде векторов входные воздействия (u) и переменные состояния (х) и имена этих векторов жестко заданы.

После получения системы дифференциальных уравнений с использованием “машинных” переменных, необходимо запустить редактор командой dee в окне MATLAB. Затем нужно поместить блок редактора в окно с создаваемой моделью, открыть окно редактора и ввести систему дифференциальных уравнений, начальные условия, а также алгебраические уравнения для расчета выходных сигналов (в рассматриваемой задаче выходные переменные равны переменным состояния). Также необходимо указать размерность вектора входного сигнала (# of inputs). Схема модели и окно редактора показаны на рис. 10.2. Там же приведены и результаты расчета.



Рис. 10.2. Модель, использующая редактор дифференциальных уравнений

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

Значения постоянных коэффициентов системы уравнений можно задавать не только как числовые константы, но и использовать переменные рабочей области MATLAB.

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

Достоинством редактора DEE является также то, коэффициенты дифференциального уравнения могут быть переменными и задаваться также как и входные сигналы (через входной порт). В качестве примера на рис. 10.3 показан вариант предыдущей модели, в котором величина сопротивления увеличивается в 10 раза в процессе расчета. В системе дифференциальных уравнений сопротивление записано как входной сигнал u(2).



Рис. 10.3 Второй вариант модели

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

11. Использование Simulink LTI-Viewer для анализа динамических систем

Инструмент Simulink LTI-Viewer входит в состав пакета прикладных программ Control System Toolbox и предназначен для анализа линейных стационарных систем. С помощью данного инструмента можно легко построить частотные характеристики исследуемой системы, получить ее отклики на единичные ступенчатое и импульсное воздействия, найти нули и полюса системы и т.д.

Краткий алгоритм работы с Simulink LTI-Viewer приведен ниже.

11.1. Работа с Simulink LTI-Viewer

1. Выполнить команду Tools\Linear Analysis... окна Simulink-модели.

В результате выполнения команды откроется окно Model_Inputs_and_Outputs как это показано на рис. 11.1, а также пустое окно Simulink LTI-Viewer .



Рис. 11.1 Исследуемая модель и окно Model_Inputs_and_Outputs инструмента Simulink LTI-Viewer

2. Установить блок Input Point на входе и блок Output Point на выходе исследуемой системы, как это показано на рис. 11.2.



Рис. 11.2 Исследуемая модель с установленными блоками
1   ...   11   12   13   14   15   16   17   18   ...   26


написать администратору сайта