Разработайте и создайте пользовательский блок

Как разработать пользовательский блок

В целом используйте следующий процесс, чтобы разработать пользовательский блок:

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

Модель в качестве примера sldemo_customsat использует базовую версию блока.

Определение пользовательского блочного поведения

Начните путем определения функций и ограничений пользовательского блока. В этом примере блок поддерживает следующие функции:

  • Включение и выключение верхнего или более низкого предела насыщенности.

  • Установка верхнего и/или нижних пределов через блок параметры.

  • Установка верхнего использования и/или использования нижних пределов входной сигнал.

Это также имеет следующие ограничения:

  • Входной сигнал под насыщенностью должен быть скаляром.

  • Входной сигнал и пределы насыщенности должны все иметь тип данных дважды.

  • Генерация кода не требуется.

Выбор пользовательского типа блока

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

  • Несколько входных портов

  • Относительно простой алгоритм

  • Никакие непрерывные или дискретные системные состояния

Поэтому этот пример реализует пользовательский блок с помощью S-функции Level 2 MATLAB®. S-функции MATLAB поддерживают несколько входных параметров и, потому что алгоритм прост, не имейте значительных издержек при обновлении схемы или моделировании модели. Смотрите Сравнение Пользовательской Блочной Функциональности для описания различной функциональности, обеспеченной S-функциями MATLAB по сравнению с другими типами пользовательских блоков.

Параметризация S-функции MATLAB

Начните путем определения S-параметров-функции. Этот пример требует четырех параметров:

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

  • Второй параметр является значением верхнего предела насыщенности. Это значение используется, только если верхний предел насыщенности устанавливается через блочный параметр. В конечном счете этот параметр используется, необходимо смочь изменить значение параметров во время моделирования, i. e., параметр является настраиваемым.

  • Третий параметр указывает, как более низкий предел насыщенности устанавливается. Предел может быть выключен, установить через блочный параметр или установить через входной сигнал.

  • Четвертый параметр является значением более низкого предела насыщенности. Это значение используется, только если более низкий предел насыщенности устанавливается через блочный параметр. Как с верхним пределом насыщенности, этот параметр является настраиваемым когда в использовании.

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

  • 1 указывает, что предел насыщенности выключен.

  • 2 указывает, что предел насыщенности устанавливается через блочный параметр.

  • 3 указывает, что предел насыщенности устанавливается через входной сигнал.

Запись S-функции MATLAB

После того, как вы зададите S-параметры-функции и функциональность, запишите S-функцию. Шаблон msfuntmpl.m обеспечивает отправную точку для записи Уровня 2 S-функции MATLAB. Можно найти завершенную версию пользовательского блока насыщенности в файле custom_sat.m m. Сохраните этот файл к своей рабочей папке прежде, чем продолжить этот пример.

