Eagle: Vorschlag zu neuem Vorgehen beim Ermitteln der Leitungslänge

OP #6201082
Lesenswert?

Seit langem möchte auch ich wieder mal was zum Forum beitragen, meist 
lese ich ja nur...

Es geht um die Ermittlung der Leitungslängen im Eagle-Router (4.x, 5.x). 
Da gibt es ja die Skripte /length-freq-ri.ulp/ und /length.ulp/, die es 
ermöglichen, die Leitungslängen aller Signale im Layout anzuzeigen. Wenn 
man aber intensiv Leitungspaare verlegt oder zeitkritisch routet, wird 
es extrem nervig, immer das Fenster aufzurufen (auch wenn das direkt auf 
eine Funktionstaste gelegt wird), das Signal rauszusuchen (das wird 
unangenehm und zeitaufwendig, wenn es mehrere Hundert sind!), sich die 
Länge zu merken und das Fenster wieder zuzuklickern.

Weil es mich so extrem genervt hat, habe ich mal nach Möglichkeiten bei 
der Skriptsprache gesucht, aber da scheint es keine Möglichkeiten zu 
geben. Sämtliche Ausgaben sind modal, eine Art Callback bei 
Nutzerinteraktion gibt es auch nicht. Vielleicht habe ich ja da auch was 
übersehen... Letztlich kam mir aber eine bestechend einfache Idee: Bei 
z.B. F5 (so schön ähnlich zu Aktualisieren ;-) wird ein Skript 
*writelen.ulp* aufgerufen, welches die Signale und ihre Länge in eine 
externe Datei schreibt. Ein anderes Programm *showlengths.exe* mit einer 
schicken Tabelle "lauert" nun auf Änderungen im Inhalt und stellt sie 
dar. In /showlengths.exe/ kann man im linken Teil nun auch die wenigen 
Signale auswählen, die man gerade routet, und dann rechts auch noch (in 
der Tabelle) farbig markieren, das erhöht etwas die Übersicht.

Das Programm /showlengths.exe/ habe ich selbst geschrieben (es ist 
natürlich virenfrei), und es darf frei verwendet werden (siehe auch 
"about" im Programm). Es braucht nicht installiert, sondern einfach nur 
parallel zu /eagle.exe/ gestartet zu werden. Der Name der von Eagle 
dafür benutzten Datei steht in /writelen.ulp/, bei /showlengths.exe/ 
lädt man gleich am Anfang diese Datei. Im Prinzip kann es dann dauerhaft 
laufen, auch für unterschiedliche Boards. /writelen.ulp/ stammt von 
/lengths.ulp/ ab und ist nur vereinfacht. Alles ganz simpel eigentlich.

In der Hoffnung, dass ich dafür nicht geblamt werde und der eine oder 
andere etwas Nutzen aus dem Programm ziehen kann und/oder vielleicht 
sogar Verbesserungsvorschläge macht, freue ich mich auf Rückmeldungen. 
Wenn nicht, ist auch ok. Mir hat das Programm jedenfalls schon sehr 
geholfen.

(PS: In der Vorschau werden meine Formatierungen nicht richtig 
angezeigt, was mache ich falsch? Schade)
Angehängte Dateien:
Gast #6201198
Lesenswert?

Hi Schmitti,

nett! (im positivsten aller Sinne!).

Allerdings wäre es toll, wenn
1
string  destFile = "/Dokumente und Einstellungen/nutzer/Eigene Dateien/elec/eagle/projects/lengths.txt";

nicht auf (Dokumente und Einstellungen...) [benutzt das wirklich 
jemand absichtlich?] sondern auf den WorkFolder des gerade geöffneten 
BRDs zeigen würde. Das geht doch bestimmt irgendwie...

Und das "UI": funktioniert tadellos und Virenfrei ;)
Wäre natürlich toll, wenn da auch die Delta_in_% Angabe für die 
klassischen _N/_P Signalnamen dabei wäre... Da schaue ich meist drauf...

Vielen Dank für die Arbeit,
Stephan
OP #6201223
Lesenswert?

Danke für die Rückmeldung!
Ich hatte mal auf die Schnelle im ULP-Manual nach solchen vorgegebenen 
Variablen/Konstanten gesucht, aber nicht gefunden. Daher die Bemerkung, 
wo sich der String für die Datei zum Ändern befindet. Wer das passende 
findet, kann es ja einsetzen. Schlimmer wäre sowas im Binary ;-) ...

Das mit der automatischen Namenszuordnung _P/_N oder auch +/- und der 
Anzige der Differenz wäre noch interessant, stimmt. Wenn das noch mehr 
Resonanz findet, würde ich das noch machen.
Gast #6201309
Lesenswert?

Hi Schmitti,

//string destFile
gaanz oben auskommentieren.

BOARD context holen;

b.name und ".outlen" (z.B.) dranhängen.

filesetext() macht den Rest.

1
sort( n, index, Signal);
2

3
//20200330,sd-START
4
string destFile;
5
if (board) board(B) {
6
  destFile = filesetext(B.name, ".outlen");
7
  dlgMessageBox("destFile:", destFile);
8
}  
9
//20200330,sd-END
10

11
output( destFile, "wt") {


vg, Stephan
OP #6201337
Lesenswert?

stimmt, so kann man es machen.
Allerdings erzeugt man so zu jedem Board ein *.outlen-File, was man 
eigentlich nicht unbedingt braucht. Mit meinem bisherigen Verfahren wäre 
ja auch ein Temp-File gleichzusetzen, welches ja als File nicht 
interessiert, sondern nur den Datentransfer bereitstellt. Hätte ich 
eigentlich besser gleich so machen sollen, dann wäre vielleicht mein 
"C:\Dokumente und ..." gar nicht negativ aufgefallen...  Dennoch ist das 
alles ganz leicht im ULP-Skript zu ändern, und zwar ganz simpel, so dass 
ich es lieber dem Anwender überlasse.
Trotzdem vielen Dank für die Idee!
Gast #6201760
Lesenswert?

Lass dir von jedem 10Cent überweisen.
2000 rum habe ich mal eine Delphi_Anwendung geschrieben, die alle 10 
Minuten (einstellbar) das komplette EagleProjekt gesichert hat. ( Über 
Timergesteuerte Windows-Messages "Menu->Save all". Das gab es bei der 
damals aktuellen Version 3.2(?) noch nicht. Später kam es ja dann hinzu.
Ist, glaube ich, jetzt nicht mehr downloadbar.
Wurde aber zigtausende Male heruntergeladen ;)
Danke für deine Mühe!
Gruß
OP #6201783
Lesenswert?

Also in einer Zeile (10.) eine Zeichenkette "/Dokumente und ..." in eine 
andere Pfadangabe zu ändern, ist ja noch nicht "ULP Schreiben". Es ist 
nicht mehr, dazu muss man sich auch nicht einlesen (höchstens in die 
Bedienung eines Texteditors ;-).

Ich tendiere nach einiger Überlegung sowieso eher dazu, dort besser 
"c:\temp\lengths.txt" oder was ähnliches reinzuschreiben, dann gibt es 
weder Probleme noch "merkwürdige" Pfade. Wer die Längen als Datei 
braucht, ist mit 'length-freq-ri.ulp' bzw. 'length.ulp' ja schon gut 
bedient.

Schön wäre eher noch eine Pipe gewesen, aber das geht wohl nicht...

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren