Forum: Platinen KiCAD: Baugruppen im PcB editor getrennt gruppieren


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Raef (Gast)


Lesenswert?

Hallo, ich hab im Schematic Editor eine File, die ein Bauteil mehrere 
male in Form von einem subsheet enthält. Wenn ich das komplette File 
dann in den PcB-editor lade, dann werden die einzelnen Komponenten wild 
durcheinander gewürfelt, ohne dass man noch nie Zugehörigkeit zum 
ursprünglichen Bauteil (aus dem subsheet) erkennt. Das würde später 
einmal bei einer fertigen Leiterplatte die Fehlersuche unglaublich 
schwierig machen. Gibt es irgendeine Option, die eine Gruppenweise 
Anordnung im PcB-editor ermöglicht?

Soweit ich das verstanden habe, hatte vor mehreren Jahren schon einmal 
ein user sich dafür eine eigene Funktion gebaut (KiCAD - Baugruppen 
replizieren -> Beitrag "KiCAD - Baugruppen replizieren")... gibt 
es dafür eine vorgefertigte Lösung?

von Bernd W. (berndwiebus) Benutzerseite


Lesenswert?

Hallo Raef.

> Hallo, ich hab im Schematic Editor eine File, die ein Bauteil mehrere
> male in Form von einem subsheet enthält. Wenn ich das komplette File
> dann in den PcB-editor lade, dann werden die einzelnen Komponenten wild
> durcheinander gewürfelt,

Dann mache zu dem Subsheed eine separate Dummyplatine. Im Zweifel muss 
die auch nicht geroutet werden, nur die Footprints sollten in etwa so 
angeordnet sein, wie Du es wünschst. Dann verschiebst Du mit der 
Gruppierungsfunktion die Bauteile nach irgendwohin ausserhalb des Ramens 
(damit sie beim Einlesen nicht dahin kommen, wo schon etwas ist). Nun 
machst Du Deine originale Platine auf, noch ohne Bauteile, importierst
deine Dummyplatine, plazierst sie dahin, wo Du die Bauteile routen 
willst, und benennst die Bauteile passend. Für das nächste Subsheet 
importierst Du wieder Deine Dummyplatine, und benennst die bauteile 
passend zu diesem Subsheet, und so weiter...
Alternativ kannst Du nach dem ersten importieren und plazieren der 
Dummyplatinen Bauteile auch mit der Gruppierfunktion kopieren. Es bleibt 
aber immer noch das Benennen von Hand, was leider etwas aufwändig ist.



Wenn du mit diesen (gleichartigen) Subsheets durch bist, erst dann lädst 
Du Deine Netzliste ein, die Dir die noch fehlenden Bauteile links oben 
auf einen Haufen kippt (oder Du machst noch so einen Trick mit einer 
Dummyplatine).


> ohne dass man noch nie Zugehörigkeit zum
> ursprünglichen Bauteil (aus dem subsheet) erkennt. Das würde später
> einmal bei einer fertigen Leiterplatte die Fehlersuche unglaublich
> schwierig machen.

????? Bevor es Dir die Fehlersuche schwer macht, macht es Dir das Routen 
schwer. ;O)
Du stößt also schon in der Phase auf die Schwierigkeiten. Entsprechend 
musst Du eben dort schon aufräumen. Oder habe ich Dich falsch 
verstanden?

> Gibt es irgendeine Option, die eine Gruppenweise
> Anordnung im PcB-editor ermöglicht?

Du kannst sie auch von Hand auf der Platine in Gruppen verteilen. Das 
ist einfacher als gedacht.
Du gehst einfach auf den großen Haufen und verschiebst die einzelnen 
Footprints zu zusammengehörigen Gruppen. So mache ich das immer. Wenn es 
ein paar Bauteile mehr sind,
wähle ich "Autoplazieren". Das dauert lange, aber wenn man eh gemütlich 
Kaffeetrinken wollte....
Das Ergebnis ist eher mittelprächtig, aber die Bauteile liegen schonmal 
nebeneinander, was das Sortieren erleichtert, und Du hast eine gewisse 
Chance, das sich zusammengehörige Bauteile auch schon nebeneinander 
befinden.

