exponenta event banner

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

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

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

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

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

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

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

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

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

  • Для одинаковых входов выводятся различные выходные значения.

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

  • Государства со значимыми именами, а не просто цифрами.

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

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

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

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

Примечание

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

Функциональные возможности Simulink

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

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

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

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

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

Screen capture of the Unit Delay block parameter dialog.

В этом примере блок задержки с отводом не имеет атрибутов состояния.

Screen capture of the Tapped Delay block parameter dialog.

См. руководство: jc_0640

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

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

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

Computation workflow for a conditional subsystem with a state variable.

В условной подсистеме подсистема А вычисляется при выполнении условия. При неудовлетворительном состоянии подсистема B вычисляется вместо подсистемы A, независимо от наличия каких-либо переменных состояния в подсистеме A.

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

Действие сброса при пересчете можно задать с помощью параметра {Порт действия}.

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

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

Состояние управляющего порта

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

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

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

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

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

В этой таблице представлена синхронизация инициализации подсистемы A.

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

См. рекомендации:

Подсистемы

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

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

  • Маскирующее отображение подсистемы используется для описания структуры или отображения документов фиксированной формы, например, «classified»

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

  • Подсистемы, настройки которых изменились на подсистему маски (подсистема, которая была просто установлена на 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-источника.

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

  • В зависимости от соотношения до и после, статическая секция ОЗУ должна быть закреплена внутри подсистемы для выходного сигнала.

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

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

Имя сигнала

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

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

См. рекомендации:

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

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

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

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

См. руководство jc_0644: Настройка типа.

Векторные сигналы/сигнал тракта

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

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

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

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

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

Тип шиныФактор
Шина датчикаВекторы силы
Местоположение
Вектор скорости вращения колеса [Startlf, Startrf, Startlr, Startrr]
Ускорение
Давление
Шина контроллераШина датчика
Шина привода
Последовательная шина данныхТемпература циркулирующей воды
Частота вращения двигателя, передняя дверь пассажирского сиденья открыта

См. рекомендации:

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

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

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

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

Функциональность потока состояний

В этом разделе приведены сведения об использовании потока 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 имеют значение false.

  1. Корень диаграммы проверяет наличие допустимого перехода из состояния A.

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

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

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

    3. Условие перехода c4 не соответствует действительности, и, следовательно, поток управления возвращается в состояние A.

  2. Корень диаграммы проверяет наличие другого допустимого перехода из состояния A.

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

    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.

См. рекомендации:

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

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

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

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

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

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

Напротив, следующая блок-схема находится внутри состояния, что означает, что внутренняя блок-схема всегда вычисляется при выполнении состояния а и может быть описана как легко понятная структура без мертвых путей. Однако следует отметить, что в качестве характеристики функционирования, когда выполняется состояние a, переход от 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щелкните Открыть 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щелкните Открыть 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.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  • Дискретные блочные группы, такие как Unit Delay и Data Store Memory, имеют переменные состояния.

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

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

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

Пример - Правильно

Сигнал определяется для переменных состояния внутри блока. Имя сигнала определено, и выбран параметр блока Имя состояния должно разрешаться в объект сигнала 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

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

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

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

Пример - Правильно

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

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.