Multiple components with same name but difference meta data


I would like to create components for individual resistor values (for example) that contain extra fields such as our internal product id so that our purchasing department can work directly with the BOM that comes out of KiCad. What would be the best way to do this? It would be nice if the “Value” that’s displayed on the schematic would be for example, 75, as it would for a “normal” resistor with a given value. However, it seems that this is taken directly from the value which is also what the symbol is saved as. So if I have multiple 75 ohm resistors I have to give them different names, which makes the schematic less readable since I would need to append the resistor model or something similar to avoid name conflicts. Is it possible the way I envision? Altium seems to solve this by having a unique ID for each device which is not dependent on the name / value that is displayed.


Instead of renaming the value could you rename the footprints for each to something that would make sense to the purchasing department?

I assume all of them are in in the same package so you really don’t want duplicated footprints.

However making symbol aliases would be an option as that will ensure the value field has the name of the alias.

1 Like

Thanks for the replies. I think there is a little disconnect, however, I’m referring to symbols, not footprints. @Rene_Poschl, what do you mean by making a symbol alias?

Ultimately, what I want is to have a symbol lib called Digikey_Resistors (for example) and within here I have 50 ohm (which is linked to a 0402 footprints and a special ID for our purchasing dep). Then I have another symbol, also with value 50 ohm (this seems to not work due to name conflicts. This one would have maybe a 0603 footprint, a different digikey part number and a different special ID for purchasing). Does that make sense? Right now, the only way I see this is possible is by “naming” i.e. giving them a value, that is unique: 50_VishayRR. When I drop this symbol on the schematic, it displays this full name which is not as readable compared to simply displaying 50. Perhaps I should make a new field in the symbol called Resistance and mark it as visible and hide Value for this lib?

just say you want all 100K resistors to be 1% 50ppm 1/4w minimum or something

In kicad up until version 5 one can add an alias to an existing symbol. Such an alias naturally has a different name and therefor value field than the original symbol. Additionally one can also asign a different documentation file as well as have differing description and keywords.

Aliases can however not differ in anything else compared to the main symbol. Meaning all fields (including the footprint field) are taken from the parent symbol.

To you this means that if you want to have BOM information as fields in the symbol then you will need a separate symbol for every such part. If you however are satisifed with just the value field differing (for example by having it equal to the part number) then you can use aliases for parts in the same package (so every 0603 resistor can in this case share a single symbol definition and only differs in the value)

I personally use a slighly different approach. I do not encode the part number in the schematic at all but use a so called house part number. That house part number is a combination of the resistor value, tolerance and size. I therefore have a symbol per resitor size and tolerance with the house part number pre filled with the identifiers of these two parameters. I then just need a script that adds the value field to the partial house part number and then use an external tool (spreadsheet) to link to a real orderable part. This allows me to quickly exchange parts with equivalent options if a given part is not available all without touching the design files (was very useful during the MLCC crisis)

Of course the value field is then filled out during design time (so if i want to have a 1K resistor with 1% tolerance and in 0603 size then i choose the R_1percent_0603 symbol and fill the value field with 1k00 after placing it down)

Another benefit of my workflow is that if i discover i don’t need a 1k here but a 2.2k then i just need to change the value field and nothing else is changed.

1 Like

I see this solution an optimum one. And even the Value can be the “special ID for the purchasing dep”.
As every resistor has its unique symbol, another option for the value: it can be “hardcoded” into the symbol itself as a text.

True, only if you assume you have to have only one library for resistors.
When working in Protel I had 1k as 0603 and 1k_4 as 1k 0402. In KiCad I decided to have the same name for them so I have the R library for 0603 (for me standrad) and R1 library (1mm length) for 0402 and both resistors have the value 1k now.

I thought that is what I thought the OP wanted to avoid. Just have “75” show up to unclutter the schematic. That’s why I thought just having different footprints. Well footprint names. Those should show up on the BOM.

The way I attacked this was to produce a library dedicated to footprint size and add the key information as additional fields.

I have a crude 200line python script that automatically did this for 0402,0603,0805 and 1206 as part of the CRCW series from vishay

This works quite well.

The problem i have is for capacitors as this doesn’t work as well due to value, voltage, footprint and dielectric

1 Like

If you have differing fields then a separate “part number” would be better than differing footprints. After all do you really want to have one separate footprint for every component even if they all are just normal 0603 (for example)?

After all a field is to be changed anyway so you already need a new symbol. No need to also require a separate footprint as well.

Sorry for the delay in the reply, for some reason I didn’t get notifications… I’ve taken all your inputs and settled on the following solution (if you are interested). Every unique component is given our internal purchasing ID as it’s Value. So within my resistor library it looks something like 03214 01245 01124 etc. I add a new field called Value2 where I write the actual value of the component: for a capacitor it might have 10nF, for a chip it might have ADM7150. I hide the Value field and show the Value2 field. This has the advantage that on my schematic I can immediately see the “value” of the part and if it is already connected to a purchasable component because it will be purple.

Unfortunately, it appears the Kicad search does not apply to custom fields, so I found that I needed to again repeat the component Value2 entry in the description so that I can search for the part via something simple like 10nf or ADM (for the two examples above). This is a little unfortunate and feels hackish but still palatable for me. For my bom export script I added the Value2 field as a column so I can quickly match our internal number to the part. Not terrible, but I do wish that the Value and Name of the component in the library were separate. Also, that the search would search custom fields.

In KiCad V5 each schematic symbol is given a “timestamp” value which it uses to match schematic with Pcb Footprints.

In the KiCad nightlies this is further formalized into UUID’s.

Would this be a good way to make a connection between KiCad and an external database?

I have not much interest in exsternal databases and BOM management, but it has been around for quite a time.
“KiPart” and “KiBom” may be of interest to you.