> Soweit ich das verstanden habe, hatte vor mehreren Jahren schon einmal
> ein user sich dafür eine eigene Funktion gebaut (KiCAD - Baugruppen
> replizieren -> Beitrag "KiCAD - Baugruppen replizieren")... gibt
> es dafür eine vorgefertigte Lösung?
Das Problem habe ich auch nicht komplett verstanden....irgendwie macht 
der das kompliziert.
Gerade in kicad lässt sich mit Copy&Paste eine Menge reissen.....;O)
Seh Dir die Files übrigens mal mit dem Editor an.....vieleicht geht Dir 
dann ein Licht auf. ;O)

Ich hoffe, ich hatte Dein Anliegen richtig verstanden.
Vieleicht helfen dir auch folgende Diskussionen weiter:
Beitrag "Kicad: kleine Platine zum Ätzen auf einer Europlatine verteilen"
Beitrag "Kicad  pcb  Layout - Mehrere identische Schaltungen auf einer LP"

Mit freundlichem Gruß: Bernd Wiebus alias dl1eic
http://www.dl0dg.de

von Raef (Gast)


Lesenswert?

Hallo Bernd,

vielen Dank für deine ausführliche Antwort!

>> ohne dass man noch nie Zugehörigkeit zum
>> ursprünglichen Bauteil (aus dem subsheet) erkennt. Das würde später
>> einmal bei einer fertigen Leiterplatte die Fehlersuche unglaublich
>> schwierig machen.
>
>????? Bevor es Dir die Fehlersuche schwer macht, macht es Dir das Routen
>schwer. ;O)

Damit meinte ich nur falls mir später irgendwann einmal ein Widerstand 
aus einem subsystem den Geist aufgibt, dann kann man den schnell und 
unkompliziert auf der Platine lokalisieren (weil ja die subgruppen 
zusammen sind). Lach, ansonsten hast recht, wär das ein bissel komisch 
:D


>Dann mache zu dem Subsheed eine separate Dummyplatine .... Es bleibt
>aber immer noch das Benennen von Hand, was leider etwas aufwändig ist.

Ehrlich gesagt würde mich das nicht wirklich entlasten, weil es egal ist 
ob ich die Dinger einzeln bennen muss oder zurechtschieben ... der 
Aufwand bleibt ungefähr gleich (zumindest nach meinem derzeitigen 
Verständnis).

>Wenn es ein paar Bauteile mehr sind, wähle ich "Autoplazieren". Das
>dauert lange, aber wenn man eh gemütlich Kaffeetrinken wollte....

ein sehr verlockender Gedanke ;D Einziger Haken dabei ist, dass es bei 
mir unglaublich lange gedauert hat (ca. 4 Stunden) und das ganze 
Schaltbild danach nicht geordneter aussah ... im Gegenteil

>Seh Dir die Files übrigens mal mit dem Editor an.....vieleicht geht Dir
>dann ein Licht auf. ;O

Das war wirklich ein super Tip. Ich fürchte, dass ich auch den etwas 
komplizierteren aber dafür einfach wiederholbaren Weg geh und ein Script 
schreibe, was mir die Komponenten in Gruppen anordnet. Anbei ein Bauteil 
aus der PcB datei:

      (module TO92 (layer F.Cu) (tedit 443CFFD1) (tstamp 516FEC8A)
      (at 217.17 94.488 )

      (descr "Transistor TO92 brochage type BC237")
      (tags "TR TO92")
      (path / 51701D1D /516EBB74)
       .....

Soweit ich das verstanden habe ist nach "at" die Koordinate auf der 
Platine und der erste Teil von "path" gibt die Zugehörigkeit zum 
subsheet.
Schade, dass es dazu noch keine Funktion im Editor selbst gibt (Es sei 
denn autoplazieren soll dies eigentlich tun) ...

Viele Grüsse,
Raef

von Hmm... (Gast)


Lesenswert?

Wenn man im Layouteditor 'T' drückt, fragt KiCAD nach einer 
Bauteilreference. Dann das Bauteil (z.B. R1) eingeben und schon hat man 
es an der Hand und kann es platzieren.

Mit einem Ausdruck des Stromlaufs kann man dann schnell die Gruppen 
wieder herstellen und muss nicht in dem Bauteilklumpen links oben 
suchen.

von Raef (Gast)


Angehängte Dateien:

Lesenswert?

>Wenn man im Layouteditor 'T' drückt, fragt KiCAD nach einer
>Bauteilreference.

Danke, der Vorschlag hilft auf jeden Fall schon einmal diese Komponenten 
bequem auszuwählen. Jedoch ist es trotzdem mühselig, wenn man mehrere 
hundert hat.

Ich hab einmal ein quick-and-dirty script als PDF angehängt (war mir 
nicht sicher, ob Docs mit ner .py Endung hier gleich gelöscht werden). 
Dieses macht folgende Schritte:

a.) Lade die pcb Datei ein;

