русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

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


Дата добавления: 2015-08-31; просмотров: 653; Нарушение авторских прав


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

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

set_param(gcb, 'MaskSelfModifiable', 'on'). После чего модель необходимо сохранить. Данная команда дает разрешение на самомодификацию окна.

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

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).



После этого модель необходимо сохранить.

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 – Значения параметров, задаваемые в окне диалога.


<== предыдущая лекция | следующая лекция ==>
Создание справки маскированной подсистемы | Управление портами маскированной подсистемы


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.712 сек.