Используя Simulink и Stateflow в моделировании

При использовании Stateflow® Simulink® требуется для входных параметров, выходных параметров и структурирования. Один только Stateflow может выполнить разнообразие обработки формулы. При использовании Simulink комплексные переменные состояния могут быть осознаны через методы, такие как использование блока Switch Case.

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

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

  • Увеличение RAM: должен всегда быть RAM, доступный для визуализации входных параметров Stateflow, выходных параметров и внутренних переменных.

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

  • Разделение и разделение функций: При выполнении вычислений, которые используют Simulink за пределами Stateflow, существует возможность, что они могут разделить, таким образом уменьшая удобочитаемость. Существуют также времена, где удобочитаемость может улучшиться. Это может затруднить судью.

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

Для моделей Stateflow, при контакте с состояниями, аналогичными описанному ниже, удобочитаемость улучшается путем описания их как изменения состояния:

  • Различные выходные значения выводятся для идентичных входных параметров.

  • Несколько состояний существуют (как руководство, три или больше).

  • Состояния с понятными именами вместо только чисел.

  • В состоянии, инициализация (в первый раз) и дифференцирование во время выполнения (после второго раза) требуется.

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

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

HDL Coder™ поддерживается Stateflow. При использовании HDL Coder, Mealy или Moore должен быть выбран; Moore режим является более соответствующим, когда защита требуется против внутренних электрических утечек.

Примечание

Варианты использования HDL Coder не описаны в этих инструкциях.

Функциональность Simulink

Этот раздел предоставляет информацию об использовании Simulink для моделирования.

Блоки с переменными состояния

Блоки с переменными состояния, в основном, сгруппированы в Simulink и дискретные типы.

Для большинства этих блоков пользователь может установить атрибуты состояния и начальные значения при помощи параметров блоков. Условная подсистема может иметь переменные состояния, в зависимости от шаблона структуры.

В этом примере блок Unit Delay имеет атрибуты состояния.

Screen capture of the Unit Delay block parameter dialog.

В этом примере блок Tapped Delay не имеет атрибутов состояния.

Screen capture of the Tapped Delay block parameter dialog.

См. инструкцию: jc_0640

Синтаксис ветви с переменными состояния

Блок Switch и условные подсистемы ведут себя по-другому, когда переменные состояния используются.

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

Computation workflow for a conditional subsystem with a state variable.

В условной подсистеме вычисляется подсистема A, когда условию удовлетворяют. Когда не удовлетворен, подсистема B вычисляется вместо подсистемы A, независимо от существования любых переменных состояния в подсистеме A.

Computation workflow for a conditional subsystem that does not have a state variable.

Действие сброса в перерасчете может быть задано при помощи установки { Action Port }.

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

Эта таблица показывает поведение подсистемы A

Условие порта управления

(в подсистеме A)

Переменные состояния

ПереключательУсловная подсистема
СодержаниеНетВыполняемыйВыполняемый
Да
Не содержатНетНе выполняемыйНе выполняемый
Да

Минимально обработанный

*Выполняемые вычисления, связанные с переменными состояния

Эта таблица обеспечивает синхронизацию инициализации подсистемы A.

Порт действияИнициализировать
ПереключательВ первый раз только
Условная подсистемаСодержаниеВ первый раз только
СбросВ возвращенном условием

См. инструкции:

Подсистемы

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

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

  • Отображение маски подсистемы используется, чтобы описать схему или отображение зафиксированные документы формы, такой, как "классифицировано"

  • Открытые функции (функции обратного вызова в свойствах блока) подсистемы используются для выполнения нескольких инструментов или отображения объяснительного текста, отдельного от модели

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

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

См. инструкции:

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

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

Borders for virtual and atomic subsystems.

Виртуальные подсистемы

Блок, который обеспечивает визуальное представление, известен как "виртуальный блок". Например, блок Mux, который компилирует несколько сигнальных линий, блок From, который раздает сигнал и блок Goto, который соответствует виртуальному блоку. Поскольку блок подсистемы в настройке по умолчанию только составляет визуальную иерархическую структуру, эти блоки рассматриваются виртуальными блоками. Подсистема упоминается как виртуальная подсистема.

Рассмотрите подсистему, которая консультируется с внешним результатом вычисления в подсистеме, как показано в следующем примере. Эта система вычисляется от этих четырех уравнений.

  • temp1 = in1 + in2

  • temp2 = in3 + in4

  • out1 = in1 + in2 + temp2

  • out2 = temp1 + in3 + in4

Example of a virtual subsystem.

Атомарные подсистемы

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

  • temp1 = in1 + in2

  • temp2 = in4 + in5

  • out1 = in1 + in2 + in3

  • out2 = in4 + in5 + in6

  • in3 = temp2

  • in6 = temp1

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

Example of an atomic subsystem.

