
Ошибка при добавлении класса в Altium Designer чаще всего возникает из-за конфликтов в настройках правил проектирования (Design Rules) или некорректной работы механизма Object Class Explorer. Типичные проявления: невозможность назначить класс цепям, компонентам или полигонам, исчезновение созданных классов после сохранения, либо сообщения вида «Class already exists» или «Failed to add class». Проблема характерна для версий Altium 20–23, особенно при работе с многостраничными проектами или импортированными библиотеками.
Первопричина обычно кроется в повреждении файла проекта (.PrjPcb) или конфликте идентификаторов классов. Altium использует внутреннюю базу данных для хранения классов, и при дублировании имен или неверной синхронизации между схемами и платой система блокирует добавление. Также ошибка может возникать, если класс был создан в одном документе (например, в схеме), но не синхронизирован с PCB через Engineering Change Order (ECO).
Для диагностики откройте PCB Rules and Constraints Editor (Design → Rules) и проверьте вкладку Object Classes. Если класс отображается, но не применяется, удалите его и создайте заново с уникальным именем (например, добавив префикс PCB_ или SCH_). Если класс отсутствует, но Altium сообщает о его существовании, выполните команду Project → Compile PCB Project – это пересоберет внутренние связи и сбросит кэш идентификаторов.
В случае повреждения файла проекта восстановите его из резервной копии (.PrjPcb_Backup) или создайте новый проект и перенесите в него схемы и плату через File → Import → Altium Designer Project. Избегайте использования кириллицы или специальных символов в именах классов – Altium может интерпретировать их некорректно. Для сложных проектов рекомендуется разбивать классы на логические группы (например, Power_Nets, HighSpeed_Signals) и проверять их целостность через Project Options → Connection Matrix.
Ошибка добавления класса в Altium: как исправить
Ошибка при добавлении класса в Altium чаще всего возникает из-за конфликтов имен, некорректных настроек проекта или поврежденных файлов конфигурации. Например, если вы пытаетесь создать класс с именем, уже используемым в другом правиле (например, Net Class или Component Class), Altium выдаст предупреждение или заблокирует действие. Проверьте список существующих классов через Design → Classes и убедитесь, что новое имя уникально. Также проблема может быть связана с несовместимостью версий: в Altium Designer 23 и новее классы с пробелами или специальными символами требуют экранирования, иначе система их игнорирует.
Если класс не отображается после добавления, выполните следующие шаги:
- Сохраните проект и перезапустите Altium – временные сбои в кэше иногда блокируют обновление данных.
- Проверьте файл
.PrjPcbStructureна наличие дублирующихся записей в секции<Classes>– удалите лишние строки вручную через текстовый редактор. - Сбросьте настройки классов через Project → Project Options → Classes, нажав Reset All, затем добавьте классы заново.
В 90% случаев эти действия решают проблему без глубокой отладки.
Для сложных проектов с иерархическими классами (например, Net Class + Component Class) используйте скрипты на DelphiScript или Python. Пример скрипта для принудительного обновления классов:
Procedure UpdateClasses;
Var
Proj: IProject;
Class: IClass;
Begin
Proj := GetProject(0);
Class := Proj.Classes.Add('MyNewClass');
Class.AddMember('Net1');
Proj.Save;
End;
Скрипты обходят ограничения интерфейса и позволяют добавлять классы с параметрами, недоступными через стандартные диалоги. Храните резервные копии проекта перед запуском автоматизированных изменений.
Почему Altium не дает создать новый класс цепей или компонентов
Ошибка при добавлении класса в Altium часто связана с активными ограничениями в настройках проекта или конфликтами с существующими правилами. Проверьте, не включены ли параметры *Design Rules* (например, *Net Class Rules* или *Component Class Rules*), которые блокируют создание новых классов. Откройте *Design → Rules* и отфильтруйте правила по типу *Class*. Если найдете дублирующиеся или противоречащие правила, удалите или отредактируйте их.
Второй распространенный сценарий – отсутствие прав на редактирование проекта. Если файл схемы или PCB открыт в режиме *Read-Only* или защищен паролем, Altium заблокирует любые изменения, включая создание классов. Убедитесь, что проект не находится в системе контроля версий (например, SVN или Git) с заблокированными файлами. Для проверки прав откройте *Project → Project Options → Options* и снимите флажок *Read-Only*.
Проблема может возникать из-за поврежденных метаданных проекта. Altium хранит информацию о классах в файлах *.PrjPcb* и *.SchDoc*. Если эти файлы содержат битые ссылки или некорректные XML-теги, редактор классов перестанет работать. Попробуйте экспортировать проект в новый файл через *File → Save As* или восстановите резервную копию. Альтернативный метод – удалить временные файлы (*.DsnWrk*, *.PrjPcbStructure*), которые иногда вызывают конфликты.
Несовместимость версий Altium – еще одна причина. Например, классы, созданные в версии 22, могут некорректно отображаться в версии 21 или ниже. Если проект был открыт в более старой версии, Altium может игнорировать новые классы или блокировать их создание. Проверьте совместимость через *Help → About Altium Designer* и обновите ПО до последней стабильной сборки. Для критичных проектов используйте *Project → Project Packager* для конвертации в универсальный формат.
Конфликт с пользовательскими скриптами или дополнениями также способен нарушить работу редактора классов. Если в проекте подключены сторонние скрипты (например, через *DXP → Scripting*), временно отключите их и перезапустите Altium. Особое внимание уделите скриптам, модифицирующим *Net Classes* или *Component Classes* – они могут перехватывать команды создания классов. Для диагностики запустите Altium в безопасном режиме (*Altium Designer Safe Mode*), удерживая клавишу *Shift* при старте.
Ошибка может быть вызвана некорректными именами классов. Altium запрещает использовать в именах символы, зарезервированные для внутренних операций: `/`, `\`, `:`, `*`, `?`, `»`, `<`, `>`, `|`. Также недопустимы пробелы в начале или конце имени. Если класс создается через API или скрипт, убедитесь, что имя соответствует регулярному выражению `^[a-zA-Z0-9_]+$`. Для проверки попробуйте создать класс с простым именем, например, *TestClass1*.
В редких случаях проблема кроется в поврежденном кэше Altium. Очистка кэша выполняется через *DXP → Preferences → System → Local Cache*. Нажмите *Clear Cache* и перезапустите программу. Если это не помогло, удалите папку *%AppData%\Altium\Altium Designer* (предварительно создав резервную копию настроек). Этот метод сбрасывает все пользовательские настройки, поэтому применяйте его только после проверки остальных причин.
Если ни один из методов не сработал, проверьте целостность установки Altium. Запустите *Altium Designer Installer* и выберите *Repair*. Убедитесь, что установлены все необходимые компоненты, включая *PCB Design* и *Schematic Design*. Для корпоративных лицензий возможны ограничения, наложенные администратором – свяжитесь с ИТ-службой для проверки прав доступа к функциям редактирования классов.
Как проверить наличие конфликтов имен при добавлении класса

Откройте панель *Object Class Explorer* через меню *Design → Classes*. В списке отобразятся все существующие классы: цепей (*Net Classes*), компонентов (*Component Classes*), слоёв (*Layer Classes*) и других. Перед добавлением нового класса вручную проверьте его имя на совпадение с уже существующими – Altium не всегда предупреждает о дубликатах, особенно если классы относятся к разным типам (например, *Power* как класс цепей и *Power* как класс компонентов).
Используйте фильтр в *Object Class Explorer*: введите предполагаемое имя класса в строку поиска. Если результат не пуст, имя занято. Для автоматической проверки при создании класса через скрипт или API применяйте метод *PCBClassManager.GetClassByName()*, который возвращает *null*, если класс не найден. Пример на DelphiScript: if PCBClassManager.GetClassByName('Signal') = nil then CreateClass('Signal');.
Конфликты возникают не только с явными дубликатами, но и с зарезервированными именами. Например, Altium использует *All* для встроенных классов, а *Unrouted* – для неразведённых цепей. Попытка создать класс с таким именем приведёт к ошибке или некорректной работе правил проектирования. Список системных имён доступен в документации к *PCB API* (раздел *Reserved Class Names*).
Для массовой проверки имён в проекте экспортируйте классы в файл через *File → Export → Classes*. Откройте полученный CSV в Excel или Notepad++ и выполните поиск по столбцу *Name*. Альтернатива – использовать команду *ListClasses* в *PCB Inspector* (выделите любой объект на плате, откройте *Inspector*, введите команду в строку поиска). Этот метод полезен при работе с большими проектами, где ручная проверка неэффективна.
Исправление ошибки через редактирование файла проекта вручную

Найдите секцию <Classes>, где хранятся определения классов. Если класс не добавляется через интерфейс, проверьте наличие дублирующихся идентификаторов или синтаксических ошибок. Например, отсутствие закрывающего тега </Class> или неверное значение атрибута Name может блокировать добавление. Удалите поврежденные записи и добавьте класс вручную, соблюдая структуру: <Class Name="НовыйКласс"></Class>.
Для проверки целостности файла используйте валидатор XML. Ошибки вроде неправильно экранированных символов (например, & вместо &) могут нарушать парсинг. Если класс связан с нетлистом или правилами проектирования, убедитесь, что ссылки на него в секциях <NetClass> или <DesignRules> корректны. Некорректные пути или отсутствующие зависимости приведут к игнорированию изменений.
После редактирования сохраните файл и откройте проект в Altium. Если ошибка сохраняется, проверьте лог-файл (*.PrjPcb.Log) на наличие сообщений об исключениях. Частая причина – конфликт с временными файлами Altium: удалите папку __Previews в директории проекта и перезапустите программу. Это сбросит кэш и заставит Altium перечитать файл заново.
При работе с классами компонентов или цепей учитывайте, что Altium чувствителен к регистру имен. Например, VCC и vcc будут восприниматься как разные классы. Если класс нужен для правил проектирования, добавьте его в секцию <DesignRules> с указанием типа: <Rule ClassName="НовыйКласс" Type="Clearance">. Без явного связывания правила не применятся.
В сложных случаях, когда ручное редактирование не дает результата, экспортируйте проект в формат ASCII (File → Save As → Advanced → Save as ASCII), внесите изменения и импортируйте обратно. Этот метод гарантирует корректную перезапись всех внутренних ссылок, но требует осторожности – любая ошибка в структуре приведет к неработоспособности проекта.
Настройка параметров схемы перед добавлением нового класса
В редакторе схемы откройте Document Options (Design → Document Options) и перейдите на вкладку Parameters. Добавьте параметр ClassPrefix со значением, соответствующим стандарту именования вашей компании (например, NET_ или PWR_). Этот префикс будет автоматически применяться к именам новых классов, упрощая их идентификацию в списке и исключая дублирование.
Проверьте настройки компиляции схемы (Project → Compile PCB Project). В окне Options for Project на вкладке Error Reporting установите уровень строгости для ошибок, связанных с классами: No Report для предупреждений о неиспользуемых классах и Error для конфликтов имен. Это позволит выявить проблемы на этапе компиляции, а не при переходе к трассировке.
Используйте директиву .NODESET для предварительного определения узлов, которые должны войти в класс. Разместите её на схеме рядом с критическими цепями (например, питания или тактирования) и укажите имена классов в формате .NODESET ClassName=NET1,NET2,NET3. Это гарантирует, что при добавлении класса через интерфейс Altium эти цепи будут включены автоматически, без ручного поиска.
Для проектов с дифференциальными парами настройте параметры в Preferences (Tools → Preferences) → Schematic → General. Активируйте Enable Differential Pair Class Generation и задайте шаблон именования (например, DIFF_*). Это позволит системе автоматически создавать классы для дифференциальных пар при их добавлении на схему, избегая ошибок ручного ввода.
Перед добавлением класса убедитесь, что все цепи, которые должны в него войти, имеют уникальные имена. Используйте инструмент Find Similar Objects (Edit → Find Similar Objects) для поиска цепей с одинаковыми именами или без имен вовсе. Задайте фильтр по параметру Name и исправьте дубликаты, иначе Altium либо проигнорирует такие цепи, либо создаст конфликтующие классы.
Экспортируйте текущую структуру классов через Design → Netlist → Export Netlist в формате CSV. Откройте файл в табличном редакторе и проверьте столбец Class на предмет пустых значений или некорректных записей. Это поможет выявить цепи, которые не были включены в существующие классы, и спланировать добавление нового класса без пересечений с уже существующими.
Использование панели «Object Class Explorer» для диагностики проблемы

Панель Object Class Explorer в Altium Designer – инструмент для анализа и управления классами объектов, который часто упускают из виду при диагностике ошибок добавления классов. Она позволяет не только просматривать существующие классы, но и выявлять конфликты, дубликаты или некорректные ссылки, которые могут блокировать создание новых классов. Чтобы открыть панель, используйте комбинацию Ctrl+Shift+O или выберите View → Panels → Object Class Explorer.
При возникновении ошибки добавления класса первым шагом должно быть проверка списка существующих классов в этой панели. Обратите внимание на имена классов: если в проекте уже есть класс с идентичным названием, Altium откажется создавать новый, даже если они относятся к разным типам объектов (например, компоненты и цепи). В таких случаях переименуйте существующий класс или уточните имя нового, добавив суффикс или префикс.
Панель отображает классы по категориям: Component Classes, Net Classes, Polygon Classes и другие. Если ошибка связана с конкретным типом объектов, фильтруйте список, выбрав соответствующую категорию. Например, при проблемах с добавлением класса цепей (Net Class) проверьте раздел Net Classes на наличие скрытых или системных классов, которые могут мешать операции.
Для диагностики конфликтов используйте контекстное меню панели: щелкните правой кнопкой мыши на классе и выберите Properties. В открывшемся окне проверьте параметры Scope (область действия) и Members (члены класса). Если класс создан с областью действия Project, а вы пытаетесь добавить его в библиотеку, Altium выдаст ошибку. Убедитесь, что область действия соответствует контексту использования.
Еще одна распространенная причина ошибок – некорректные ссылки на объекты внутри класса. В панели Object Class Explorer выделите проблемный класс и нажмите Edit Members. Откроется список объектов, включенных в класс. Удалите несуществующие или дублирующиеся элементы, так как они могут вызывать сбои при добавлении новых классов. Особое внимание уделите объектам, помеченным как [Deleted] или [Not Found].
Если класс создается через скрипт или API, проверьте его структуру в панели. Altium требует строгого соответствия формату: например, для класса цепей (Net Class) обязательно указание хотя бы одной цепи в списке членов. При отсутствии членов класс будет создан, но может вызвать ошибки при дальнейшем использовании. Добавьте хотя бы один объект вручную через Edit Members для проверки.
В случаях, когда ошибка сохраняется даже после проверки всех параметров, попробуйте экспортировать настройки классов через File → Export → Classes и импортировать их в новый проект. Это поможет исключить влияние поврежденных данных проекта. Если проблема исчезнет, ищите причину в исходном файле проекта, например, в конфликтующих правилах проектирования (Design Rules) или поврежденных библиотеках.
Для автоматизации диагностики используйте встроенные отчеты панели: выделите класс и выберите Generate Report. Отчет содержит детальную информацию о структуре класса, включая количество членов, область действия и связанные правила. Сравните отчеты до и после попытки добавления класса, чтобы выявить изменения, которые могли привести к ошибке. Этот метод особенно эффективен при работе с большими проектами, где ручной анализ затруднен.
Как обойти ограничения при добавлении класса в сложных проектах

В проектах с тысячами компонентов и десятками листов схемы Altium ограничивает добавление классов через стандартный интерфейс, особенно если класс уже существует или конфликтует с системными именами. Первое решение – использовать скрипты на DelphiScript или JavaScript для автоматизации. Например, скрипт PCBClassAdd позволяет добавлять классы с уникальными именами, избегая дубликатов, через API Altium Designer. Достаточно указать префикс или суффикс (например, CLS_), чтобы исключить пересечения с резервированными именами вроде All или Nets.
Если проект содержит иерархические схемы, классы часто не синхронизируются между листами из-за ограничений механизма Parameter Set. Решение – создавать классы на уровне PCB-документа, а не схемы. Для этого откройте Design → Classes в редакторе плат и добавьте класс вручную, указав в поле Filter выражение типа IsComponent AND (ParameterValue('PartNumber') = '1234'). Это обходит проблему отсутствия поддержки параметров в схемных классах.
При работе с многослойными платами Altium может игнорировать классы, назначенные через правила проектирования (Design Rules), если они конфликтуют с приоритетами правил. Чтобы обойти это, используйте комбинацию правил с разными приоритетами и явное указание класса в правиле. Например, создайте правило Width Constraint с фильтром InNetClass('Power') и приоритетом выше, чем у общих правил. Проверьте результат через Design → Rules и вкладку Priorities.
Для проектов с импортированными библиотеками (например, из OrCAD или KiCad) классы могут теряться из-за несовместимости форматов. Чтобы избежать этого, экспортируйте схему в формат .SchDoc и импортируйте её через File → Import, а не через буфер обмена. После импорта откройте Project → Project Options → Classes и вручную переназначьте классы, используя регулярные выражения для фильтрации цепей (например, ^VCC_.* для всех цепей питания).
Если Altium зависает при попытке добавить класс в проект с большим количеством правил (>500), разделите правила на группы. Создайте несколько файлов .Rul и подключайте их через Design → Rules → Import Rules. Это снижает нагрузку на парсер и позволяет добавлять классы без задержек. Для проверки конфликтов используйте Design → Rules → Check Rules с включенной опцией Show Conflicts Only.
В мультипроектных решениях (например, при работе с FPGA и периферией) классы могут дублироваться между проектами. Чтобы синхронизировать их, используйте Project → Project Options → Multi-Channel и настройте параметр Class Naming Scheme. Укажите шаблон типа %ProjectName%_%ClassName%, чтобы классы автоматически получали уникальные имена при компиляции. Это исключает ручное переименование и ошибки при объединении проектов.
