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

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

На первой линии файла определения класса разделите на подклассы от matlab.System и matlab.system.mixin.CustomIcon. matlab.System базовый класс позволяет вам использовать все методы объекта базовой системы и задать имена ввода и вывода блока, заголовок и группы свойства. CustomIcon класс mixin включает метод, который позволяет вам задать значок блока. 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 как описано в Отображении Кода Системного объекта к Диалоговому окну MATLAB System Block.

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