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

Разработка системы и симуляция в Simulink

Можно использовать Системные объекты в модели, чтобы моделировать в 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) и включает индивидуальные настройки в значок блока и внешний вид диалогового окна. Это подобно System Identification Используя Системные Блоки MATLAB пример Simulink.

Примечание

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

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

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

  • Используйте метод 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) адаптивный фильтр и использует обратную связь.

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

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

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

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

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

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

Добавьте следующие методы класса mixin Nondirect вместо метода 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

  1. Добавьте свои Системные объекты в вашу модель Simulink при помощи блока MATLAB System, как описано в Отображении Системных объектов, чтобы Блокировать Диалоговое окно.

  2. Добавьте другие блоки Simulink, соедините их и сконфигурируйте любые необходимые параметры, чтобы завершить вашу модель, как описано в документации Simulink. Смотрите System Identification для КИХ-Системы Используя Системные Блоки MATLAB пример Simulink.

  3. Запустите свою модель таким же образом, вы запускаете любую модель Simulink.