exponenta event banner

Проектирование системы в Simulink с использованием системных объектов

Проектирование и моделирование системы в Simulink

Системные объекты в модели можно использовать для моделирования в Simulink ®.

  1. Создайте системный object™, который будет использоваться в модели. Дополнительные сведения см. в разделе Определение новых системных объектов для использования в Simulink.

  2. Протестируйте новый системный объект в MATLAB ®. См. раздел Тестирование новых системных объектов в MATLAB

  3. Добавьте объект System в модель с помощью блока MATLAB System. Дополнительные сведения см. в разделе Добавление системных объектов в модель Simulink.

  4. Добавьте другие блоки Simulink при необходимости и подключите блоки для создания системы.

  5. Запустите систему

Определение новых системных объектов для использования в Simulink

Системный объект - это компонент, который можно использовать для создания системы в MATLAB. Код можно записать в MATLAB и использовать его для создания блока в Simulink. Для определения собственного системного объекта необходимо написать файл определения класса, который является текстовым файлом MATLAB, содержащим код, определяющий объект. См. раздел Интеграция системных объектов с использованием системного блока MATLAB.

Определение системного объекта с настройками блоков

Создайте объект System для использования в Simulink. В примере выполняется идентификация системы с использованием адаптивного фильтра наименьших средних квадратов (LMS).

Создайте текстовый файл определения класса для определения системного объекта. Код в этом примере создает фильтр наименьших средних квадратов (LMS) и включает настройки для значка блока и внешнего вида диалогового окна. Он аналогичен примеру «Идентификация системы для системы FIR с использованием Simulink системных блоков MATLAB».

Примечание

Вместо создания вручную файла определения класса можно использовать команду меню «Создать» > «Системный объект» > «Расширение Simulink» для открытия шаблона. Этот шаблон включает настройки объекта System для использования в системном блоке Simulink MATLAB. Файл шаблона редактируется с использованием его в качестве руководства для создания собственного объекта System.

В первой строке файла определения класса укажите имя системного объекта и подкласса из обоих matlab.System и matlab.system.mixin.CustomIcon. matlab.System базовый класс позволяет использовать все основные методы объекта System и задавать входные и выходные имена блоков, названия и группы свойств. CustomIcon класс mixin включает метод, позволяющий указать значок блока.

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

  • Используйте setupImpl способ выполнения разовых вычислений и инициализации переменных.

  • Используйте stepImpl способ реализации алгоритма блока.

  • Используйте resetImpl для сброса свойств состояния или DiscreteState свойства.

  • Используйте getNumInputsImpl и getNumOutputsImpl для определения количества входов и выходов соответственно.

Добавить соответствующее CustomIcon методы для определения внешнего вида системного блока MATLAB в Simulink. Для реализации каждого из этих методов см. страницы ссылок для каждого метода и полный файл определения класса ниже.

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

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

  • Используйте getIconImpl для указания текста, отображаемого на значке блока.

  • Используйте getInputNamesImpl и getOutputNamesImpl для указания меток, отображаемых для входных и выходных портов блока.

Полный файл определения класса для фильтра наименьших средних квадратов:

classdef lmsSysObj < matlab.System &...
      matlab.system.mixin.CustomIcon
   % lmsSysObj Least mean squares (LMS) adaptive filtering. 
   % #codegen

   properties
      % Mu Step size
      Mu = 0.005;
   end

   properties (Nontunable)
      % Weights  Filter weights
      Weights = 0;
      % N  Number of filter weights
      N = 32;
   end
  
   properties (DiscreteState) 
      X;
      H;
   end
  
   methods (Access = protected)
      function setupImpl(obj)
         obj.X = zeros(obj.N,1);
         obj.H = zeros(obj.N,1);
      end
      
      function [y, e_norm] = stepImpl(obj,d,u)
         tmp = obj.X(1:obj.N-1);
         obj.X(2:obj.N,1) = tmp;
         obj.X(1,1) = u;
         y = obj.X'*obj.H;
         e = d-y;
         obj.H = obj.H + obj.Mu*e*obj.X;
         e_norm = norm(obj.Weights'-obj.H);
      end
    
      function resetImpl(obj)
         obj.X = zeros(obj.N,1);
         obj.H = zeros(obj.N,1);
      end
      
   end   

   % Block icon and dialog customizations
   methods (Static, Access = protected)
      function header = getHeaderImpl
         header = matlab.system.display.Header(...
              'lmsSysObj', ...
              'Title', 'LMS Adaptive Filter');
      end
      
      function groups = getPropertyGroupsImpl
         upperGroup = matlab.system.display.SectionGroup(...
              'Title','General',...
              'PropertyList',{'Mu'});
            
         lowerGroup = matlab.system.display.SectionGroup(...
              'Title','Coefficients', ...
              'PropertyList',{'Weights','N'});
            
         groups = [upperGroup,lowerGroup];
      end
   end
   
   methods (Access = protected)
      function icon = getIconImpl(~)
         icon = sprintf('LMS Adaptive\nFilter');
      end
      function [in1name, in2name] = getInputNamesImpl(~)
         in1name = 'Desired';
         in2name = 'Actual';
      end
      function [out1name, out2name] = getOutputNamesImpl(~)
         out1name = 'Output';
         out2name = 'EstError';
      end
   end
end

Определение системного объекта с непрямым проходом

Создайте объект System для использования в Simulink. Пример выполняет идентификацию системы с использованием адаптивного фильтра наименьших средних квадратов (LMS) и использует петли обратной связи.

Создайте текстовый файл определения класса для определения системного объекта. Код в этом примере создает целочисленную задержку и включает циклы обратной связи и настройки значка блока. Сведения о контурах обратной связи см. в разделе Использование системных объектов в контурах обратной связи. В этом примере реализован объект System, который можно использовать для непрямого прохождения. Он аналогичен примеру «Идентификация системы для системы FIR с использованием Simulink системных блоков MATLAB».

В первой строке файла определения класса, подкласс из matlab.System и matlab.system.mixin.CustomIcon. matlab.System базовый класс позволяет использовать все основные методы объекта System и задавать входные и выходные имена блоков, названия и группы свойств. CustomIcon класс mixin включает метод, позволяющий указать значок блока. Nondirect mixin включает методы, позволяющие указать способ обновления блока и его выходные данные.

Добавьте соответствующие базовые методы объекта System, чтобы настроить и сбросить объект, а также задать и проверить свойства. Поскольку этот объект поддерживает непрямое сквозное соединение, вы не реализуете stepImpl способ. Вы реализуете updateImpl и outputImpl вместо этого методы. Для реализации каждого из этих методов см. страницы ссылок для каждого метода и полный файл определения класса ниже.

  • Используйте setupImpl для инициализации некоторых свойств объекта.

  • Используйте resetImpl метод сброса состояний свойства.

  • Используйте validatePropertiesImpl для проверки допустимости значений свойств.

Добавить следующее Nondirect методы класса mixin вместо stepImpl чтобы указать, как блок обновляет свое состояние и свои выходные данные. Для получения информации о реализации каждого из этих методов см. страницы ссылок и полный файл определения класса ниже.

  • Используйте outputImpl способ реализации кода для вычисления вывода блока.

  • Используйте updateImpl способ реализации кода для обновления внутренних состояний блока.

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

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

Полный файл определения класса для задержки:

classdef intDelaySysObj < matlab.System &...
     matlab.system.mixin.Nondirect &...
     matlab.system.mixin.CustomIcon
   % intDelaySysObj Delay input by specified number of samples.
   % #codegen

   properties
      % InitialOutput Initial output
      InitialOutput = 0;
   end

   properties (Nontunable)
      % NumDelays Number of delays
      NumDelays = 1;
   end

   properties (DiscreteState)
      PreviousInput;
   end

   methods (Access = protected)
      function setupImpl(obj, ~)
         obj.PreviousInput = ones(1,obj.NumDelays)*obj.InitialOutput;
      end
      
      function [y] = outputImpl(obj, ~)
         % Output does not directly depend on input
         y = obj.PreviousInput(end);
      end

      function updateImpl(obj, u) 
         obj.PreviousInput = [u obj.PreviousInput(1:end-1)]; 
      end

      function flag = isInputDirectFeedthroughImpl(~,~)
         flag = false;
      end

      function validatePropertiesImpl(obj)
         if ((numel(obj.NumDelays)>1) || (obj.NumDelays <= 0))
            error('Number of delays must be positive non-zero ...
              scalar value.');
         end
         if (numel(obj.InitialOutput)>1)
            error('Initial output must be scalar value.');
         end
      end

      function resetImpl(obj)
         obj.PreviousInput = ones(1,obj.NumDelays)*obj.InitialOutput;
      end
      
      function icon = getIconImpl(~)
         icon = sprintf('Integer\nDelay');
      end
   end
end

Тестирование новых системных объектов в MATLAB

  1. Создайте экземпляр нового объекта System. Например, создайте экземпляр lmsSysObj.

    s = lmsSysObj;

  2. Запустить объект несколько раз с различными входами. Этот шаг используется для проверки синтаксических ошибок и других возможных проблем перед добавлением в Simulink. Например,

    desired = 0;
    actual = 0.2;
    s(desired,actual);

Добавление системных объектов в модель Simulink

Системные объекты в функциональном блоке MATLAB

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

Системные объекты в системном блоке MATLAB

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

Добавьте системные объекты в модель Simulink с помощью системного блока MATLAB, как описано в разделе Отображение системного кода объекта в диалоговое окно Системный блок MATLAB.

Дополнительные сведения см. в разделе Интеграция системных объектов с использованием системного блока MATLAB.