Фильтр по тематике

Введение в язык запросов и построение фильтров в САПР Altium Designer

Количество объектов, из которых состоят схемные документы, документы печатных плат и библиотеки, может достигать десятков, сотен, а то и тысяч, и с ними пользователь в процессе проектирования электронного изделия совершает какие-либо действия. Стандартные для операционной системы средства, а также специфические инструменты выбора среды Altium Designer малоэффективны в случаях, когда необходимо выбрать несколько сотен или более объектов, подпадающих при этом под сложные условия. Для таких случаев в Altium Designer предусмотрена система фильтрации объектов, основанная на мощном обработчике запросов. Данная статья призвана облегчить освоение языка запросов и построение фильтров любой сложности.

Введение в язык запросов и построение фильтров в САПР Altium Designer

Обработчик запросов является одной из основ среды Altium Designer (AD). Его назначение в том, чтобы пользователь мог с лёгкостью получать доступ как к отдельным объектам, так и к их группам любой сложности. Взаимодействие с этим инструментом осуществляется с помощью языка запросов.

Используя этот язык, пользователь, по сути, строит фильтры, в соответствии с которыми среда AD отбирает требуемые объекты. Это работает следующим образом. Каждый объект среды AD обладает определённым набором параметров. С помощью запросов пользователь задаёт определённые условия. Обработчик запросов проводит анализ параметров всех входящих в проект AD объектов на соответствие этим условиям и, если параметры того или иного объекта им соответствуют, такой объект включается в определённую выборку, с которой далее разработчик может совершать какие-либо действия.

Язык запросов подобен языкам программирования, основанным на Pascal. Он состоит из функций и операторов, с помощью которых пользователь формирует т.н. запросы, представляющие собой выражения, записанные в виде текстовых строк. Большинство функций представляют собой условия выбора объектов, но, помимо них, язык запросов содержит также ряд системных и математических функций. Операторы предназначены для связки функций при построении логических выражений.

Рассмотрим пример построения запросов. Допустим, на схеме необходимо выбрать все резисторы и конденсаторы. Для этого нужно воспользоваться выборкой по префиксу позиционного обозначения и построить следующий запрос: (PartSymbolReference = ‘R’) Or (PartSymbolReference = ‘C’).

В результате выполнения данного запроса на схеме будет отображена выборка, состоящая из всех компонентов, префикс позиционных обозначений которых представляет собой буквы R или C, т.е. выборка из резисторов и конденсаторов. Функция PartSymbolReference предназначена для поиска компонентов в соответствии с префиксом позиционного обозначения. Префикс задаётся с помощью входного параметра – в данном случае это параметры R и C. Оператор Or указывает, что подходит либо первое условие, либо второе. Скобки также являются операторами и определяют старшинство записей в строке запроса.

Обратимся к более сложному примеру. Допустим, для совершения определённых действий необходимо выбрать все контактные площадки, имеющие размер более 1 мм и содержащие круглые металлизированные отверстия. Для этого подойдёт следующий запрос:

IsPad And (PadIsPlated = ‘True’) And (AsMM(PadXSize_AllLayers) > 1) And (AsMM(PadYSize_AllLayers) > 1) And HasRoundHole.

Функция IsPad указывает, что в выборку необходимо включить именно контактные площадки. За выбор размеров отвечает часть запроса (AsMM(PadXSize_AllLayers) > 1) And (AsMM(PadYSize_AllLayers) > 1). В AD размер контактных площадок определяется раздельно по осям X и Y, поэтому и функций применяется две: PadXSize_AllLayers и PadYSize_AllLayers. Кроме того, в наименовании данных функций можно увидеть запись All Layers, что указывает на определения размеров контактных площадок на всех слоях. Нетрудно заметить, что данные функции прописываются в связке с функцией AsMM, которая указывает, что определение размеров контактных площадок должно производиться в метрической системе измерений. Параметр «1» с оператором «>» в данных функциях определяют, что поставленным условиям соответствуют контактные площадки размером более 1 мм. Функция PadIsPlated с входным параметром True задаёт включение в выборку контактных площадок с металлизированными отверстиями. Наконец, функция HasRoundHole говорит о том, что выбраны должны быть контактные площадки именно с круглыми отверстиями, а не с прямоугольными или слотами. Оператор And определяет, что требуется выборка, соответствующая всем указанным условиям одновременно.