b.) Suche nach dem Stichwort "path", was nur in den einzelnen Modulen 
vorkommt und katalogisiere solchene, welche aus einem gemeinsamen 
subsheet aus dem Escheme editor kamen.

c.) Teile das Board in gleich grosse Teile auf

d.) Platziere in jeden der Teile die Komponenten eines subsheets 
kreisförmig an. Dann überschreibe die x,y Informationen der pcb-Datei 
und speichere das ganze

Insgesamt ist das sehr rudimentär; wäre cool, wenn irgendwann einmal 
eine routine entsteht, wo die Ursprüngliche Anordnung der subsheets aus 
der Scheme datei übernommen wird und die Leiterplatte auch besser 
ausgenutzt wird.

von Bernd W. (berndwiebus) Benutzerseite


Lesenswert?

Hallo Raef.

> Ich hab einmal ein quick-and-dirty script als PDF angehängt (war mir
> nicht sicher, ob Docs mit ner .py Endung hier gleich gelöscht werden).
> Dieses macht folgende Schritte:

Also damit gab es bisher wenig Probleme, so wie ich das persönlich 
überblicken und einschätzen konnte.
Beispiel siehe: Beitrag "Re: KiCAD Schalplan-ID ändern"
Das Script solltest Du aber nicht mehr verwenden, weil Du unter 
http://www.mikrocontroller.net/articles/KiCAD#Schaltplan was aktuelleres 
findest.

>
> a.) Lade die pcb Datei ein;
>
> b.) Suche nach dem Stichwort "path", was nur in den einzelnen Modulen
> vorkommt und katalogisiere solchene, welche aus einem gemeinsamen
> subsheet aus dem Escheme editor kamen.

Soweit hört sich das gut an.

>
> c.) Teile das Board in gleich grosse Teile auf
>
> d.) Platziere in jeden der Teile die Komponenten eines subsheets
> kreisförmig an. Dann überschreibe die x,y Informationen der pcb-Datei
> und speichere das ganze

Das erscheint mir eher umständlich und vor allem viel Platz zu 
verbrauchen.
Ich persönlich würde die Bauteilgruppierungen NEBEN dem Board plazieren. 
Erfahrungsgemäß möchte ich da, wo gerade so ein Haufen liegt, Bauteile 
plazieren, und dann muss ich umräumen. Desweiteren würde ich aus 
Platzgründen die Bauteile nicht kreisförmig (obwohl das als 
Wahlmöglichkeit vieleicht eine interessante alternative ist) anordnen, 
sondern alle auf einen Haufen werfen. Platz ist hier in dem Sinne zu 
verstehen, das Flächenverbrauch auch hin und her Wandern in der 
Arbeitsfläche bedeutet, also zusätzliche Klick- und/oder Scrollarbeit, 
bei gleichzeitigem Übersichtsverlust. Wenn ich  mich einmal entschlossen 
habe, die Bauteile nicht ins Board selber zu setzten, habe ich 
vermutlich "Fläche" genug. ;O)

Jedenfalls wenn ich alle Bauteile ins Board HINEIN plazieren würde, wäre 
das Board ja auch voll, wenn es nicht überdimensioniert ist. Mir würde 
also der Platz zum Rangieren fehlen. ;O)

> Insgesamt ist das sehr rudimentär; wäre cool, wenn irgendwann einmal
> eine routine entsteht, wo die Ursprüngliche Anordnung der subsheets aus
> der Scheme datei übernommen wird und die Leiterplatte auch besser
> ausgenutzt wird.

Die Anordnung der Bauteile im Sheet ist zwar sehr übersichtlich, wenn 
der Schaltplan gut ist, aber das hat erstmal nichts mit den 
geometrischen und thermischen Bedürfnissen der Bauteile zu tun. Dazu ist 
ein Schaltplan zu abstrakt.
EMV, Leitungslängen, Impedanzen, Übersprechen, Dämpfung und 
Brummschleifen sind ein weiteres Kapitel. ;O)

Das wichtigste, ist, den Haufen in den Subsheets entsprechende kleinere 
Haufen aufzuteilen. Über den Rest kann man sich lange streiten. ;O)

