After finishing a board today, I still feel like our BOM support is lacking, so 
I have
some thoughts to share, get some feedback, and maybe figure out how to get it 
coded in python.


My Definitions, so you can follow:
=======================================================
part = something from the eeschema library.

component = something from one of the schematic sheets, an instantiation of a 
part.
========================================================

The problem is basically this in a nutshell:


    lack of "parts-list" support in eeschema.


To me a parts-list is a table of unique parts used, duplicates are coalesced 
into one row
by collating.  That is, if I have quantity (30) of 0.1uF caps, I'd expect them 
to show up
on one row in the parts list.

Yes its nice to have "properties" for every component in the schematic, but it 
is simply
not practical to put component information into each instantiation, especially a
duplication of purchasing information.

So I propose the following solution.  This is a python parts-list and BOM 
generator, and
requires no changes to eeschema.   Let me call it *bom_or_partslist.py* for the 
sake of
discussion.  It includes a python *.ods library of some kind, meaning it can 
read and
write to "open document format" spreadsheets, supported by OpenOffice, Libre, 
and
gnumeric.  These are files with extension *.ods.

When invoked like this:

bom_or_partslist.py --partslist <netlist>.xml

it creates a parts list spreadsheet

  <netlist>.PARTSLIST.ods.

The parts list spreadsheet includes unique parts, one per row.  What 
constitutes unique?
Subject to discussion, but I am thinking the combination of "libpart + value", 
as if it
was a concatenated key.

So the number of columns is minimal.  I guess to handle the whole work flow, 
the script
has to first check if the target *.ods exists already, and if so, is allowed 
only to
modify the left most column.

User may add additional columns to the spreadsheet.  In mine, I would add 
Manufacturer and
Vendor and Price@1000, manually by editing the partslist spreadsheet.

Note that I put the Manufacturer's part number into the same field with the 
manufacturer,
same with Vendor.  Note that this is a person choice, not actually part of this 
design,
since these are columns beyond the first one.

e.g. Vendor:
"Digikey AE10968-ND"

Same for Manufacturer, it actually holds *two* pieces of information, 
manufacturer and the
part number.

-----------------

When invoked like this:

bom_or_partslist.py --bom <netlist>.xml


It generates a BOM file:

        <netlist>.BOM.ods

by merging the <netlist>.BOM.ods file with the <netlist>.xml file.

This means as you make purchasing choices, you do edits on only one place, once 
each for
each part.

There would be two entries in the BOM dialog, both referencing the same script, 
but with
different names and parameters, one to generate or refresh the partslist and 
one to
generate the BOM.

The hardest part of this is the regeneration of the partslist.  I may start by 
overwriting
what's there and work in the regeneration support as time permits.

Can anyone suggest improvements?  The one's I will consider (if I code this 
myself) will
be easily implemented with good value.


Thanks,

Dick









_______________________________________________
Mailing list: https://launchpad.net/~kicad-developers
Post to     : kicad-developers@lists.launchpad.net
Unsubscribe : https://launchpad.net/~kicad-developers
More help   : https://help.launchpad.net/ListHelp

Reply via email to