Skip to content

Latest commit

 

History

History
168 lines (122 loc) · 10.2 KB

readme_rus.md

File metadata and controls

168 lines (122 loc) · 10.2 KB

KiCad Better BOM

The same text in English

Функция создания перечня компонентов в программе KiCad оставляет желать много лучшего. Самый главный ее недостаток состоит в том, что она не дает никаких возможностей для повторного создания конечного продукта - списка компонентов. Обычно процесс создания BOM выглядит так: создали csv, открыли в Excel или Office, привели в приличный вид, поменяли что-то в печатной плате, опять создали csv, опять привели в приличный вид, и так далее.

Эта программа позволяет при помощи настроечных файлов сразу создавать красиво выглядящие электронные таблицы запуском одного скрипта на Питоне.

Все необходимые настройки хранятся в одном конфигурационном файле. Это, кроме всего прочего, позволяет иметь набор таких файлов на уровне предприятия и создавать единообразную документацию к проектам.

Давайте посмотрим, как это работает

Установка программы

У вас на компьютере должен быть установлен Python3 и в нем еще одна дополнительная библиотека под названием xlsxwriter. Чтобы ее установить, наберите в командной строке

pip3 install --user xlsxwriter

и положите скрипт kicad_bom.py куда вам удобно. И все дела.

Простейший случай использования

Давайте проверим работу скрипта на проекте Olinuxino. Скачаем этот проект и запустим kicad_bom.py в том каталоге, где лежит проект.

python3 path/to/kicad_bom.py

У нас получился первый список компонентов, который можно открыть в Excel или LibreOffice. Посмотрим, что в нем. Что это?

ANTENNA

Это печатная антенна, которая не является компонентом с точки зрения сборщиков, но является с точки зрения CAD. Уберем ее из списка. Для этого нужно создать в том же каталоге файл с именем bom.cfg и написать в нем следующее:

[ignore]
reference(ANT1)

Запустим скрипт снова - в списке больше нет антенны! В конфиге можно писать регулярные выражения, так что если бы у нас было несколько антенн ANT1, ANT2 и так далее, можно было бы написать

reference(ANT\d+)

Теперь о том, как все это работает. У каждого компонента есть набор свойств, на которые в конфиге можно ссылаться: reference - это обозначение на принципиальной схеме, package - корпус компонента, value - номинал компонента, library - библиотека, откуда взят компонент, side - сторона печатной платы. Любое из этих свойств можно использовать в секции [ignore] и в любых других секциях настроечного файла. Например, если у нас на плате есть реперные точки из библиотеки Fiducial, можно одной строчкой отправить в игнор всю библиотеку:

[ignore]
library(Fiducial)

Обратите внимание, что заглавные и строчные буквы во всех этих именах имеют значение, нельзя было бы написать fiducial вместо Fiducial. Также скрипт не учитывает компоненты без обозначений вообще и с обозначениями в виде ~. Также при работе программы выводится список всех проигнорированных компонетов, чтобы вы могли проверить, что не перестарались с регулярными выражениями и не выбросили из списка что-то важное.

Посмотрим еще раз на полученный список. Он пока что не идеален, колонка Type/Value слишком узкая. Нет проблем. Добавим в конфиг все нужные нам колонки вывода:

[columns]
col1=N:n
col2=Ref:reference
col3=Size/Package:package
col4=Qty:quantity
col5=Type/Value:value:30

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

[columns]
col1=Номер п.п.:n
col2=Обозначение:reference
col3=Корпус:package
col4=Количество:quantity
col5=Номинал:value:30

Также можно добавить дополнительные колонки с именами для каких-то целей.

col6 = Поставщик
col7 = Цена
col8 = Комментарий

Названия корпусов

Еще одна важная задача - уметь праильно переименовывать корпуса компонентов. В Kicad есть множество корпусов со специальными названиями, такими как C_0402_5MIL_DWS or D_SOT-23_ANK vs D_SOT-23_NKA. Для закупки компонентов или их монтажа части названия такие как NKA или ANK не имеют значения. Поэтому в конфиге есть секция packages, позволяющая переименовать корпуса.

[packages]
D_SOD-323 = SOD-323
LQFP-48.* = LQFP-48
C_0402_5MIL_DWS = C_0402
D_SOT-23_ANK = SOT-23

В ней также можно использовать регулярные выражения.

Дополнительные возможности: категории

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

[categories]
value(1N7002) = transistors
reference(LED.+) = leds
reference(D.+) = diodes
reference(J.+) = connectors
reference(SW1) = pushbuttons

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

col6=Element type:category

Если так случилось, что компонент не попал ни в одну категорию, тогда соответствующее свойство будет пустым. И вот это очень важная особенность процесса задания категорий - для каждого компонента вы должны убедиться, что он куда-то отнесен и что вы вообще понимаете, что это такое.

Теперь можно задать секции, в которых будут перечисляться компоненты

[sections]
resistors = Resistors
capacitors = Capacitors
transistors = Transistors
diodes = Diodes

Еще раз: категория (category) это свойство, которое вы сами приписываете компоненту, а секция (section) это часть списка, в котором появятся компоненты, отнесенные к данной категории.

Описание секции выглядит как категория = Заголовок секции. Все комопненты, которые не попали в категории, будут перечислены в конце списка без всякого фориатирования.

Правила