On the concept of libraries i offer a different view.
Manufacturers and manufacturer part numbers stored in a library should not be used to pull a final bill of materials. let me explain :
- unique parts : 1 function , 1 footprint , no pin compatible substitutes : you can encode manufacturer and manufacturer part number directly in the database. there is no alternative anyway.
- multisourced parts : still 1 function, 1 footprint but possible variety of manufacturers / part numbers. how do you deal with this in a library ? list all ? list a few ? list the cheapest ? (which can change hour to hour) list the approved ? list the ones in stock ?
The second case is the huge issue with such an approach.
A true parts catalogue (i deliberately do not call it a library. the library is the CAD portion : symbol / footprint ) decouples that.
The CAD portion contains
- footprint
- symbol
- a number of useful parameters so that part selection can be done in the cad system. working voltage, value dielectric for caps, forward current, reverse voltage for diodes etc.
- a suggested manufacturer and manufacturer part number so you can pull a datasheet ( this covers both cases mentioned above : unique and multisourced )
- a textual description for this part
- unique identifier for this 'element'. This unique identifier is "data-less" it contains no identifiable part information. so no numbers like IC-TI-LM741 or RES-1K-0805-1%
The BOM database portion translates the unique identifier to "orderable parts". This translates the one (unique identifier) to many (part numbers) portion of data
i picked 1k 0805 1% in the cad , dropped symbol and footprint. When the bom needs to be generated part 0923540-00 (index-revision) is accessed in the database and it creates a line item that says
<designators from CAD>, <textual description from CAD>, <manufacturers from DB><manufacturer part numbers from db><vendor from db><vendor part number from db>
R214,R215 : Resistor 1K 0805 1% , Vishay CRW0805-102-DQR , Yageo RM8-1K00-P Digikey RN-7362, Mouser PQ2154, Avnet RES1K08051p
The pick and place file can do the same
<designator><x>,<y><top/bottom><rotation><textual description from CAD>, <manufacturers from DB><manufacturer part numbers from db><vendor from db><vendor part number from db>
R214 ,2.254,9.521,T,270, Resistor 1K 0805 1% , Vishay CRW0805-102-DQR , Yageo RM8-1K00-P, Digikey RN-7362, Mouser PQ2154, Avnet RES1K08051p
R215 ,3.745,5.958,B,45, Resistor 1K 0805 1% , Vishay CRW0805-102-DQR , Yageo RM8-1K00-P, Digikey RN-7362, Mouser PQ2154, Avnet RES1K08051p
The cad library editor needs to talk to the database. whenever a new part is created in the cad library , a new index number is requested form the DB. the CAD creates a new object with this ID, attaches footprint and symbol, textual description and whatever other data is at hand. if you have manufacturer and part number you can enter it and it will get loaded in the DB ( not in the CAd library ! loaded into the DB under the index). The cad tool can simply present a simple UI into the DB to do basic operations of adding the initial load.
The DB portion is accessible through another UI (more detailed) where you can edit the "textual" data.
Whenever a bom or pick place is generated the CAD tool pulls the latest data from the db based on the unique index.
The net result is:
- At design stage you are not "locked in" to manufacturer / part number. if you have it , load it, if not move on.
- at production time you can simply make sure your DB has the latest ordering data based on whatever criteria you need. ( could be price, could be signed contracts, could be whatever is in stock at digikey , could be whatever you have in house.)
This can be stored in a simple single-file db like Firebird or even a tabular format like a CSV file or excel file.
The key is the decoupling of the CAD and ERP/PLM data. The ERP/PLM data is in flux (prices change, product lines go obsolete, get replaced, contract change. not all companies work the same way) Storing this outside the CAD gives maximum flexibility.
Bonus : you can crosslink this DB and integrate it with part search engines like octopart or digikey data pulls through their API's if you want. This is all doable now as this data lives outside of the CAD world. IF the data updates , the CAd pulls it during BOM and P&P generation so You now have a live system with complete flexibility for both engineering and procurement/planning/production
Critcial points :
- the unique ID is immutable. once created it cannot be reused. it is alive ( part exists ) or dead ( part is obsolete) it is never reused. even on a dead part the ID is still 'used' ( to mark it as obsolete, potentially point to substitute)
- the db is a WORM (write once, read many): any alteration of text data creates a revision of a part. Data is never lost. The CAD tool can flag you are using an out-of-date revision and show you the list of newer revisions. it is up to the engineer to approve/reject. in most cases automatic approval is fine (if the parts are vetted to be correct) There can be a flag :
1 = mandatory update ( corporate policy, approved vendor for example , or product line discontinued and substituted or order number changed)
2 = requested approval (may be a power rating change for example the 1/4 watts are obsolete so we swapped to 1/3 watts , same tolerance,value, upward compatible change basically)
3 = need replacing (part obosolete , no footprtin compatible part available )
4 ... and so on.