Эта S-функция изменяет S-шаблон-функции можно следующим образом:

  • Функция setup инициализирует количество входных портов на основе значений, ввел для верхних и более низких предельных режимов насыщенности. Если пределы устанавливаются через входные сигналы, метод добавляет входные порты к блоку. Метод setup затем указывает, что существует четыре S-параметра-функции, и устанавливает приспособляемость параметра. Наконец, метод указывает методы S-функции, используемые во время моделирования.

    function setup(block)
    
    % The Simulink engine passes an instance of the Simulink.MSFcnRunTimeBlock
    % class to the setup method in the input argument "block". This is known as
    % the S-function block's run-time object.
    
    % Register original number of input ports based on the S-function
    % parameter values
    
    try % Wrap in a try/catch, in case no S-function parameters are entered
        lowMode    = block.DialogPrm(1).Data;
        upMode     = block.DialogPrm(3).Data;
        numInPorts = 1 + isequal(lowMode,3) + isequal(upMode,3);
    catch
        numInPorts=1;
    end % try/catch
    block.NumInputPorts = numInPorts;
    block.NumOutputPorts = 1;
    
    % Setup port properties to be inherited or dynamic
    block.SetPreCompInpPortInfoToDynamic;
    block.SetPreCompOutPortInfoToDynamic;
    
    % Override input port properties
    block.InputPort(1).DatatypeID  = 0;  % double
    block.InputPort(1).Complexity  = 'Real';
    
    % Override output port properties
    block.OutputPort(1).DatatypeID  = 0; % double
    block.OutputPort(1).Complexity  = 'Real';
    
    % Register parameters. In order:
    % -- If the upper bound is off (1) or on and set via a block parameter (2)
    %    or input signal (3)
    % -- The upper limit value. Should be empty if the upper limit is off or
    %    set via an input signal
    % -- If the lower bound is off (1) or on and set via a block parameter (2)
    %    or input signal (3)
    % -- The lower limit value. Should be empty if the lower limit is off or
    %    set via an input signal
    block.NumDialogPrms     = 4;
    block.DialogPrmsTunable = {'Nontunable','Tunable','Nontunable', ...
        'Tunable'};
    
    % Register continuous sample times [0 offset]
    block.SampleTimes = [0 0];
    
    %% -----------------------------------------------------------------
    %% Options
    %% -----------------------------------------------------------------
    % Specify if Accelerator should use TLC or call back into
    % MATLAB script
    block.SetAccelRunOnTLC(false);
    
    %% -----------------------------------------------------------------
    %% Register methods called during update diagram/compilation
    %% -----------------------------------------------------------------
    
    block.RegBlockMethod('CheckParameters',      @CheckPrms);
    block.RegBlockMethod('ProcessParameters',    @ProcessPrms);
    block.RegBlockMethod('PostPropagationSetup', @DoPostPropSetup);
    block.RegBlockMethod('Outputs',              @Outputs);
    block.RegBlockMethod('Terminate',            @Terminate);
    %end setup function
    

  • Метод CheckParameters проверяет, что значения ввели в Уровень 2 Блок s-function MATLAB.

    function CheckPrms(block)
    
    lowMode = block.DialogPrm(1).Data;
    lowVal  = block.DialogPrm(2).Data;
    upMode  = block.DialogPrm(3).Data;
    upVal   = block.DialogPrm(4).Data;
    
    % The first and third dialog parameters must have values of 1-3
    if ~any(upMode == [1 2 3]);
        error('The first dialog parameter must be a value of 1, 2, or 3');
    end
    
    if ~any(lowMode == [1 2 3]);
        error('The first dialog parameter must be a value of 1, 2, or 3');
    end
    
    % If the upper or lower bound is specified via a dialog, make sure there
    % is a specified bound. Also, check that the value is of type double
    if isequal(upMode,2),
        if isempty(upVal),
            error('Enter a value for the upper saturation limit.');
        end
        if ~strcmp(class(upVal), 'double')
            error('The upper saturation limit must be of type double.');
        end
    end
    
    if isequal(lowMode,2),
        if isempty(lowVal),
            error('Enter a value for the lower saturation limit.');
        end
        if ~strcmp(class(lowVal), 'double')
            error('The lower saturation limit must be of type double.');
        end
    end
    
    % If a lower and upper limit are specified, make sure the specified
    % limits are compatible.
    if isequal(upMode,2) && isequal(lowMode,2),
        if lowVal >= upVal,
            error('The lower bound must be less than the upper bound.');
        end
    end
    
    %end CheckPrms function
    

  • ProcessParameters и методы PostPropagationSetup обрабатывают настройку S-параметра-функции.

    function ProcessPrms(block)
    
    %% Update run time parameters
    block.AutoUpdateRuntimePrms;
    
    %end ProcessPrms function
    
    
    function DoPostPropSetup(block)
    
    %% Register all tunable parameters as runtime parameters.
    block.AutoRegRuntimePrms;
    
    %end DoPostPropSetup function

  • Метод Outputs вычисляет вывод блока на основе настроек S-параметра-функции и любых входных сигналов.

    function Outputs(block)
    
    lowMode    = block.DialogPrm(1).Data;
    upMode     = block.DialogPrm(3).Data;
    sigVal     = block.InputPort(1).Data;
    lowPortNum = 2; % Initialize potential input number for lower saturation limit
    
    % Check upper saturation limit
    if isequal(upMode,2), % Set via a block parameter
        upVal = block.RuntimePrm(2).Data;
    elseif isequal(upMode,3), % Set via an input port
        upVal = block.InputPort(2).Data;
        lowPortNum = 3; % Move lower boundary down one port number
    else
        upVal = inf;
    end
    
    % Check lower saturation limit
    if isequal(lowMode,2), % Set via a block parameter
        lowVal = block.RuntimePrm(1).Data;
    elseif isequal(lowMode,3), % Set via an input port
        lowVal = block.InputPort(lowPortNum).Data;
    else
        lowVal = -inf;
    end
    
    % Assign new value to signal
    if sigVal > upVal,
        sigVal = upVal;
    elseif sigVal < lowVal,
        sigVal=lowVal;
    end
    
    block.OutputPort(1).Data = sigVal;
    
    %end Outputs function

Размещение пользовательских блоков в библиотеке

Библиотеки позволяют вам совместно использовать свои пользовательские блоки с другими пользователями, легко обновлять функциональность копий пользовательского блока и собирать блоки для конкретного проекта в единственное местоположение. Этот пример помещает пользовательский блок насыщенности в библиотеку.

  1. В Simulink® Library Browser выберите File> New> Library.

  2. От библиотеки User-Defined Functions перетащите Уровень 2 Блок s-function MATLAB в вашу новую библиотеку.

  3. Сохраните свою библиотеку с именем файла saturation_lib.

  4. Дважды кликните блок, чтобы открыть его диалоговое окно Function Block Parameters.

  5. В поле S-имени-функции введите имя S-функции. Например, введите custom_sat. В Parameters поле вводят 2,-1,2,1.

  6. Нажать ОК.

    Вы создали пользовательский блок насыщенности, который можно совместно использовать с другими пользователями.

Можно сделать блок легче использовать путем добавления индивидуально настраиваемого пользовательского интерфейса.

Добавление пользовательского интерфейса к пользовательскому блоку

Можно создать блочное диалоговое окно для пользовательского блока, использующего функции маскирования Simulink. Маскирование блока также позволяет вам добавлять метки порта, чтобы указать, какие порты соответствует входному сигналу и пределам насыщенности.

  1. Откройте библиотеку saturation_lib, которая содержит пользовательский блок, который вы создали,

  2. Щелкните правой кнопкой по Level 2 MATLAB S-Function block и выберите Mask> Create Mask.

  3. На панели Icon & Ports в поле команд рисования Значков введите port_label('input',1,'uSig'), и затем нажмите Apply.

    Эта команда маркирует порт по умолчанию как входной сигнал под насыщенностью.

  4. В панели Parameters & Dialog добавьте четыре параметра, соответствующие этим четырем S-параметрам-функции. Для каждого нового параметра перетащите раскрывающиеся или средства редактирования к разделу Диалогового окна, как показано в таблице. Перетащите каждый параметр в группу Параметров.

    ВводПодсказкаИмяОценитьНастраиваемыйРаскрывающиеся опции'callback'
    popupВерхний контур:upMode 

    Никакой предел

    Введите предел как параметр

    Ограничьте входной сигнал использования

    customsat_callback('upperbound_callback', gcb)
    редактированиеВерхний предел:upValНет данныхcustomsat_callback('upperparam_callback', gcb)

    ВводПодсказкаИмяОценитьНастраиваемыйРаскрывающиеся опции'callback'
    popupБолее низкий контур:lowMode 

    Никакой предел

    Введите предел как параметр

    Ограничьте входной сигнал использования

    customsat_callback('lowerbound_callback', gcb)
    редактированиеНижний предел:lowValНет данныхcustomsat_callback('lowerparam_callback', gcb)

    Скрипт S-функции MATLAB custom_sat_final.m содержит обратные вызовы параметра маски. Сохраните custom_sat_final.m в свою рабочую папку, чтобы задать обратные вызовы в этом примере. Этот скрипт MATLAB имеет два входных параметра. Первый входной параметр является вектором символа, указывающим, какой параметр маски вызвал обратный вызов. Второй входной параметр является указателем на связанный Уровень 2 Блок s-function MATLAB.

    Данные показывают завершенную панель Parameters & Dialog в Редакторе Маски.

  5. В панели Инициализации выберите блок библиотеки Allow, чтобы изменить его флажок содержимого. Эта установка позволяет S-функции изменять количество портов на блоке.

  6. В панели Документации:

    • В поле типа Маски войти

      Customized Saturation
    • В поле описания Маски войти

      Limit the input signal to an upper and lower saturation value
      set either through a block parameter or input signal.

  7. Нажать ОК.

  8. Чтобы сопоставить S-параметры-функции с параметрами маски, щелкните правой кнопкой по Level 2 MATLAB S-Function block и выберите Mask> Look Under Mask.

  9. Измените поле S-имени-функции на custom_sat_final и поле Parameters к lowMode,lowVal,upMode,upVal.

    Данные показывают диалоговое окно Function Block Parameters после изменений.

  10. Нажать ОК. Сохраните и закройте библиотеку, чтобы выйти из режима редактирования.

  11. Вновь откройте библиотеку и дважды кликните индивидуально настраиваемый блок насыщенности, чтобы открыть диалоговое окно параметра маскированное.

