Динамически обновляемое окно диалога это такое окно, внешний вид которого изменяется в зависимости от значения параметров заданных в самом окне. Например, для рассматриваемого в данной главе функционального генератора, в случае выбора внешних источников сигналов задания на частоту или амплитуду, графы, в которые вводятся значения частоты и амплитуды, могут отсутствовать или быть не активными. Для создания такого окна необходимо:
1. Выделить блок и ввести в командном окне MATLAB следующее выражение:
set_param(gcb, 'MaskSelfModifiable', 'on'). После чего модель необходимо сохранить. Данная команда дает разрешение на самомодификацию окна.
где в фигурных скобках указываются функции обрабатывающие событие изменения параметра. В данном примере функция parm1_callbackобрабатывает событие при изменении первого параметра, а функция parm3_callbackобрабатывает событие при изменении третьего параметра. В том случае, если для какого-либо параметра такая обработка не нужна, функция не записывается, но два апострофа для данного параметра (пустая функция) все равно должны указываться. В данном примере обработка события для второго параметра отсутствует. Сама функция может быть любым допустимым выражением на языке MATLAB.
Применительно к рассматриваемому функциональному генератору эта команда выглядит следующим образом:
Функция call_back_freqобрабатывает событие при установке или снятии флажка параметра Internal source of frequency signal (тип источника сигнала задания на частоту, переменная Internal_freq), а функция call_back_magnобрабатывает событие при установке или снятии флажка параметра Internal source of magnitude signal (тип источника сигнала задания на амплитуду, переменная Internal_magn).
После этого модель необходимо сохранить.
3. Разработать функции обработки.
Для рассматриваемого примера функция 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.
Рис. 9.10.14.Окно диалога генератора
[Скачать пример]
При разработке динамически изменяемых окон диалога можно также переопределять с помощью функции set_param следующие параметры маскированной подсистемы:
MaskType – Название блока.
MaskDescription – Описание маскированной подсистемы.
MaskPromptString – Названия параметров, задаваемые в окне диалога.
MaskValueString – Значения параметров, задаваемые в окне диалога.