I. Разработка программы
MetaGen

8. Если генерация не удалась

Начните с первого сообщения об ошибке. Обычно оно указывает компонент, таблицу и ячейку, с которой нужно разобраться. Исправлять следует проект в MetaPlatform: правка скачанного ST-файла потеряется при следующей генерации.

1. Найдите исходную ячейку

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

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

2. Проверьте подстановки

Допустим, в Params есть Input, а в коде написано:

st
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. Сверьте три места

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

  1. Настройка: в Types/_Conf.st есть нужное поле, а в вызове используется именно Conf.Offset_1.
  2. Вычисление: в FunctionBlocks/Correction.st правильный экземпляр получает правильный вход — Correct_1_Inst работает с fRaw1.
  3. Отображение: в Functions/makeView.st результат копируется в ожидаемое поле View.

Для команд ref и inout смотрите передачу поля View в вызове блока. Их рабочие значения передаются по ссылке; искать присваивание каждой такой команды в makeView не нужно.

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

Предыдущая глава: выбор настроек и строк · Далее: аварии и предупреждения

← 7. Выбор настроек и строк9. Аварии и предупреждения →