Auch das setzt aber voraus, das jemand die Schaltung in funktional 
zusammenhängende Blöcke aufgeteilt hat, und diese dann zusammenhängend 
in Subsheets gepackt hat.
Auch das muss nicht immer so sein. ;O)

Ich selber habe beim reverse engineering zumindest einen vorübergehenden 
Zustand, indem ich einfach nur komme was wolle die Schaltung eines 
existierenden Boards in einen Schaltplan übertrage. Dabei fehlt 
zumindest am Anfang sehr der Überblick, und ich sehe nur zu, das ich den 
Schaltplan "übertragen" bekomme. Und wenn es mir aus Übersichts und 
Platzgründen opportun erscheint, stopfe ich dann auch irgendwas in 
Subsheets.

Anschliessend folgt dann noch ein Aufräumen, in dem dann z.B.  klar 
wird, das verschiedene Versorgungsspannungen doch nicht (oder aber 
gerade doch) zusammenhängen. Wie das Massesystem aufgebaut ist. Wie die 
Funktionsblöcke überhaupt aussehen und so weiter.

Und darin steckt immer noch viel Willkür. Beispiel. ein Signal wird von 
einem Block an einen anderen gegeben und dazwischen ist noch ein 
Spannungsteiler, Tiefpass, Pi-glied oder dergleichen. Zu welchem 
Funktionsblock packe ich nun diese Anpass/Filterschaltung? Oder mache 
ich dafür einen extra Block auf ? Rein von der Funktion her hängt es an 
Details (Erwarte ich z.B. eher eine Störung von aussen, oder das ich 
selber störe?) Zu viele Blöcke sind auch unübersichtlich. Es ist also 
auch eine Frage der Balance und des persönlichen Geschmacks.

Mit freundlichem Gruß: Bernd Wiebus alias dl1eic
http://www.dl0dg.de

von Raef (Gast)


Lesenswert?

Hi Bernd,

nochmals vielen Dank, dass du dir die Zeit für eine so ausführliche 
Antwort nimmst.

>Beispiel siehe: Beitrag "Re: KiCAD Schalplan-ID ändern"
>Das Script solltest Du aber nicht mehr verwenden, weil Du unter
>http://www.mikrocontroller.net/articles/KiCAD#Schaltplan was aktuelleres
>findest.

vielen Dank für die Tips. Das ist mir vorher irgendwie durch die Lappen 
gegangen.

>Die Anordnung der Bauteile im Sheet ist zwar sehr übersichtlich, wenn
>der Schaltplan gut ist, aber das hat erstmal nichts mit den
>geometrischen und thermischen Bedürfnissen der Bauteile zu tun. Dazu ist
>ein Schaltplan zu abstrakt.

stimmt ... das Ding ist, dass ich das ganze nur als Laie betreibe und 
für mich ist so eine funktionale Unterstruktur das instinktivste 
Vorgehen. Wenn ich demnächst noch Zeit finden sollte, werde ich anhand 
der Tips schauen, wie ich das verfeinern kann.

Lieben Gruss,
Raef

von Raef K. (raef)


Angehängte Dateien:

Lesenswert?

Hi Leute,

ich musste doch nochmal eine Leiterplatte überarbeiten und hab mich an 
diesen Post zurückentsinnt.

Diesmal im Anhang ein kleines python Script, was die Anordnung aus den 
sch files in den pcb editor übernimmt. Am besten alles in einem Ordner 
ablegen und das Python Script starten. Hab mich bemüht das Script 
einigermassen übersichtlich zu gestalten. Hauptpunkte sind:

1.) Die unsortierte PcB-Datei einladen und dabei die Koordinaten von 
jeder Kompenente extrahieren

2.) Die sch-datei subsheet-module einlesen und dort die Position für 
jede Komponente relativ im Subsheet auslesen

3.) Innerhalb der PcB-Datei ein Grid abstecken in welches dann die 
Bauteile entsprechend ihrem jeweiligen subsheet angeordnet werden.

Anyway, vielleicht hilft es ja irgendjemand ein bisschen weiter.

LG, Raef

von trx (Gast)


Lesenswert?

Hallo,
ich weiß, der Beitrag ist schon von 2013, bin aber vom Wiki auf diese 
Antwort verwiesen worden.

Gibt es zu dem Raef K-Script einen Screenshot, wie so eine Automatische 
Platzierung aussieht?

trx