Нетрудно заметить, что язык запросов содержит функции, как требующие для своего выполнения наличия входных параметров, так и не требующие таковых. Если для работы функции необходимы текстовые входные параметры, то они всегда ограничиваются одинарными кавычками. Название каждой из функций отражает её назначение, благодаря чему значительно облегчается их поиск и работа с запросами. AD поддерживает около тысячи функций и описать их в рамках данной статьи не представляется возможным, поэтому рекомендуется по мере необходимости обращаться к [1], где для каждой функции приводятся описание, синтаксис, примеры и рекомендации по использованию.

В таблице 1 приведены операторы языка запросов. Очевидно, что большинство из них пояснений не требует. Нужно лишь оговориться, что, в отличие от остальных операторов сравнения, оператор Like работает не с численными, а со строковыми данными. В примере, приведённом в таблице для этого оператора, функция Name определяет, что пользователя интересуют все строки, начинающиеся с буквы R и содержащие как минимум ещё два символа.

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

  • ? – применяется для замены одного символа;
  • * – применяется для замены строки символов.

Кроме того, в качестве параметров для некоторых функций могут быть использованы логические переменные True (правда) и False (ложь).

В одном из примеров, приведённых ранее, уже упоминалась данная логическая переменная: функция PadIsPlated с входным параметром True задавала включение в выборку контактных площадок с металлизированными отверстиями. Если входной параметр данной функции заменить на False, то в выборку будут включаться неметаллизированные отверстия.

Порядок обработки строк запросов определяется старшинством записей, которое, в свою очередь, определяется старшинством операторов. Старшинство операторов языка запросов аналогично старшинству операторов Pascal-подобных языков программирования и отражено в таблице 2.

При одинаковом старшинстве записей они обрабатываются слева направо. Поскольку скобки имеют наивысшее старшинство, то с их помощью старшинство записей можно изменять. При этом необходимо помнить, что при наличии вложенных пар скобок внутренние пары имеют более высокое старшинство, и поэтому ограниченные ими записи будут обрабатываться в первую очередь [1, 2].

В виде текстовых строк запросы в основном применяются в трёх случаях:

  • для построения фильтров выбора в редакторах схем, плат и библиотек;
  • для определения областей применения правил;
  • для расширенного поиска по библиотекам.

Конечно, глубокое знание языка запросов является мощным подспорьем в деле проектирования электронных устройств, однако в среде AD предусмотрен ряд инструментов, значительно облегчающих формирование запросов, – помощник Query Helper и мастер запросов Query Builder.

Помощник Query Helper

Окно помощника Query Helper (см. рис. 1) доступно при нажатии следующих кнопок:

  • Helper – в панелях SCH Filter, PCB Filter, SCHLIB Filet и PCBLIB Filter;
  • Helper – в окне File-based Library Search в расширенном режиме;
  • Query Helper… – в области Where TheObject Matches редактора правил.

Верхнюю часть окна занимает поле Query, предназначенное для ввода строк запросов. Непосредственно под ним расположены кнопки операторов. Здесь присутствуют кнопки всех операторов, кроме скобок. Ещё ниже расположена область поиска и выбора функций и объектов. Она состоит из меню категорий Category (левее) и таблицы (правее). В нижнем левом углу окна редактора запросов можно найти кнопку проверки синтаксиса Check Syntax.

Преимущества помощника Query Helper заключаются в следующем. Во-первых, он поддерживает удобный поиск требуемой функции. Во-вторых, реализована быстрая вставка в строку запроса операторов и найденных функций. И в-третьих, имеется возможность проверки синтаксиса запроса. Рассмотрим подробнее принцип работы с помощником.

Область поиска и выбора содержит наименования и краткие описания функций и объектов. Её содержимое соответствует тому элементу среды AD, откуда было вызвано окно Query Helper. Например, на рисунке 1 изображено окно помощника, вызванного из панели PCB Filter, доступной в редакторе плат, поэтому здесь могут отображаться PCB-функции, объекты текущей печатной платы и системные функции. Таблица отображает функции или объекты, соответствующие категории, выбранной в меню категорий. В графе Name отображается имя, а в графе Description – краткое описание. Отсюда же доступна справка по функциям. Чтобы её открыть, нужно выделить в таблице функцию и нажать клавишу F1, после чего в браузере откроется страница справки по выбранной функции из радела Documentation сайта компании Altium.

Значительно облегчает поиск функции или объекта строка ввода Mask, расположенная под таблицей. После ввода маски содержимое таблицы ограничивается не только категорией, но и маской. При этом поиск по маске производится как среди имён, так и среди кратких описаний. Строка ввода маски поддерживает символы замены «?» и «*».

