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


von M. S. (schmitti)


Angehängte Dateien:

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)

von Stephan (Gast)


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

von M. S. (schmitti)


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.

von Stephan (Gast)


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

von M. S. (schmitti)


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!

von Jörn P. (jonnyp)


Lesenswert?

M. S. schrieb:
> so dass
> ich es lieber dem Anwender überlasse.

Die Idee ist gut, deine Meinung imho nicht.
Nicht jeder, so wie ich, ist gut im ULP schreiben. Warum berücksichst du 
nicht die Vorschläge und schreibst das ULP dann fertig. Das wäre dann 
eine Sache.
Du bist jetzt drin, andere müssen sich da erst reinlesen.

von schmitti (Gast)


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ß

von schmitti (Gast)


Lesenswert?

Version 3.55 war es gewesen.
Gibt es tatsächlich noch; ich musste grad' schmunzeln ;)
http://www.n2dvm.com/files/Eagle/ftp.cadsoft.de/eagle/misc/
autosave.zip

von M. S. (schmitti)


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...

von M. S. (schmitti)


Lesenswert?

schmitti schrieb:

> autosave.zip

Wie hast Du denn das von Windows aus gelöst? Es wäre ja auch für meine 
(und sicher auch noch andere) Anwendung interessant, eagle in bestimmten 
Abständen zu animieren, etwas auszuführen. Ich finde dazu leider gar 
nichts. Sourcen sind ja in deinem autosave.zip auch nicht drin.
Danke schonmal

von Toby P. (Gast)


Lesenswert?

M. S. schrieb:
> Wie hast Du denn das von Windows aus gelöst? Es wäre ja auch für meine
> (und sicher auch noch andere) Anwendung interessant,

So was mache ich mit Autohotkey

von M. S. (schmitti)


Lesenswert?

verstehe gar nicht, wie mir so ein tolles Programm durch die Lappen 
gehen konnte ;-)
Leider finde ich die timergesteuerte Funktionalität nicht. Das wäre ja, 
was man für autosave und meine Anwendung braucht. Hab ichs übersehen?

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
Noch kein Account? Hier anmelden.