First of all, I understand current KiCad approach to “free” (not coupled) symbol, footprint and 3d libraries.
However, the production reality is: we (usually) work with limited number of real components.
For now, I’m just adding private identifier to a schematic symbol, which contains an unique ID for my “real” component which I do lookup in my database after BOM generation.
But this is error prone since it is not coupled in any way to a component data shown in Schematic.E.g. if I change resistor value, and forget to update my private identifier, I’m in a short way to have a real issue.
My workflow would be greatly improved if KiCad provided me a “Superlibrary” tool, which would allow me to define my own components, including their schematic symbols, footprints, values/basic electrical properties and private identifiers.
When placing a component I would like to be able to pick an existing component from my “superlibrary” (e.g. 39k 1% 0603 resistor), or do it “current” way (pick symbol, enter data “freely” etc.).
If the component was “picked” from the Superlib, the component’s edits should be disabled (if I need to change anything, I probably need another “Superlib” entry). And a “real” “superlibrary” component have it’s schematic symbol linked, defined basic parameters, footprint etc.
From my point of view, it’s the best of two worlds: working with “tightly coupled” real components, and be able to work with freely selected components. This way, it’s not necessary to work with the database of all resistors in the world, just the ones I really use. I do have less than 300 individual components I use in my all projects, and if the “Superlibrary manager” would allow me to group components (resistors, caps, discrete semiconductors, ICs etc.) it would IMHO be a very powerful tool for a production environment (where re-using components to the greatest extent possible is critical).
What do you think about that? Or maybe there are some existing solutions to my problem?
Already possible. We call that fully specified symbol. Just add the fields you want to the symbol at symbol design time. (Meaning the footprint, electrical parameters, order info, house part number, whatever you desire)
Write protection is not so simple. (Only possible at a per library basis using operating system protections.) Currently not possible at all once placed in the schematic. (relies a bit on self discipline.)
Grouping is simple by either using keywords or a common prefix. And of course by putting similar things in the same library.
A lot of “stuff” in the offical KiCad libraries is generated by scripts.
Maybe you want to edit those scripts to have them generate the schematic symbols and Footprints you want in your “superlibrary” of 300 components.
There have been some threads on this forum with discusssions of complicated databases linked to schematic symbols etc, but those are way more comoplicated than my own needs. But I see the reasons behind wanting to automate more if you want to juggle with personal databases.
Oops, maybe I blab too much without enough thought sometimes.
As a total Python illiterateI made a python script to generate a number of connector symbols for Eeschema. It was in the time that Eeschama’s connector symbols had inverting pins. Very weird, could not live with that. With the descripton of KiCad’s file formats, I was able to generate pretty pasable connectors in about an afternoon. It’s just text manipulation and pretty simple (I attached the Python script). Connectors_Square.py.zip (1.6 KB
I also know of a project that generates a schematic symbol from information in a spreadsheet. This may also help if you want to create schematic symbols from database info.
I don’t expect to automate the generation of “My components”. Possibly the “fully specified” might be what I’m looking for (thanks, @Rene_Poschl). Will investigate this soon.
Ok, so here comes my first question: is there a way to “unlink” library symbol name and Value.
Say I want my 39k,1%, SMD 0603 resistor to be saved as something like “RES39K1%SMD0603XYZ” in the library, but it’s value (for schematic readability sake) want to be “39k”. I can edit it later on in my Schematic (which is not so good, as it can introduce errors, e.g. when fine-tuning the circuit and entering changes quickly), but can’t change it in Symbol’s properties (the Value field is locked, with the value identical to symbol name).
If I can chime in with my extremely painful use case
We are under strict requirement to assign internal part numbers and controlled list of valid manufacturer parts to every single jelly bean part, L’s R’s and C’s. This practice is common in many engineering organizations regardless of their change control strictness, but the strictness for jelly beans may vary, in my case we cannot tolerate any substitutes by MFG for any reason without our explicit approval
This leads to libraries of only passive components
C0001 - CAP CER SMD 0.01UF 50V 10% NP0 0402 C0002 - CAP CER SMD 0.01UF 100V 20% X7R 1210
so on for hundreds of parts
The workflow usually has the schematic designer using generic components symbols during initial development and then switch to a specific part for review. During this process a few dozen new parts may need to be created based on the original generic symbol so it can be dropped in place as a fully qualified part. The only major variation is the internal part number, certain parameter fields, footprint and list of qualified manufacturer and manufacturer part number
So you can see why I am excited for the new library standard, however I agree that currently this is doable and I have implemented this using the current library, albeit with much manual copying to make it work .
The need to copy stuff is the weakness of current approach. I wanted to ask a quesiton on the possibility of inheriting some symbol properties, but @Rene_Posch have already explained in another thread it is a feature planned for future versions.
IMHO most of the ordering details shall live in the external database ONLY. That’s the place where purchasing staff may e.g. assign allowed substitute order codes etc.
Engineers’ task shall be just to select a part (probably by an organization’s private ID), with only basic information included in the schematic.
My “Superlibrary” idea could reduce the redundancy for “jelly beans”, as the “superlib” entries shall link to compoent library items like symbols, footprints etc. No need to copy stuff, just indicate that your bunch of resistors are simple Resistors (Device:R) with some parameters linked (like Footprint needed by the PCB) and – most important, the organizations’ private unique component ID.
I agree, generally speaking this is absolutely correct but it can be convenient to have this info in Eda to do costing while developing and generate prototype BoMs without having to go through the purchasing department systems
A good approach could be to allow a database link , indexed by internal number for pulling additional info like standard cost (for cost engineering) and mpns for validation of alternatives (from time to time the production department requests a substitute due to market availability or obsolescence it would be good to be able to review this within the schematic context when it matters )
If the design engineer can do all this from within KiCad without switching tools the productivity improvement is quite large
Has anyone in this thread used the “database library” functionality of Altium Designer or Mentor DXDesigner? If such a thing were possible with KiCad, would it solve your needs?
I have tried to use it , but the documentation for database setup for it is non existent and we gave up trying to set up the tables, in principle this is quite close to a slam dunk if it can be documented. This was when altium still sold through VARs so I was intending to give it a shot again with direct support.
Nowadays altium ships with a gigantic self hosted web portal service (“Vault”) that stores designs, electrical components, and “mechatronic” parts. So it’s gotten even more complicated to manage parts and part models . Seems that solution is used as a clearinghouse for drafting, and mechanical model feedback to electrical design , but really it means you pay again for another license
I don’t really have an opinion regarding the library structure as I use Kicad for hobby boards. However I spent my career designing circuits in aerospace and automotive. Each of these had their own specific needs. Aerospace = configuration control. Automotive = cost. This is not to say each did not have other requirements.
For my “professional” designs I spent 99% of my time with pieces of paper testing configurations. These designs were not super high chip count logic designs but mostly sensors and drivers. Our PCB generation was outsourced requiring a full detailed parts list before starting to layout the board. Looking back, I don’t see choosing parts and part numbers to have been all that time consuming. So I guess I’m wondering what type of designs would benefit from such a “superlibrary”?
BTW
While in automotive we had a PLM system by Siemens. It was company wide (think global) and tied every design step and outcome together. It was a control freaks wet dream but a huge resource drain on the design team. So be careful what you wish for, it might take on a life of its own.
I’m trying to get close to what I need to @Rene_Poschl 's suggestions.
Few questions/observations:
Is there an easy way to “save existing component as…” in current library? Say I’m editing my fully specified 39k, 0603 resistor. Then would like to change few data (value, private ID) to match my 43k inventory item, and just SAVE AS new name (reflecting 43k item). Can’t find the way…
Replacing component is tricky. I can edit symbol, then change library item. Bu it does not populate the fields automatically. I need to click on the Update field values, check the “Value” property and hit update.
But if I change the Symbol, and click “Update fields” button, it does not update the fields to new values. I must change the symbol, click “OK” to close Symbol properties window (probably then the symbol is updated), enter Symbol properties again and click “Update values”. Far too many actions for a single compoent change (the “Update fields” behavior is probably a bug).
Is there an easier way to populate the fields with new data after changing the symbol? (probably not, since the symbol for EESCHEMA is just “symbol” and not the part itself).
Reference
Stock symbols have the “?” suffix. Like if I place the resistor (Device:R), it is displayed as “R?”. Hit Edit and the “?” is automatically selected to enter my designator and this is nice.
With my symbols I can’t have the same effect.
The reference of my symbol is “R”. It displays in the library editor as “R?”, but once I place the part in my schematic, it displays just “R” without the “?”. If I edit reference, the “R” is selected so i must deselect it and enter my designator. Not so nice.
However if I enter “R?” as a reference in library editor , it displays as “R??” in both Library editor preview and schematic. Is it another bug? How can I replicate the behavior for “stock” library parts, for my “private” symbols?
I don’t have much experience with other EDA packages (started with kicad bzr3256), but I like how Ltspice “Select part” works. With LTSPICE, I can use generic symbol (like C) and enter the properties manually (capacitance, esr etc.) or by clicking “Select capacitor” select one from the library. I’d like to have such an easy way in Kicad (where I do build the library myself, populating it with my parts). If I do change the schematic during prototyping, i just select another part (say 43k instead of 39k) and all my other references are automatically updated.
in the library tree click duplicate on the component you want to duplicate. (That works for sure) There might also be a save as option (for footprints i am sure. Symbols not so much)
I seem to remember a bug report of this but can not find it right now. Will look again later today.
If i can express my idea of implement a “super library”.
I it wold be cool to delegate the component fetching to an external plugin:
use a standardize API to fetch component/metadata and query/filter the data
implement some caching
a way to register a plugin run time (like python plugins in pcbnew), or a way to interface with the API with a unix socket or similar
multiple “data source” (multiple plugin)
The kicad project need only to implement a “file system” plugin that emulate the current behavior, and we (the community) can create specific plugins to fetch the symbols/footprint from various sources (DB, version control, CRM integration ecc…).
I think this is a better solution than a system similar to Altium design (A file that describe witch DB table and column associate to each field on the component).
I don’t want to pretend this is the best idea, nor that is would be easy to implement, but at-least the user can implement a plugin specific to his user-case (like what kicad do with the BOM export)
Just installed 5.1.2 on my spare machine, to verify these.
Duplicate symbol - easy enough for me, problem solved
Change symbol
Still requires more clicks than expected. The procedure is:
enter Symbol properties (“e”)
browse Library for new part, select new part
click OK to close Symbol properties, to update the newly selected symbol
enter Symbol properties again (“e”)
click “Update fields from library”
check “Value” as a field to update (as the Value is my symbol identifier now, the displayed value “lives” in an added field dispVal), click OK (this updates the symbol properties to these of new symbol)
click OK to close Symbol properties.
The “?” in the reference is OK in 5.1.2.
In my “production” 5.0.2 it became OK after closing and re-opening Kicad.
@Rene_Poschl
I don’t mean automatic update of all symbols. What I mean is a simple way of selecting new part. After our discussion, i see I need to use the “fully specified” components, to keep in sync with my parts inventory. But this mean, if I have to change a certain resistor from 39k to 43k, with “fully specified” parts I can’t just edit resistor’s value. Instead I must select another symbol that points to my “fully specified” 43k resistor. I don’t want to automatically touch any other resistor in my schematic, just the one I must replace.