Hallo Gemeinde,
eigentlich ein Softwarethema aber KiCAD-bezogen.
Ich möchte von Symbolen die Eigenschaften von extern
editieren oder erweitern.
Unter Symboleigenschaften gibt es Felder wie "Datenblatt",
"Beschreibung" etc.
Ich möchte bibliotheksübergreifend Felder ergänzen. z.B.
"Herstellerbezeichnung".
Es gibt eine "API for Add-on Developers", weiterhin
gibt es die "KiCad API Python Bindings" welche auf die API zugreifen.
Wohlgemerkt, des Editieren kann sollte, besser sollte, ohne eine
laufende Runtime erfolgen.
Gibt es da eine Empfehlung für den besten Weg?
Oder gar ein fertiges Tool, gern auch Datenbank-basiert?
Grüße
Runout
Kauf dir ein buch oder folge einen Kurs Kicad damit du weiszt wie es
benutzt werden soll. Wenn du das gut im griff hast, kann man eventuell
mit API benutzung anfangen.
Ich bin noch nicht so lange her angefangen mit KiCad und bin sehr froh
mit (e)book Kicad Like A Pro.
Patrick aus die Niederlande
(property "Description" "Clock Generator and Driver for i8086/88 Microcontrollers, PDIP-18"
20
(at 0 0 0)
21
(effects
22
(font
23
(size 1.27 1.27)
24
)
25
(hide yes)
26
)
27
…
Ich denke, es ist ziemlich offensichtlich, wie man da mit der
Textbearbeitungs-Scriptsprache seines geringsten Misstrauens weitere
property-Einträge hinzufügen kann. Vermutlich werden deine neuen
Einträge ja alle "(at 0 0 0)" und "(hide yes)" haben sollen. Wenn sie
auch im Schaltplan erscheinen sollen, wird es natürlich etwas
schwieriger, eine konfliktfreie Platzierung zu finden.
Hallo,
die Idee von Jörg weitergedacht. Nimm ein Symbol, kopiere es unter neuen
Namen und ändere es mittels Symboleditor wie du es benötigt. Dann kannst
du genau schauen was sich wie verändert hat. Wenn du die Unterschiede
kennst, kannste bspw. mit Python ein Script schreiben, welches dir alle
weiteren Dateien ändert/erweitert.
Hallo,
man kann es noch anders machen, je nach Langlebigkeit der Änderung. Im
Schaltplan alle Symbole markieren, Werkzeuge > Symbolfelder editieren.
Hier kann man dann Felder hinzufügen und löschen usw..
Hallo Veit,
das greift doch bloß im Projekt und nicht in den Bibliotheken.
Das Stichwort wäre hier "SEXPR"
Die Quelle ist hier:
https://docs.kicad.org/doxygen/classSEXPR_1_1SEXPR.html
Wenn man die Kirche im Dorf lassen will, dann mit Python:
https://pypi.org/project/sexpdata/
Ich möchte damit meine eignen Libs anpassen. (1000+ Symbole)
Die KiCAD-Libs lass ich i.d.R. unangetastet.
Grüße
Runout
Hallo,
es ist schon erstaunlich wie man so über die Antworten hinweggehen kann.
Da frage ich mich, wenn du alles weißt wie man es macht, warum fragst du
dann überhaupt? Irgendwie habe ich dafür kein Verständnis.
Parser Möglichkeiten gibt es viele, der Parser alleine hilft nicht.
Hallo,
ich meinte, es ist damit noch lange kein fertiges Script um das
eigentliche Ziel zu erreichen. Da gehören schon noch paar mehr
Überlegungen dazu.
Veit D. schrieb:> ich meinte, es ist damit noch lange kein fertiges Script um das> eigentliche Ziel zu erreichen. Da gehören schon noch paar mehr> Überlegungen dazu.
Klar, aber mit einem bereits vorhandenen Deserializer + Serializer
sollte die Aufgabe gar nicht so anspruchsvoll sein.
Hallo,
die sexpdata Lib benötigt man nicht. Man will ja nach ganz bestimmten
Abschnitten ein paar eigene Zeilen einfügen. Dafür reicht die
Standardsuchmethode für Zeileninhalte. Wenn man eine Symboldatei in
KiCad bearbeitet hat und sich dann die Unterschiede anschaut, dann wird
das nach allen Abschnitten mit
1
(property "Description" ...
sein. Vorausgesetzt man hat nicht schon hier und da paar Einträge
manuell gemacht. Dann hätte man ganz schnell irgendwelchen Müll in
seinen Symbolen. Das heißt die Herausforderung liegt in der Erkennung
von noch nicht vorhandenen Einträgen und von vorhandenen Einträgen. Weil
man wird das Script ja irgendwann wiederholt auf seine Symboldateien
loslassen wollen. Hierfür muss man sich eine Logik ausdenken.
Hallo,
mir ist das zu viel "sollte. Laut meiner Logik würde mir die sexpdata
nicht helfen. Die würde mir ohne weitere Logik mit jedem Aufruf die
eigenen Zeilen erneut einfügen. Genau das was ich nicht möchte. Ich bin
gespannt was rauskommt wenn etwas rauskommt.
Veit D. schrieb:> Laut meiner Logik würde mir die sexpdata nicht helfen. Die würde mir> ohne weitere Logik mit jedem Aufruf die eigenen Zeilen erneut einfügen.
Ja, natürlich musst du schon noch nachschauen, ob das schon da ist, und
es nur anfügen, wenn noch nicht.
Danach mylib.kicad_sym auf Local.kicad_sym kopiert und nochmal laufen
lassen:
1
$ python x.py
2
Private entry already in Local:MAX1551_5
3
Private entry already in Local:MCP1825
Der Deserializer / Serializer garantiert halt zumindest, dass du dich
mit der Struktur nicht verhedderst. Das Ergebnis quetscht er übrigens
knallhart in eine einzelne Textzeile (kann man also nicht zeilenweise
selbst parsen), und KiCad hat kein Problem damit, das dann einzulesen.
Wie geschrieben, wenn dir jemand die S-Expressions all in einer Zeile um
die Ohren haut (was legal ist), dann hast du mit dem zeilenweisen
Einlesen schnell ein Problem.
Verbesserungspotenzial (war nur ein quick hack gestern Abend):
Hallo Jörg,
dein gezeigter kompletter Code funktioniert erstmal. "Erstmal", weil man
die Datei leider ohne Zeilenumbruch nie wieder manuell anschauen
geschweige denn bearbeiten kann.
Die letzte Änderung erzeugt übrigens einen Error den ich nicht beheben
kann. Ich weiß nur das eine Ausnahmeregel verlangt wird. Aber von was
genau?
1
Traceback (most recent call last):
2
File "c:\Users\Worker\Documents\Python\KiCad_SymbolAddIn.py", line 22, in <module>
3
raise f"Expected 'id', got {x[3][0]}"
4
TypeError: exceptions must derive from BaseException
Generell habe ich noch nicht verstanden wie Python bzw. sexpdata die
Abschnitte in den runden Klammern erkennt, um nach dem letzten Abschnitt
und vorm neuen Symbol die eigenen Zeilen einzufügen.
Hallo,
übrigens kommt eine Klammer abhanden. Wenn man sich die Mühe macht die
ersten Zeilen umzubrechen, dann fehlt bei mir die letzte runde
geschlossene Klammer nach 9.0. Bei dir nicht?
Veit D. schrieb:> dein gezeigter kompletter Code funktioniert erstmal. "Erstmal", weil man> die Datei leider ohne Zeilenumbruch nie wieder manuell anschauen> geschweige denn bearbeiten kann.
Hmm, ja, man könnte jetzt für die S-Exp-Lib einen feature request
machen, dass er auch mehrzeilige Ausgabe unterstützt.
> Die letzte Änderung erzeugt übrigens einen Error den ich nicht beheben> kann. Ich weiß nur das eine Ausnahmeregel verlangt wird. Aber von was> genau?>>
1
> Traceback (most recent call last):
2
> File "c:\Users\Worker\Documents\Python\KiCad_SymbolAddIn.py", line 22,
3
> in <module>
4
> raise f"Expected 'id', got {x[3][0]}"
5
> TypeError: exceptions must derive from BaseException
6
>
Huch. Gut, wichtig ist ja erstmal, dass komplett neben der Spur liegende
Dateien nicht versucht werden zu bearbeiten.
1
raise Exception("f"Expected 'id', got {x[3][0]}")
sollte funktionieren.
Dass da eine Klammer zu wenig wäre, hat zumindest weder die Lib noch
Kicad gestört.
Wäre allerdings wohl einen bug report wert.
Hallo an alle Beteiligten.
Für meine Belange macht das Skript von Jörg schon was ich brauche.
Es scheint unterschiedliche "Header" zu geben.
z.B. "[Symbol('generator_version'), '8.0']" ist aktuell
noch in den Information am Anfang.
Die eigentlichen Symbole gehen dann ab Index 4 los.
Veit D. schrieb:> dein gezeigter kompletter Code funktioniert erstmal. "Erstmal", weil man> die Datei leider ohne Zeilenumbruch nie wieder manuell anschauen> geschweige denn bearbeiten kann.
Wenn man die "mylib.kicad_sym" ohne Zeilenumbrüche
dann mit dem KiCAD-Symboleditor öffnet und den "Symbolprüfer" anwirft,
hat der nix zu meckern.
Dann: irgendein Feld editieren (Leerzeichen rein/raus) und abspeichern
und schon sieht die Symboldatei wieder lesbar aus.
Danke nochmal für den Ansatz von Jörg.
(ich wollte mit regulären Ausdrücken loslegen aber es geht
offensichtlich auch einfacher :-))
Grüße
Runout
Thomas T. schrieb:> Danke nochmal für den Ansatz von Jörg.
Bitte sehr, hatte mich ja selbst interessiert. Gerade die Möglichkeit,
auf diese Weise automatisch die eigene Bauteildatenbank zu verlinken,
könnte mich durchaus interessieren.
> Die eigentlichen Symbole gehen dann ab Index 4 los.
Daher ja die Zeile 16 bei mir im Script, die genau ab da bearbeitet.
Man könnte natürlich auch noch eine Ergänzung bei "generator"
hinzufügen. ;-) Aber stellt sich die Frage, ob das überhaupt irgendwo
abfragbar ist.
Hallo,
für eine weitere Nachbearbeitung aller Dateien bin ich nicht so zu
haben. Da bin ich zu sehr Perfektionist. Das sollte dann schon alles
richtig funktionieren. Wir warten einmal ab ob Joshua D. Boyd reagiert.
Dennoch Danke für die Informationen. Klaro. ;-)
Veit D. schrieb:> Da bin ich zu sehr Perfektionist.
Hallo Veit,
gern darfst du noch mit einer kleinen GUI oder einem KiCAD-Plugin
nachlegen.
Mein Wunschkandidat: wxWidgets/wxPython
Bibliotheksübergreifend Properties hinzufügen bzw. entfernen,
automatischer Abgleich von Preis, Lagerbestand von den großen Distris
etc.
Naja, die Rente ist nicht mehr soweit weg, dann bliebe Zeit für solche
Spielereien, theoretisch...
Runout :-)