Forum: Platinen Kicad: Hierarchical Sheets und Annotation


von Holger T. (holgert)


Lesenswert?

Hallo,

seit ein paar Tagen arbeite ich mich in Kicad ein. Auch hier im Forum 
habe ich schon einige Tipps erhalten. Im folgenden komme ich aber nicht 
weiter.

Ausgangsituation (Beispiel): Ich habe 3 Schaltplandateien 
(hierarch_1.sch, root_1.sch, root_2.sch). hierarch_1.sch ist als 
"BuildingBlock" in root_1.sch und root_2.sch lt. 
Beitrag "Re: KiCAD - hierarchical sheets -- Hilfe!" eingebunden. Das 
klappt sehr gut.

Problem: Wähle ich bei Ausführen der Annotation  in root_1 oder root_2 
"Auf alle Schalpläne anwenden", dann werden mir die Indizes auch im 
hierarch_1.sch geändert. Mache ich zuerst die Annotation für 
hierarch_1.sch und danach in root_1 oder root_2 jeweils mit "nur auf den 
gegenwärtigen Schaltplan anwenden" und "bestehende Annotation ersetzen", 
dann wird wieder mit Index Nummer 1 begonnen und spatestens beim ERC 
mittels Fehlermeldung das "Mehrfachelement!" bemängelt.

Was muß ich tun, um einmal im Building Block vergebene Indizes 
beizubehalten und dennoch den ERC zufrieden zu stellen und die Netzliste 
erzeugen zu können?

Danke
-Holger

P.S. Bernd schreibt in 
Beitrag "Re: KiCad: Mehrere Schaltplanseiten -- Rationelles Arbeiten mit "Buildingblocks" u.a.: <<<Wenn Du 
zwei Subschaltpläne anlegst, die auf den gleichen "Building Block" 
verweisen, ist das erstmal kein Problem. Die Annotation ist in der Lage, 
diese beiden (oder auch drei, vier....N?) solcher Schaltpläne 
auseinanderzuhalten.>>>

Meine Frage ist: Was muß ich tun, damit das passiert?

von Bernd W. (berndwiebus) Benutzerseite


Lesenswert?

Hallo Holger.

> Ausgangsituation (Beispiel): Ich habe 3 Schaltplandateien
> (hierarch_1.sch, root_1.sch, root_2.sch). hierarch_1.sch ist als
> "BuildingBlock" in root_1.sch und root_2.sch lt.
> Beitrag "Re: KiCAD - hierarchical sheets -- Hilfe!" eingebunden. Das
> klappt sehr gut.
>

Ja. Aber.....Du bist schon mit der Nase an das Problem gestossen.

> Problem: Wähle ich bei Ausführen der Annotation  in root_1 oder root_2
> "Auf alle Schalpläne anwenden", dann werden mir die Indizes auch im
> hierarch_1.sch geändert. Mache ich zuerst die Annotation für
> hierarch_1.sch und danach in root_1 oder root_2 jeweils mit "nur auf den
> gegenwärtigen Schaltplan anwenden" und "bestehende Annotation ersetzen",
> dann wird wieder mit Index Nummer 1 begonnen und spatestens beim ERC
> mittels Fehlermeldung das "Mehrfachelement!" bemängelt.

Das Problem ist, das hierarch_1.sch ja für beide roots ein und dasselbe 
File ist. Wenn root1 am File rumfummelt, so ist es dann auch für root2 
geändert und umgekehrt.
>
> Was muß ich tun, um einmal im Building Block vergebene Indizes
> beizubehalten und dennoch den ERC zufrieden zu stellen und die Netzliste
> erzeugen zu können?

Abhilfe: File hierarch_1.sch Kopieren und umbenennen, oder Kopie mit 
gleichem Namen in anderem Pfad (find ich persönlich aber gefährlich).
Warum sollte nicht root1 einen  hierarch_1.sch haben und root2 einen 
hierarch_2.sch. Die beiden kommen sich nicht ins Gehege, und auch der 
Mensch findet sich besser zurecht.


