Die EAGLE-Datenstrukturen werden in XML-Dateien gespeichert:
Diese Datendateien enthalten eine Hierarchie von Objekten. In einem User-Language-Programm können Sie über die entsprechenden Builtin-Zugriffsanweisungen auf diese Hierarchien zugreifen:
library(L) { ... }
schematic(S) { ... }
board(B) { ... }Diese Zugriffsanweisungen konfigurieren einen Kontext, in dem Sie auf alle Objekte in der Bibliothek, im Stromlaufplan oder auf der Leiterplatte zugreifen können.
Auf die Eigenschaften dieser Objekte kann über die entsprechenden Elemente zugegriffen werden. Es gibt zwei Arten von Elementen:
Die Datenelemente geben die angeforderten Daten von einem Objekt sofort zurück. Beispiel: Bei
board(B) {
printf("%s\n", B.name);
}gibt der Datenelementname des Leiterplattenobjekts B den Namen der Leiterplatte zurück. Datenelemente können auch andere Objekte zurückgeben. Beispiel:
board(B) {
printf("%f\n", B.grid.size);
}Hier gibt das Rasterdatenelement der Leiterplatte ein Rasterobjekt zurück, dessen Größendatenelement dann die Rastergröße zurückgibt.
Loop-Members werden verwendet, um auf mehrere Objekte desselben Typs zuzugreifen, die in einem Objekt einer höheren Ebene enthalten sind:
board(B) {
B.elements(E) {
printf("%-8s %-8s\n", E.name, E.value);
}
}In diesem Beispiel wird die Loop-Member-Funktion elements() der Leiterplatte verwendet, um eine Schleife durch alle Elemente der Leiterplatte einzurichten. Der Block, der der B.elements(E)-Anweisung folgt, wird wiederum für jedes Element ausgeführt, und das aktuelle Element kann innerhalb des Blocks durch den Namen E referenziert werden.
Loop-Members verarbeiten Objekte in alphanumerischer Reihenfolge, sofern sie einen Namen haben.
Eine Loop-Member-Funktion erstellt eine Variable des Typs, der für die angeforderten Objekte erforderlich ist. Sie können für eine solche Variable einen beliebigen gültigen Namen verwenden, daher kann das obige Beispiel auch wie folgt geschrieben werden:
board(MyBoard) {
MyBoard.elements(TheCurrentElement) {
printf("%-8s %-8s\n", TheCurrentElement.name, TheCurrentElement.value);
}
}Der Effekt wäre derselbe. Der Umfang der Variablen, die durch eine Loop-Member-Funktion erstellt wird, ist auf die Anweisung (oder den Block) beschränkt, die (der) unmittelbar nach dem Aufruf der Schleifenfunktion ausgeführt wird.
LIBRARY
GRID
LAYER
DEVICESET
DEVICE
GATE
FOOTPRINT
CONTACT
PAD
SMD
CIRCLE
HOLE
RECTANGLE
FRAME
DIMENSION
TEXT
WIRE
POLYSHAPE
WIRE
POLYCUTOUT
WIRE
PACKAGE3D
SYMBOL
PIN
CIRCLE
RECTANGLE
FRAME
DIMENSION
TEXT
WIRE
POLYSHAPE
WIRESCHEMATIC
GRID
LAYER
LIBRARY
ATTRIBUTE
VARIANTDEF
COMPONENT
ATTRIBUTE
VARIANT
SHEET
CIRCLE
RECTANGLE
FRAME
DIMENSION
TEXT
WIRE
POLYSHAPE
WIRE
INSTANCE
ATTRIBUTE
MODULEINST
BUS
SEGMENT
LABEL
TEXT
WIRE
WIRE
NET
SEGMENT
JUNCTION
PINREF
PORTREF
TEXT
WIRE
MODULE
PORT
COMPONENT
SHEET
(same as above)BOARD
GRID
LAYER
LIBRARY
ATTRIBUTE
VARIANTDEF
CIRCLE
HOLE
RECTANGLE
FRAME
DIMENSION
TEXT
WIRE
POLYSHAPE
WIRE
POLYCUTOUT
WIRE
ELEMENT
ATTRIBUTE
VARIANT
SIGNAL
CONTACTREF
POLYPOUR
WIRE
VIA
WIRE