von Bernd W. (berndwiebus) Benutzerseite



Lesenswert?

Hallo trx.


trx schrieb:

> ich weiß, der Beitrag ist schon von 2013, bin aber vom Wiki auf diese
> Antwort verwiesen worden.

Immerhin ein Anlass, mich mal mit dem Skript auseinander zusetzen. ;O)
Mangels Bedarf und Zeit habe ich das noch nie gemacht.

>
> Gibt es zu dem Raef K-Script einen Screenshot, wie so eine Automatische
> Platzierung aussieht?

Was meinst Du mit K-Skript? Es ist KEIN Skript, welches das 
KiCAD-Python Skripting benutzt, sondern ein separates standalone Python 
2 Skript. Funktioniert mit Idle 2.7.9 recht gut.

Einen Screenshot des Ergebnisses habe ich als 
"PlazierungsErgebnisDesRaefSkriptes-I.png" angehängt.

Meine KiCad-version:
Application: kicad
Version: (2015-03-14 BZR 5513)-product Release build
wxWidgets: Version 3.0.2 (debug,wchar_t,compiler with C++ ABI 1002,GCC 
4.9.2,wx containers,compatible with 2.8)
Platform: Linux 3.16.0-4-686-pae i686, 32 bit, Little endian, wxGTK
Boost version: 1.54.0
         USE_WX_GRAPHICS_CONTEXT=OFF
         USE_WX_OVERLAY=OFF
         KICAD_SCRIPTING=OFF
         KICAD_SCRIPTING_MODULES=OFF
         KICAD_SCRIPTING_WXPYTHON=OFF
         USE_FP_LIB_TABLE=HARD_CODED_ON
         BUILD_GITHUB_PLUGIN=ON
         KICAD_USE_WEBKIT=OFF


Bedingt durch meine derzeitige Situation komme ich nicht zu einem 
Update. :(


Einige Bemerkungen zum Skript bzw. den Testdaten:

Das Skript ist wirklich noch sehr roh. Es mus in den Ordner mit den 
Testdaten hineinkopiert werden, weil es die Namen der verwendeten Files 
hardcoded enthält.
Es ist einfach ein Skript, dass ich über Idle 2.7.9 aufgerufen und 
gestartet habe, und das entweder Fehlermeldungen schmeisst, wenn was 
nicht klappt, oder aber zum Schluss ein Mathplotfenster mit einer Punkte 
Anordnung öffnet, die aber irgendwie keine (direkte) Beziehung zu den 
plazierten Bauteilen haben, aber ein Abspeichern dieses Bildes erlaubt.

Nach Schliessen des Mathplotfensters beendet es mit "done" in der Idle 
Shell und hat ein neues Platinenfile "BlockTutorial_newCoord.kicad_pcb" 
Ebenfalss wurde ein neues Projektfile "BlockTutorial_newCoord.pro" 
angelegt.

Es benutzt bei den Testdaten ein älteres Board-Format. Ob es mit dem 
aktuellen klappt, weiss ich nicht. Wegen der Hardcodierung ist es auch 
relativ viel Aufwand, das zu testen. Die Test Daten "(kicad_pcb (version 
3) (host pcbnew "(2013-03-31 BZR 4008)-stable")" sind anscheinend nicht 
vom Layernamen Bug betroffen.

Das Skript verwendet (mindestens) die Bibliotheken: re, math, numpy und 
pylab. Ein Shebang ist nicht vorhanden.
https://de.wikipedia.org/wiki/Shebang

Zum Schaltplan ist zu sagen, dass er aus einem Hauptschaltplan mit sechs 
Unterschaltplänen besteht, die aber auf nur zwei verschiedene 
Unterschaldplandateien verweisen.
Die Unterschaltpläne sind im Hauptschaltplan NICHT verbunden.
Es wird überall der gleiche Footprint verwendet.

Als Ansatz sicherlich interessant. Aber wohl noch zu fehlerbehaftet.
Ich bevorzuge immer noch eine separate Liste und dann gehe ich die Liste 
durch und tippe ich in PCBnew "t" und gebe die Referenz ein. ;O)

Ich zippe mal meine Ergebnisse zusammen und hänge sie als 
"ErgebnisseRaefSkript.zip" an. Figure_1.png ist übrigens das, was 
mathplot dabei angelegt hat.

Mit freundlichem Gruß: Bernd Wiebus alias dl1eic
http://www.l02.de

: Bearbeitet durch User
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.