Объединенные элементы модели с определениями кода
Редактор Отображений Кода является графическим интерфейсом, где можно сконфигурировать элементы данных и функции точки входа в модели, исключая модели, на которые ссылаются, для генерации кода. Каждая модель в иерархии модели - ссылки имеет свои собственные отображения кода. Сопоставьте каждую категорию элемента данных модели с определенным классом памяти и каждую категорию функции точки входа модели с определенным функциональным шаблоном настройки в модели. Затем замените те настройки, по мере необходимости, для определенных элементов данных и функций.
Класс памяти задает свойства, такие как внешний вид и местоположение, которое генератор кода использует при создании кода для связанных данных. Функциональные шаблоны настройки задают, как генератор кода производит код для присоединенных функций. Если вы оставляете класс памяти или функциональный набор шаблона настройки к Default
, можно сконфигурировать раздел memory для тех данных или функциональной категории.
Чтобы сконфигурировать элементы данных и функции для генерации кода, используйте таблицы в редакторе Отображений Кода отображение:
Data Defaults
Function Defaults
Functions
Inports
Outports
Parameters
Data Stores
Signals/States
Когда вы выбираете строку в активной таблице, раздел Code Property Inspector отображает класс памяти или функциональные настройки свойства шаблона настройки для выбранного элемента данных или функции.
Прежде чем можно будет сконфигурировать сигнал для генерации кода, добавьте сигнал в отображения типового кодекса. Добавьте и удалите сигналы из отображений кода путем приостановки на замещающем знаке, который, кажется, выше или ниже сигнальной линии открывает строку меню. Нажмите кнопку Add Signal или Remove Signal. Эти кнопки также доступны в редакторе Отображений Кода на вкладке Signals/States.
Выполнить одно из следующих действий:
Откройте приложение Embedded Coder®. На вкладке C Code выберите Code Interface> Default Code Mappings или Code Interface> Individual Element Code Mappings.
Откройте приложение Embedded Coder. На вкладке C Code, в левом нижнем углу окна Editor Simulink®, кликают по вкладке Code Mappings - C.
В холсте модели окна Simulink Editor кликните по перспективному управлению в нижнем правом углу и выберите Code. Затем кликните по вкладке Code Mappings - C.
Сконфигурируйте генерацию кода для корневого Inport и блоков Outport в модели. Применение настроек по умолчанию может сэкономить время, особенно для крупномасштабных моделей, которые используют существенное количество данных. После применения отображений по умолчанию можно настроить отображения для отдельных элементов данных.
Скопируйте внешние файлы кода в перезаписываемую папку.
copyfile(fullfile(matlabroot,'toolbox','rtw','rtwdemos','roll_input_data.c')); copyfile(fullfile(matlabroot,'toolbox','rtw','rtwdemos','roll_input_data.h')); copyfile(fullfile(matlabroot,'toolbox','rtw','rtwdemos','roll_heading_mode.c')); copyfile(fullfile(matlabroot,'toolbox','rtw','rtwdemos','roll_heading_mode.h'));
Открытая модель rtwdemo_roll
. Сохраните копию в папке модели, где вы скопировали внешние файлы кода.
Откройте приложение Embedded Coder.
Сконфигурируйте генератор кода к:
Используйте заголовочный файл roll_input_data.h
объявить переменные, представляющие блоки модели Inport.
Представляйте переменные для блоков модели Outport как отдельные глобальные переменные.
Задайте выходные переменные в roll_output_data.c
и объявите их в roll_output_data.h
.
Сконфигурируйте имена, которые генератор кода использует для переменных, которые он производит в коде для блоков Inport.
Во вкладке C Code выберите Code Interface> Default Code Mappings.
Во вкладке Data Defaults, под Inports and Outports, выбирают строку для Inports. Затем установите класс памяти на ImportFromFile
.
В Property Inspector, набор Header File к roll_input_data.h
.
Установите класс памяти для категории элемента модели Outports к ExportToFile
.
Установите Header File на roll_output_data.h
и Definition File к roll_output_data.c
.
В редакторе Отображений Кода кликните по вкладке Inports. Класс памяти для каждого импорта установлен в Auto
, что означает, что генератор кода может устранить или изменить представление соответствующих норм в целях оптимизации. Если оптимизация не возможна, генератор кода применяет настройку по умолчанию для импорта.
Обеспечьте генератор кода, чтобы использовать настройку по умолчанию для импорта, класс памяти ImportFromFile
с внешним заголовочным файлом roll_input_data.h
. Нажмите клавишу Ctrl и выберите импорт. Для одного из выбранного импорта, набор класс памяти к Model default: ImportFromFile
. Редактор обновляет установку класса памяти для выбранного импорта.
Замените исходное местоположение по умолчанию для переменной HDG_Mode
импорта. Та переменная объявляется во внешнем файле
roll_heading_mode.h
.
В редакторе Отображений Кода кликните по вкладке Inports.
Выберите HDG_Mode
строка.
Установите Storage Class на ImportFromFile
.
В Property Inspector, под разделом Code , устанавливает Header File на roll_heading_mode.h
.
Сконфигурируйте генератор кода, чтобы произвести имена переменных в коде для блоков Inport, которые совпадают с именами переменных во внешних файлах roll_input_data.h
и roll_heading_mode.h
. На вкладке Inports выберите каждый блок Inport, и в Property Inspector устанавливает Identifier на имя блока. Когда класс памяти установлен в значение кроме Auto
, необходимо задать значение для свойства класса памяти Identifier.
Включайте внешние исходные файлы roll_input_data.c
и roll_heading_mode.c
в генерации кода и процессе сборки. Установите параметр конфигурации модели Source files на roll_input_data.c roll_heading_mode.c
.
Сохраните модель.
Сгенерируйте код и проверьте, что код, сгенерированный для Inport и блоков Output, появляется, как вы ожидаете.
rtwdemo_roll.h
включает эти заголовочные файлы, сопоставленные с классами памяти:
#include "roll_output_data.h" #include "roll_input_data.h" #include "roll_heading_mode.h"
roll_heading_mode.c
включает roll_heading_mode.h
и задает переменную HDG_Mode
.
#include "roll_heading_mode.h" boolean_T HDG_Mode;
roll_input_data.c
задает переменные, объявленные в roll_input_data.h
.
#include "roll_input_data.h" boolean_T AP_Eng; real32_T HDG_Ref; real32_T Rate_FB; real32_T Phi; real32_T Psi; real32_T TAS; real32_T Turn_Knob;
roll_output_data.c
включает это экспортируемое определение данных:
real32_T Ail_Cmd;
roll_output_data.h
включает это экспортируемое объявление данных:
extern real32_T Ail_Cmd;
По умолчанию генератор кода использует идентификатор, называющий правило $R$N
назвать функции точки входа. $R
имя корневой модели. $N
имя функции, например, initialize
шаг
, и terminate
. Чтобы интегрировать сгенерированный код с существующим внешним кодом или выполнить именование стандартов или инструкций, можно настроить правило именования значения по умолчанию. В этом примере показано, как добавить текстовую строку myproj_
как префикс к $R$
. Корректировка правила именования значения по умолчанию может сэкономить время, особенно для многоскоростных моделей, для которых генератор кода производит уникальное step
функция для каждого уровня.
Открытая модель rtwdemo_multirate_multitasking
. Сохраните копию в перезаписываемую папку.
Откройте приложение Embedded Coder. Вкладка C Code открывается, который включает редактор Отображений Кода.
Создайте функциональный шаблон настройки, который задает правило именования myproj_$R$N
.
Откройте Словарь Embedded Coder. Во вкладке C Code выберите Code Interface> Embedded Coder Dictionary.
Кликните по вкладке Function Customization Templates.
Нажмите Add.
В столбце Name новой строки таблицы назовите новый шаблон myproj_FunctionTemplate
.
В столбце Function Name войдите, именование управляют myproj_$R$N
.
Закройте словарь Embedded Coder.
Во вкладке C Code выберите Code Interface> Default Code Mappings.
Кликните по вкладке Function Defaults.
Для Initialize/Terminate и категорий функции Execution, измените функциональный шаблон настройки по умолчанию от Default
к myproj_FunctionTemplate
.
Сохраните модель.
Сгенерируйте код и проверьте имена функций точки входа.
void myproj_rtwdemo_multirate_multitasking_step0(void) /* Sample time: [1.0s, 0.0s] */ { (rtM->Timing.RateInteraction.TID0_1)++; if ((rtM->Timing.RateInteraction.TID0_1) > 1) { rtM->Timing.RateInteraction.TID0_1 = 0; } if (rtM->Timing.RateInteraction.TID0_1 == 1) { rtDW.RateTransition = rtDW.RateTransition_Buffer0; } rtY.Out2 = 2.0 * rtDW.RateTransition + rtU.In1_1s; rtY.Out1 = (3.0 * rtDW.RateTransition + rtU.In1_1s) * 5.0 + rtY.Out2; } /* Model step function for TID1 */ void myproj_rtwdemo_multirate_multitasking_step1(void) /* Sample time: [2.0s, 0.0s] */ { rtDW.RateTransition_Buffer0 = rtDW.Integrator_DSTATE; rtDW.Integrator_DSTATE += 2.0 * rtU.In2_2s; } void myproj_rtwdemo_multirate_multitasking_initialize(void) { /* (no initialization code required) */ } void myproj_rtwdemo_multirate_multitasking_terminate(void) { /* (no terminate code required) */ }
Для вашей модели можно настроить имена большинства функций точки входа и аргументы функций выполнения, такие как функции Simulink и ступенчатые функции. То В этом примере показано, как настроить точку входа, функционирует для модели rtwdemo_roll
.
Скопируйте внешние файлы кода в перезаписываемую папку.
copyfile(fullfile(matlabroot,'toolbox','rtw','rtwdemos','roll_input_data.c')); copyfile(fullfile(matlabroot,'toolbox','rtw','rtwdemos','roll_input_data.h')); copyfile(fullfile(matlabroot,'toolbox','rtw','rtwdemos','roll_heading_mode.c')); copyfile(fullfile(matlabroot,'toolbox','rtw','rtwdemos','roll_heading_mode.h'));
Открытая модель rtwdemo_roll
. Сохраните копию в папке модели, где вы скопировали внешние файлы кода.
Откройте приложение Embedded Coder. Вкладка C Code открывается, который включает редактор Отображений Кода.
Во вкладке C Code выберите Code Interface> Individual Element Code Mappings.
Кликните по вкладке Functions.
Настройте имя шага (выполнение) функция. В столбце Function Name введите имя roll_run
.
Настройте аргументы step
функция. Откройте диалоговое окно настройки для step
функция путем нажатия на прототипную гиперссылку в столбце Function Preview.
Выберите Configure arguments for Step function prototype.
Чтобы открыть таблицу, которая отображает настройки по умолчанию для аргументов, нажмите Get Default.
Настройте аргументы:
От C return argument выпадающий список выберите Ail_Cmd
.
Для каждого порта, в поле C Identifier Name, удаляют arg_
префикс с их имен по умолчанию.
Для HDG_Mode
Inport, от C Type Qualifier выпадающий список, выбирают Pointer
. В C Identifier Name поле изменяют название на HDG_Mode_Ptr
Нажмите Apply и проверьте, что прототип функции отражает изменения.
Подтвердите изменения путем нажатия на Validate.
Нажмите OK.
Сгенерируйте код.
Проверьте обновления в сгенерированном файле C rtwdemo_roll.c
. Найти обновленный step
функция (roll_run
), используйте поле Search.
Выберите step
функция, чтобы проверить ее прототип.
real32_T roll_run(real32_T Phi, real32_T Psi, real32_T Rate_FB, real32_T TAS, boolean_T AP_Eng, boolean_T *HDG_Mode_Ptr, real32_T HDG_Ref, real32_T Turn_Knob)
Model Element Category
— Категория элементов данных моделиНазывает категорию элементов данных модели Simulink. Класс памяти, который вы устанавливаете для категории, применяется к элементам в той категории в модели.
Категория элемента модели | Описание |
---|---|
Inports | Входные порты корневого уровня модели, такие как Inport и блоки In Bus Element. |
Выходные порты | Выходные порты корневого уровня модели, такие как Outport и блоки Out Bus Element. |
Сигналы, состояния и внутренние данные | Элементы данных, которые являются внутренними к модели, такими как выходные сигналы блока, дискретные состояния блока, хранилища данных и сигналы пересечения нулем. |
Разделяемые локальные хранилища данных | Блоки Data Store Memory, которые имеют параметры блоков набор Share across model instances. Эти хранилища данных доступны только в модели, где они заданы. Значение хранилища данных совместно используется через экземпляры модели. |
Хранилища глобальных данных | Хранилища данных, которые заданы объектом сигнала в базовом рабочем пространстве или в словаре данных. Многоуровневые модели в приложении могут использовать эти хранилища данных. Чтобы просмотреть и сконфигурировать эти хранилища данных в редакторе Отображений Кода, нажмите Refresh соединитесь справа от названия категории. Нажатие на эту ссылку обновляет диаграмму модели. |
Аргументы параметра модели | Параметры в рабочем пространстве модели, которое вы конфигурируете в качестве аргументов модели. Эти параметры отсоединены в блоке модели, чтобы позволить каждому экземпляру модели ввести свое собственное значение. Чтобы задать параметр в качестве аргумента модели, установите флажок Model Data Editor> Parameters> Argument. |
Параметры модели | Параметры, которые заданы в модели, такой как параметры в рабочем пространстве модели. Исключает аргументы модели. |
Внешние параметры | Параметры, которые вы задаете как объекты в базовом рабочем пространстве или в словаре данных. Многоуровневые модели в приложении могут использовать эти параметры. Чтобы просмотреть и сконфигурировать эти параметры в редакторе Отображений Кода, нажмите Refresh соединитесь справа от названия категории. Нажатие на эту ссылку обновляет диаграмму модели. |
Константы | Выход блока постоянного значения и параметры, которые не могли быть встроены. Эти значения хранятся в переменных по одной из следующих причин.
|
Редактор Отображений Кода представляет допустимые опции класса памяти для данной категории. Опции могут включать:
Незаданный класс памяти (Default
). Генератор кода помещает код для категории элементов данных в стандартных структурах, таких как B_
, ExtY_
, ExtU_
, DW_
, и P_
. Смотрите структуры данных в сгенерированном коде.
Соответствующие предопределенные классы памяти, такие как ExportedGlobal
.
Соответствующие классы памяти в доступном пакете, такие как ImportFromFile
.
Класс памяти задан в Словаре Embedded Coder.
Storage Class
— Определение кода для элементов данных моделиОпределение (спецификация), что использование генератора кода, чтобы определить свойства, такие как внешний вид и местоположение, для кода, который это производит для элементов данных модели. Смотрите Выбирают Класс памяти для Управления Представлением данных в Сгенерированном коде.
Model Function Category
— Категория функций моделиНазывает категорию функций модели Simulink. Функциональный шаблон настройки, который вы устанавливаете для категории, применяется к функциям в той категории в модели.
Функциональная категория модели | Описание |
---|---|
Инициализировать/Отключить | Точка входа функционирует для инициализации и завершения |
Выполнение | Точка входа функционирует для того, чтобы инициировать выполнение и сброс |
Разделяемая утилита | Разделяемые служебные функции |
Function Customization Template
— Определение кода для функцийОпределение (спецификация), что использование генератора кода, чтобы определить свойства, такие как внешний вид и местоположение, для кода, который это производит для функций модели. Шаблоны не доступны по умолчанию. Вы можете должны быть задать функциональный шаблон настройки в Словаре Embedded Coder.
Source
— Тип функции точки входаИдентифицирует тип функции точки входа. Для основанных на уровне моделей это свойство обеспечивает частоту дискретизации step
функции.
Function Customization Template
— Определение кода для функцииОпределение (спецификация), что использование генератора кода, чтобы определить свойства, такие как внешний вид и местоположение, для кода, который это производит для функции модели.
Function Name
— Назовите для функцииНазовите это, генератор кода дает функцию модели.
Function Preview
— Предварительный просмотр прототипа функцииПредварительный просмотр прототипа функции точки входа. Чтобы проверить прототип, рассмотрите прототипный предварительный просмотр. Чтобы открыть диалоговое окно, где можно настроить прототип, кликните по гиперссылке предварительного просмотра. Для получения дополнительной информации смотрите, Конфигурируют Настройки по умолчанию для Функций.
Source
— Имя блока Inport корневого уровня или элемента шиныИдентифицирует корневой блок Inport или элемент блока In Bus Element (например, InBus1.signal1
) в модели. Если элемент решает к объекту данных, редактор Отображений Кода отображает решимость сигнализировать об объектном значке справа от исходного имени и разрешает настройку на основе того, является ли установкой класса памяти для элемента Auto
. Если классом памяти является Auto
, элемент данных принимает настройку кода, которую задает объект данных. Редактор изменяет текст отображения в столбце Storage Class к From signal object:
сопровождаемый под названием класс памяти объекта данных. Если классом памяти не является Auto
, элемент данных принимает настройку, которую вы задаете в редакторе Отображений Кода.
Storage Class
— Определение кода для корневого импортаОпределение, что использование генератора кода, чтобы определить свойства, такие как внешний вид и местоположение, для кода, который это производит для корневого импорта. Смотрите Выбирают Класс памяти для Управления Представлением данных в Сгенерированном коде.
Source
— Имя корневого блока Outport или элемента шиныИдентифицирует блок Outport корневого уровня или элемент блока Out Bus Element (например, OutBus1.signal1
) в модели. Если элемент решает к объекту данных, редактор Отображений Кода отображает решимость сигнализировать об объектном значке справа от исходного имени и разрешает настройку на основе того, является ли установкой класса памяти для элемента Auto
. Если классом памяти является Auto
, элемент данных принимает настройку кода, которую задает объект данных. Редактор изменяет текст отображения в столбце Storage Class к From signal object:
сопровождаемый под названием класс памяти объекта данных. Если классом памяти не является Auto
, элемент данных принимает настройку, которую вы задаете в редакторе Отображений Кода.
Storage Class
— Определение кода для корневого выходного портаОпределение, что использование генератора кода, чтобы определить свойства, такие как внешний вид и местоположение, для кода, который это производит для корневого выходного порта. Смотрите Выбирают Класс памяти для Управления Представлением данных в Сгенерированном коде.
Source
— Имя аргумента параметра модели, параметра модели или внешнего параметраИдентифицирует параметр в модели. Если элемент решает к объекту данных, редактор Отображений Кода отображает твердость к значку объекта параметра справа от исходного имени и разрешает настройку на основе того, является ли установкой класса памяти для элемента Auto
. Если классом памяти является Auto
, элемент данных принимает настройку кода, которую задает объект данных. Редактор изменяет текст отображения в столбце Storage Class к From parameter object:
сопровождаемый под названием класс памяти объекта данных. Если классом памяти не является Auto
, элемент данных принимает настройку, которую вы задаете в отображениях кода.
Типы элементов параметра перечислены в этой таблице.
Тип элемента параметра | Описание |
---|---|
Аргумент параметра модели | Параметры блоков в рабочем пространстве модели, которое вы конфигурируете в качестве аргумента модели. Параметр отсоединен в блоке модели, чтобы позволить каждому экземпляру модели ввести свое собственное значение. Чтобы задать параметр в качестве аргумента модели, установите флажок Model Data Editor> Parameters> Argument. |
Параметр модели | Параметр, который задан в модели, такой в качестве параметра в рабочем пространстве модели. Исключает аргументы модели. |
Внешний параметр | Параметр, который вы задаете как объект в базовом рабочем пространстве или в словаре данных. Многоуровневые модели в приложении могут использовать эти параметры. Эта группировка параметров появляется в редакторе, только если модель использует такой элемент. Чтобы просмотреть и сконфигурировать эти параметры в редакторе Отображений Кода, нажмите Refresh соединитесь справа от названия категории. Нажатие на эту ссылку обновляет диаграмму модели. |
Storage Class
— Определение кода для параметраОпределение, что использование генератора кода, чтобы определить свойства, такие как внешний вид и местоположение, для кода, который это производит для параметра. Для внешних параметров, после того, как вы нажимаете Refresh
соединитесь справа от названия категории, скомпилированный класс памяти (например, класс памяти, сконфигурированный для внешнего параметра), появляется на правой стороне столбца Storage Class. Смотрите Выбирают Класс памяти для Управления Представлением данных в Сгенерированном коде.
Source
— Имя локального хранилища данных, совместно использованного локального хранилища данных или хранилища глобальных данныхИдентифицирует хранилище данных в модели. Если элемент решает к объекту данных, редактор Отображений Кода отображает решимость сигнализировать об объектном значке справа от исходного имени и разрешает настройку на основе того, является ли установкой класса памяти для элемента Auto
. Если классом памяти является Auto
, элемент данных принимает настройку кода, которую задает объект данных. Редактор изменяет текст отображения в столбце Storage Class к From signal object:
сопровождаемый под названием класс памяти объекта данных. Если классом памяти не является Auto
, элемент данных принимает настройку, которую вы задаете в отображениях кода.
Типы элементов хранилища данных перечислены в этой таблице.
Тип элемента хранилища данных | Описание |
---|---|
Локальное хранилище данных | Хранилище данных, которое доступно отовсюду в иерархии модели, которая является в или ниже уровня, на котором вы задаете хранилище данных. Можно задать локальное хранилище данных графически в модели включением блока Data Store Memory или путем создания объекта сигнала (синтезируемое хранилище данных) в рабочем пространстве модели. |
Разделяемое локальное хранилище данных | Блок Data Store Memory, который имеет параметры блоков набор Share across model instances. Эти хранилища данных доступны только в модели, где они заданы. Значение хранилища данных совместно используется через экземпляры модели. Эта группировка хранилищ данных появляется в редакторе, только если такой элемент существует в модели. |
Хранилище глобальных данных | Хранилище данных, которое задано объектом сигнала в базовом рабочем пространстве или в словаре данных. Многоуровневые модели в приложении могут использовать эти хранилища данных. Эти хранилища данных не конфигурируемы в отображениях кода. После того, как вы нажмете кнопку Обновить, они появляются в редакторе Отображений Кода в состоянии только для чтения для просмотра или учета целей. Эта группировка хранилищ данных появляется в редакторе, только если модель использует такой элемент. Чтобы просмотреть и сконфигурировать эти хранилища данных в редакторе Отображений Кода, нажмите Refresh соединитесь справа от названия категории. Нажатие на эту ссылку обновляет диаграмму модели. |
Имена локальных и совместно использованных локальных хранилищ данных появляются в формате
. block-name
: data-store-name
В зависимости от того, как элемент хранилища данных представлен и сконфигурирован в модели, локальной, и совместно использовал локальные хранилища данных, может решить к объекту сигнала в рабочем пространстве модели, базирующейся рабочей области или словаре данных. Хранилища глобальных данных решают к объекту сигнала в базовом рабочем пространстве или словаре данных.
Storage Class
— Определение кода для хранилища данныхОпределение, что использование генератора кода, чтобы определить свойства, такие как внешний вид и местоположение, для кода, который это производит для хранилища данных. Для хранилищ глобальных данных, после того, как вы нажимаете Refresh
соединитесь справа от названия категории, скомпилированный класс памяти (например, класс памяти, сконфигурированный для хранилища глобальных данных), появляется на правой стороне столбца Storage Class. Смотрите Выбирают Класс памяти для Управления Представлением данных в Сгенерированном коде.
Path
— Путь к хранилищу данных в моделиСоедините это, можно щелкнуть, чтобы подсветить хранилище данных в диаграмме модели.
Source
— Имя сигнала или состоянияИдентифицирует сигнальную линию или состояние в модели. Если элемент решает к объекту данных, редактор Отображений Кода отображает значок твердости, "чтобы сигнализировать об объекте" справа от исходного имени и разрешает настройку на основе того, является ли установкой класса памяти для элемента Auto
. Если классом памяти является Auto
, элемент данных принимает настройку кода, которую задает объект данных. Редактор изменяет текст отображения в столбце Storage Class к From signal object:
сопровождаемый под названием класс памяти объекта данных. Если классом памяти не является Auto
, элемент данных принимает настройку, которую вы задаете в редакторе Отображений Кода.
Редактор Отображений Кода списки:
Названные сигналы и состояния при помощи имени элемента данных
Сигналы без имени при помощи формата source-block
: port-number
Состояния использовали в нескольких блоках при помощи формата block-name
: state-name
Чтобы сконфигурировать отдельную сигнальную линию в редакторе Отображений Кода для модели, сначала необходимо добавить сигнал в отображения. Смотрите Конфигурируют Данные сигнала для генерации кода C.
Storage Class
— Определение кода для сигналаОпределение, что использование генератора кода, чтобы определить свойства, такие как внешний вид и местоположение, для кода, который это производит для сигнальной линии или состояния. Смотрите Выбирают Класс памяти для Управления Представлением данных в Сгенерированном коде.
Path
— Путь к сигнальной линии или состоянию в моделиСоедините это, можно щелкнуть, чтобы подсветить сигнальную линию или блок, который использует состояние в диаграмме модели.