Чтобы создать более сложный пользовательский интерфейс, поместите графический интерфейс пользователя MATLAB сверху блока маскированного. Блок OpenFcn вызывает графический интерфейс пользователя MATLAB, который использует вызовы set_param, чтобы изменить параметры Блока s-function на основе настроек в пользовательском интерфейсе.

Запись обратного вызова маски

Функциональный customsat_callback.m содержит код обратного вызова маски для пользовательского блочного диалогового окна параметра маски насыщенности. Эта функция вызывает локальные функции, соответствующие каждому параметру маски через вызов feval.

Следующая локальная функция управляет видимостью верхнего поля предела насыщенности на основе выбора для верхнего режима предела насыщенности. Обратный вызов начинается путем получения значений для всех параметров маски с помощью вызова get_param с именем свойства MaskValues. Если бы обратному вызову было нужно значение только одного параметра маски, это могло бы вызвать get_param с определенным названием параметра маски, например, get_param(block,'upMode'). Поскольку для этого примера нужны два из значений параметров маски, он использует свойство MaskValues уменьшить вызовы get_param.

Обратный вызов затем получает видимость параметров маски с помощью вызова get_param с именем свойства MaskVisbilities. Этот вызов возвращает массив ячеек из символьных векторов, указывающий на видимость каждого параметра маски. Обратный вызов изменяет значения для видимости маски на основе выбора для верхнего режима предела насыщенности и затем обновляет текст метки порта.

Обратный вызов наконец использует команду set_param, чтобы обновить свойство MaskDisplay блока маркировать входные порты блока.

function customsat_callback(action,block)
% CUSTOMSAT_CALLBACK contains callbacks for custom saturation block

%   Copyright 2003-2007 The MathWorks, Inc.

%% Use function handle to call appropriate callback
feval(action,block)

%% Upper bound callback
function upperbound_callback(block)

vals = get_param(block,'MaskValues');
vis = get_param(block,'MaskVisibilities');
portStr = {'port_label(''input'',1,''uSig'')'};
switch vals{1}
    case 'No limit'
        set_param(block,'MaskVisibilities',[vis(1);{'off'};vis(3:4)]);
    case 'Enter limit as parameter'
        set_param(block,'MaskVisibilities',[vis(1);{'on'};vis(3:4)]);
    case 'Limit using input signal'
        set_param(block,'MaskVisibilities',[vis(1);{'off'};vis(3:4)]);
        portStr = [portStr;{'port_label(''input'',2,''up'')'}];
end
if strcmp(vals{3},'Limit using input signal'),
    portStr = [portStr;{['port_label(''input'',',num2str(length(portStr)+1), ...
        ',''low'')']}];
end
set_param(block,'MaskDisplay',char(portStr));

Итоговый вызов set_param вызывает функцию setup в S-функции MATLAB custom_sat.m m. Поэтому функция setup может быть изменена, чтобы определить номер входных портов на основе значений параметров маски вместо на значениях S-параметра-функции. Это изменение в функции setup сохраняет количество портов на Уровне 2 Блоком s-function MATLAB сопоставимый со значениями показанный в диалоговом окне параметра маски.

Измененная S-функция MATLAB custom_sat_final.m содержит следующую новую функцию setup. Если вы продвигаетесь через этот пример, открываете файл и сохраняете его в свою рабочую папку.