После того как необходимая функция была найдена, её можно вставить в строку запроса, дважды щёлкнув по ней левой кнопкой мыши (ЛКМ) в таблице. При этом необходимо иметь в виду, что функция будет вставлена туда, где находится курсор, поэтому перед совершением вставки необходимо убедиться, что курсор находится в нужной позиции. То же самое касается вставки операторов: их можно встраивать в строку запроса, нажав соответствующую кнопку. При этом также необходимо следить, где именно располагается курсор. Естественно, возможность автоматической вставки функций, параметров или операторов не отменяет необходимости ручного редактирования строк: здесь зачастую необходимо как минимум проставлять скобки и кавычки, прописывать численные параметры и т.д.

Очевидно, что при построении сложных запросов легко допустить ошибку. Чтобы проверить строку запроса, необходимо нажать кнопку Check Syntax – в результате будет запущен процесс проверки синтаксиса, и по его окончании откроется окно с соответствующим отчётом. Если ошибок найдено не будет, то данное окно будет содержать сообщение «Expression is OK!». При наличии же ошибки в отчёте будет приведено её описание.

После того как запрос сформирован, остаётся лишь нажать кнопку OK, в результате чего окно помощника закроется, а строка запроса скопируется в поле запроса того элемента среды AD, откуда окно помощника было вызвано.

