d9e5a92d

Создание динамически обновляемых окон диалога


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

Для создания такого окна необходимо:

Выделить блок и ввести в командном окне MATLAB следующее выражение:

 

set_param(gcb, 'MaskSelfModifiable', 'on') .

 

После чего модель необходимо сохранить. Данная команда дает разрешение на самомодификацию окна.

 

Ввести вкомандном окне команду вида:

 

set_param(gcb,'MaskCallbacks',{'parm1_callback', ‘’,'parm3_callback'}); ,

 

где в фигурных скобках указываются функции обрабатывающие событие изменения параметра.

 

В данном примере функция parm1_callback обрабатывает событие при изменении первого параметра, а функция parm3_callback обрабатывает событие при изменении третьего параметра. В том случае, если для какого-либо параметра такая обработка не нужна, функция не записывается, но два апострофа для данного параметра (пустая функция) все равно должны указываться. В данном примере обработка события для второго параметра отсутствует. Сама функция может быть любым допустимым выражением на языке MATLAB.

 



Применительно к рассматриваемому функциональному генераторуэта команда выглядит следующим образом:

 

set_param(gcb,'MaskCallbacks',{'call_back_freq','','', 'call_back_magn',''}); .

 

Функция call_back_freq обрабатывает событие при установке или снятии флажка параметра Internal source of frequency signal (тип источника сигнала задания на частоту, переменная Internal_freq), а функция call_back_magn обрабатывает событие при установке или снятии флажка параметра Internal source of magnitude signal (тип источника сигнала задания на амплитуду, переменная Internal_magn). После этого модель необходимо сохранить.

 

Разработать функции обработки.

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

 

Freq_param=get_param(gcb,'Internal_freq'); %

 

Присвоение переменной Freq_param значения % параметра Internal_freq (тип источника % сигнала задания на частоту: внутренний или % внешний).

Параметр Internal_freq является % вторым в списке параметров окна диалога. 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.

 

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

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

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

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

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

 

 

 




Содержание раздела