Трассировка кода (трассируемость) использует гиперссылки для навигации между линией сгенерированного кода и ее соответствующими элементами в модели. Чтобы найти строки кода и соответствующие им элементы, можно использовать Navigate To Code PLC Coder App на элементе в модели. Эта двухсторонняя навигация является двусторонней отслеживаемостью.
Используя трассировку кода, можно:
Проверьте, что сгенерированный код как вы ожидаете. Можно идентифицировать, какие элементы модели соответствуют строке кода. Вы можете отслеживать код из различных элементов, которые у вас есть или не просматривались.
Проверьте, что сгенерированный код соответствует требованиям проекта. Можно связать требования с элементами модели и использовать трассировку кода, чтобы убедиться, что сгенерированный код для элемента модели соответствует требованиям проекта.
Когда вы генерируете код из Simulink® модель, информация о трассируемости встраивается в сгенерированный код, если не указано явно. Информация о трассируемости включает ссылки для трассировки между сгенерированным исходным кодом и моделью. Просмотреть сгенерированный код можно с помощью отчета генерации кода.
Сгенерированный код включает в себя следующие ресурсы, поддерживающие трассировку кода:
Гиперссылки элемента кода (обозначенные подчеркиванием, когда вы помещаете курсор на код), чтобы проследить переменные или типы в сгенерированном коде к их объявлениям или определениям.
Теги в комментариях кода, которые идентифицируют элементы в модели, из которых генерируются строки кода.
Номер линии содержит гиперссылки, которые связываются с компонентом модели, из которого была сгенерирована строка кода.
Двусторонняя отслеживаемость поддерживается для блоков Simulink и этих Stateflow® элементы:
Государства
Переходы
Таблицы переходов состояний
Функции MATLAB. Трассируемость не поддерживается для внешнего кода, который вы вызываете из функции MATLAB.
Блоки таблицы истинности
Графические функции
Функции Simulink
Трассируемость в одном направлении поддерживается для этих элементов Stateflow:
События (код-к-модели)
Трассируемость code-to-model работает на явные события, но не неявные события. При нажатии гиперссылки для явного события в сгенерированном коде этот элемент подсвечивается в панели Contents Model Explorer.
Соединения (модель-к-коду)
Трассируемость Model-to-code работает для соединений с по крайней мере одним исходящим переходом. Щелчок правой кнопкой мыши по такому соединению в редакторе Stateflow подсвечивает строку кода, которая соответствует первому исходящему переходу для этого соединения.
Для получения дополнительной информации см.
В этом примере показано, как проверить сгенерированный код с помощью отчета генерации кода.
Откройте пример GeneratingStructuredTextForAFeedForwardPIDControllerExample
.
openExample('plccoder/GeneratingStructuredTextForAFeedforwardPIDControllerExample')
Откройте приложение PLC Coder Щелкните вкладку PLC Code.
Щелкните Settings и перейдите к панели Генерация кода.
Чтобы включить генерацию отчетов, выберите Report > Generate traceability report.
Нажмите OK.
Щелкните Generate PLC Code, чтобы инициировать генерацию кода и отчетов. Отчет о генерации кода для верхней части откроется в MATLAB® веб-браузер.
На левой панели навигации выберите plcdemo_pid_feedforward.exp
файл.
Щелкните гиперссылку на комментарий или номер линии. Редактор Simulink отображает и подсвечивает соответствующий блок в модели.
Чтобы выделить сгенерированный код для блока в модели, выберите блок и на вкладке PLC Coder нажмите Navigate to Code. Сгенерированный код для блока подсвечивается в отчете генерации кода HTML.
На левой панели навигации можно нажать кнопку Back, чтобы вернуться к предыдущему отчету генерации кода.
Тег трассируемости появляется в комментарии над соответствующей линией сгенерированного кода. Формат тега <
.system
> / block_name
- уникальный номер, присвоенный механизмом Simulink.system
- имя исходного блока.block_name
Этот код показывает тег комментарий над сгенерированной строкой кода. Блок Sum в подсистеме на один уровень ниже корневого уровня исходной модели генерирует этот код:
(* Sum: '<S1>/Sum' *) rtb_Sum := In1 - In2;
Сгенерированный код обеспечивает трассируемость между операторами в сгенерированном коде и блоках Simulink, элементами Stateflow или блоками MATLAB Function.
Чтобы проверить сгенерированный код при помощи трассируемости оператора, в сгенерированном коде щелкните гиперссылку оператора, чтобы подсветить исходный блок в модели.
Эти операторы поддерживаются.
Тип оператора | Операторы |
---|---|
Арифметика | + , - , * , / , % |
+= , -= , *= , /= , %= | |
++ , -- (префикс и постфикс) | |
Логичный | ! , && , || |
Относительный | == , != , < , > , <= , >= |
Бит | ~ , | , ^ , & , >> , << |
&= , ^= , |= , <<= , >>= | |
Условный | ?: |
Эти операторы не поддерживаются.
Тип оператора | Примеры операторов |
---|---|
Оператор назначения | = |
Представитель и указатели на операторы | Индекс массива: a[b] |
Адрес и указатель dereference: &a , *a | |
Представитель: a.b , a->b | |
Другие операторы | Круглые скобки в вызове функции: foo(a,b) |
Запятая: a , b | |
Разрешение возможностей: a::b | |
Приведение: type(a) | |
new , new[] | |
delete , delete[] |
Чтобы сгенерировать отчет о генерации кода Simulink PLC Coder™ из кода командной строки для подсистемы plcdemo_simple_subsystem/SimpleSubsystem
:
Откройте модель Simulink PLC Coder, например:
open_system('plcdemo_simple_subsystem');
Включите параметр генерации кода PLC_GenerateReport
. Чтобы просмотреть выход в веб-представлении модели, также включите PLC_GenerateWebview
:
set_param('plcdemo_simple_subsystem', 'PLC_GenerateReport', 'on'); set_param('plcdemo_simple_subsystem', 'PLC_GenerateWebView', 'on');
Сгенерируйте код.
generatedfiles = plcgeneratecode('plcdemo_simple_subsystem/SimpleSubsystem')
Отобразится отчет о трассируемости. В вашей модели в нижней части окна модели появляется View diagnostics гиперссылка. Щелкните эту гиперссылку, чтобы открыть окно Diagnostic Viewer.
Если веб-представление модели также включено, это представление отображается.
Эти ограничения применяются к отчетам, сгенерированным Embedded Coder® программное обеспечение:
При следующих условиях трассируемость модели к коду отключена для блока, если имя блока содержит:
Одинарная кавычка ('
).
Звездочка (*
), что вызывает неоднозначность управления именами относительно других имен в модели. Эта неоднозначность управления именами возникает, если в имени блока или в конце имени блока звездочка предшествует или следует за косой чертой (/
).
Область символа ÿ
(char(255)
).
Если имя блока содержит символ новой строки (\n
), сгенерированный комментарий кода для гиперссылки пути блока заменяет символ новой строки на пространство для читаемости.
Вы не можете проследить блоки, представляющие эти типы подсистем, до сгенерированного кода:
Виртуальные подсистемы
Маскированные подсистемы
Невиртуальные подсистемы, для которых код был удален из-за оптимизации
Если вы не можете проследить подсистему на уровне подсистемы, можно проследить отдельные блоки в подсистеме.
Если вы открываете модель на платформе, которая отличается от платформы, используемой для генерации кода, вы не можете использовать трассируемость от модели к коду и от кода к модели.
Встроенная трассируемость недоступна для файлов, которые сгенерированы в shared_utils
папка.