User Tools

Site Tools


python:bomgen

Bomgen

KiCAD ma możliwość generowania pliku BOM i chciałem aby był on w formie tekstowej, tak żebym mógł to przeczytać, wkleić na stronę czy przesłać komuś mailem. Poniżej mój skrypt który to realizuje.

bomgen.py
import sys, collections, operator
import xml.etree.ElementTree
 
inputxml = sys.argv[1]
outf_path = sys.argv[2] + '_bom.txt'
outf = open(outf_path, 'w')
 
print('Zapis do:', outf_path)
 
lst = []                            # lista elementów
dct = collections.defaultdict(list) # grupowanie elementów po nazwie
 
# parsowanie xml
root = xml.etree.ElementTree.parse(inputxml).getroot()
components = root.find('components')
 
for comp in components.findall('comp'):
    ref = comp.get('ref')
    value = comp.find('value').text
    dct[value].append(ref)
    lst.append((ref, value))
 
# wyświetlanie wyników
print('Lista elementów', file=outf)
print('===============', file=outf)
print('Symbol'.ljust(9), 'Nazwa', file=outf)
print('-' * 9, '-' * 5, file=outf)
 
lst = sorted(lst, key=lambda t: t[0])
for t in lst:
    print(t[0].ljust(9), t[1], file=outf)
 
print('\nWszystkich elementów:', len(lst), '\n\n', file=outf)
 
print('Elementy zgrupowane po nazwie', file=outf)
print('=============================', file=outf)
print('Nazwa'.ljust(19), 'Ile', 'Symbol', file=outf)
print('-' * 19, '-' * 3, '-' * 6, file=outf)
 
for name in sorted(dct, key=dct.get):
    symbols = ', '.join(sorted((str(s) for s in dct[name]),
                               key=lambda x: int(''.join(c for c in x if c.isdigit()))))
    print(name.ljust(19), str(len(dct[name])).rjust(3), symbols, file=outf)

Jak używać

Będąc w EESchema klikam w ikonkę “BOM” gdzie otwiera się okno jak na obrazku poniżej. Trzeba dodać nowy plugin z parametrami jak na wspomnianym obrazku. Na windowsie pewnie ukośniki w drugą stronę i pełna ścieżka do pythona będzie potrzebna.

python/bomgen.txt · Last modified: 2016/09/06 19:36 by dmz