EDAs don’t have support for Veroboard/stripboard, so I have written a small utility which can take files from Qucs-s or KiCAD and convert them into a format suitable for DIY Layout Creator or VeroRoute. I’ve looked at all the other schematic design tools I can find and the only one which is worth adding is LibrePCB.
It might be possible to take the circuit.lp file and extract the components and nets, but it looks likely to be fraught with risk, for example of getting the pin numbers wrong.
Have you any plans to add an “Export Netlist“ option? It doesn’t need to be sophisticated enough for a simulator, just something like this incomplete Protel example:
[
R6
RESISTOR
50 Ohm
]
[
R7
RESISTOR
50 Ohm
]
(
_net0
R8-1
OP4-1
OP5-1
)
(
_net1
R8-2
D4-2
D3-1
)
Hi @PopoutApps
Could you elaborate a bit more how this works technically? Is your converter tool and/or the target file format open source?
It might be possible that such a converter doesn’t work well for LibrePCB. A schematic does not contain any information about packages/footprints and their pinout. Those things come in only on the board. So far I don’t know where this information should come from for your use-case.
Also I wonder, how can your tool know which component from the netlist is what real device? I.e. how does it know that “R6” is a resistor? Or is this assignment done in the Veroboard tool?
Maybe we could implement a corresponding netlist export, but for this I’ll need more information so I can understand the whole workflow in more detail.
It is a FOSS (Free Open Source Software) Python3 package which can run on any OS. The target file is a simplification of a very early version of Protel. Aimed at DIY Layout Creator and Veroute VeroBoard/Stripboard layout designers. They don’t get much attention from Schematic design tools.
Footprint information isn’t necessary as the layout tools have that.
An extract from a circuit.lp:
(component f37726c2-ec60-4155-a858-e262bd330305
(lib_component ef80cd5e-2689-47ee-8888-31d04fc99174)
(lib_variant a5995314-f535-45d4-8bd8-2d0b8a0dc42a)
(name “R1”) (value “{{RESISTANCE}}”)
(lock_assembly false)
(attribute “RESISTANCE” (type resistance) (unit ohm) (value “50”))
(signal 3452d36e-1ce8-4b7c-8e5b-90c2e4929ed8 (net be21f49c-ccbb-45a3-94d2- cad770487034))
(signal ad623f98-9e73-49c3-9404-f7cfa99d17cd (net f5c68e03-ea8b-4dc3-9cd6-0b32e7ee6028))
)
It contains:
(name “R1”)
(attribute “RESISTANCE” (type resistance) (unit kiloohm) (value “1”))
Which provides the 3 items needed for the component part of the file, although kiloohm needs to be K:
[
R1
RESISTANCE
1K
]
That would be a good start, I haven’t looked at the nets properly yet, but the information is in there too.
But you neither can assume that every resistor has the RESISTANCE attribute, nor can you assume that every component with the RESISTANCE attribute is a resistor. LibrePCB does not know what function a component has, i.e. whether it is a resistor, capacitor, transistor or anything else.
So my question remains: Where/how are the components from the netlist assigned to a device?
How does LibrePCB know what symbol to draw on the schematic then?
Every symbol is a drawing in the library, for example Resistor EU. So for LibrePCB, every component is the same, it’s just a drawing, no matter what the drawing represents.
And how does that work in your mentioned tools? Can you post the file format of a circuit in such a tool?
So are you saying that none of these values are reliable?
(value “{{RESISTANCE}}”)
(attribute “RESISTANCE” (type resistance)
(name “Resistor EU”)
(description “Resistor European (IEC 60617)”)
(keywords “resistor,resistance”)
Doesn’t that imply that there could be a symbol which looked like a capacitor but had values of inductor? Is anyone likely to design a component like that? Are users able to upload random components or are they created by LibrePCB? If the latter, I would be inclined to trust their judgement.
What about
(name “R1”) R means Resistor?
(name “C1”) C means Capacitor?
It is all dynamic data. Everything can be created/modified by users as they want. Nobody prevents you from creating an inductor that looks like a resistor. Prefixes like “R” are specified by norms and standards, but there exist several of them and they change from time to time, so it’s nothing reliable. And names like “Resistor EU” are just texts, they have no function and may be renamed if someone has a better idea.
The most reliable information is that the component with UUID ef80cd5e-2689-47ee-8888-31d04fc99174 represents a resistor. But this only applies to our official library. Users don’t have to work with our libraries, they can create their own libraries and will get different UUIDs.
Are components created by a user restricted to that user? Can they upload them to you and thereby make them automatically available to any user? Can they edit components in your official library?
”Official” implies some sort of approval by LibrePCB, so I would assume that users can’t touch those. In that case so long as a user sticks to the “Official” library they are OK, they should know that components from other sources are unpredictable.
Can we please turn this discussion into another direction? I still didn’t get any information how these things work in your mentioned tools, so I still cannot make my own thoughts about a possible solution. Like you need to understand LibrePCB, I also need to understand your mentioned tools.
A tool like DIY Layout Creator just imports the file and shows the components. For example from this file (only showing components):
[
R8
RESISTOR
50 Ohm
]
[
D4
DIODE
BZT52C10T
]
[
OP4
DIP8
1e6
]
[
D3
LED
red
]
[
R4
RESISTOR
50 Ohm
]
[
R9
RESISTOR
50 Ohm
]
[
D2
LED
yellow
]
[
C1
CAP_ELECTRO_200_NP
neutral
]
[
R5
RESISTOR
50 Ohm
]
[
D1
LED
green
]
[
R1
RESISTOR
1000 Ohm
]
[
R2
RESISTOR
1000 Ohm
]
[
R3
RESISTOR
2200 Ohm
]
[
R10
RESISTOR
1000000 Ohm
]
[
OP1
DIP8
1e6
]
[
OP2
DIP8
1e6
]
[
OP5
DIP8
1e6
]
[
R6
RESISTOR
50 Ohm
]
[
R7
RESISTOR
50 Ohm
]
It doesn’t place them, it uses a generic footprint.
Thanks. So you already have a step where you can assign to a DIYLC component type, that’s great. (I assume the terms “RESISTOR”, “DIP8” or “CAP_ELECTRO_200_NP” are built-in types of DIYLC).
But the DIP8 example does not make sense for LibrePCB. When you draw a schematic in LibrePCB, you will use a proper component (e.g. “NE555”, with pins “GND”, “VCC”, “TRIG” etc.), not just a DIP8 package.
And the problem with pins applies to every kind of component. Not just for ICs, even for transistors we work with signal names (e.g. “B”, “E”, “C” for base/emitter/collector), not pin names “1”, “2”, “3”. As I wrote earlier, LibrePCB schematics do not contain information about pinouts.
And how do you handle transistors at all? Some transistors have the pinout 1,2,3 = Collector,Base,Emitter, some have 1,2,3 = Emitter,Base,Collector. In a LibrePCB schematic there is no difference between those two types, since the schematic does not contain any pinout information. It will be the responsibility of DIYLC to assign the desired pinout.
So each component like this one
has to have its own detailed list to define its geometry? There aren’t any generic definitions?
I’m busy now, will come back to this later.
Everything is dynamically loaded from library files. There are no built-in definitions at all. The library concept is quite complex, see LibrePCB Developers Documentation: Library Specification. It is designed for the use-case of PCBs, not for stripboards.
I think the only reasonable way will be to create a manual mapping of LibrePCB UUIDs to DIYLC identifiers. This would then work for basic components (R, C, L, …) from our official libraries, which should be fine I guess (users who work with stripboards are unlikely to have their own libraries created). But for ICs it’s gonna be difficult. And also the question remains how DIYLC can know the pinout of a transistor as it is not defined in LibrePCB.
Can we please turn this discussion into another direction?..Like you need to understand LibrePCB
That is why I asked these questions 
Doesn’t that imply that there could be a symbol which looked like a capacitor but had values of inductor? Is anyone likely to design a component like that? Are users able to upload random components or are they created by LibrePCB? If the latter, I would be inclined to trust their judgement.
Since you didn’t answer, I looked at some files, made some guesses and fiddled about.
I can see that this resistor has several fields which all say much the same, one of which might be editable to say RESISTOR - or export code could translate it.
(component 0842826b-6829-47e6-b9a3-993764ec0e98
(lib_component ef80cd5e-2689-47ee-8888-31d04fc99174)
(lib_variant a5995314-f535-45d4-8bd8-2d0b8a0dc42a)
(name “R8”) (value “{{RESISTANCE}}”)
(lock_assembly false)
(attribute “RESISTANCE” (type resistance) (unit ohm) (value “50”))
(signal 3452d36e-1ce8-4b7c-8e5b-90c2e4929ed8 (net 5204efd8-ccae-4d66-bb15-1081192620e5))
(signal ad623f98-9e73-49c3-9404-f7cfa99d17cd (net 6902b07d-078c-42cb-8f14-486bdb00e608))
)
This chip has much less relevant data, it only has “U…” and “MPN or DEVICE”:
(component 6ddcd5bb-08a4-4105-bd1b-df93ce8cf1a6
(lib_component 0aabc0df-a3fe-4a95-be1f-7be4cccddb2b)
(lib_variant 52ababe6-3d42-40dc-9108-422ec3637479)
(name “U1”) (value “{{MPN or DEVICE}}”)
…
But I right-clicked on a chip, selected properties and typed something in, which led to:
(component 6ddcd5bb-08a4-4105-bd1b-df93ce8cf1a6
(lib_component 0aabc0df-a3fe-4a95-be1f-7be4cccddb2b)
(lib_variant 52ababe6-3d42-40dc-9108-422ec3637479)
(name “U1”) (value “DIP8”)
(lock_assembly false)
(attribute “VALUE” (type string) (unit none) (value “741”))
So data exists to put in the output file so that it says:
[
U1 ← component-id
DIP8 ← compnent type
741 ← value
]
So far as nets are concerned I can see a list near the top of the file:
(net 05ecba28-367b-4f19-a7ad-f829a201eea1 (auto true) (name “N8”)
(netclass a42b7248-edb9-45c7-8d04-2b5c96754d12)
)
and one of the components it connects has:
(component a2416820-13ef-4e22-b4a4-94de5c92c372
(lib_component ef80cd5e-2689-47ee-8888-31d04fc99174)
(lib_variant a5995314-f535-45d4-8bd8-2d0b8a0dc42a)
(name “R4”) (value “{{RESISTANCE}}”)
(lock_assembly false)
(attribute “RESISTANCE” (type resistance) (unit ohm) (value “50”))
(signal 3452d36e-1ce8-4b7c-8e5b-90c2e4929ed8 (net 576260d3-7045-45d3-a913-b0448a497f31))
(signal ad623f98-9e73-49c3-9404-f7cfa99d17cd (net 05ecba28-367b-4f19-a7ad-f829a201eea1))
On the schematic if I click on the -ve input of U1B a popup says that it is N8, so there is information somwhere about which pin of the chip N8 connects to. Also, if I click on an unconnected opamp I see a popup which contains:
Signal OUT
Net X
Pin +/-/OUT
Pads
So pin data is available too.