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?
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.
(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.
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.
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..
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.
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.
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.
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):
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.
ü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?
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.
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.
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 :-))
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.
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. ;-)