Das mit dem beibehalten der Indizes aus dem Building Block ist so 
einfach nicht möglich. Grundsätzlich nicht, weil der gleiche Building 
block ja mehrmals auftreten kann. Gleiche Referenzen/Indizes würde dann 
bedeuten, das mehrere Bauteile mit der gleichen Referenz auftauchen. Das 
ist aber etwas, was man nach kurzem Überlegen lieber vermeiden möchte.

Allerdings kann ich Deinen Wunsch verstehen....was machbar wäre, der 
Übersichtlichkeit halber, wäre, gleiche Bauteile in mehrmaligen 
Verwendungen eines Building Blocks mit einem "Nummernkreissystem" zu 
bezeichnen.
Also z.B. R15 aus einem Building Block würde in der ersten Verwendung 
zum R115 (oder RA15), in der nächsten zum R215 (oder RB15) usw. KiCAD 
unterstützt als Referenz vier alphanumerische Stellen. Solange Du bei 
Zahlen bleibst, geht das nur bis 9999. Unter Zuhilfenahme von Buchstaben 
wird das aber viel mehr......
Leider macht das die Annotation nicht automatisch. Das müsstest Du von 
Hand machen, und dabei noch eine Abstreichliste führen, damit Du Dich 
nicht vertust. Ok, möglicherweise seid Ihr Jungspunde mir da mit Eurem 
Konzentrationsvermögen noch überlegen.
So ein Nummernkreissystem wäre auf meinem KiCAD Wunschzettel zimlich 
weit oben, ist aber garantiert nicht leicht zu implementieren.....und 
hier muss ich die Klappe halten, weil ich selber gar nicht programmieren 
kann.

Was auch nett wäre, wäre Pre- oder Suffixe zur Bauteilreferenz 
einzuführen, abhängig davon, in welcher Verwendung von Buildingblock das
bauteil gerade auftaucht. Ist aber genauso Wunschvorstellung.



> P.S. Bernd schreibt in
> Beitrag "Re: KiCad: Mehrere Schaltplanseiten -- Rationelles Arbeiten mit "Buildingblocks" u.a.: <<<Wenn Du
> zwei Subschaltpläne anlegst, die auf den gleichen "Building Block"
> verweisen, ist das erstmal kein Problem. Die Annotation ist in der Lage,
> diese beiden (oder auch drei, vier....N?) solcher Schaltpläne
> auseinanderzuhalten.>>>

Das bezieht sich auf einen hierarch_1.sch, der im GLEICHEN root.sch 
MEHRMALS verwendet wird. Und es bezieht sich ausdrücklich nur auf die 
Annotation.
Sobalt Du den Schaltplan aber topologisch änderst, hast Du die Änderung 
in allen Verwendungen (Instanzen?) von hierarch_1.sch, weil sie alle auf 
das gleiche File verweisen......
Willst Du mehrere topologische Variationen von hierarch_1.sch im 
gleichen root, must Du  hierarch_1.sch kopieren, umbenennen (oder in 
einen anderen Pfad packen, s.o.)und dann ändern.
Diese Varianten können wiederum selber in mehreren Verwendungen 
(Instanzen?) auftreten. Die automatische Annotation hält diese 
Verwendungen (Instanzen?) durchaus auseinander.

Ich glaube, in der modernen Sprache wird hier vieleicht besser der 
Begriff
"Instanz" verwendet. Sicher bin ich mir aber nicht, weil ich meine, mich 
zu erinnern, das "Instanzen" automatisch eine hierarchische Ordnung 
voraussetzten. Die Verwendungen hier sind aber u.U. durchaus 
gleichwertig Nebeneinander, und nicht unbedingt in unterschiedlichen 
Ebenen, obwohl auch dieses sein kann.

Hast Du Dir das Beispielprojekt mal angesehen?

Mit freundlichem Gruß: Bernd Wiebus alias dl1eic

http://www.dl0dg.de

von Holger T. (holgert)


Lesenswert?

Hallo Bernd,

vielen Dank für deine Ausführungen.

> Abhilfe: File hierarch_1.sch Kopieren und umbenennen, ...
Ja aber genau das möchte ich ja vermeiden. Ich möchte EINEN Building 
Block haben und wenn ich an dem was verändere soll das in allen 
root_x.sch eingearbeitet werden.