%% Function: setup ===================================================
function setup(block)

% Register original number of ports based on settings in Mask Dialog
ud = getPortVisibility(block);
numInPorts = 1 + isequal(ud(1),3) + isequal(ud(2),3);

block.NumInputPorts = numInPorts;
block.NumOutputPorts = 1;

% Setup port properties to be inherited or dynamic
block.SetPreCompInpPortInfoToDynamic;
block.SetPreCompOutPortInfoToDynamic;

% Override input port properties
block.InputPort(1).DatatypeID  = 0;  % double
block.InputPort(1).Complexity  = 'Real';

% Override output port properties
block.OutputPort(1).DatatypeID  = 0; % double
block.OutputPort(1).Complexity  = 'Real';

% Register parameters. In order:
% -- If the upper bound is off (1) or on and set via a block parameter (2)
%    or input signal (3)
% -- The upper limit value. Should be empty if the upper limit is off or
%    set via an input signal
% -- If the lower bound is off (1) or on and set via a block parameter (2)
%    or input signal (3)
% -- The lower limit value. Should be empty if the lower limit is off or
%    set via an input signal
block.NumDialogPrms     = 4;
block.DialogPrmsTunable = {'Nontunable','Tunable','Nontunable','Tunable'};

% Register continuous sample times [0 offset]
block.SampleTimes = [0 0];

%% -----------------------------------------------------------------
%% Options
%% -----------------------------------------------------------------
% Specify if Accelerator should use TLC or call back into
% MATLAB script
block.SetAccelRunOnTLC(false);

%% -----------------------------------------------------------------
%% Register methods called during update diagram/compilation
%% -----------------------------------------------------------------

block.RegBlockMethod('CheckParameters',      @CheckPrms);
block.RegBlockMethod('ProcessParameters',    @ProcessPrms);
block.RegBlockMethod('PostPropagationSetup', @DoPostPropSetup);
block.RegBlockMethod('Outputs',              @Outputs);
block.RegBlockMethod('Terminate',            @Terminate);
%endfunction
Локальная функция getPortVisibility в custom_sat_final.m использует предельные режимы насыщенности, чтобы создать флаг, который пасуется назад к функции setup. Функция setup использует этот флаг, чтобы определить необходимое количество входных портов.
%% Function: Get Port Visibilities =======================================
function ud = getPortVisibility(block)

ud = [0 0];

vals = get_param(block.BlockHandle,'MaskValues');
switch vals{1}
    case 'No limit'
        ud(2) = 1;
    case 'Enter limit as parameter'
        ud(2) = 2;
    case 'Limit using input signal'
        ud(2) = 3;
end

switch vals{3}
    case 'No limit'
        ud(1) = 1;
    case 'Enter limit as parameter'
        ud(1) = 2;
    case 'Limit using input signal'
        ud(1) = 3;
end

Добавление блочной функциональности Используя блочные обратные вызовы

