MATLAB/Simulink/Stateflow

    • Михаил
      30.09.2014
      10:18

      Новая графическая система в MATLAB

      В релизе MATLAB R2014b появилась новая графическая система.

      Содержание

      Улучшенный вид – пример 3D графики

      Новая цветовая палитра (colormap) по умолчанию, parula, упрощает интерпретацию данных путем более точного их представления. Она упорядочена от темных к светлым тонам и визуально воспринимается однородно. Также у фигур теперь новый цвет фона по умолчанию, а координатная сетка теперь серого цвета, так что ваши данные отображаются более выраженно. Графическое сглаживание (anti-aliasing) улучшает вид линий и текста на графике.

      surf(peaks)
      

      Улучшенный вид – пример 2D графики

      Заголовки теперь используют полужирное начертание и по умолчанию большего размера. Линии используют новые цвета по умолчанию, которые проще отличать друг от друга, а также применяется новый порядок следования цветов. При использовании hold on порядок цветов теперь поддерживается.

      load besseldata
      
      plot(x,y1)
      hold on
      plot(x,y2,x,y3)
      plot(x,y4)
      hold off
      
      xlabel('x')
      ylabel('J_v(x)')
      title('Функции Бесселя');
      

      Графические объекты

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

      Графические объекты теперь отображают свои наиболее распространенные свойства в командном окне.

      s = surf(peaks)
      
      s = 
      
        Surface with properties:
      
             EdgeColor: [0 0 0]
             LineStyle: '-'
             FaceColor: 'flat'
          FaceLighting: 'flat'
             FaceAlpha: 1
                 XDat a: [1x49 double]
                 YDat a: [49x1 double]
                 ZDat a: [49x49 double]
                 CDat a: [49x49 double]
      
        Use GET to show all properties
      
      

      Вы можете обращаться и изменять индивидуальные графические свойства с использованием нотации object.property - подобно тому, как вы работаете с полями структуры.

      s.LineWidth
      s.EdgeColor = 'none';
      
      ans =
      
          0.5000
      
      

      Использование методов set и get для свойств объектов все еще работает в новой графической системе. Например, вы можете получить (get) все свойства объекта.

      get(s)
      
                AlignVertexCenters: 'off'
                         AlphaDat a: 1
                  AlphaDataMapping: 'scaled'
                   AmbientStrength: 0.3000
                        Annotation: [1x1 matlab.graphics.eventdata.Annotation]
                  BackFaceLighting: 'reverselit'
                      BeingDeleted: 'off'
                        BusyAction: 'queue'
                     ButtonDownFcn: ''
                             CDat a: [49x49 double]
                      CDataMapping: 'scaled'
                         CDataMode: 'auto'
                       CDataSource: ''
                          Children: []
                          Clipping: 'on'
                         CreateFcn: ''
                         DeleteFcn: ''
                   DiffuseStrength: 0.6000
                       DisplayName: ''
                         EdgeAlpha: 1
                         EdgeColor: 'none'
                      EdgeLighting: 'none'
                         FaceAlpha: 1
                         FaceColor: 'flat'
                      FaceLighting: 'flat'
                       FaceNormals: [48x48x3 double]
                   FaceNormalsMode: 'auto'
                  HandleVisibility: 'on'
                           HitTest: 'on'
                     Interruptible: 'on'
                         LineStyle: '-'
                         LineWidth: 0.5000
                            Marker: 'none'
                   MarkerEdgeColor: 'auto'
                   MarkerFaceColor: 'none'
                        MarkerSize: 6
                         MeshStyle: 'both'
                            Parent: [1x1 Axes]
                          Selected: 'off'
                SelectionHighlight: 'on'
          SpecularColorReflectance: 1
                  SpecularExponent: 10
                  SpecularStrength: 0.9000
                               Tag: ''
                              Type: 'surface'
                     UIContextMenu: []
                          UserDat a: []
                     VertexNormals: [49x49x3 double]
                 VertexNormalsMode: 'auto'
                           Visible: 'on'
                             XDat a: [1x49 double]
                         XDataMode: 'auto'
                       XDataSource: ''
                             YDat a: [49x1 double]
                         YDataMode: 'auto'
                       YDataSource: ''
                             ZDat a: [49x49 double]
                       ZDataSource: ''
      
      

      Новая возможность - Поворачиваемые подписи осей

      Дополнительно появились новые возможности в графической системе. Подписи к засечкам осей теперь можно поворачивать.

      open('PopulationPlot.fig')
      
      ax = gca;
      ax.XTickLabelRotation= -45;
      

      Новая возможность - Построение графиков с датами

      При использовании команды plot поддерживается новый тип данных datetime.

      load tempdata
      class(time)
      
      plot(time,temperature)
      ylabel('Температура')
      
      ans =
      
      datetime
      
      

      Подписи засечек осей форматируются и автоматически обновляются при изменении масштаба или перетаскивании графика.

      ax = gca;
      ax.XLim = [7.3275e+05 7.3319e+05];
      

      Новая возможность - Поддержка многоязычного текста и символов

      Теперь можно использовать символы Unicode в заголовках, подписях осей и пользовательских интерфейсах. Целочисленные значения для символов Unicode можно найти по адресу http://unicode-table.com.

      load unicodelabels
      open('SeismicData.fig')
      
      disp(xLabel);
      
      時間 (s) 
      
      disp(double(xLabel(1)));
      
             26178
      
      
      ax = gca;
      ax.XLabel.String = xLabel;
      ax.YLabel.String = yLabel;
      

      Новая возможность - Множественные цветовые палитры

      Вы теперь можете использовать отдельные цветовые палитры для каждой оси на фигуре.

      figure
      
      ax1 = subplot(1,2,1);
      sphere
      colormap(ax1, autumn)
      
      ax2 = subplot(1,2,2);
      sphere
      colormap(ax2, winter)
      

      Новая возможность - Вкладки в пользовательских интерфейсах

      f = figure;
      
      tabgp = uitabgroup(f);
      tab1 = uitab(tabgp,'Title','График Surface');
      tab2 = uitab(tabgp,'Title','График Contour');
      
      ax1 = axes('Parent',tab1);
      surf(peaks,'Parent',ax1);
      
      ax2 = axes('Parent',tab2);
      contourf(peaks,'Parent',ax2);
      
      tabgp.SelectedTab
      
      ans = 
      
        Tab (График Surface) with properties:
      
                    Title: 'График Surface'
          BackgroundColor: [0.9400 0.9400 0.9400]
                 Position: [0.0036 0.0071 0.9911 0.9286]
                    Units: 'normalized'
      
        Use GET to show all properties
      
      

      Другие новые возможности

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

      data1 = randn(5000,1);
      data2 = randn(5000,1)+ 2;
      
      figure
      h1 = histogram(data1);
      hold on
      h2 = histogram(data2);
      hold off
      
      legend show
      

      Можно легко управлять количеством прямоугольников. Можно настраивать тип нормализации. В этом примере, мы сделаем высоту каждого прямоугольника равным отношению числа измерений в прямоугольнике к ширине прямоугольника.

      morebins(h1);  %увеличить на 10%
      morebins(h1);  %увеличить на 10%
      
      fewerbins(h2); %уменьшить на 10%
      fewerbins(h2); %уменьшить на 10%
      
      h1.Normalization = 'countdensity';
      h2.Normalization = 'countdensity';
      
    • Михаил
      03.04.2014
      09:00
      В этом видео вы узнаете, каким образом осуществляется запуск моделей Simulink на нескольких ядрах многоядерного процессора.

      Описывается, какие существуют возможности при симуляции многозадачных моделей и как осуществляется переход от симуляции, к генерации многозадачного кода и профилированию времени его выполнения.
    • Михаил
      25.11.2013
      15:53
      Simulink PLC Coder™ генерирует аппаратно-независимый структурированный текст (ST) по IEC 61131 из моделей Simulink®, диаграмм Stateflow® и функций Embedded MATLAB®. Структурированный текст генерируется в формате PLCopen XML и других форматах, широко поддерживаемых встроенными средами разработки (IDE). В результате, вы можете компилировать и разворачивать ваше приложение на различных программируемых логических контроллерах (ПЛК) и программируемых контроллерах автоматизации (ПКА).

      Основные возможности
      ▪   Автоматическая генерация структурированного текста по IEC 61131-3
      ▪   Поддержка Simulink, включая подсистемы (с возможностью повторного использования), блоки ПИД регуляторов и интерполяционные таблицы
      ▪   Поддержка Stateflow, включая графические функции, таблицы истинности и машины состояний
      ▪   Поддержка Embedded MATLAB – включая выражения if-else, циклы и математические операции
      ▪   Поддержка многих типов данных, включая булевские, целые, перечислимые и в плавающей точке, а также векторов, матриц, шин и настраиваемых параметров
      ▪   Поддержка сред разработки, включая B&R Automation Studio™, PLCopen XML, Rockwell Automation® RSlogix™ 5000, Siemens® SIMATIC® STEP® 7 и 3S-Smart Software Solutions CoDeSys
      ▪   Создание тестовой обвязки
    • Михаил
      15.10.2013
      16:16
      HDL Verifier – это расширение для MATLAB и Simulink, позволяющее осуществлять верификацию HDL кода.

      В этом видео вы узнаете, как MATLAB и Simulink может использоваться для верификации HDL кода совместно с HDL симуляторами.
      Интеграция показана на примере Mentor Graphics ModelSim.
    • Михаил
      01.10.2013
      17:40
      В релизе MATLAB/Simulink R2013b появилась возможность генерации HDL кода из пользовательских системных объектов (User System Objects). Раньше эта возможность поддерживалась только для встроенных системных объектов, поставляемых с MATLAB и тулбоксами.

      В документации приводится пример пользовательского системного объекта, который реализует простейший счетчик.

      А какие нововведения в генерации HDL кода интересы и важны для вас?

      С обзором возможностей продукта HDL Coder вы можете также ознакомиться в этом видео.
    • Михаил
      01.10.2013
      17:27
      Добрый день!

      На нашем канале Youtube опубликовано обзорное видео, описывающее возможности продукта Simulink Verification and Validation.

      Три основные возможности - это:
      - Обеспечение трассируемости требований
      - Анализ покрытия модели тестами
      - Осуществление проверок на стандарты моделирования

      В видео я упоминаю стандарты моделирования MAAB, которые применяются многими компаниями, работающими с MATLAB/Simulink/Stateflow и Embedded Coder. Вы можете скачать сам стандарт с этой страницы: http://www.mathworks.com/automotive/standards/maab.html.
    • Михаил
      19.08.2013
      11:34
      В предыдущих записях в блоге я рассказывал о некоторых целевых платформах и средах разработки, поддерживаемых Embedded Coder:
      Запуск моделей Simulink на Arduino
      Поддержка TI MSP430 LaunchPad в Embedded Coder
      Embedded Coder встречает Green Hills Software MULTI

      В документации к Embedded Coder можно увидеть полный список поддерживаемого оборудования, сред разработки и операционных систем.

      В этом посте я расскажу о поддержке (Target Support Package) ОС реального времени QNX в Embedder Coder. Embedded Coder является расширяемой и настраиваемой системой, и, хотя QNX не обозначена в списке выше, поддержка этой RTOS была разрабатана инженерами MathWorks и предоставлена для общего использования. Это позволит всем инженерам, работающим в Simulink и разворачивающим свои системы на QNX, существенно упростить процесс разработки и тестирования, а также адаптировать эту поддержку для своих конкретных нужд.

      QNX - это Unix-подобная операционная система реального времени, в первую очередь предназначенная для встраиваемых систем.
      Simulink - это лидирующее окружение для симуляции мультидисциплинарных систем и модельно-ориентированного проектирования.
      Embedded Coder позволяет вам генерировать С код и разворачивать ваши алгоритмы на целевом аппаратном обеспечении.

      Вы можете скачать поддержку с ресурса пользователей File Exchange: http://www.mathworks.com/matlabcentral/fileexchange/42290-qnx-target-support-package-for-embedded-coder.
      Либо можете использовать последнюю версию из этого репозитория Github.

      Этот Target Support Package был протестирован на платформе Beagleboard xM, работающей под управлением QNX 6.5.1. В принципе, он также должен работать на других целевых платформах QNX, для которых есть BSP. Для этого потребуется внести минимальные изменения в Template Makefile, чтобы использовать другие флаги компилятора.

      Как я уже раньше писал, поддержка может заключаться в нескольких аспектах. В данном случае доступна автоматическая связь со средой разработки посредством Makefile (что подразумевает автоматическую компиляцию и линковку после генерации С кода), интеграция с QNX посредством POSIX таймеров (что позволяет запускать ваши многочастотные/многозадачные модели в реальном времени), а также поддержка симуляции в режиме External Mode. Такой режим симуляции позволяет осуществлять калибровку параметров, мониторинг и трассировку сигналов непосредственно из модели Simulink при работе вашего кода на встраиваемом процессоре в реальном времени.

      В небольшом видео вы можете увидеть эту поддержку в действии.

      Кстати, в Simulink также доступна встроенная поддержка BeagleBoard. Однако, это совсем другая возможность, не имеющая отношения к QNX и Embedded Coder. Больше информации об этом вы можете почерпнуть в предыдущем посте.
    • Михаил
      09.08.2013
      13:27
      Часто перед нами возникает необходимость интегрировать внешний С код в модель Simulink.

      Когда это может быть полезно?

      Например:
      • У нас есть существующий код, который реализует определенный алгоритм, и мы хотим быстро встроить его в модель Simulink.
      • Мы хотим интегрировать собственные драйвера устройств в Simulink.
      Существует несколько способов интеграции внешнего кода в Simulink:
      Если говорить про интеграцию внешнего кода при помощи S-функций, то есть несколько способов создания S-функций:
      • Legacy Code Tool. Этот инструмент создает C MEX S-функцию из существующего С кода и спецификаций, которые вы задаете при помощи кода MATLAB.
      • S-Function Builder. Этот блок создает C MEX S-функцию из спецификаций и фрагментов кода, которые вы задаете при помощи графического интерфейса пользователя.
      • Написание S-функции вручную. Вы можете написать C MEX S-функцию с нуля. В документации приведены шаблоны для C MEX S-функций, которые вы можете использовать как начальную точку для создания собственных S-функций.
      Обзор этих трех методов в документации дает представление об их преимуществах и недостатках.

      Если вы уже запутались, то диаграмма ниже, надеюсь, поможет вам разобраться:


      В этом видео продемонстрирован подход к интеграции внешнего С кода с использованием Legacy Code Tool.

      Все эти подходы по интеграции внешнего кода, их преимущества и недостатки, а также области применения подробно освещаются в официальном курсе MathWorks "Интеграция кода в Simulink": http://sl-matlab.ru/training/SLEX
    • Михаил
      29.03.2013
      14:15

      Новые возможности вариантных подсистем (variant subsystems) в R2013a

      Насколько я могу судить, вариантные подсистемы впервые появились в релизе Simulink R2009b. С тех пор эта возможность для компонентного моделирования постоянно развивается, и теперь уже предлагается как полноценная замена для configurable subsystem, которая является более старой технологией.

      В MATLAB R2013a появились новые возможности для вариантных подсистем.

      • Прямой выбор активного варианта подсистемы через логическое выражение.

      Выбор варианта теперь может осуществляться либо через объект Simulink.Variant , либо через любое условное выражение. Раньше обязательно требовалось создавать объект Simulink.Variant для каждого варианта - таким образом, требовалось хранить и поддерживать эти варианты отдельно от модели. Использование непосредственных логических выражений упрощает работу с вариантами.

      load_system('sldemo_variant_subsystems');
      open_system('sldemo_variant_subsystems/Controller');
      

      VSS_NONLINEAR_CONTROLLER
      VSS_SECOND_ORDER_CONTROLLER
      VSS_MODE
      
       
      VSS_NONLINEAR_CONTROLLER =
       
      Simulink.Variant
          Condition: 'VSS_MODE==1'
      
       
      VSS_SECOND_ORDER_CONTROLLER =
       
      Simulink.Variant
          Condition: 'VSS_MODE==2'
      
      
      VSS_MODE =
      
           2
      
      

      Как видите, у нас два варианта, которые описываются объектами VSS_NONLINEAR_CONTROLLER и VSS_SECOND_ORDER_CONTROLLER, а при помощи переменной VSS_MODE мы переключаемся между ними (обратите внимание на свойство Condition у Simulink.Variant).

      Если мы откроем Block Parameters для подсистемы Controller, то в графическом интерфейсе мы можем увидеть, как определены варианты:

      Введем непосредственное условие вместо Simulink.Variant (конечно, условие может быть композитным):

      • Мгновенное обновление вариантных подсистем и закомментированных блоков

      Теперь, при изменении активного варианта, он будет подсвечен в модели автоматически. Вам не требуется вручную обновлять диаграмму (Ctrl-D). То же самое справедливо и для закомментированных блоков.

      Выбираем другой вариант:

      VSS_MODE = 2;
      

      Видим, что в модели активировался контроллер второго порядка, а нелинейный контроллер теперь обозначен серым цветом.

      А как вы используете вариантные подсистемы в своих моделях?


    • Михаил
      28.03.2013
      17:05

      Создание массива с атрибутами существующей переменной

      В MATLAB R2013a такие функции как ones, zeros, eye, Inf, NaN, true, false и cast теперь могут возвращать результат, который соответствует аттрибутам некоторой переменной. Поддерживаемые аттрибуты включают в себя: тип данных, разреженность и комплексность (мнимое или действительное число).

      Делать это мы можем при помощи пары аргументов ('like',variable_name), передаваемых в соответствующую функцию.

      Например, мы можем наследовать тип данных:

      % Создадим массив 2-на-3, состоящий из 8-битных безнаковых чисел:
      p = uint8([1 3 5 ; 2 4 6])
      % Создадим массив нулей такого же размера и типа данных, как p:
      X = zeros(size(p),'like',p)
      class(X)
      
      p =
      
          1    3    5
          2    4    6
      
      
      X =
      
          0    0    0
          0    0    0
      
      
      ans =
      
      uint8
      
      

      Можем наследовать разреженность:

      % Создадим разреженную матрицу 5-на-5:
      p = sparse(5,5,pi)
      % Создадим единичную матрицу 5-на-5, которая разреженная, как p:
      I = eye(5,'like',p)
      
      p =
      
         (5,5)       3.1416
      
      
      I =
      
         (1,1)        1
         (2,2)        1
         (3,3)        1
         (4,4)        1
         (5,5)        1
      
      

      Или комплексность:

      % Создадим комплексный вектор p единичной точности:
      p = single([1+i 2])
      % Создадим матрицу из единиц размером 2-на-3:
      A = ones(2,3)
      % Преобразуем A к такому же типу и комплексности, как p:
      B = cast(A,'like',p)
      class(B)
      
      p =
      
         1.0000 + 1.0000i   2.0000 + 0.0000i
      
      
      A =
      
           1     1     1
           1     1     1
      
      
      B =
      
         1.0000 + 0.0000i   1.0000 + 0.0000i   1.0000 + 0.0000i
         1.0000 + 0.0000i   1.0000 + 0.0000i   1.0000 + 0.0000i
      
      
      ans =
      
      single
      
      

      Я думаю, что это очень удобная новая возможность.

    • Михаил
      25.03.2013
      10:29
      Ни один проект не может обойтись без документации. Отчеты, спецификации, описания...

      В рамках концепции модельно-ориентированного проектирования одни и те же модели используются для разных целей.
      Одна из таких целей - создание документации. Сама по себе модель уже является спецификацией для системы - однако, мы хотим иметь текстовую спецификацию. Например, для того, чтобы передать описание системы заказчику, предоставить документацию отделу контроля качества - да и мало ли для чего еще...

      Для автоматической генерации отчетов применяются MATLAB Report Generator и Simulink Report Generator. Поскольку шаблоны отчетов являются гибко настраиваемыми, мы можем из одной и той же модели сгенерировать самые разные отчеты. Например, текстовую спецификацию из модели (подробную версию и высокоуровневую версию), отчеты по тестированию и другие отчеты.

      В этом видео показываются основные возможности по автоматической генерации отчетов из MATLAB и Simulink.
    • Михаил
      22.03.2013
      16:29
      Работает ли ваша модель настолько быстро, насколько это возможно? Или хотя бы так быстро, как вас это устраивает? :)

      Если вы ищете конкретные указания о том, как можно увеличить эффективность (скорость) симуляции в Simulink, то вам будет очень интересна данная статья:

      http://www.mathworks.com/company/newsletters/articles/improving-simulation-performance-in-simulink.html
      Если кратко, то статья охватывает многие возможности по ускорению и лучшие практики при разработке в Simulink.

      Также в документации Simulink есть отдельные главы, касающиеся производительности (советую ознакомиться):
      http://www.mathworks.com/help/simulink/ug/modeling-techniques-that-improve-performance.html
      http://www.mathworks.com/help/simulink/index.html#performance

      Эти указания и методики, а также много и много различных статей, записей в блогах и сообщений в сообществе всегда существовали и они очень актуальны.
      Однако, до недавнего времени (а точнее, до релиза R2012b) не было возможности собрать многие из этих рекомендаций воедино и применить к конкретной модели.

      Simulation Performance Advisor появился в релизе R2012b и обзавелся новыми проверками в R2013a. Теперь вы можете анализировать узкие места в ваших моделях, используя один инструмент. В этом небольшом видео рассказывается про основные функции Simulation Performance Advisor.

      Это прекрасный инструмент, и он может действительно помочь вам - однако это не волшебная кнопка "Сделать хорошо". Скорее, это первая интерация по увеличению производительности вашей модели. Поэтому - пользуйтесь правильными инструментами, изучайте статьи - и удачи вам в создании эффективных моделей! :)
    • Михаил
      11.03.2013
      15:38

      Эффективность функции FFT в MATLAB R2013a

      В MATLAB R2013a встроенная функция fft теперь работает быстрее на процессорах, поддерживающих набор инструкций AVX. Давайте проверим? :)

      Содержание

      Описание тестбенча

      Я написал небольшую функцию:

      function fft_avx_bench
      
      % FFT on data fr om 1024 to 33554432 samples
      N = 2.^(10:25);
      L = length(N);
      % Number of iterations to average results
      numiter = 10;
      
      time_lapse = zeros(numiter,L);
      for j = 1:numiter
          for k = 1:L
              a = randn(1,N(k)) + 1i*randn(1,N(k));
              tic;
              A1 = fft(a);
              time_lapse(j,k) = toc;
          end
      end
      
      fname = ['fft_avx_bench_res_',ver sion('-release')];
      save(fname,'time_lapse','N');
      
      disp(mean(time_lapse));
      

      Эту функцию я запустил в MATLAB R2012b, и в MATLAB R2013a. Часть кода я позаимствовал отсюда: http://www.mathworks.com/matlabcentral/fileexchange/40097-sprint-race-for-fast-butterflies. Функция очень простая. Мы запускаем fft над входными векторами различной длины - от 2^10 до 2^25, причем делаем это 10 раз (чтобы потом усреднить результаты). Мы измеряем время выполнения каждого вызова функции fft (которых всего у нас получается 160: 10 итераций над 16-ью векторами) и сохраняем в файлы.

      Далее мы запускаем следующую функцию для того, чтобы построить графики:

      function fft_plot_results
      res_12b = load('fft_avx_bench_res_2012b');
      res_13a = load('fft_avx_bench_res_2013a');
      
      semilogy(log2(res_13a.N),mean(res_13a.time_lapse),'r');
      hold on;
      semilogy(log2(res_12b.N),mean(res_12b.time_lapse),'g');
      
      legend({'R2013a','R2012b'});
      xlabel('Length of data for FFT (log2)');
      ylabel('Execution time (sec)');
      title('Comparison of FFT execution time in R2013a and R2012b');
      
      figure;
      plot(log2(res_12b.N),(mean(res_12b.time_lapse)-mean(res_13a.time_lapse))./mean(res_12b.time_lapse)*100);
      xlabel('Length of data for FFT (log2)');
      ylabel('Improvement percentage');
      title('Positive percentage shows where R2013a is faster than R2012b');
      

      И вот что у нас получается:

      fft_plot_results;
      

      Выводы

      В зависимости от размера вектора, увеличение эффективности (скорости) функции fft может достигать 40%. По-моему, очень неплохо! А какие результаты получаются у вас?


    • Михаил
      10.03.2013
      10:53
      Как раз накануне Международного Женского Дня для подписчиков стал доступен новый релиз MATLAB R2013a. Я бы не стал называть это совпадением, так как уже восьмой год подряд MathWorks придерживается полугодового цикла релизов - примерно в марте и сентябре.

      На этой странице: https://www.mathworks.com/products/new_products/latest_features.html?s_tid=hp_spot_r2013a_0213 вы можете посмотреть, что нового появилось в релизе R2013a.

      Поскольку MATLAB покрывает очень широкий спектр инженерных и научных задач, разным людям могут быть интересны разные изменения. Я подумал, что было бы неплохо написать о том, какие изменения понравились лично мне.

      Поэтому я составил топ-лист пяти самых интересных изменений, на которые мне хотелось бы посмотреть подробней. Это было непросто сделать, так как вначале "мой список" содержал 50 позиций :)

      • Возможность создания масок непосредственно на библиотечных блоках, блоках Stateflow и MATLAB function. Раньше требовалось помещать их для этого в пустую подсистему.
      • Поддержка многозадачности (concurrent execution) для SIL и PIL режимов. Новый графический интерфейс для визуализации многозадачности. Поддержка таблиц подстановки функций мьютексов и семафоров для многоядерных процессоров. Различные улучшения в профилировании кода. Возможность работы с двумя блоками SIL сразу.
      • Автоматическая конвертация алгоритмов MATLAB из плавающей точки в фиксированную при работе с MATLAB Coder для генерации С кода.
      • Поддержка новых платформ Simulink Run on Target: Gumstix Overo и Raspberry PI.
      • Поддержка платформы Xilinx Zynq-7000 (смешанный C/HDL workflow).
      А что понравилось вам? Пишите в комментариях, будет интересно узнать!
    • Михаил
      15.02.2013
      11:38
      Часто ли над моделью Simulink работает больше одного человека? Я бы сказал, что почти всегда.

      А многие ли знают, как правильно организовать командную разработку в Simulink? Как показывает наш опыт, совсем немногие.
      Не так давно мы проводили вебинар "Лучшие методы крупномасштабного моделирования с использованием инструментов MathWorks" во время которого, среди прочего, рассказывали про Simulink Projects. Как оказалось, многие хотели бы внедрить этот инструмент в свой процесс разработки, но не очень понимают, с чего начать.

      В видео "Как использовать Simulink Projects совместно с Subversion" я более подробно рассказываю об интеграции Simulink Projects с популярной системой контроля версий Subversion. Некоторые моменты остались за кадром - например:

      - Настраиваемые ярлыки

      - Анализ зависимостей проекта/моделей

      - Запуск batch скриптов над проектом

      - Экспорт проектов в архиве для передачи другим пользователям

      - Пользовательские шаблоны проектов

      - Управление версиями моделей

      - Интеграция с любой другой системой контроля версий

      Сообщите нам, если вы хотите узнать об этом подробней - мы всегда сможем помочь!
    • Михаил
      13.02.2013
      17:40
      Разработка систем повышенной надежности при помощи инструментов MathWorks - это тема, которой уделяется повышенное внимание в последние годы. Говорить об этом можно очень долго, и это не совсем тема для блогов.

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

      Записанные вебинары:

      Разработка встраиваемого ПО в автомобилестроении с использованием инструментов MathWorks

      Разработка систем по DO-178C с использованием инструментов MathWorks

      Разработка систем по DO-254 с использованием инструментов MathWorks

      Модельно-Ориентированное Проектирование для IEC 61508

      Моделирование требований при помощи инструментов MathWorks

      Формальная верификация в MATLAB и Simulink

      Всесторонний статический анализ с применением продуктов Polyspace

      Серия вебинаров по DO-178/DO-254 (на англ. языке)



      Обзорные видео:


      Разработка систем по DO-178 c инструментами MathWorks

      Продукты Polyspace для верификации кода

      Simulink Design Verifier для поиска ошибок проектирования



      Страницы по сертификации на сайте MathWorks и matlab.ru:



      Генерация бортового ПО для авиакосмических систем

      ARP-4754

      DO-254

      DO-178B

      DO-178C

      MISRA C

      ISO 26262

      IEC 61508



      Пользовательские истории:

      Авиакосмос

      Автомобильная

      Промышленная автоматизация



      Статьи:

      Верификация кода и обнаружение ошибок исполнения путем абстрактной интерпретации

      Модельно-ориентированное проектирование по стандарту DO-254 с помощью инструментов компаний MathWorks и Mentor Graphics

      Новые способы проверки автоматически сгенерированного кода при помощи инструментов Simulink и Embedded Coder по стандарту DO-178

      Переход к DO-178C и ARP4754A с использованием Модельно-Ориентированного Проектирования.

      Очень много статей на английском на страницах по сертификации на сайте MathWorks (ссылки приведены выше).

      События:

      Сертификация в авиастроении по стандартам DO-178(B,C), DO-254, KT 178 при помощи инструментов MathWorks
      (Рекомендую почитать статьи Тома Эрккинена, ссылки на которые вы можете найти в описании).


      Буду редактировать этот пост при появлении новых материалов по теме разработки систем повышенной надежности с инструментами MathWorks.

      Обращайтесь к нам, если возникнут дополнительные вопросы!
    • Михаил
      29.01.2013
      13:43

      Запуск моделей Simulink на Arduino

      В этом небольшом посте я бы хотел рассказать о возможностях по работе с платформой Arduino из Simulink.

      Содержание

      Использование Simulink Run on Target Hardware

      В одном из предыдущих постов я рассказывал, что такое Simulink Run on Target Hardware и как этот функционал позволяет работать с бюджетными аппаратными платформами.

      Для того, чтобы начать использовать этот функционал, достаточно выполнить команду

      targetinstaller
      

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

      В результате, вы получите следующее:

      • Библиотеку блоков Simulink для работы с периферией Arduino:
      - Digital Input/Output
      - Analog Input
      - Servo Read/Write (Continous)
      - Serial Transmit/Receive
      - PWM
      • Примеры и документацию для работы с Arduino

      Заметьте, что для того, чтобы начать использовать этот функционал, вам нужен только Simulink. Вы можете начать с базовых примеров и расширять их своими алгоритмами и функционалом. Чтобы запустить модель Simulink на Arduino, достаточно выбрать Run on Target Hardware > Prepare to Run (или Run) из меню Tools . Дополнительная информация содержится в документации.

      Функционал Simulink Run on Target Hardware доступен любому пользователю Simulink, но эта доступность и простота использования несут определенные ограничения. Например, Simulink Run on Target Hardware поддерживает только Arduino Uno и Arduino Mega 2560. Кроме того, процесс запуска модели на целевой платформе прозрачен для пользователя - т.е. вы не получаете доступа к исходному коду, который генерируется и не имеете возможности тонкого управления различными аспектами генерации кода.

      В случае, если вы хотите работать с любым клоном Arduino или вам важно управлять процессом генерации кода и его сборкой, то вам требуется Embedded Coder.

      Использование Embedded Coder

      Embedded Coder® генерирует удобочитаемый, компактный и быстрый C и C++ код для использования во встраиваемых процессорах, отладочных платах и микропроцессорах, используемых для серийного производства. Embedded Coder активирует дополнительные настройки конфигурации для MATLAB Coder™ и Simulink Coder™, а также включает продвинутые оптимизации для тончайшей настройки функций, файлов и данных в сгенерированном коде. Эти оптимизации улучшают эффективность кода и облегчают интеграцию с существующим кодом, типами данных и калибровочными параметрами, используемыми в производстве. Вы можете подключить стороннюю среду разработки к процессу сборки, чтобы получить исполняемый файл "под ключ" для развертывания на вашей встраиваемой системе.

      Поддержка Arduino в Embedded Coder реализована при помощи Target Support Package, который вы можете скачать с File Exchange: Embedded Coder Support Package for Arduino.

      В дополнение к упомянутым настройкам, и возможностью работать с любым Arduino, вы также получаете возможность верифицировать ваши алгоритмы в режиме Processor-in-the-Loop (больше информации о PIL тестировании в этом посте).

      Я записал небольшое видео , где вы можете увидеть некоторые возможности, упомянутые в этом посте.

      Если у вас есть вопросы, задавайте их нам, мы попробуем помочь.

    • Михаил
      23.12.2012
      11:07
      Не так давно я рассказывал о том, каким образом Stateflow помогает нам моделировать событийные системы в Simulink. Stateflow покрывает потребности целого класса задач, связанных с теорией конечных автоматов и логикой переключения между состояниями. Однако, есть еще одна область дискретных событийных систем (часто по-английски они называются DES от Discrete Event Systems), которые относятся к теории массового обслуживания или теории очередей. SimEvents - это инструмент, который позволяет нам решать именно такие задачи.

      Чем отличается симуляция динамических систем от симуляции событийных систем?

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

      Событийные системы характеризуются тем, что в системе происходят асинхронные события, по которым система переходит из одного состояния в другое. SimEvents предоставляет ядро для симуляции дискретных событийных систем ("календарь") и для обработки событий в системе. Кроме того, SimEvents предоставляет библиотеку компонентов для дискретно-событийного моделирования в Simulink - таких, как запросы на обслуживание и генераторы событий, очереди, серверы, переключатели, часы, различная статистика. Все это представлено в виде библиотечных блоков Simulink.

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

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

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

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

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

      Во время симуляции, вы можете визуализировать поведение системы для лучшего понимания её свойств, а также более наглядного представления симуляции. Вы можете использовать встроенную статистику по блокам для получения задержек, пропускной способности, средней длины очереди и других метрик. А также использовать анимацию, чтобы видеть, как объекты и события ведут себя по время симуляции.

      Полная интеграция SimEvents с MATLAB/Simulink/Stateflow позволяет нам осуществлять мультидисциплинарное моделирование сложных систем. Например, если мы говорим про управление воздушным трафиком, то мы можем моделировать диспетчеризацию самолетов на взлетной полосе при помощи SimEvents, а траекторию самолета при взлете при помощи Simulink. При помощи Stateflow мы можем моделировать режимы работы самолета - например, реакцию на ошибки (если два самолета находятся слишком близком друг к другу на взлетной полосе). Это дает нам по-настоящему сильный инструмент системного моделирования.

      С использованием других продуктов из семейства Simulink, вы можете создавать трехмерные анимации ваших моделей (Simulink 3D Animation), запускать симуляции в параллели (Parallel Computing Toolbox), и использовать алгоритмы для оптимизации (Simulink Design Optimization) процессов и решения задач по маршрутизации, планированию, выделению ресурсов и задач сетевой оптимизации.

      Чтобы получить больше информации о SimEvents, вы можете обратиться к странице продукта на сайте MathWorks. В разделе Videos & Examples есть много примеров, демонстрирующих возможности SimEvents.
    • Михаил
      20.11.2012
      15:05
      В релизе MATLAB R2012a появилась возможность запускать модели Simulink на поддерживаемых аппаратных платформах.
      Таким образом, Simulink предлагает встроенную поддержку для прототипирования, тестирования и запуска моделей на недорогом целевом оборудовании, включая Arduino®, LEGO® MINDSTORMS® NXT, PandaBoard и BeagleBoard. Вы можете проектировать алгоритмы в Simulink для систем управления, робототехники, обработки звука и систем компьютерного зрения, и видеть, как они работают на реальном железе.

      Многие, кто читал эту новость, могли задаться вопросом - а что нового в этом функционале? Ведь еще до релиза R2012a у нас была возможность работать из MATLAB/Simulink с Arduino, LEGO и BeagleBoard - скачав соответствующую поддержку с File Exchange.

      Если вкратце, то основное отличие Simulink Run on Target Hardware (ROTH) заключается в том, что для запуска моделей Simulink на железе не требуется Embedded Coder. Для работы этого функционала достаточно иметь студенческую версию Simulink.

      Какие основные возможности Simulink ROTH?

      • Автоматическая установка и настройка поддержки целевого оборудования
      • Библиотека блоков Simulink для аппаратных интерфейсов: I/O портов, датчиков и исполнительных механизмов
      • Выстроенный рабочий процесс для разработки, выполнения и отладки ваших алгоритмов непосредственно на поддерживаемом обрудование
      • Прямая связь между Simulink целевым оборудованием
      • Интерактивная настройка параметров и мониторинг сигналов во время работы вашего приложения
      • Развертывание модели для автономного выполнения

      Главная целевая аудитория ROTH - это, конечно, студенты и преподаватели. Им требуется недорогое оборудование, и нужно, чтобы их алгоритмы просто работали на этом оборудовании.

      Есть два подхода к исследованию и анализу свойств систем – это симуляция и физическое взаимодействие.

      В данном контексте, симуляция – это конфигурация, при которой сам алгоритм, динамика объекта управления, и внешняя среда, с которой они взаимодействуют – все это моделируется на компьютере.

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

      Именно здесь большое значение имеет обучение на реальных проектах (Project-Based Learning).

      Студенты обучаются, выполняя определенные задачи. Это весело, это бросает вызов студентам, и часто позволяет применить на практике полученные теоретические знания.
      Методика обучения на проектах основана на непосредственном экспериментировании с настоящими задачами. Взаимодействие с настоящей средой стимулирует процесс обучения у студента и предлагает возможности по исследованию и анализу сложных проблем. Работа над проектом также предоставляет возможности для командной кооперации и пониманию того, как устроен инженерный процесс – от первоначальной идеи до конечной реализации.

      Итак, какие преимущества вы получаете при использовании технологии Simulink Run on Target Hardware? Во-первых, вы получаете из модели исполняемый файл и запускаете его на целевом железе нажатием одной кнопки. Это позволяет студентам взаимодействовать с реальным железом, при этом избегая работы с низкоуровневыми функциями и интерфейсами. Во-вторых, вы работаете в графической среде и разрабатываете алгоритм на языке блок-схем, что позволяет сконцентрироваться на самом алгоритме, нежели чем на вопросах, связанных с его реализацией. В-третьих, Simulink также предлагает широкий набор расширений, называемых тулбоксами, которые предоставляют дополнительные возможности и функционал для создания приложений обработки изображений и видео. Это упрощает создание продвинутых алгоритмов, которые применяются в индустрии.

      В этом небольшом видео вы можете посмотреть, каким образом осуществляется работа с целевым оборудованием из Simulink на примере платы BeagleBoard.
    • Михаил
      06.11.2012
      09:34
      Часто нам задают вопрос - поддерживает ли Embedded Coder определенный процессор или отладочную плату? Быстрый ответ на этот вопрос - ДА, поддерживает. Ведь Embedded Coder по умолчанию генерирует ANSI C код, который мы можем получить из модели Simulink и вручную (или полуавтоматически) интегрировать в наш проект.  Мы называем это "Экспорт алгоритма":



      Например, в случае Texas Instruments MSP430 LaunchPad, мы можем при помощи Embedded Coder сгенерировать Си-функцию (или несколько функций) из нашего алгоритма (настроив прототип функции, т.е. интерфейсы) и интегрировать её в существующий проект Code Composer Studio - среды разработки для процессоров Texas Instruments. Во многих случаях этого вполне достаточно, но зачастую хочется большей "поддержки". Но, отвечая на самый первый вопрос, давайте сначала разберемся, что означает "поддерживать".

      Поддержка можем состоять из нескольких аспектов:
      1. Автоматическая связь со средой разработки для процессора . Компания MathWorks не разрабатывает компиляторы и среды разработки для встраиваемых процессоров.  При помощи Embedded Coder мы можем автоматизировать создание makefile или целиком проектов для автоматической компиляции кода, линковки и загрузки в процессор. Все это – с использованием среды разработки, которая предоставляется производителем процессора.
      2. Оптимизация кода под конкретный процессор. Code replacement – это часть технологии Embedded Coder, которая позволяет генерировать код, оптимизированный под конкретный процессор. Осуществляется это при помощи специальных таблиц подстановок. Предоставлением оптимизированных под конкретный процессор функций (библиотек) часто занимается фирма-производитель процессора. Например, у Texas Instruments есть оптимизированные библиотеки для тригонометрических функций и т.п. Конечно, можно и свои собственные функции таким образом подставлять.
      3. Специфические интерфейсные драйвера в виде блоков Simulink. Например, для определенных процессоров есть блоки Simulink для ШИМ, ЦАП, АЦП и т.п. При генерации кода из этих блоков генерируется специфичный для интерфейсов этих процессоров код. К этим блокам также относятся низкоуровневые операции с памятью, которые также могут быть реализованы в виде блоков Simulink.
      4. Интеграция с ОС реального времени, планировщиком, прерываниями  обеспечивается также при помощи специальных блоков Simulink и настроек в модели.
      5. Поддержка PIL симуляции. Подробнее об этом режиме симуляции вы можете почитать в моей предыдущей записи здесь.
      6. External Mode. Такой режим симуляции позволяет осуществлять калибровку параметров, мониторинг и трассировку сигналов непосредственно из модели Simulink при работе нашего кода на встраиваемом процессоре.
      Разные процессоры и разные среды разработки могут поддерживаться Embedded Coder в разной степени. С каждым релизом добавляется поддержка новых платформ, при этом устаревшие платформы отпадают. С актуальным списком поддерживаемого оборудования и сред разработки вы можете ознакомиться на странице Embedded Coder на сайте MathWorks. Конечно, невозможно организовать поддержку из коробки для всех возможных процессоров и отладок, поскольку многие инженеры используют собственные отладки, а количество различных микропроцессоров и DSP на рынке зашкаливает. Именно поэтому для каждого из перечисленных пунктов Embedded Coder предоставляет API, который позволяет реализовать поддержку своего железа.

      При реализации своего Target Support мы имеем возможность создавать полный проект «под ключ» из модели Simulink – вместе с драйверами устройств, планировщиком и т.п. Мы называем это "Target Support":




      Конечно, не обязательно реализовывать поддержку всех пунктов, упомянутых выше. Во многих случаях достаточно автоматизировать создание makefile для автоматической компиляции, линковки и заливки прошивки на плату. А также реализовать режим PIL для выполнения верификации скомпилированного кода относительно симуляции модели.

      В Центре компетенций MathWorks в России есть практика проведения небольших пилотных проектов вместе с клиентами, которые интересуются автоматической генерацией кода. Такой пилотный проект позволяет им оценить возможности Embedded Coder и понять необходимость использования автоматической генерации кода в их компании. В списке поддерживаемого оборудования Embedded Coder содержится большое количество актуальных процессоров и отладочных плат.
      Мы решили создать собственный Target Support для TI MSP430 LaunchPad, поскольку для этой платформы существует только возможность "экспорта алгоритмов" (см. выше). Мы рассматриваем эту отладку как доступную платформу для оценки автоматической генерации кода и верификации.

      Алгоритмы, которые мы можем реализовать на MSP430 – достаточно простые, но это только к лучшему. Это позволяет нам больше сконцентрироваться на возможностях по генерации кода, нежели чем на создании алгоритма как такового. Кроме того, наши клиенты могут использовать этот Target Support как базу для создания реализации для своего процессора или отладочной платы. Если вас интересует такая возможность, вы можете получить отладочный комплект (включающий железо и софт) на этой странице.

      Texas Instruments MSP430 LaunchPad это простое в использовании, недорогое, и масштабируемое введение в мир микроконтроллеров и семейства MSP430. Эта отладочная плата включает: два светодиода, две кнопки, одна из которых является пользовательской, внутрисхемный JTAG, DIP разъем для MSP430 (что позволяет устанавливать на плату другой процессор семейства MSP430), пины ввода-вывода и встроенный датчик температуры (в процессоре g2553).

      Типичные применения MSP430 – это бюджетные системы с ультранизким потреблением энергии. Также системы захвата аналоговых сигналов и датчиков, обработка данных для передачи на хост или отображения на LCD. Есть много интересных пользовательских проектов – например, связанных с робототехникой (шагающий паук, рука робота), цветной LCD, Bluetooth, велосипедный компьютер, и даже реализация FAT16. Многим членам сообщества не откажешь в чувстве юмора – если вы не слышали, как LaunchPad и пьезо-спикер играют Имперский Марш – вам это надо послушать!

      Итак, что включает в себя Target Support для MSP430 LaunchPad?
      • Поддерживаемые среды разработки – это Code Composer Studio 5 на Windows и Linux. Кроме того, на Linux поддерживаются mspgcc и mspdebug, которые являются открытыми аналогами Code Composer Studio для MSP430.
      • Библиотека блоков Simulink для периферийных устройств MSP430 LaunchPad поддерживает светодиоды, датчик температуры, пользовательскую кнопку и блоки для передачи/приема данных по последовательному интерфейсу.
      • Поддерживается симуляция в режиме PIL, а также профилирование времени выполнения в режиме PIL.

      Разработка происходит на Github, а релизы можно скачать с File Exchange – официального ресурса MathWorks для обмена пользовательским контентом.

      В этом видео вы можете посмотреть, как осуществляется совместная работа Embedded Coder и TI MSP430 LaunchPad.
    • Михаил
      24.10.2012
      11:03
      Мы часто демонстрируем нашим пользователям возможности автоматической генерации кода из MATLAB/Simulink и исполнение этого кода на целевых процессорах. Но иногда, под рукой просто нет необходимого процессора. На помощь приходит симулятор встраиваемого процессора. Сегодня я бы хотел вам рассказать о совместной работе Embedded Coder и среды разработки Green Hills Sotfware MULTI для верификации автоматически сгенерированного кода из моделей MATLAB/Simulink/Stateflow в режиме Процессор-в-Контуре (по-английски это называется Processor-in-the-Loop или PIL).

      Прежде, чем мы начнем, давайте введем основные определения.
      Embedded Coder – это продукт компании MathWorks, разработчика MATLAB/Simulink. Embedded Coder предназначен для автоматической генерации С/С++ кода производственного качества. Два базовых продукта для генерации кода из функций MATLAB и из моделей Simulink/Stateflow, называются MATLAB Coder и Simulink Coder. Embedded Coder расширяет возможности этих продуктов, добавляя опции по конфигурации и оптимизации кода. Сгенерированный код является портируемым, читаемым и компактным и подходит для использования во встраиваемых системах. Embedded Coder позволяет нам проводить верификацию скомпилированного кода в режимах SIL и PIL, поддерживая интеграцию с распространенными средами разработки и оптимизацию кода под конкретный процессор.

      MULTI – это среда разработки от компании Green Hills Software. MULTI предназначена для инженеров-разработчиков встраиваемых систем. Среда интегрирована с компиляторами Green Hills Software и аппаратными модулями отладки для различных процессоров. MULTI поддерживает набор операционных систем реального времени, а также интерактивный отладчик и профилировщик. Green Hills Software MULTI также предоставляет симулятор процессора PowerPC, на котором мы будем проверять наш автоматически сгенерированный код.

      Что такое PIL тестирование, которое я уже упоминал?
      На уровне модели Simulink мы работаем с нашей системой, моделируя алгоритмы (например, это могут быть алгоритмы управления с обратной связью, обработки сигналов, фильтрации или любые другие алгоритмы), передавая входные воздействия и анализируя выходные сигналы. В общем случае входные сигналы могут приходить с нашей модели окружения или модели объекта управления, или могут быть просто заданы в виде тестовых векторов. Нас устраивает, как алгоритм работает в Simulink. Но каким образом убедиться, что он будет работать точно так же в реальном железе?

      Мы используем автоматическую генерацию кода при помощи Embedded Coder, кросс-компиляцию этого кода при помощи среды разработки для нашего встраиваемого процессора и загружаем объектный код на целевой процессор. Но как протестировать, что полученный код работает так же, как оригинальная модель в MATLAB/Simulink?
      Кроме самого алгоритма, в коде также появляется специальная обвязка, которая автоматически создается Embedded Coder и представляет собой реализацию PIL.

      Это обвязка позволяет принимать и передавать данные с хост компьютера, и общаться с оригинальной моделью Simulink. Интерфейс взаимодействия может быть любым, который поддерживается вашим процессором – последовательный интерфейс, Ethernet, разделяемая память, JTAG.


      Таким образом, при тестировании в режиме PIL происходит генерация, кросс-компиляция и исполнение объектного кода на целевом процессоре или симуляторе процессора. Входные сигналы поступают в наш алгоритм в Simulink и в целевой процессор, где они обрабатываются в соответствии с заложенным алгоритмом и возвращаются обратно в Simulink для анализа и верификации.

      Я записал для вас небольшое видео с демонстрацией совместной работы Embedded Coder и Green Hills Software MULTI для запуска тестирования PIL на симуляторе процессора PowerPC.

      Если вы хотите получить больше информации по автоматической генерации кода и верификации в режиме PIL – обращайтесь к нам, мы всегда сможем помочь.
    • Михаил
      22.10.2012
      19:24
      Всем добрый день! Наверное, вы заметили, что мы не так часто обновляем блог, как хотелось бы :). Мы будем стараться это понемногу исправлять.

      Одна из целей работы центра компетенций MathWorks в России – это повышение осведомленности инженеров, использующих MATLAB/Simulink о возможностях этих продуктов. Поэтому предлагаю сегодня повысить нашу осведомленность о Stateflow (http://sl-matlab.ru/services/products/detail.php?ID=426) – расширении MATLAB/Simulink для моделирования событийных систем, конечных автоматов и логики принятия решений.

      Прежде, чем мы начнем, давайте введем несколько понятий. 
      Машины состояний позволяют нам представить систему, которая содержит определенные состояния или режимы. В такой системе переходы между различными состояниями происходят по условиям или событиям. Такими системами являются, например, система управления неисправностями или алгоритм управления автомобильной коробкой передач.
      Графы помогают нам описывать алгоритмы или процессы в виде линий, указывающих направление и последовательность отдельных шагов.

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

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

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

      Stateflow является частью интегрированной среды моделирования, где вы можете моделировать, симулировать и анализировать сложные динамические системы. Используя Stateflow совместно с Simulink, вы можете создавать модели вашей встраиваемой системы, которые сочетают симуляцию логики поведения в Stateflow (такую, как, например, реакции на ошибки или переключения режимов) с алгоритмическим поведением в Simulink (таким, как управление с обратной связью или обработка сигналов). Вы также можете создать модель системы и окружения в Simulink и запускать гибридные симуляции для изучения их взаимодействия. Это особенно важно, поскольку системы реального мира достаточно сложны и при их моделировании используются непрерывные, дискретные и событийные сигналы. Рекомендую вам посмотреть на примеры использования Stateflow из документации - я очень удивлюсь, если там не окажется примера, близкого вам :)

      Вот ключевые возможности Stateflow:
      • Stateflow предоставляет элементы языка, иерархию, параллелизм и детерминированную семантику выполнения для описания сложной логики в естественном и понятном виде.
      • Позволяет определять функции в графическом виде, используя диаграммы; процедурно, используя функции MATLAB и в табличном виде, при помощи таблиц истинности и таблиц переходов (эта функция, между прочим, появилась в релизе R2012b).
      • Поддерживает планирование переходов и событий при помощи темпоральной логики.
      • Поддерживает конечные автоматы Мили и Мура.
      • Имеется возможность интеграции внешнего Си кода.
      • Поддержка шин сигналов, векторных и матричных сигналов, асинхронных широковещательных событий, а также типов данных с фиксированной точкой.
      • Анимация диаграмм Stateflow и запись данных во время симуляции для лучшего понимания системы и упрощения отладки.
      • Stateflow выполняет статические проверки, включая проверки на некорректно определённые таблицы истинности.
      • Во время выполнения, проверяет конфликтующие переходы, проблемы зацикливания, несовместимость состояний, нарушения диапазонов данных и переполнения.
      • Включает встроенный отладчик для установки графических точек останова, запуска диаграмм по шагам и анализа данных.
      •  Вы можете автоматически генерировать Си код из диаграмм Stateflow  с использованием Simulink Coder.
      •  Вы можете привязывать требования непосредственно к объектам Stateflow и получать информацию о покрытии модели тестами используя Simulink Verification and Validation.
      Из библиотеки блоков Simulink вы можете добавить в вашу модель блок, который является диаграммой Stateflow. В этой библиотеке есть и другие интересные блоки (некоторые из которых появились совсем недавно) – но о них в другой раз.
      Диаграмма Stateflow графически представляет конечный автомат, где состояния и переходы являются базовыми блоками для создания системы.

      Вы создаете диаграммы Stateflow путем перетаскивания состояний, узловых точек и функций в окне графического редактора. Соединяя состояния и узловые точки, вы создаете переходы между ними. Поддиаграммы позволяют вам разбить сложную логику на набор более простых, иерархически устроенных, диаграмм.

      Stateflow включает следующие инструменты для создания и изменения диаграмм:
      • Редактор диаграмм Stateflow – предоставляет пункты меню, навигацию и панели инструментов, управление масштабом и другие полезные функции.
      • Мастер автоматического создания символов – помогает находить и автоматически создавать недостающие данные и события в ваших диаграммах Stateflow.
      • Отладчик Stateflow – управляет анимацией на диаграммах Stateflow, и обеспечивает расширенные возможности для анализа результатов моделирования и обнаружения и диагностики неожиданного поведения ваших диаграмм Stateflow.
      Во время симуляции, вы можете визуализировать диаграммы Stateflow следующими способами: 
      • Анимация активных состояний и путей перехода
      • Использование встроенных осциллографов и дисплеев в Simulink
      • Построение собственных графических интерфейсов для визуализации с использованием MATLAB и инструментов разработки графических интерфейсов
        Вы можете записывать данные симуляции для последующей обработки и визуализации в MATLAB.
      Таким образом, Stateflow существенно расширяет возможности MATLAB/Simulink для моделирования событийных систем, конечных автоматов и логики принятия решений.
    • Михаил
      03.08.2011
      11:41
      Общепринято, что индексация элементов массивов в MATLAB начинается с единицы (one-based). Конечно, это не всегда так, см. http://www.mathworks.com/help/releases/R2011b/toolbox/slvnv/ref/brlhc3t.html#briw0kk-1

      Поэтому пусть это будет пост за номером ноль, поскольку пишу его я сейчас в первую очередь для проверки связи ;)

      Подписывайтесь на RSS, поскольку планируется регулярное обновление технических блогов - и это будет интересно!
  • RSS подписка
    Архив материалов
    Январь 2017
    Пн Вт Ср Чт Пт Сб Вс
                1
    2 3 4 5 6 7 8
    9 10 11 12 13 14 15
    16 17 18 19 20 21 22
    23 24 25 26 27 28 29
    30 31          
    Поиск