Möglicherweise habe ich dabei noch nicht alle Kosequenzen bedacht: Ich 
stelle mir das ähnlich vor, wie der Aufbau von Software-Modulen (oder 
Libraries). Der einmal geschriebene code einer Library (Building Block) 
kann da auch in mehrere Programme (root_x.sch) compiliert werden. Wenn 
ein Fehler in einer Funktion der Library ausgemerzt wird, braucht dies 
nicht in den Sourcen der (vielen) Programme passieren, sondern nur in 
der Library. Neucompilieren der Programme. Fertig.

> Das mit dem beibehalten der Indizes aus dem Building Block ist so
> einfach nicht möglich. Grundsätzlich nicht, weil der gleiche Building
> block ja mehrmals auftreten kann. Gleiche Referenzen/Indizes würde dann
> bedeuten, das mehrere Bauteile mit der gleichen Referenz auftauchen. Das
> ist aber etwas, was man nach kurzem Überlegen lieber vermeiden möchte.
Ja, das trifft doch aber nur zu, wenn ein Building Block mehrmals in 
einem root eingebunden wird. Das war ja nicht mein ursprüngliches 
Problem (s.u. Fallbeispiele)

> Allerdings kann ich Deinen Wunsch verstehen....was machbar wäre, der
> Übersichtlichkeit halber, wäre, gleiche Bauteile in mehrmaligen
> Verwendungen eines Building Blocks mit einem "Nummernkreissystem" zu
> bezeichnen.
> Also z.B. R15 aus einem Building Block würde in der ersten Verwendung
> zum R115 (oder RA15), in der nächsten zum R215 (oder RB15) usw. KiCAD
> unterstützt als Referenz vier alphanumerische Stellen. Solange Du bei
> Zahlen bleibst, geht das nur bis 9999. Unter Zuhilfenahme von Buchstaben
> wird das aber viel mehr......
> Leider macht das die Annotation nicht automatisch. Das müsstest Du von
> Hand machen, und dabei noch eine Abstreichliste führen, damit Du Dich
> nicht vertust. Ok,
Sehr gute Idee. Ich werde in diese Richtung mal weiterexperimentieren. 
Hab' mal angefangen die Indizes der Building Blocks mit "a" beginnen zu 
lassen (z.B. aR1, aR2, für die nächste Art Building Block bR1, bR2, 
usw.)

Grundsätzlich muß man wohl die Fallbeispiele:
  * in einem root wird eine Art Building Block mehrfach verwendet (dann 
klappt das mit aXX, bXX aber auch nicht ohne hierarch_1.sch mehrfach zu 
kopieren.
  * ein Building Block wird in mehreren root_x.sch verwendet (mein 
ursprüngliches Problem)
auseinanderhalten.

> möglicherweise seid Ihr Jungspunde mir da mit Eurem...
Naja, so jung bin ich auchh nicht mehr - aber das ist ein anderes 
Thema...

> Hast Du Dir das Beispielprojekt mal angesehen?
Das im HierarchischeLabel.zip habe ich mir angesehen, geht aber an 
meinem Problem vorbei, wenn ich das richtig verstanden habe.

Viele Grüße
Holger

von Bernd W. (berndwiebus) Benutzerseite


Lesenswert?

Hallo Holger.

> Ich möchte EINEN Building
> Block haben und wenn ich an dem was verändere soll das in allen
> root_x.sch eingearbeitet werden.

Gefährliche Idee. Grundsätzlich ist da zwar was dran, aber in dem Punkte 
finde ich gibt es schon einen gravierenden Unterschied zu Software:
Software ist verhältnismäßig einfach zu Parametrisieren. Du kannst 
Schalter einbauen noch und nöcher, und passend umschalten könnte sich 
das sogar von selber.

Hardware ist wesentlich stärker auf eine konkrete Situation hin 
entwickelt.
Die Sondermaßnahmen, die Du in Schaltung B einbaust, weil sie in einer 
extrem gestörten Umgebung verwendet wird, möchtest Du in der sehr 
ähnlichen Schaltung A jetzt nicht nachträglich einführen, weil die gut 
läuft, in unkritischer Umgebung eingesetzt wird, und die 
Entstörmaßnahmen zum Beispiel Geld und Platz kosten, und z.B. das 
Regelverhalten zum Trägen hin verschieben.

Und das gilt jetzt nur für den Schaltplan. Wenn Du das Layout mit 
unterschiedlichen Technologien (SMD, TH und mixed) nimmst, und jetzt 
noch das Layout in unterschiedliche Formen bringst (mal alles auf einem 
Knubbel, mal an der Kante lang, mal um die Ecke, Einzel-, Doppel- und 
Multilayer), siehst Du, das es nicht so einfach ist.

Die Building Blocks sind als schnelle Arbeitsmöglichkeit für 
Standardschaltungen gedacht. Selbst beim LM317 kommen, wenn man es genau 
nimmt, dutzende zusammen.....
So ein Building Block kann also nur einfache Standardsituationen 
abdecken, und ansonsten ein Gerüst bilden, das im konkreten Fall noch 
angepasst werden muß.

Bei Software ist es leichter, Situationen zu finden, wo ein 
Standardunterprogramm alle oder fast alle Situationen abdecken kann. 
Besonders jetzt, wo Speicherplatz so wohlfeil geworden ist. Wenn Du um 
jedes Byte erbittert und zäh kämpfen müstest, sähe das auch anders aus.

Du kannst natürlich auch in Hardware ein "Netzteil" bauen, das von 1V DC 
einer Taschenlampenbaterie über 250V 50HZ bis 500V 400Hz alles schluckt 
und Dir daraus potentialfreie 12V DC macht.....denkbar und machbar wäre 
das, aber das ganze wäre so aufwändig, und hätte soviele andere 
Nachteile (z.B. Wirkungsgrad) das es keiner macht. In der Software 
findest Du etwas ähnliches aber oft. :-)