Продемонстрируем описанное ранее на примере построения строки запросов, приведённой в поле Query на рисунке 1. В данном случае алгоритм действий после запуска окна помощника может быть следующим:

  1. В поле ввода Mask необходимо ввести маску *kind* и путём перебора категорий найти функцию IsObjectKind в категории Object Type Checks.
  2. Чтобы убедиться, что это и есть нужная функция, следует выбрать её в таблице, нажать клавишу F1 и изучить страницу справки. Убедившись, что указанная функция представляет собой именно то, что нужно, следует совершить на ней двойной щелчок ЛКМ, в результате чего она отобразится в поле запроса в виде IsObjectKind().
  3. Поскольку входной параметр представляет собой текстовую строку, необходимо вписать внутри скобок две одинарные кавычки: IsObjectKind(").
  4. В поле ввода Mask следует ввести маску component и путём перебора категорий найти нужную функцию в категории Fields.
  5. Убедившись, что курсор находится строго между одинарными кавычками, нужно совершить в таблице двойной щелчок ЛКМ на функции Component, в результате чего она будет вставлена в качестве параметра в запрос: IsObjectKind('Component').
  6. Переместить курсор в конец строки запроса и щёлкнуть ЛКМ по кнопке оператора And, в результате чего этот оператор встроится в конец строки: IsObjectKind('Component') And.
  7. В поле ввода Mask необходимо ввести маску *lock* и путём перебора категорий найти функцию Locked в категории Fields.
  8. Переместить курсор в конец строки запроса и дважды щёлкнуть ЛКМ в таблице по найденной функции, в результате чего она встроится в конец строки: IsObjectKind('Component') And Locked.
  9. С помощью кнопки Check Syntax следует запустить проверку синтаксиса получившейся строки.
  10. Если проверка прошла успешно, нужно закрыть окно помощника путём нажатия кнопки OK. Сформированная строка запроса скопируется в поле Filter панели PCB Filter, откуда окно помощника и было открыто [3, 4].

Мастер запросов Query Builder

Окно мастера запросов Query Builder (см. рис. 2) доступно при нажатии следующих кнопок:

  • Builder   – в панелях PCB Filter и PCBLIB Filter;
  • Query Builder… – в области Where TheObject Matches редактора правил.

Принцип работы с мастером запросов несколько отличается от принципа работы с помощником. Пользователь также строит запросы, но оперирует при этом не функциями, а условиями, и уже на основе этих пользовательских запросов формируются текстовые строки запросов. Удобство здесь в том, что условия являются гораздо более удобочитаемыми и понятными, чем функции. Условия состоят из типа и значения. Каждому условию соответствует определённая функция. Значениями условий являются объекты печатной платы или посадочного места.

Основную часть окна мастера запросов (см. рис. 2) занимают область построения запросов (слева) и область предпросмотра (справа). Нетрудно заметить, что здесь запросы формируются вертикально. Таблица запросов состоит из двух столбцов: Condition Type / Operator (тип условий и операторы) и Condition Value (значения условий). Каждая строка таблицы соответствует условию или содержит оператор. Здесь же, в графе Condition Type / Operator располагаются опции добавления условий. Область предпросмотра отображает запрос в текстовой форме. Его содержимое формируется автоматически и динамически обновляется при внесении любых изменений в области построения запросов.

Формирование запроса в окне мастера производится следующим образом. Сразу после его запуска таблица условий содержит только одну строку с выпадающим меню Add first condition…. Чтобы добавить первое условие, необходимо раскрыть это выпадающее меню и выбрать тип условия (см. рис. 3). После этого в той же строке, но в графе Condition Value отобразится значение условия по умолчанию. Чтобы его изменить, необходимо активировать ячейку, раскрыть выпадающий список и выбрать в нём нужное значение (см. рис. 3). Добавление второго или любого последующего условий производится точно так же, только соответствующее меню будет называться Add another condition….

При добавлении последующего условия между строк условий автоматически встраивается строка оператора. По умолчанию всегда добавляется оператор And. Его можно заменить на оператор Or также через выпадающий список.

Уже существующие условия можно менять. Для этого нужно активировать соответствующую ячейку в графе Condition Type / Operator, раскрыть выпадающий список и выбрать новый тип условия. При этом нужно помнить, что значение условия в графе Condition Value, скорее всего, тоже придётся поменять.

Чтобы добавить скобки, необходимо выбрать соответствующую часть запроса (одно или несколько условий) и нажать кнопку (Increase Indent) или воспользоваться сочетанием клавиш Ctrl+→. Удаление скобок производится с помощью кнопки (Decrease Indent) или сочетания клавиш Ctrl+¬. Для сдвига выделенных условий вверх или вниз предназначены кнопки (Move Up) и (Move Down) или сочетания клавиш Ctrl+- и Ctrl+¯ соответственно. Удалить условия можно кнопкой (Delete) или клавишей Del.

После того как запрос сформирован, остаётся лишь нажать кнопку OK, в результате чего окно мастера построения запросов закроется, а текстовая строка скопируется в поле запроса того элемента среды AD, откуда окно мастера было вызвано.

Продемонстрируем процесс построения запроса в мастере на основе примера, приведённого на рисунке 3. В данном случае алгоритм действий после запуска окна редактора запросов может быть следующим:

  1. Для добавления первого условия нужно раскрыть выпадающее меню Add first condition… и выбрать в нём пункт Belongs to Net.
  2. В ячейке значения первого условия необходимо раскрыть список и выбрать пункт GND.
  3. Для добавления второго условия следует раскрыть выпадающее меню Add another condition... и выбрать в нём пункт Belongs to Net Class.
  4. В ячейке значения второго условия нужно раскрыть список и выбрать пункт PowerNets.
  5. Для добавления третьего условия необходимо снова раскрыть выпадающее меню Add another condition... и выбрать в нём пункт Exists on Layer.
  6. В ячейке значения третьего условия следует раскрыть список и выбрать пункт Bottom Layer.
  7. В ячейке оператора And, расположенной между строками первого и второго условий, нужно раскрыть выпадающий список и сменить оператор на Or.
  8. Выделить одновременно строки первого и второго условий и заключить их в скобки сочетанием горячих клавиш Ctrl +→.
  9. Закрытие окна мастера построения запросов следует осуществить нажатием кнопки OK – сформированный запрос в виде текстовой строки скопируется в область Where The Object Matches редактора правил, откуда окно мастера было открыто [5].

Затронутая в статье тема очень обширна, и полностью осветить её на страницах журнала не представляется возможным, однако представленные общие сведения призваны помочь облегчить её освоение как новичкам, так и опытным пользователям.

Литература

  1. Altium. Documentation. Query Language Reference: www.altium.com/documentation.
  2. Altium. Documentation. Query Operators: www.altium.com/documentation.
  3. Altium. Documentation. Query Helper (PCB): www.altium.com/documentation.
  4. Altium. Documentation. Query Helper (SCH): www.altium.com/documentation.
  5. Altium. Documentation. Query Builder: www.altium.com/documentation.

Если вам понравился материал, кликните значок - вы поможете нам узнать, каким статьям и новостям следует отдавать предпочтение. Если вы хотите обсудить материал - не стесняйтесь оставлять свои комментарии : возможно, они будут полезны другим нашим читателям!

Комментарии
Рекомендуем

  Подписывайтесь на наш канал в Telegram и читайте новости раньше всех! Подписаться