← Back to team overview

kicad-developers team mailing list archive

Re: BOM support



I have between 500 and 1000 0.1uF X5R 0402 bypass capacitors on
my card.  You are going to have 1000 repetitions of this
<component> structure in the file, where the only difference is
the 'ref' attribute in the first line (resplendent with
repetitions of my user-defined fields (manufacturer's P/N,
vendor, vendor's P/N, price, price breakpoint, type,
substitutions, power consumption, thermal resistance) which will
be the same for all 1000 capacitors.  This is going to be about
100,000 lines of XML.  It will be unreadable because I won't be
able to see other components for the capacitors.  Paging through
with an editor will be a pain.

Might I suggest that you consider an already tried and true BOM
format, already specified in XML, such as that from "IPC-2581
includes Ammendment 1," Section 7. (Google:
IPC-2581witham1pub.pdf).  Also talk a look at the Approved
Vendor List in Section 9 of the same document.

IPC's BOM looks like:

<Bom name="TestBoard1">
<BomHeader assembly="Karens Design" revision="Prototype"
    <BomItem OEMDesignNumberRef="Fabricated" quantity="1"
        numberIO="4" category="ELECTRICAL"
        description="Card EdgeConnector">
        <RefDes name="J1" populate="FALSE"/>
        <Characteristics category="ELECTRICAL"/>
    <BomItem OEMDesignNumberRef"Sample1234" quantity="1"
        numberIO="8" category="ELECTRICAL"
        internalPartNumber="Molex 354892"
        description="Biforcated Thru-Hole connector"
        <RefDes name="J2" populate="TRUE"/>
        <Characteristics category="ELECTRICAL"/>
    <BomItem OEMDesignNumberRef="SOIC129867" quantity="1"
        numberIO="8" category="ELECTRICAL"
        internalPartNumber="Phillips IC2436"
        description="SOIC 1.27 pitch" packageRef="SOIC12">
        <RefDes name="U1" populate="TRUE"/>
        <Characteristics category="ELECTRICAL">
            <Textual definitionSource="Pretested Logic"
                textualCharacteristicName="Per Supplier Data Sheet"/>
    <BomItem OEMDesignNumberRef="CAP 24A1846" quantity="1"
        numberIO="2" category="ELECTRICAL"
        internalPartNumber="Phillips Cap1235"
        description="3225 Surface Mount Capacitor"
        <RefDes name="C1" populate="TRUE"/>
        <RefDes name="C2" populate="TRUE"/>
        <RefDes name="C3" populate="TRUE"/>
        <RefDes name="C4" populate="TRUE"/>
        <RefDes name="C5" populate="TRUE"/>
        <RefDes name="C6" populate="TRUE"/>
        <RefDes name="C7" populate="TRUE"/>
        <Characteristics category="ELECTRICAL">
            <Measured measuredCharacteristicName ="Capacitance"
                measuredCharacteristicValue="20 Microfarads"
                engineeringNegativeTolerance="3 microfarads"
                engineeringPositiveTolerance="3 microfarads"/>

You will notice some necessary features such a whether the
component is populated at the refdes or not.  Also, real
electrical properties instead of loosey goosey value field.
Place for both external OEM and internal part numbers.  Full

Also, using this format (or at least containing this
information), I can have PCBNEW read it and place the BOM in the
generated IPC-2581 file.

The problem with having a BOM that has too little information is
that the assembler will import it into a spread sheet and start
changing it.  Loss of sync between the CAD data, spreadsheet and
CAM system (chip shooters) simply results in rapid and automated
descruction of parts and boards.  Money can be burnt easier (and
maybe even safer) with fire.


On Fri, 30 Jul 2010, Dick Hollenbeck wrote:

> <netlist>
> <!--one for every component instantiation: -->
> <component ref="R23">
>   <fields>
>      <value>123k</value>
>      <!-- present only if non blank -->
>      <footprint>SM0201</footprint> <!-- desired
>      <datasheet>dontsheetonmydesk.pdf</datasheet>
>      <!-- user defined fields start here. this user is trying to help
>           himself in the BOM creation process and has extra fields:
>       -->
>      <Manufacturer>TI</Manufacturer>
>      <Vendor>Digikey ABCD123</Vendor>
>   </fields>
>   <tstamp>45DC86E7</tstamp>
>   <libsource>libname.partname</libsource>
>   <!-- pins are intentionally not described here since
>        we really don't want to repeat something verbose
>        that would need to be duplicated per instance.
>   -->
> </component>
> Then there could be something like specctra's image, one for each unique
> part:
> <image libsource="libname.partname">
>     <!-- image is from specctra, a better name is possible -->
>     <!-- here could be a full work up on the pins of
>          the part, and as much
>          graphical detail as needed.
>     -->
>     <pins>  <!--generically speaking -->
>         help welcomed
>     </pins>
> </image>
> Then one block of nets
> <nets>
>   <net name="/cfcard.sch/WAIT#">
>     <node comp="R23" pin="1"/>
>     <node comp="U18" pin="12"/>
>   </net>
>   <net>
>      :
>   </net>
>   :
> </nets>
> </netlist>
> Please offer any feedback on what you see.  (I don't care as much about
> what you don't see, since we can and will add more later.)
> And man, after writing this I went and looked at a specctra DSN file
> which has the S-expressions and I cannot believe the better readability
> of the S-expression files.  It is startling, the difference.
> Dick
> _______________________________________________
> Mailing list: https://launchpad.net/~kicad-developers
> Post to     : kicad-developers@xxxxxxxxxxxxxxxxxxx
> Unsubscribe : https://launchpad.net/~kicad-developers
> More help   : https://help.launchpad.net/ListHelp

Brian F. G. Bidulock    ¦ The reasonable man adapts himself to the ¦
bidulock@xxxxxxxxxxx    ¦ world; the unreasonable one persists in  ¦
http://www.openss7.org/ ¦ trying  to adapt the  world  to himself. ¦
                        ¦ Therefore  all  progress  depends on the ¦
                        ¦ unreasonable man. -- George Bernard Shaw ¦

Follow ups