>
> Möglicherweise habe ich dabei noch nicht alle Kosequenzen bedacht: Ich
> stelle mir das ähnlich vor, wie der Aufbau von Software-Modulen (oder
> Libraries). Der einmal geschriebene code einer Library (Building Block)
> kann da auch in mehrere Programme (root_x.sch) compiliert werden. Wenn
> ein Fehler in einer Funktion der Library ausgemerzt wird, braucht dies
> nicht in den Sourcen der (vielen) Programme passieren, sondern nur in
> der Library. Neucompilieren der Programme. Fertig.

Der Nachteil der einen Schaltung ist oft der Vorteil der anderen. 
Insofern ist der Fehler nicht unbedingt immer ein "Fehler". Die 
Fehlerlose alles abdeckende Universalschaltung ist meistens nicht 
praktikabel, was somit der Hauptfehler wird. Es ist sehr wahrscheinlich, 
das Du nicht willst, das jede Änderung sofort in allen davon 
abgeleiteten anderen Schaltungen mitumgesetzt wird.

>
>> Das mit dem beibehalten der Indizes aus dem Building Block ist so
>> einfach nicht möglich. Grundsätzlich nicht, weil der gleiche Building
>> block ja mehrmals auftreten kann. Gleiche Referenzen/Indizes würde dann
>> bedeuten, das mehrere Bauteile mit der gleichen Referenz auftauchen. Das
>> ist aber etwas, was man nach kurzem Überlegen lieber vermeiden möchte.
> Ja, das trifft doch aber nur zu, wenn ein Building Block mehrmals in
> einem root eingebunden wird. Das war ja nicht mein ursprüngliches
> Problem (s.u. Fallbeispiele)

Nun, stell Dir vor, Du hast eine Schaltung, z.B. einen Spannungswandler 
aufgebaut als Buildingblock, und die darin enthaltenen Widerstände von 
1-10 Durchnummeriert.
Nun hast Du einen anderen Building Block, z.B. einen AD-Wandler, wo Du 
das
auch machst.
Steckst Du beide in den gleichen root-schaltplan, hast Du schon wider 
die Situation, das zwei Bauteile die gleiche Nummer haben. Und 
vermutlich werden die noch nichteinmals eine ähnliche Funktion 
haben.....
Ok, Du könntest jetzt in Deinem AD-Wandler Block die Widerstände z.b. 
von 11-20 durchnummerieren, dann käme das wieder hin, aber wo sollte das 
enden?
Vor allem, was machst Du, wenn Du jetzt im Spannungswandler zwei 
Widerstände hinzufügen willst? Oder, noch trivialer, zwei 
Spannungswandler aus dem gleichen Buildingblock einfürst...einer von 
1-10, der nächste von 11-20? Ok, Du könntest jetzt von 21-30 
Nummerieren....was ist, wenn Du aber jetzt irgendwo einen "vergessenen" 
Vorverstärker für den AD-Wandler hast, der von 21-30 nummeriert ist?
Du selber könntest für Dich vieleicht mit viel Mühe ein solches System 
konsistent halten, aber wenn Du Building Blocks mit anderen wie z.B. 
Footprints teilen woltest, käme das sehr schnell nicht mehr hin.

