In Eagle ziehe ich es oft vor, einige Kabel selbst zu verlegen (Strom, XTAL, UBS usw.) und den Rest dem Autorouter zu überlassen. Wenn ich mit dem Ergebnis nicht zufrieden bin, route ich selbst noch etwas und lasse den Autorouter einen weiteren Versuch machen.
Mein Problem besteht darin, die Arbeit des Autorouters rückgängig zu machen, ohne meine eigene Arbeit rückgängig zu machen. Der grundlegende Weg, dies zu tun, besteht einfach darin, die autorouterte Version nicht zu speichern und die Karte dann erneut zu laden. Aber wenn ich den Fehler gemacht habe, die autorisierte Version zu speichern (und die Backups zu löschen), möchte ich immer noch in der Lage sein, zur vorautorisierten Version zurückzukehren.
Ein Versuch, dies zu tun, besteht darin, alle autorouted Drähte in einem ULP zu identifizieren und die Befehlszeichenfolge zum RIPUP dieser Segmente zu erstellen. Ich kann veranlassen, dass das ULP die autorisierten Drähte identifiziert, indem ich ihnen beispielsweise eine andere Breite gebe. Der Befehl RIPUP scheint jedoch das ausgewählte Drahtsegment UND die angrenzenden Segmente zu zerreißen. Bisher habe ich keinen Befehl gefunden, der nur das ausgewählte Drahtsegment zerreißt.
Ich habe also zwei Fragen: - Wie kombinieren Sie Hand-Routing und Auto-Routing iterativ (Versuch und Irrtum)? - Gibt es eine Möglichkeit (wahrscheinlich unter Verwendung von ULP und Befehlen), eine Teilmenge von Drahtsegmenten zu zerreißen?
(Update) Ich habe den umgekehrten Ansatz versucht: Sammeln Sie in einem ULP alle Drahtsegmente, die ich behalten möchte, führen Sie eine vollständige Auffrischung durch und stellen Sie dann die Drahtsegmente wieder her (mit dem Befehl ROUTE). Kein Erfolg, die Segmente müssen in einer bestimmten Reihenfolge für die Routenbefehle sein (nicht in der Reihenfolge, in der der ULP sie findet :(), die Via müssen zuerst erstellt werden und einige weitere Probleme.
GRRRR, es muss einen einfachen Weg geben, oder bin ich zu optimistisch?
quelle
Antworten:
Ich hasse es, meine eigene Frage zu beantworten, aber jetzt gehe ich. Ich hoffe, ich bekomme keine Punkte für die Beantwortung, das wäre komisch, nur für die Annahme einer Antwort? (Übrigens habe ich im Element14-Forum keine Antwort erhalten.)
Die Lösung besteht darin, den Befehl DRAW und nicht ROUTE zu verwenden. DRAW platziert ein Kabelsegment genau dort, wo Sie es angegeben haben (im Gegensatz zu ROUTE, bei dem versucht wird, eine Verbindung zu einem nicht gerouteten Airwire herzustellen. ROUTE ist in einem Skript im Wesentlichen nutzlos.). Das nächste Problem ist die Via: Ich kann (oder möchte) nicht zwischen einer manuellen Via und einer autorisierten Via unterscheiden, daher behalte ich alle Via, die zwei (oder mehr) manuelle Kabelsegmente verbinden. Andere Via werden gelöscht.
Was mein letztes Skript macht, ist:
Beachten Sie, dass es wahrscheinlich nicht für mehr als zwei Schichten oder für andere Dinge als Drahtsegmente an der Kupferschicht funktioniert.
IMHO ist das gesamte Konzept der Adler-ULP und der Befehlssprachen problematisch. Ein ULP wird in einer schreibgeschützten Umgebung ausgeführt. Die einzige Möglichkeit, die Schaltung, Karte oder Bibliothek zu beeinflussen, besteht darin, eine Liste von Befehlen zu erstellen. Dies eliminiert einige nützliche Programmiertechniken, aber schlimmer ist, dass die Befehle nicht so konzipiert wurden, dass sie einfach aus einem ULP erstellt werden können. Sie benötigen alle Arten von Transformationen (in diesem Fall: Koordinaten, Formnamen), um von der ULP-Welt in die CMD-Welt zu übersetzen.
(Bearbeiten) Bevor Sie dieses ULP ausführen, stellen Sie die Auswahl "Drahtbiegung" so ein, dass beliebige Winkel zulässig sind. Andernfalls versucht Eagle, die auferstandenen Drähte an die zulässigen Winkel anzupassen, was zu einem blutigen Durcheinander führen kann. IMHO ist dies ein weiteres Beispiel für das Problem mit ULP / SCR.
Dies ist der ULP-Code:
quelle
Wouter. Ich habe deine Frage nicht früher gesehen, weil ich letzte Woche beim Masters war.
Ich gehe damit um, indem ich eine Kopie der Karte unter einem anderen Namen speichere, bevor ich den Autorouter ausführe. Ich nenne es immer SAVE.BRD, das sicher gelöscht werden kann, wenn alles erledigt ist.
Mein Routing-Workflow scheint Ihrem sehr ähnlich zu sein. Ich leite die kritischen Teile manuell weiter, stelle sicher, dass die Netzklassen angemessen eingerichtet sind, und führe dann den Autorouter aus. Dann suche ich nach Problemen, bei denen der Autorouter keine Lösung finden konnte, etwas Unangenehmes tat usw. Ich gehe zurück zur gespeicherten Version (vor der Autoroute) und nehme hoffentlich einige manuelle Änderungen vor, damit der Autorouter keine bekommt in Schwierigkeiten, dann versuchen Sie es erneut. Dies kann je nach Komplexität der Platine 5-10 Mal wiederholt werden. Die ersten paar Autoroute-Durchgänge dienen hauptsächlich dazu, festzustellen, ob es eine Lösung gibt, und grob die Problemstellen zu finden. Dafür verwende ich nicht einmal Optimierungspässe. Die späteren Autorouten sind vollständig optimiert, was für mich normalerweise 8 Durchgänge sind, wobei sich die Kosten über diese Durchgänge ändern, um die gewünschten Eigenschaften zu erhalten.
Obwohl ich vor jedem Autoroute-Durchlauf in SAVE.BRD speichere (und dann die Originaldatei erneut öffne, um damit fortzufahren), versuche ich, das autorouted-Ergebnis erst dann zu speichern, wenn ich mit der ganzen Sache zufrieden bin. Das Speichern des Schnappschusses in SAVE.BRD ist jedes Mal eine Sicherheitssicherung für den Fall, dass meine Finger versehentlich speichern, bevor ich darüber nachdenke.
Es wäre schön, wenn Eagle eine Ripup-Option für den letzten Autoroute-Pass hätte, aber so etwas gibt es nicht.
quelle
Wenn die Datendatei von Eagle dem gleichen Ansatz folgt wie die älteren, mit denen ich gespielt habe (z. B. das alte DOS Autotrax), hat jedes Spursegment eine eigene Linie. Zeilen sind "eigenständig" und können bearbeitet oder gelöscht werden, ohne dass dies Auswirkungen hat. Neuere "bessere" Systeme sind möglicherweise nicht so einfach.
Wenn die Spuren wie oben unabhängig sind und die Spurbreiten eindeutig sind, sollte es [tm] einfach sein, Spursegmente zu identifizieren und die betreffenden Linien zu löschen.
Dim Memory sagt mir, dass ich zu einem bestimmten Zeitpunkt eine Routine geschrieben habe, um Komponentenbeschriftungen zu identifizieren und ihre Größe zu ändern, zu drehen und relativ zum Komponentenkörper zu verschieben. Die Spuridentifikation klingt im Vergleich einfach. Speichern Sie eine Kopie, bevor Sie das Programm ausführen !!! :-).
quelle