exponenta event banner

Устранение неполадок при анализе диапазона системных объектов

При выводе диапазонов для модели, использующей системный объект, анализ не выполняется, если модель содержит переменные, которые могут ссылаться на несколько объектов-дескрипторов. В следующем примере показано, как изменить конфигурацию кода так, чтобы инструмент Fixed-Point Tool мог получать диапазоны для модели.

В этом примере анализ диапазона первой модели ex_HandleVariableRefersToMultipleObjects приводит к ошибке, поскольку в коде имеется переменная, которая может ссылаться на различные системные объекты в зависимости от других условий. Модель, ex_HandleVariableRefersToSingleObject является перезаписью первой модели с той же функциональностью, но инструмент Fixed-Point Tool способен выводить диапазоны для модели.

  1. Откройте первую модель. В командной строке MATLAB ® введите:

    addpath(fullfile(docroot,'toolbox','fixpoint','examples'))
    ex_HandleVariableRefersToMultipleObjects
    

    Код в функциональном блоке MATLAB относится к пользовательскому системному объекту. fAddConstant.

    function y  = fcn(u, c)
    %#codegen
    
    persistent hSysObjAddTen
    persistent hSysObjAddNegTen
    persistent hSysObjForStep
    
    if isempty(hSysObjAddTen)
        hSysObjAddTen = fAddConstant(10);
    end
    
    if isempty(hSysObjAddNegTen)
        hSysObjAddNegTen = fAddConstant(-10);
    end
    
    if c > 0
        hSysObjForStep = hSysObjAddTen;
    else
        hSysObjForStep = hSysObjAddNegTen;
    end
    
    y = step(hSysObjForStep, u);

  2. На вкладке Приложения Simulink ® выберите Инструмент фиксированных точек.

  3. В инструменте «Фиксированная точка» в разделе «Новый рабочий процесс» выберите Iterative Fixed-Point Conversion.

  4. В инструменте «Фиксированная точка» в разделе «Система под проектированием» (SUD) выберите ex_HandleVariableRefersToMultipleObjects как система, которую требуется преобразовать.

  5. В разделе Режим сбора диапазонов выберите Производные диапазоны.

  6. Нажмите кнопку Собрать диапазоны.

    Не удалось выполнить анализ, поскольку в коде имеется переменная дескриптора, которая может ссылаться на различные системные объекты в зависимости от значения c.

  7. Код можно переписать в блоке MATLAB Function, чтобы инструмент Fixed-Point Tool мог выполнять деривацию диапазонов для системного объекта:

    function y  = fcn(u, c)
    %#codegen
    
    persistent hSysObjAddTen
    persistent hSysObjAddNegTen
    
    if isempty(hSysObjAddTen)
        hSysObjAddTen = fAddConstant(10);
    end
    if isempty(hSysObjAddNegTen)
        hSysObjAddNegTen = fAddConstant(-10);
    end
    
    if c > 0
        y = step(hSysObjAddTen, u);    
    else
        y = step(hSysObjAddNegTen, u);    
    end
    
  8. Закройте инструмент «Фиксированная точка» и ex_HandleVariableRefersToMultipleObjects модель. Откройте окно ex_HandleVariableRefersToSingleObject модель, которая содержит переписанный код. В командной строке MATLAB введите:

    ex_HandleVariableRefersToSingleObject

  9. На вкладке «Приложения Simulink» выберите инструмент «Фиксированная точка».

  10. В инструменте «Фиксированная точка» в разделе «Новый рабочий процесс» выберите Iterative Fixed-Point Conversion.

  11. В разделе Режим сбора диапазонов выберите Производные диапазоны.

  12. Нажмите кнопку Собрать диапазоны.

    На этот раз инструмент Fixed-Point Tool успешно выводит диапазоны для переменных, используемых в модели.