Trozdem kommt das Beispiel mit den Software Librarys als solches 
hin.....Du machst Dir beim objektorientierten Programmieren z.B. nur 
wenig Gedanken über die "nummerierung" bzw. Benahmung der 
Unterprogramme. Weil entweder Deine Entwicklungsumgebung das komplett 
übernimmt, und Du nicht mitbekommst, das die nur brutal geradeaus 
"durchnummeriert", oder die Entwicklungsumgebung halbautomatisch Nahmen 
nach bestimten kriterien aus einem Namensraum heraus kreiert.
Die Nummerierung oder Nahmensgebung ist in diesem Falle kein Thema.

Brutal durchnummerieren kann KiCAD auch gut. Du kannst sogar die 
Zählrichtung wählen.
Nur brutal durchnummerieren langt Dir jetzt auf einmal nicht......

Dem "Namensraum" würde der Idee mit Nummernkreis bzw. Pre- oder Suffix 
entsprechen.


> Sehr gute Idee. Ich werde in diese Richtung mal weiterexperimentieren.
> Hab' mal angefangen die Indizes der Building Blocks mit "a" beginnen zu
> lassen (z.B. aR1, aR2, für die nächste Art Building Block bR1, bR2,
> usw.)
>

Naja. Auf diese Weise schafst Du gut Systematik, "verbrauchst" aber 
viele Nummern. Weil wenn Du in einem Block bestimmte Nummern nicht 
brauchst, kannst Du sie nicht in einem anderen verwenden, ohne die 
Systematik zu verletzten. Auf die Tour kannst du höllisch Nummern 
"verfeuern". Dann wird vierstellig auch knapp.