Примечания по атомарным подсистемам:

  • Атомарные подсистемы могут выбрать настройки функции C-source.

  • Как объяснено выше, внутренний раздел атомарной подсистемы станет инкапсулированным (воплощенный).

  • В зависимости от отношения до и после статический раздел RAM должен быть защищен в подсистеме для выходного сигнала.

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

  • Включайте отношение со слоем структуры; необходимо определить правило операции на проект и определить его отношение с правилами инструкции.

Имя сигнала

Сигналы можно назвать и упоминаются как имена сигнала. Когда сигнал называют, то имя сигнала отображено как метка. Обновления меток отражаются на имя сигнала и также отображены.

Имя сигнала может быть распространено к сигнальной линии через разветвленную сигнальную линию или блокировку порта и отображено как имя сигнала.

См. инструкции:

Код может быть сгенерирован путем соединения имени сигнала с объектом сигнала (объект Simulink или mpt объект. Установка типа сконфигурирована через словарь данных, установка класса памяти является дополнительной. Рекомендуемые настройки типа данных для этих блоков включают:

  • Для блоков Inport, тип данных набора} к auto.

  • Для блоков Outport, тип данных} к auto.

  • Для блоков Sum, устанавливает тип выходных данных на Inherit via back propagation.

См. инструкцию jc_0644: установка Type.

Векторный Сигнал Сигналов/Пути

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

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

Следующая таблица является примером векторного сигнала.

Типы вектораРазмер
Вектор-строка [1 n]
Вектор-столбец[n 1]
Подсистема скорости колеса[1 номер колеса]
Цилиндрический вектор[1 номер цилиндра]
Вектор местоположения на основе 2-мерной координации указывает[1 2]
Вектор местоположения на основе 3-мерных точек координации[1 3]

Следующая таблица является примером сигнала шины.

Тип шиныФактор
Шина датчикаОбеспечьте векторы
Местоположение
Вектор скорости колеса [Θlf, Θrf, Θlr, Θrr]
Ускорение
Давление
Шина контроллераШина датчика
Шина привода
Шина последовательных данныхОбращающаяся температура воды
Скорость вращения двигателя, передняя открытая дверца сиденья пассажира

См. инструкции:

Перечислимые типы

Данные о перечислимом типе относятся к данным, которые ограничиваются решительным численным значением.

Тип блоков, которые могут использоваться в перечислимом типе в Simulink, ограничивается.

Чтобы использовать перечислимый тип, необходимо задать перечислить тип при помощи .m файл на MATLAB. Для получения дополнительной информации об определении типов данных перечисления смотрите Использование Перечислимые Данные в Моделях Simulink.

Функциональность Stateflow

Этот раздел предоставляет информацию об использовании Stateflow для моделирования.

Операторы, доступные для Stateflow

Для получения дополнительной информации об операторах Stateflow смотрите Поддерживаемые Операции для Данных о Графике (Stateflow).

См. инструкции:

Различия между изменением состояния и блок-схемой

Stateflow может представлять и изменение состояния и блок-схему.

Stateflow позволяет блок-схеме быть спроектированной в рамках диаграммы переходов состояний.

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

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

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

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

Стартовая точкаКонечная точка
Блок-схема

Переход по умолчанию

Все завершения от состояния соединяются с соединительным соединением.
Диаграмма переходов состояний

Переход по умолчанию

Любое завершение должно быть соединено с состоянием

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

Sample workflow for a flow chart and a state transitions diagram inside of a state and outside of a state

Смесь блок-схем и диаграмм переходов состояний с самопереходом имеет более строгие ограничения.

Example of state transition diagram with self-transition inside of a state and outside of a state.

См. инструкции:

Отслеживание в обратном порядке

Этот пример показывает поведение переходов с соединениями что поведение отслеживания в обратном порядке силы в блок-схемах. График использует неявное упорядоченное расположение исходящих переходов.

Workflows demonstrating execution of actions for transition conditions.

Первоначально, состояние A активно и условия перехода c1, c2, и c3 верны. Условия перехода c4 являются ложными.

  1. Корневые проверки графика, чтобы видеть, существует ли допустимый переход от состояния A.

    Существует допустимый сегмент перехода, отмеченный условием перехода c1 от состояния к соединительному соединению, поэтому:

    1. Условие перехода c1 верно, таким образом, действие a1 выполняется.

    2. Условие перехода c3 верно, таким образом, действие a3 выполняется.

    3. Условие перехода c4 не верно и, поэтому, отслеживание в обратном порядке потока управления, чтобы утвердить A.

  2. Корневые проверки графика, чтобы видеть, существует ли другой допустимый переход от состояния A.

    Существует допустимый сегмент перехода, отмеченный условием перехода c2 от состояния к соединительному соединению, therefore:.

    1. Условие перехода c2 верно, таким образом, действие a2 выполняется.

    2. Условие перехода c3 верно, таким образом, действие a3 выполняется.

    3. Условие перехода c4 не верно и, поэтому, отслеживание в обратном порядке потока управления, чтобы утвердить A.

  3. График засыпает.

    Чтобы решить этот вопрос, рассмотрите добавляющие безусловные линии перехода на завершающие работу соединения. Завершающие работу соединения позволяют потоку заканчиваться, если или c3 или c4 не верны. Этот проект листы утверждает активное, не выполняя ненужные действия.

