mikrocontroller.net

Forum: Platinen Eagle-Skript/Programm zu Bauteilplatzierung


Autor: Baric (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen,
ich habe Probleme mit dem Forward/Back annotation in Eagle V9.3.
(mein Fehler da die BRD-Datei nicht geöffnet war und ich einige 
Änderungen an Schaltplan durchgeführt habe :-(

Egal was ich gemacht habe, klaptt es nicht mehr die Aktivierung der 
Forward/Back Annotation zu setzen. Für die Bauteilplatzierung habe viel 
Zeit inverstiert. Um diese nicht zu verlieren und um die 
Forward/Back-Annotation Problem zu umgehen, möchte ich das Board von 
Anfang an beginnen. Aber ich möchte auf keinen Fall für die 
Bauteilplatzierung wieder viel Zeit verlieren. Deswegen frage ich ob 
jemand einen Skript/Program kennt, welches die Bauteilplatzierung  aus 
der bestehenden *.BRD Datei liest und anschliessend diese 
Bauteilplatzierung wieder reinpatcht in der neuen BRD-Datei 
(schliesslich ist die Datei eine XML-Datei ist). Oder hat jemand einen 
anderen Vorschlag.
Vielen Dank für eure Hilfe.

: Verschoben durch Moderator
Autor: Bauform B. (bauformb)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kann das überhaupt funktionieren? Woher soll das Script wissen, welches 
Package zu welchem Symbol gehört? Normal haben beide den gleichen Name, 
aber jetzt ist z.B. IC1 im Schaltbild ein NE555 und IC1 im Board ist ein 
LM324.

Kann man nicht die Unterschiede zwischen brd und sch interaktiv Schritt 
für Schritt berichtigen? Für den Zweck gibt Eagle doch eine Liste aus, 
magst du die mal posten? Oder gleich ein zip vom Projekt?

Früher hat Eagle ca. 10 Backup-Kopien von brd und sch anlegt...

Autor: Chris (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Lass den ERC laufen, dann sollte dir EAGLE sagen, was ihm nicht passt. 
Glattziehen, bis er nicht mehr meckert und das nächste Mal den fetten 
Balken (wenn es ihn noch gibt) nicht ignorieren.

Autor: Julian B. (julinho)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bei älteren Eagle Versionen konnte das die mount.ulp.

Autor: Bauform B. (bauformb)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Naja, das mount.ulp gibt die (theoretischen) Schwerpunkt-Koordinaten der 
Bauteile aus, mehr nicht. Der Schwerpunkt ist nicht unbedingt der 
Bauteil-Nullpunkt aus der Bibliothek. Für eine ähnliche Liste gibt es 
auch einen Export-Menü-Punkt. Und das Problem, welches Bauteil ist 
welches, bleibt.

Autor: Nikolaus S. (Firma: Golden Delicious Computers) (hns)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Seit EAGLE 6 ist das Board-File einfach XML. Daher geht

grep '<element' projekt.brd

um alle Koordinaten und Namen der Bauteile herauszuziehen. Aber es 
fehlen Attribute und das </element>. Damit könnte man aber schon mal ein 
Script schreiben das die <element...> in ein ULP mit passenden 
MOVE-Befehlen umwandelt.

Folgendes müßte ohne Script gehen (habe es aber noch nie gemacht):

1. altes .brd umbenennen (und irgendwo sichern!)
2. .sch öffnen
3. neues .brd anlegen
4. EAGLE schließen
5. altes und neues .brd in Texteditor öffnen
6. Bereich zwischen <elements> und </elements> vom alten ins neue 
kopieren (die neuen elements dabei löschen)
7. in EAGLE wieder öffnen

Problematisch ist sicher wenn die Bauteilnamen nicht mehr konsistent 
sind oder welche fehlen. Dann kopiert man nur die Fehler aus dem alten 
ins neue Board statt sie zu beheben. Das könnte man mit Handarbeit im 
XML aber auch beheben.

: Bearbeitet durch User
Autor: HyperMario (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Baric schrieb:
> Oder hat jemand einen
> anderen Vorschlag.

Ein ulp das ein script erzeugt ist durchaus machbar, aber eher sinnlos.
Die Konsistenz ist, wie bereits weiter oben geschrieben, einfacher über 
den Erc wieder herzustellen.

Muss man halt öfter durchlaufen lassen.

Alternativ kannst d es noch über netlist export/import versuchen.

Autor: Frank L. (Firma: Flk Consulting UG) (flk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Zusammen,

warum so kompliziert?

Der einfachste Weg ist, das Verzeichnis sichern und anschließend den 
aktuellen Schaltplan löschen, dann die Backupdatei wieder herstellen und 
das solange, bis Board und Schaltplan wieder übereinstimmen.

Hat zumindest bei mir immer funktioniert.

Gruß
Frank

Autor: Baric (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für die Antworten und Vorschläge.
Mit Export Netlist stehen die Bauteilpositionen zur Verfügung.
Ich muss jetzt gucken wie ich einen Skript ULP bastele der die Bauteile
platziert. Mit unzähligen "move Bauteil Bauteilposition (x, y)".
Es wäre geschickter wenn Eagle selbst von Hause aus dies machen konnte 
:-(
Vielen Dank.
Gruß

Autor: HyperMario (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Baric schrieb:
> Danke für die Antworten und Vorschläge.
> Mit Export Netlist stehen die Bauteilpositionen zur Verfügung.
> Ich muss jetzt gucken wie ich einen Skript ULP bastele der die Bauteile
> platziert.

Wenn in export netlist alles drin ist was du brauchst dann modifiziere 
das ulp so das es dein script produziert. Da muss nur der printf Befehl 
angepasst werden.

>> Mit unzähligen "move Bauteil Bauteilposition (x, y)".
Du hast doch nur so viele move Befehle wie Bauteile vorhanden sind

Das script:
grid mm;
move IC1 (C10 5);
grid last;

schiebt IC1 auf die X=10 Y=5 Koordinate (in mm)



> Es wäre geschickter wenn Eagle selbst von Hause aus dies machen konnte

Wenn die CAD Programme alles könnten was Nutzer so an Wünschen haben 
würden Sie, fürchte ich, auch eine Rechnung schreiben ;-).

Autor: Baric (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@HyperMario
Danke! ganz genau. so habe ich vor.
unzählige....: da habe ich übertrieben. Klar um die 100 Bauteile
Gruß

Autor: HyperMario (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Give it a try ;-)

board(B)
{
  B.elements(E)
  {
     output("C:/temp/moveparts.scr", "at")
     {
       printf("MOVE %s (%f %f);\n", E.name, u2mm(E.x), u2mm(E.y+1));
     }
  }
}

Autor: HyperMario (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
HyperMario schrieb:
> printf("MOVE %s (%f %f);\n", E.name, u2mm(E.x), u2mm(E.y+1));

Korrektur:

printf("MOVE %s (%f %f);\n", E.name, u2mm(E.x), u2mm(E.y));

Autor: W.S. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Baric schrieb:
> Mit Export Netlist stehen die Bauteilpositionen zur Verfügung.
> Ich muss jetzt gucken wie ich einen Skript ULP bastele der die Bauteile
> platziert.

_WAAAS?_ Das meinst du sicherlich nicht im Ernst.

Also, wenn du Probleme mit der Inkonsistenz (nee, nicht Inkontinenz) 
hast, dann laß den ERC im Schematic laufen und guck dir an, was genau 
Eagle da zu meckern hat.

Genau DAS bringst du dann in Ordnung.

Normalerweise ist das kein großer Akt, verschiedene Namen und Values 
lassen sich sehr einfach korrigieren, für hinzugekommene oder gelöschte 
Bauteile muß man eben diese Bauteile entsprechend erstmal per ADD 
hinzufügen und dann sehen, was man tatsächlich braucht.

Also stelle dich nicht so seltsam an, Eagle sagt dir ja explizit, was 
ihm nicht schmeckt.

W.S.

Autor: Baric (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke Hypermario.

ich möchte auch die Rotation und die Spiegelung mitnehmen. Hab folgendes 
probiert aber leider von Mirror ist nichts zu sehen. Was ist da falsch!
Danke.

board(B)
{
  B.elements(E)
  {
     output("D:/temp/moveparts.scr", "at")
     {
       printf("MOVE %s (%f %f);\n", E.name, u2mm(E.x), u2mm(E.y));
     printf("ROTATE %s %f ;\n", E.name, E.angle);
     if (E.mirror)
     {
       printf("MIRROR %s ;\n", E.name);
           }
     }
  }
}

Autor: HyperMario (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Baric schrieb:
> Danke Hypermario.

Gerne.

>
> ich möchte auch die Rotation und die Spiegelung mitnehmen. Hab folgendes
> probiert aber leider von Mirror ist nichts zu sehen. Was ist da falsch!
> Danke.

Würde ich in einzelne scripte aufteilen:

board(B)
{
  output("C:/temp/rotateparts.scr", "wt")
  {
     printf("grid mm;\n");
  }

  B.elements(E)
  {
     output("C:/temp/rotateparts.scr", "at")
     {
       printf("ROTATE =R%f '%s' ;\n", E.angle, E.name );
     }
  }
}

Autor: HyperMario (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
und

board(B)
{
  output("C:/temp/mirrorparts.scr", "wt")
  {
     printf("grid mm;\n");
  }

  B.elements(E)
  {
     output("C:/temp/mirrorparts.scr", "at")
     {
       if (E.mirror)
     printf("MIRROR '%s' ;\n",  E.name );
     }
  }
}

Autor: Baric (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Super! Das hat geklappt.

Autor: Baric (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,
ich verwende den Autorouter um Zeit zu sparen.
Frage:
was heisst in Eagle die Meldung:
Layer 2 (Route 2) verwendet, aber nicht aktiviert!
Darin befindliche Objekte könnten mit vom Autorouter erzeugten
Durchkontaktierungen kollidieren.
Danke
Gruß

Autor: HyperMario (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Nikolaus S. (Firma: Golden Delicious Computers) (hns)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Baric schrieb:
> Hi,
> ich verwende den Autorouter um Zeit zu sparen.

Mache ich auch oft.

Entgegen der landläufigen Meinung halte ich den AR von EAGLE 7.7.0 für 
ziemlich gut (vor allem der Topo-Router). Man muß nur wissen wann und 
wie man ihn einsetzt. Er hilft vor allem in einem existiertenden Layout 
wenn man Bauteile ein bischen verschiebt und alle betroffenen Leitungen 
wieder sauber verbinden muß.

> Frage:
> was heisst in Eagle die Meldung:
> Layer 2 (Route 2) verwendet, aber nicht aktiviert!
> Darin befindliche Objekte könnten mit vom Autorouter erzeugten
> Durchkontaktierungen kollidieren.

Der Layer-Stack in den Design-Rules und die Auswahl der AR-Layer passen 
nicht zusammen.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.