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