Workflows demonstrating the use of unconditional transition lines to terminating junction, which allow for the action to end if a transition is not true.

См. инструкции:

Блок-схема вне состояния

Блок-схема, сопоставленная с состоянием, может быть записана внутри или снаружи состояния; однако, будьте внимательны к порядку выполнения и отслеживанию в обратном порядке.

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

Flow chart that evaluates transitions after executing the flow chart outside the state.

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

Flow chart is executed before the transition and is evaluated using the most recent value at the instant of the transition.

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

Flow chart is inside a state, which means that the internal flow chart is always calculated when executing state

См. инструкции:

Переменные указателя

Этот пример кода из модели sf_custom. Чтобы открыть модель, введите следование командной строки MATLAB:

open_system('sf_custom')In
В модели sf_custom, нажмите Open my_header.h.
#include "tmwtypes.h"

extern real_T my_function(real_T x);

/* Definition of custom type */
typedef struct {
	real_T a;	
	int8_T b[10];
}MyStruct;

/* External declaration of a global struct variable */
extern MyStruct gMyStructVar;
extern MyStruct *gMyStructPointerVar;
В модели sf_custom, нажмите Open my_function.c.
#include "my_header.h"
#include <stdio.h>

/* Definition of global struct var */
MyStruct gMyStructVar;
MyStruct *gMyStructPointerVar=NULL;

real_T my_function(real_T x)
{
	real_T y;

	y=2*x;

	return(y);
}

gMyStructVar не задан в Stateflow. Как правило, функции my_function называются из источника C для использования в Stateflow. Однако прямая ссылка к глобальным переменным, отсоединенным источником C, также доступна из Stateflow.

Pointer variables in Stateflow.

Инициализация

Этот раздел предоставляет информацию об использовании значений инициализации.

Установка начального значения в инициализации

Когда сигнал должен будет быть инициализирован, начальные значения должны быть установлены правильно.

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

Случаи, которые требуют начальных значений, включают:

  • Когда переменные состояния являются заданными блоками AND, которые имеют переменные состояния, используются.

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

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

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

    • Установите начальные значения в блоках Слияния.

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

  • Когда настройки сигнала (с RAM) были заданы, на который можно сослаться с внешней стороны.

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

Начальные значения сигналов, зарегистрированных в словаре данных

Установите начальные значения для сигналов, указанных в словаре данных.

  • У дискретных групп блока, таких как Unit Delay и Data Store Memory, есть переменные состояния.

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

  • При использовании сигнала, заданного в словаре данных для переменной состояния

    Для дискретных блоков, таких как Unit Delay и Data Store Memory, настройки выполняются не при использовании сигналов, заданных в словаре данных для блока выходная линия, но для переменных состояния в блоке. Даже когда имя сигнала словаря данных присвоено сигнальной линии, RAM резервируется в двойном экземпляре, который является тратой RAM.

Пример — правильный

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

Interface to define the signal for state variables inside the block.

Пример — неправильный

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

Interface to define the signal is of the output signal for a block that has state variables.

Объекты сигнала, которые заданы в Рабочей области, могут быть автоматически сопоставлены с объектами сигнала и именами сигнала того же имени при помощи disableimplicitsignalresolution(modelname). Однако для переменных состояния в блоке, они сопоставлены с переменными состояния в блоке и имени сигнала того же имени. Если глобально установленный сигнал сопоставлен с двумя переменными одновременно, лучше выполнить настройки так, чтобы переменные состояния в блоке и метке сигнала на сигнальной линии имели различные имена, в противном случае модель не может быть симулирована.

Блокируйтесь, Чьим Внешним Входным значением является Начальное значение

При устанавливании начального значения во время инициализации, init функция вызвана, чтобы установить сигнал или на значение в блоке или к начальному значению, которое задано в словаре данных. Затем ступенчатая функция (функция руководителя потока данных) выполняется. Здесь, внешнее входное значение установлено как начальное значение. При моделировании, быть внимательным к функциям выполнения и синхронизации выполнения для инициализации. Это продемонстрировано в следующем изображении.

Следующее изображение

Initialization explanation and differences in code behavior.

Interface to specify the input for the initial condition.

Настройки Начального значения в Конфигурации системы, которая Включила бы Параметры Инициализации

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

  • Установите значения в блоке Outport

  • Установите в значениях блок Merge

  • Когда mpt сигнал задан позади блока Merge, установите значения в mpt сигнал

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

Пример — правильный

Начальное значение установлено в блоке Merge.

Interface to specify the initial value by using the Merge block parameter Initial output.

Пример — правильный

Начальное значение установлено в mpt объект.

Initial value is set in the .mpt signal.

Пример — неправильный

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

Interface for the Merge block parameters. The Initial output value is not defined.