Tipi di oggetto

Le strutture di dati EAGLE sono memorizzate in file XML:

Questi file di dati contengono una gerarchia di oggetti. In un programma ULP è possibile accedere a queste gerarchie mediante le rispettive istruzioni di accesso integrate:

library(L) { ... }
schematic(S) { ... }
board(B) { ... }

Queste istruzioni di accesso impostano un contesto in cui è possibile accedere a tutti gli oggetti contenuti nella libreria, nello schema o nella scheda.

È possibile accedere alle proprietà di questi oggetti tramite i membri. Esistono due tipi di membri:

I membri dati restituiscono immediatamente i dati richiesti da un oggetto. Ad esempio, il

board(B) {
  printf("%s\n", B.name);
  }

il nome del membro dati dell'oggetto scheda B restituisce il nome della scheda. Anche i membri dati possono restituire altri oggetti, come nel caso

board(B) {
  printf("%f\n", B.grid.size);
  }

in cui il membro dati della griglia della scheda restituisce un oggetto griglia, di cui il membro dati delle dimensioni restituisce le dimensioni della griglia.

I membri di sequenza chiusa vengono utilizzati per accedere a più oggetti dello stesso tipo contenuti in un oggetto di livello superiore:

board(B) {
  B.elements(E) {
    printf("%-8s %-8s\n", E.name, E.value);
    }
  }

In questo esempio viene utilizzata la funzione del membro di sequenza chiusa elements() della scheda per impostare una sequenza per tutti gli elementi della scheda. Il blocco che segue l'istruzione B.elements(E) viene eseguito a turno per ogni elemento e l'elemento corrente può essere utilizzato come riferimento all'interno del blocco mediante il nome E.

I membri di sequenza chiusa elaborano gli oggetti in ordine alfanumerico, a condizione che abbiano un nome.

Una funzione di un membro di sequenza chiusa crea una variabile del tipo necessario per mantenere gli oggetti richiesti. È possibile utilizzare qualsiasi nome valido per una variabile. Pertanto l'esempio precedente potrebbe essere scritto anche come

board(MyBoard) {
  MyBoard.elements(TheCurrentElement) {
    printf("%-8s %-8s\n", TheCurrentElement.name, TheCurrentElement.value);
    }
  }

e farebbe esattamente la stessa cosa. L'ambito della variabile creata da una funzione di un membro di sequenza chiusa è limitato all'istruzione (o blocco) immediatamente successivi alla chiamata della funzione di sequenza.

Gerarchia degli oggetti di una libreria

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
      WIRE

Gerarchia degli oggetti di uno schema

SCHEMATIC
  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)

Gerarchia degli oggetti di una scheda

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