Пользовательская Насыщенность блоком Plotting в customsat_lib использует блочные обратные вызовы, чтобы добавить функциональность к исходному пользовательскому блоку насыщенности. Этот блок предоставляет возможность строить график пределов насыщенности, когда моделирование заканчивается. Следующие шаги показывают, как изменить исходный пользовательский блок насыщенности, чтобы создать этот новый блок.

  1. Добавьте флажок к диалоговому окну параметра маски, чтобы переключить опцию графического изображения на и прочь.

    1. Щелкните правой кнопкой по Level 2 MATLAB S-Function block in saturation_lib и выберите Mask +, Создают Маску.

    2. На редакторе Параметерсе Маски панель добавьте пятый параметр маски со следующими свойствами.

      ПодсказкаИмяВводНастраиваемыйВведите опции'callback'
      Постройте график пределов насыщенностиplotcheckфлажокНетНет данныхcustomsat_callback('plotsaturation',gcb)

    3. Нажать ОК.

  2. Запишите обратный вызов для нового флажка. Обратный вызов инициализирует структуру, чтобы сохранить предельные значения насыщенности во время моделирования на Уровне 2 Блок s-function MATLAB UserData. customsat_plotcallback.m скрипта MATLAB содержит этот новый обратный вызов, а также измененные версии предыдущих обратных вызовов, чтобы обработать новый параметр маски. Если вы выполняете этот пример, открываете customsat_plotcallback.m и копируете его локальные функции по предыдущим локальным функциям в customsat_callback.m m.

    %% Plotting checkbox callback
    function plotsaturation(block)
    
    % Reinitialize the block's userdata
    vals = get_param(block,'MaskValues');
    ud = struct('time',[],'upBound',[],'upVal',[],'lowBound',[],'lowVal',[]);
    
    if strcmp(vals{1},'No limit'),
        ud.upBound = 'off';
    else
        ud.upBound = 'on';
    end
    
    if strcmp(vals{3},'No limit'),
        ud.lowBound = 'off';
    else
        ud.lowBound = 'on';
    end
    
    set_param(gcb,'UserData',ud);

  3. Обновите S-функцию MATLAB метод Outputs, чтобы сохранить пределы насыщенности, если применимо, как сделано в новой S-функции MATLAB custom_sat_plot.m m. Если вы выполняете этот пример, копируете метод Outputs в custom_sat_plot.m по исходному методу Outputs в custom_sat_final.m

    %% Function: Outputs ===================================================
    function Outputs(block)
    
    lowMode    = block.DialogPrm(1).Data;
    upMode     = block.DialogPrm(3).Data;
    sigVal     = block.InputPort(1).Data;
    vals = get_param(block.BlockHandle,'MaskValues');
    plotFlag = vals{5};
    lowPortNum = 2;
    
    % Check upper saturation limit
    if isequal(upMode,2)
        upVal = block.RuntimePrm(2).Data;
    elseif isequal(upMode,3)
        upVal = block.InputPort(2).Data;
        lowPortNum = 3; % Move lower boundary down one port number
    else
        upVal = inf;
    end
    
    % Check lower saturation limit
    if isequal(lowMode,2),
        lowVal = block.RuntimePrm(1).Data;
    elseif isequal(lowMode,3)
        lowVal = block.InputPort(lowPortNum).Data;
    else
        lowVal = -inf;
    end
    
    % Use userdata to store limits, if plotFlag is on
    if strcmp(plotFlag,'on');    
        ud = get_param(block.BlockHandle,'UserData');
        ud.lowVal = [ud.lowVal;lowVal];
        ud.upVal = [ud.upVal;upVal];
        ud.time = [ud.time;block.CurrentTime];
        set_param(block.BlockHandle,'UserData',ud)
    end
    
    % Assign new value to signal
    if sigVal > upVal,
        sigVal = upVal;
    elseif sigVal < lowVal,
        sigVal=lowVal;
    end
    
    block.OutputPort(1).Data = sigVal;
    
    %endfunction

  4. Запишите функциональный plotsat.m, чтобы построить график пределов насыщенности. Эта функция берет указатель на Уровень 2 Блок s-function MATLAB и использует этот указатель, чтобы получить UserData блока. Если вы выполняете этот пример, сохраняете plotsat.m в вашу рабочую папку.

    function plotSat(block)
    
    % PLOTSAT contains the plotting routine for custom_sat_plot
    %   This routine is called by the S-function block's StopFcn.
    
    ud = get_param(block,'UserData');
    fig=[];
    if ~isempty(ud.time)
        if strcmp(ud.upBound,'on')
            fig = figure;
            plot(ud.time,ud.upVal,'r');
            hold on
        end
        if strcmp(ud.lowBound,'on')
            if isempty(fig),
                fig = figure;
            end
            plot(ud.time,ud.lowVal,'b');
        end
        if ~isempty(fig)
            title('Upper bound in red. Lower bound in blue.')
        end
        
        % Reinitialize userdata
        ud.upVal=[];
        ud.lowVal=[];
        ud.time = [];
        set_param(block,'UserData',ud);
    end
  5. Щелкните правой кнопкой по Level 2 MATLAB S-Function block и выберите Properties. Диалоговое окно Block Properties открывается. На панели Обратных вызовов измените StopFcn, чтобы вызвать обратный вызов графического изображения как показано в следующей фигуре, затем нажать ОК.

Похожие темы

Была ли эта тема полезной?