> Grundsätzlich muß man wohl die Fallbeispiele:
>   * in einem root wird eine Art Building Block mehrfach verwendet (dann
> klappt das mit aXX, bXX aber auch nicht ohne hierarch_1.sch mehrfach zu
> kopieren.
>   * ein Building Block wird in mehreren root_x.sch verwendet (mein
> ursprüngliches Problem)
> auseinanderhalten.
>

Also ich sehe die Fälle so: Wird einmal oder mehrmals auf das gleiche 
hierarch_1.sch zugegriffen? Wird ein Wert oder eine Referenz geändert?

Es ist ein Unterschied, ob in dem mehrfach verwendeten Block die 
REFERENZ oder der WERT des Bauteils geändert wird. Die Referenz kann 
KiCAD auseinanderhalten, den Wert nicht.
Darum kannst Du wohl in zwei Subschaltplänen die auf ein und das selbe
hierarch_1.sch zugreifen, den einen Widerstand RA1 nennen und den 
Korespondierenden aus dem anderen Subschaltplan RB1, ohne das KiCAD 
Probleme macht, aber Du kannst NICHT dem einen Widerstand jetzt 10k 
zuweisen, und dem anderen 4k7. Das geht NICHT, weil es in hierarch_1.sch 
eingetragen wird, und somit immer für beide gilt.

Unterschiedliche Footprints, z.B. einmal TH und einmal SMD, oder einmal 
TH liegend und einmal TH stehend, geht aus dem gleichen Grund nicht.
In Punkto Footprints kannst Du aber leichter Abstriche machen, weil Du 
die Zuweisung in CVpcb noch nachträglich ändern kannst. Und in der 
Netzliste kannst Du jedem individuellen Bauteil einen individuellen 
Footprint zuweisen.

Wenn Du also in anderen Feldern ausser der Referenz Unterschiede haben 
willst, MUSST Du hierarch.sch kopieren.


>> Hast Du Dir das Beispielprojekt mal angesehen?
> Das im HierarchischeLabel.zip habe ich mir angesehen, geht aber an
> meinem Problem vorbei, wenn ich das richtig verstanden habe.

Stimmt. Trozdem denke ich, könnte Dir ein detailiertes Verständnis dafür 
auch bei Deinem Fall weiterhelfen. Wie gesagt, wichtig ist, die Referenz 
kann sich KiCAD selber im root.sch merken, aber der Wert wird dem 
hierarch.sch entnommen. Also ist zu Überlegen: Wert Änderung? Wieviele 
und wer greift darauf zu?

Mit freundlichem Gruß: Bernd Wiebus alias dl1eic

http://www.dl0dg.de

von Bernd W. (berndwiebus) Benutzerseite


Lesenswert?

Nachtrag:

Nachdem ich darüber geschlafen habe, ist mir aufgefallen, das ich einen 
Fehler gemacht habe, weil ich einfach "Referenz" und "Annotation" 
durcheinandergeworfen und gleichgesetzt habe.

Die Referenz ist natürlich wie der Wert im hierarch.sch festgelegt.
Aber die Annotation NICHT. So schafft es KiCAD, auch in hierarchischen 
Subschaltplänen, die mehrfach auftreten, die Durchnummerierung 
konsistent zu halten.

Hinweis: Eine Bauteilbezeichnung (z.B. "R12") setzt sich zusammen aus 
der Referenz (im Beispiel das "R") und einer Annotation (im Beispiel die 
"12").
Die Annotation ist also ein reiner Zählwert. Die Referenz wird als Teil 
des Symbols fest angelegt, kann aber nachträglich Editiert werden.

Auch die Annotation kann von Hand geändert werden.

Mit freundlichem Gruß: Bernd Wiebus alias dl1eic

http://www.dl0dg.de

von nuess0r (Gast)


Lesenswert?

den wunsch solche mehrfach instanzierungen zu machen in einem schema 
kenne ich gut. wäre ja so schön einen block einmal zu zeichnen und dann 
mehrfach zu benutzen. software kanns vhdl kanns wieso nicht hier?

klar das dies nicht einfach ist zu implementieren, mit den vielen 
abhängigkeiten die damit entstehen. aber keine bange, ich habe da meine 
erfahrungen mit altium designer 2004 und 2006 und dem versuch vom 
mehrfach instanzierung. am ende hatte ich wieder zwei seperate 
subsheets...

von Bernd W. (berndwiebus) Benutzerseite


Lesenswert?

Hallo nuess0r.

> den wunsch solche mehrfach instanzierungen zu machen in einem schema
> kenne ich gut. wäre ja so schön einen block einmal zu zeichnen und dann
> mehrfach zu benutzen. software kanns vhdl kanns wieso nicht hier?
>

Das mit den Instanzen mehrfach verwenden klappt in KiCAD recht gut. Aber 
Instanz heißt immer eine "Instanz von einem Original". Wenn ich jetzt 
Änderungen an einer einzelnen Instanz haben möchte, ist das ja in dem 
Sinne keine Instanz mehr.....ich brauche eben dafür ein neues 
"Original".
Das ist erstmal ein grundsätzliches logisches Problem.

In Software Librarys wird sowas glaube ich oft durch eine zusätzliche 
Parametrisierung gemacht....?

Das mit dem Durchnummerieren ist ein anderes Problem, das mit dem obigen 
insofern verknüpft ist, als das die Idee eines Workarounds war, die 
Unterscheidung von Bauteilen in verschiedenen Subsheets über die 
Referenz zu machen.....
Bei der Referenz ergibt sich dann das Problem mit den Instanzen.....

> ich habe da meine
> erfahrungen mit altium designer 2004 und 2006 und dem versuch vom
> mehrfach instanzierung. am ende hatte ich wieder zwei seperate
> subsheets...

Auch, wenn Du keine Unterschiede zwischen den Instanzen hattest?
Denn das würde ich dann schon erstaunlich finden.

Mit freundlichem Gruß: Bernd Wiebus alias dl1eic

http://www.dl0dg.de

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.