8. Если генерация не удалась
Начните с первого сообщения об ошибке. Обычно оно указывает компонент, таблицу и ячейку, с которой нужно разобраться. Исправлять следует проект в MetaPlatform: правка скачанного ST-файла потеряется при следующей генерации.
1. Найдите исходную ячейку
Откройте область «Логи» и прочитайте первое сообщение о неудачной генерации. Найдите указанный компонент и таблицу. Если сообщение содержит строку, столбец или исходное значение, используйте их для поиска.
Проверьте, во что должна превратиться эта ячейка для каждой строки Params. Шаблон может быть правильным для первого канала и ошибочным для второго — например, когда у него не заполнен обязательный параметр.
2. Проверьте подстановки
Допустим, в Params есть Input, а в коде написано:
in_fValue := |InputTag|,
MetaGen не сможет найти InputTag. Исправьте имя на |Input| или добавьте именно тот параметр, который требуется шаблону. Регистр тоже имеет значение: Input и input — разные имена.
Если выражение %int(Id) + 10% не вычисляется, посмотрите значение Id. Число 2 преобразуется в целое, а строка TE2 — нет. Для текстового идентификатора используйте прямую подстановку или задайте числовой номер отдельным параметром.
| Что проверить | Пример исправления |
|---|---|
Параметр есть в заголовке Params |
InputTag заменить на существующий Input |
| Значение подходит для выражения | Не передавать TE2 в int(Id) |
| Имена не повторяются между группами | Каждое имя параметра должно встречаться только в одной группе |
| Группы имеют согласованное число строк | Для трёх каналов в остальных группах должно быть по одной или по три строки значений |
| Зависимости параметров не образуют круг | Input может зависеть от Id, но Id не должен одновременно зависеть от Input |
3. Проверьте имена и режимы Data
Два разных канала не должны создавать один и тот же экземпляр. Если для обоих оставить Id = 1, шаблон Correct_|Id|_Inst дважды сформирует Correct_1_Inst.
Укажите уникальные Id, затем проверьте имена настроек и параметров компонента. Например, для двух независимых поправок нужны Offset_1 и Offset_2, а не два объявления Offset.
| Что получилось | Что проверить в шаблоне |
|---|---|
| Неизвестный режим | В Mode должны быть global, conf, out, val, ref, inout или static — с таким регистром. |
У val или ref нет источника |
В Area должно быть имя нужного экземпляра, например Correct_1_Inst. |
У conf, out, inout или static заполнен Area |
Очистите Area: эти режимы создают данные в предусмотренном для них месте. |
В Area вписано Conf или View |
Для настройки используйте conf; поля View формируются через выбранный режим и публикацию. |
| Переменная неожиданно исчезла | Проверьте, не получился ли пустой Mode после вычисления условия. |
4. Разделяйте генерацию и проверку ST
Успешная генерация означает, что MetaPlatform смогла построить артефакты. Это ещё не подтверждает правильность всего пользовательского ST-кода.
Например, шаблон может сформировать обращение к fRaw3, хотя в Signals объявлены только fRaw1 и fRaw2. Такая подстановка сама по себе понятна генератору, но программе всё ещё не хватает переменной.
Ошибку отсутствующего имени или несовпадения типов нужно проверять при загрузке в MetaCore либо компиляции в целевой среде. Вернитесь к GVL, Data, Instances или исходному ST-блоку и исправьте объявление или вызов.
5. Сверьте три места
Когда имена и объявления уже созданы, но результат непонятен, проследите путь одного канала:
- Настройка: в
Types/_Conf.stесть нужное поле, а в вызове используется именноConf.Offset_1. - Вычисление: в
FunctionBlocks/Correction.stправильный экземпляр получает правильный вход —Correct_1_Instработает сfRaw1. - Отображение: в
Functions/makeView.stрезультат копируется в ожидаемое полеView.
Для команд ref и inout смотрите передачу поля View в вызове блока. Их рабочие значения передаются по ссылке; искать присваивание каждой такой команды в makeView не нужно.
После исправления сохраните проект и повторите генерацию. При дальнейшей проверке в RT загрузите новый артефакт: редактирование шаблона не изменяет программу, которая уже выполняется.
Предыдущая глава: выбор настроек и строк · Далее: аварии и предупреждения