Forum: PC-Programmierung In EAGLE 6.6.0 schreiben auf ein "Data member" eines "UL_WIRE" Objekts zugreifen.


von Guido C. (guidoanalog)


Lesenswert?

Hallo,

ich schreibe gerade ein Eagle (www.cadsoft.de) ULP (User Language 
Programm), das alle aktuell gruppierten "Wires" übernehmen und 
programmintern in die richtige Reihenfolge bringen soll. Das Übernehmen 
der gruppierten "Wires" funktioniert so weit (s.u.). Mein Problem ist, 
dass es mir nicht möglich ist die Richtung, d.h. Start- und Endwert 
einer "Wire" zu vertauschen. Wenn ich z. B. schreibend auf das "Data 
Member" "x1" des Objekts "WiresSelectedList[2]" zugreifen möchte erhalte 
ich einen "Syntax Error". Ist dies in EAGLE prinzipiell nicht möglich? 
Das Auslesen des betreffenden Werts ist interessanterweise problemlos 
möglich.

1
int WiresSelectedNumber = 0;
2
UL_WIRE WiresSelectedList[];
3
4
// Create list of selected wires
5
board(B) {
6
  B.wires(W) {
7
    if (ingroup(W) != 0) {
8
      WiresSelectedList[WiresSelectedNumber] = W; 
9
      WiresSelectedNumber++;
10
    }
11
  }
12
}
13
14
string Message = "";
15
sprintf(Message, "%d", WiresSelectedList[2].x1);
16
dlgMessageBox(Message);
17
18
WiresSelectedList[2].x1 = 3; // <= Syntax Fehler

Mit freundlichen Grüßen
Guido

von Detlef K. (adenin)


Lesenswert?

Guido C. schrieb:
> Ist dies in EAGLE prinzipiell nicht möglich?

EAGLE ist da echt doof!
Nein man kann nicht schreibend direkt auf irgendwelche Boards oder 
Sheets zugreifen.

Du kannst nur versuchen ein ULP zu schreiben, das ein Script schreibt 
und startet, welches wiederum die Befehle an Eagle sendet, um die 
gewünschte Aktion auszuführen, so als würdest Du das von Hand erledigen.

EAGLE ist nicht nur doof, es ist sogar noch döfererer!
Unter ULP gibt nähmlich Befehle zum Auswerten von XML (zur Erinnerung: 
BRD und SCH sind in XML), aber es gibt keine Befehle zum Editieren oder 
Schreiben von XML, sonst könntest Du direkt in der BRD-Datei die beiden 
Werte tauschen.

von Nase (Gast)


Lesenswert?

Detlef Kunz schrieb:
> Du kannst nur versuchen ein ULP zu schreiben, das ein Script schreibt
> und startet, welches wiederum die Befehle an Eagle sendet, um die
> gewünschte Aktion auszuführen, so als würdest Du das von Hand erledigen.
Das ist auch der übliche Weg, den z.B. die mitgelieferten ULPs 
einschlagen.

Detlef Kunz schrieb:
> EAGLE ist nicht nur doof, es ist sogar noch döfererer!
> Unter ULP gibt nähmlich Befehle zum Auswerten von XML (zur Erinnerung:
> BRD und SCH sind in XML), aber es gibt keine Befehle zum Editieren oder
> Schreiben von XML, sonst könntest Du direkt in der BRD-Datei die beiden
> Werte tauschen.
Der Quatsch wurde in weiten Teilen auch bei der Übernahme durch Farnell 
für den DesignLink-Kram eingebaut :-/

von Chris (Gast)


Lesenswert?

Am Ende des ULP sowas:

if (iResult)
  exit(cmd);
else
  exit(0);


cmd ist ein String was das scr enthält. Dies wird dann automatisch
ausgeführt.

von Guido C. (guidoanalog)


Lesenswert?

Hallo,

vielen Dank für Eure Unterstützung. Die Grundsätzliche vorgehensweise 
beim Erstellen von ULPs ist mir klar. Mir ist auch klar, dass ich direkt 
aus einem ULP heraus keine Änderungen an Schaltplan, Board, etc. 
vornehmen kann. Wie bereits erwähnt müssen immer die entsprechenden 
Befehle beim Beenden des ULPs zurückgeben werden. Mein Problem liegt 
woanders.

Ich möchte innerhalb eines ULPs ein Objekt vom Typ "UL_WIRE" definieren 
und auf dessen "Data members" lesend und schreibend zugreifen. 
Vereinfacht ausgedrückt soll das Objekt nicht zur Datenstruktur von 
"Library", "Schaltplan" oder "Board" gehören sonder zu meinem ULP. Ist 
dies möglich?

Mit freundlichen Grüßen
Guido

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.