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

Разработка системыimulink

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

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

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

  3. Добавьте системный объект к модели с помощью блока MATLAB System. Смотрите Добавление Системных Объектов в Модель Simulink для получения информации.

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

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

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

Системный объект является компонентом, который можно использовать для создания системы в MATLAB. Можно записать код в MATLAB и использовать этот код, чтобы создать блок в Simulink. Чтобы определить свой собственный Системный объект, вы записываете файл определения класса, который является текстовым файлом MATLAB, который содержит код, определяющий ваш объект. См. «Интеграция системных объектов с использованием MATLAB System Block».

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

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

Создайте текстовый файл определения класса, чтобы задать системный объект. Код в этом примере создает фильтр наименьших средних квадратов (LMS) и включает индивидуальные настройки значка блока и внешнего вида диалогового окна. Это похоже на Систему идентификации для конечной импульсной характеристики системы, используя пример MATLAB System Блоков Simulink.

Примечание

Вместо создания файла определения класса вручную можно использовать опцию меню New > System Object > Simulink Extension для открытия шаблона. Этот шаблон включает индивидуальные настройки системного объекта для использования в блоке Simulink MATLAB System. Вы редактируете файл шаблона, используя его как руководство, чтобы создать свой собственный системный объект.

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

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

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

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

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

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

Добавьте соответствующую CustomIcon методы для определения внешнего вида блока MATLAB System в 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

Задайте системный объект с недиректным сквозным соединением

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

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

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

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

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

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

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

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

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

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

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

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

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

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. Создайте образец своих новых Системных объектов. Например, создайте образец lmsSysObj.

    s = lmsSysObj;

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

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

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

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

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

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

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

Добавьте системные объекты к модели Simulink с помощью блока MATLAB System, как описано в Mapping System Object Code to MATLAB System Block Dialog Box.

Для получения дополнительной информации смотрите Интегрировать системные объекты с помощью MATLAB System Block.