hallo zusammen, ich erstelle eine allgemeingültige Attribute Liste füe meine Bauteile in den Bibliotheken. Dabei verwende ich die ULP set-all-devices-attribute.ulp Leider fehlt in dieser ULP die Möglichkeit ein Attribut als "constant "bzw. "variable" zu setzen. Kann mir jemand helfen, diesen teil zu integrieren? Ich habe mir die EAGLE ULP-Programmierung rudimentär angeeignet, aber das schaffe ich leider nicht. Gerne kann ich - wenn nötig - die ulp als Code hochladen, aber ich denke, man kann das Original von EAGLE auf dem Rechner mit einem Editor anschauen. Diese ULP wurde von alf@cadsoft erstellt.
:
Verschoben durch User
Balthasar schrieb: > Leider fehlt in dieser ULP die Möglichkeit ein Attribut als "constant > "bzw. "variable" zu setzen. Im Attribut kannst du constant auf 0 setzen > Ich habe mir die EAGLE ULP-Programmierung rudimentär angeeignet, aber > das schaffe ich leider nicht. Die Sprache ist recht einfach wenn man das Prinzip versteht (und C Syntax schreiben kann) Alles ist objektorientiert. Das bedeutet nichts weiter als das ein Objekt (z.B. Schaltplan, Board oder Lib) Eigenschaften und Mitglieder hat. Die Eigenschaften nennen sich "data members" und die Mitglieder "loop members". Loop members deshalb weil sie innerhalb des ulp programms alle einmal durchlaufen werden. Diese loop members haben dann wieder Eigenschaften und auch loop members die dann auch durchlaufen werden. Klingt kompliziert ist es aber nicht. Das ist nur eine Schleife in einer Schleife, mehr nicht. Die Schleife wird über eine C Funktion abgebildet. Deshalb sind da Funktionen in Funktionen in Funktionen (nennt man glaub ich rekursiv). Im inneren der Schleife tauchen dann alle members(z.B. Gatter Technologien Attribute etc.) einmal auf und du kannst Sie abfragen und ändern. Das sieht dann in deinem Fall etwa so aus:
1 | library(L) { // die lib, muss natürlich vorher geladen werden |
2 | L.devicesets(S) { // Ein Bauteileset* z.B eines mit Gattern |
3 | S.devices(D) { // Das eigentliche Bauteil*. Das Attribut ist |
4 | // ein loop member da es ja mehrere geben kann
|
5 | D.attributes(A){ // hier sind jetzt die Atrribute* |
6 | constant = 0; // das Kommando um das Attribut variabel zu machen |
7 | }
|
8 | }
|
9 | }
|
das ist jetzt nur das Prinzip aus m Kopf, Hoffe aber es ist klar was gemeint ist. Die Hilfe (F1) ist übrigens ziemlich gut wenn man erstmal verstanden hat wie das ganze gemeint ist. Damit man die ULP Teile in der Hilfe identifizieren kann fangen Sie da alle mit ul_ an z.B. UL_LIBRARY eben für eine lib. Hope this helps * Das ist in Mehrzahl geschrieben weil halt alle loop_members durchlaufen werden. Da kann man dann auch mit if (Bedingung) selektieren oder drucken oder sonstwas mit machen.
1 | D.attributes(A){ // hier sind jetzt die Atrribute* |
2 | A.constant = 0; // das Kommando um das Attribut variabel zu |
3 | }
|
Sollte natürlich A.constant heißen da Eigenschaft (constant) des Objektes (Attribut)
Vielen Dank für eure Tipps. C ist mir geläufig, jedoch der objektorientierte Ansatz ist mir fremd. Die Hilfe benutze ich natürlich auch, die hat mir schon sehr geholfen. Ich habe es jetzt aber geschafft - war mühsam, erst mal durchzublicken. Auf jeden fall habe ich die Stelle gefunden, wo der Eintrag hin muss. Danke noch mal Hier noch einmal zusammengefasst, falls jemand das Gleiche Problem hat: - Erst mal habe ich das Script um die Option constant bzw variable erweitert.
1 | void readScript(void) { |
2 | cntl = fileread(Lines, ScriptFile); |
3 | for (int n = 0; n < cntl; n++) { |
4 | if (strstr(Lines[n], "ATTRIBUTE") == 0) { |
5 | string a[]; |
6 | int cnta = strsplit(a, Lines[n], ' '); |
7 | Attribut[cntAtt] = a[1]; |
8 | >>> AttOption[cntAtt] = a[2]; <<< |
9 | AttValue[cntAtt] = a[3]; |
10 | for (int an = 4; an < cnta; an++) { // complete parameter with space |
11 | AttValue[cntAtt] += " "+a[an]; |
12 | }
|
13 | cntAtt++; |
14 | }
|
15 | }
|
16 | return; |
17 | }
|
- Anschließend muss dieser Teil (Option constant bzw. variable) eingefügt werden, dass passiert hier:
1 | if (library) { |
2 | library(L) { |
3 | [...]
|
4 | for (n = 0; n < cntAtt; n ++) { |
5 | if (setAtt[n] || AttValue[n] == "DELETE") { |
6 | sprintf(s, "ATTRIBUTE %s %s %s;\n", Attribut[n], >>>AttOption[n]<<<, AttValue[n]); |
7 | cmd+=s; |
8 | s=""; |
9 | }
|
10 | }
|
11 | [...]
|
12 | }
|
13 | }
|
Die eingefügte Stellen habe ich mit >>> und <<< markiert, die müssen im Code natürlich entfernt werden.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.