Dokumentation

Component Interchange Format (CXF)

Allgemeines

Im Folgenden finden Sie die vollständige Dokumentation für das ASCII Format Component Interchange Format (CXF). Jedes elektronische Print-Bauteil, das auf gedruckten Schaltungen verwendet wird, kann damit umfassend beschrieben werden. Das Format ist leicht zu verstehen und dadurch kann es sehr leicht von jedermann verwendet werden, der die Notwendigkeit hat, Bauteil-CAD-Daten zu erzeugen oder zu portieren. Sie finden die beiden Menüpunkte für das Lesen und Schreiben von CXF im Bauteil-Browser unter Import/Export. Man gelangt zum Bauteilbrowser in der Schaltplanansicht über die Schaltfläche InsertComponent.jpg

Ein CXF-File kann mehrere Bauteile enthalten. Ein Bauteil hat mindestes ein Schaltplansymbol (kann auch mehrere haben) und normalerweise ein Gehäuse. Ein Widerstand zum Beispiel hat ein Symbol und ein Gehäuse. Ein Logik IC hat ein Gehäuse, kann aber mehrere Gatter haben, die dann jeweils duch separate Sub-Symbole abgebildet werden.

Ein Symbol und ein Gehäuse bestehen aus mehreren grafischen Grundelementen wie Linien, Texte, Rechtecke und Pins bei den Symbolen und Pads bei den Gehäusen. Jede Grundform ist in einer Zeile beschrieben, die mit einem speziellen Identifikator beginnt. Mehrere vordefinierte Felder können folgen. Jede Grundform kann auch mehrere benutzerdefinierte Eigenschaften haben, jede Eigenschaft ist in einer Zeile beschrieben. Zeilen für Eigenschaften beinhalten keine Umbrüche oder Leerzeilen. Stattdessen können sie außerordentlich lang sein (über 100.000 Bytes). Die Möglichkeit, benutzerdefinierte Eigenschaften für jede Grundform zu definieren, macht das Format besonders zukunftssicher.

Hier finden Sie ein kurzes CXF File das einige der verschiedenen Grundformen verwendet.


Die Syntax des Formats

Die Felder jeder Zeile sind durch TABs getrennt. Die Feldinhalte selbst dürfen daher keine TABs enthalten. Entspricht ein Feld seinem Default-Wert, dann kann es einfach weggelassen werden.

COMPONENT    NAME=USBUF01W6    VALUE=    PREFIX=IC    SYMBOLS=1    PACKAGE=13    PROPERTIES=7

COMPONENT       identifier
NAME=USBUF01W6     search-name of the component
VALUE=     value of the component, if available
PREFIX=IC    prefix for the component name (IC8, R12)
SYMBOLS=1    how many symbols follow? (Default=0)
PACKAGE=13    how many graphical primitives has the package? (Default=0)
PROPERTIES=7     how many user-defined property lines follow? (Default=0)
LAST_MODIFIED_BY=K11970
LAST_MODIFIED=2008.12.30 18:44:16
...

Diese beiden Zeilen sind die ersten der 7 benutzerdefinierten Eigenschaften, wie sie in der ersten COMPONENT Zeile angekündigt wurden. Immer stehen zuerst die Eigenschaften, dann folgen die Gehäuseelemente sowie die Schaltplansymbole.


PACKAGE    NAME=SOT323-6L    X1=0    Y1=0    LAYER=4

PACKAGE    identifier
NAME=SOT323-6L    name of the proposed package
X1=0    position of the package grip (handle)
Y1=0    all coordinates are in nm = 1/1000000 mm = 1/1000 µm. We use the normal cartesian coordinate system with the origin the in middle. Integer format.
LAYER=4    denotes the layer function. Layer functions are described later
PROPERTIES=0     how many user-defined property lines follow? (Default=0)


PAD    XM=-650000    YM=-950000    WIDTH=350000    HEIGHT=1000000    LAYER=2    PINNUMBER=1

PAD    identifier
XM=-650000    YM=-950000    center coordinates [nm], default = 0
WIDTH=350000    pad width [nm], default = 0
HEIGHT=1000000    pad height [nm], default = 0
LAYER=2    on copper top only, SMD pad. 0 for symbols elements. Default = 0
PINNUMBER=1    number for assignment PIN to PAD, 0 = no pin for that pad = default
FORM=3     pad form, 0=round , 1=octagonal, 2=rectangular, 3=oblong (default), 4=polygonal (see POLY_PAD property below)
ROUNDED=0    rounding [%]. Integer. For rectangular pad form only
ROTATION=0    all angles 0 .. 360, floating point value, max 4. decimal digits, [,] or [.] as decimal separator possible.
0=right=default, 90=top, 180=left, 270=bottom DRILL=800000 drill hole [nm]. No drill = 0 = default PADNAME=C23 optional for alphanumeric pad names STOP=0 solder stop mask: 0=standard, 1=pad completly free, 2=only drill hole free, 3=pad completely covered PASTE=0 solder paste: 0=standard, 1=pad covered with paste, 2=no paste PROPERTIES=0 how many user-defined property lines follow? (Default=0)
POLY_PAD=-1000000,-700000;-1000000,700000;100000,1800000;1000000,700000;1000000,-700000    polygon coords [nm]. Property. No self-intersection. Self-touching ok for inner holes


LINE    X1=-1100000    Y1=675000    X2=1100000    Y2=675000    WIDTH=300000    LAYER=4

LINE    identifier
X1=-1100000    Y1=675000    coordinates of start point [nm], default = 0
X2=1100000    Y2=675000    coordinates of end point [nm], default = 0
WIDTH=300000    line width [nm], default = 0
LAYER=4    see above
DASHED=0    0=solid (default), 1=dotted, 2=dashed, 3=dashdot, 4=dashdotdot
ROUNDED=YES    round line caps, default = YES
PROPERTIES=0     how many user-defined property lines follow? (Default=0)


TEXT    CONTENT=!BAUTEIL    X1=-1250000    Y1=2950000    WIDTH=1500000    HEIGHT=1500000    LAYER=4    WEIGHT=10    FUNCTION=1

TEXT    identifier
CONTENT=!BAUTEIL    current content, special, if FUNCTION is not 0
X1=-1250000    Y1=2950000    coordinates of foot point [nm], default = 0. Text is displayed in math. quadrant No 1 relative from that foot point
WIDTH=1500000    character width [nm], default = 0
HEIGHT=1500000    character height [nm], default = 0
LAYER=4    see above
WEIGHT=10    weight of the font in %
ITALIC=YES    italic font, if available
RIGHT=YES    align text right
FUNCTION=1    denotes the text function. Text function are described later
HIDE=NO    text is invisible (for invisible pin names)
ROTATION    see above
DYN=YES    text is always readable from below or from right (default).
MIRR=NO    text is mirrored
GERMAN=Hallo    for documentation in German language
ENGLISH=Hello    for documentation in English language
FRENCH    for documentation in French language
PROPERTIES=0     how many user-defined property lines follow? (Default=0)


SYMBOL    X1=0    Y1=0    LAYER=101    SUFFIX=a    NUMBER=1    ELEMENTS=12

SYMBOL    identifier
X1=0    Y1=0    coordinates of grip handle [nm], default = 0
LAYER=101    see above
SUFFIX=a    suffix for the symbol name, e.g. IC1a
NUMBER=1    number of the symbol within the component normally 1, 2, 3, ...
ELEMENTS=12    how many graphical primitives are following? Caution: PROPERITES might come first! Caution: The PIN names do not count as own primitives in this case; see next section
INSERT=YES    this symbol is always directly imported (default = YES)
SWAP=0    this symbol can be exchanged with symbols of the same component having the same swap level, default = 0 = no swap
PROPERTIES=0     how many user-defined property lines follow? (Default=0)


PIN    X1=-11430000    Y1=2540000    PINNUMBER=1    PINNAME=YES    LENGTH=2540000    WIDTH=300000    LAYER=1
TEXT    CONTENT=D1    X1=-8390000    Y1=1790000    WIDTH=800000    HEIGHT=1500000    LAYER=1    WEIGHT=13    FUNCTION=5

PIN    identifier
X1=-11430000    Y1=2540000    coordinates of start point [nm], default = 0
PINNUMBER=1    number for assignment PAD to PIN, a number > 0 is necessary
PINNAME=YES    this PIN primitive line is followed by a TEXT primitive giving the pin name. This following pin name is a sub-primitive of the PIN and does not count for the SYMBOL
LENGTH=2540000    pin length [nm], default = 0
WIDTH=300000    pin line width [nm], default = 0
LAYER=1    see above
PADNAME=C12    optional for alphanumeric pad names
ROTATION=0    see above
FUNCTION=6    electrical function of the pin, default = 6 = passive
SWAP=0    this pin can be exchanged with another pin in this symbol having the same swap level, default = 0 = no swap
INV=NO    small circle to indicate an inverted pin, default = NO
CLOCK=NO    small hook inside PCB to indicate a clock related pin, default = NO
SHOWNUMBER=YES   display the small automatic pin number besides the pin, default=YES
REF=NO   the pin is a special pin for a voltage or signal reference such as a GND designator, normally not used in a CXF, default = NO
PROPERTIES=0     how many user-defined property lines follow? (Default=0)


Dies sind alle Elemente, die in dem kleinen Beispiel verwendet wurden. Weitere Elemente sind denkbar:


TRIANGLE    identifier
X1=0    Y1=0    filled triangle coordinates of first point [nm], default = 0
X2=0    Y2=0    coordinates of second point [nm], default = 0
X3=0    Y3=0    coordinates of third point [nm], default = 0
LAYER=0    see above
PROPERTIES=0     how many user-defined property lines follow? (Default=0)
RECTANGLE    identifier
X1=0    Y1=0    filled rectangle coordinates of left-bottom point [nm], default = 0
WIDTH=0    rectangle width [nm], default = 0
HEIGHT=0    rectangle height [nm], default = 0
ROTATION=0    see above
LAYER=0    see above
PROPERTIES=0     how many user-defined property lines follow? (Default=0)
ARC    identifier
XM=0    YM=0    coordinates of the arc center point [nm], default = 0
X1=0    Y1=0    coordinates of start point [nm], default = 0
X2=0    Y2=0    coordinates of end point [nm], default = 0
RADIUS=0    radius of the arc [nm], default = 0
WIDTH=0    line width [nm], default = 0
START=0    start angle (see ROTATION above)
END=0    end angle, full circle with START=0    END=360
DASHED=NO    dashed line, default=NO
ROUNDED=YES    rounded end caps, default=YES
LAYER=0    see above
PROPERTIES=0     how many user-defined property lines follow? (Default=0)
DISK    identifier
XM=0    YM=0    coordinates of the filled disk center point [nm], default = 0
RADIUS=0    radius of the disk [nm], default = 0
LAYER=0    see above
PROPERTIES=0     how many user-defined property lines follow? (Default=0)
FIDUCIAL    identifier
XM=0    YM=0    coordinates of the fiducial center point [nm], default = 0
ROTATION=0    see above
RADIUS=0    radius of the fiducial [nm], default = 0
WIDTH=0    line width [nm], default = 0
FORM=3    form of the fiducial: 0=target, 1=arrow, 2=two_quarters, 3=disk=default; also see here.
LAYER=0    see above
PROPERTIES=0     how many user-defined property lines follow? (Default=0)
SPLINE    identifier
X1=0    Y1=0    coordinates of spline start point [nm], default = 0
X2=0    Y2=0    coordinates of spline end point [nm], default = 0
XA=0    YA=0    coordinates of spline attraction point [nm], default = 0
WIDTH=0    line width [nm], default = 0
LAYER=0    see above
PROPERTIES=0     how many user-defined property lines follow? (Default=0)

Normalerweise gehören die nächsten beiden nicht zu einem CXF. Aber sie könnten auftreten:

ERROR    identifier
XM=0    YM=0    coordinates of the DRC error marker's center point [nm], default = 0
RADIUS=0    radius of the error marker [nm], default = 0
TEXT=    textual explanation of the error, default = 
LAYER=0    see above
PROPERTIES=0     how many user-defined property lines follow? (Default=0)
SIGNAL    identifier
NAME=    name of the signal, default=
PROPERTIES=0     how many user-defined property lines follow? (Default=0)

Feld Beschreibungen

Layer Funktionen

TARGET hat bis zu 100 Lagen (layer). WICHTIG: Ein LAYER token in den CXFs beschreibt nicht die Layernummer sondern die Nummer der Layerfunktion (Layerfunktionsnummer). Die Layerfunktionsnummer 4 meint "Position print top". TARGET unterscheidet nicht zwischen position print und silkscreen. Gehäuse in TARGET werden gezeichnet, als ob sie auf der Oberseite montiert werden. Daher benutzen SMD Pads die Layerfunktionsnummer 2 (=Copper top) und bedrahtete Pads (THT)verwenden Layerfunktionsnummer 100 (=appears on all copper layers). Nachfolgend eine Liste der Layerfunktionsnummern:

0=Copper bottom
1=Copper inside
2=Copper top
3=Position print bottom
4=Position print top
5=Deletion bottom
6=Deletion inside
7=Deletion top
8=Area bottom
9=Area inside
10=Area top
11=Solder mask bottom
12=Solder mask top
13=Drill holes
14=Solder paste bottom
15=Solder Paste top
16=Gold bottom
17=Gold top
18=Glue bottom
19=Glue top
20=Dimensioning
21=PCB outline
22=Milling
23=Pad numbers
24=Air wire (ratsnest)
25=Signal names
26=Route prohibition (Copper bottom)
27=Route prohibition (Copper top)
28=Route prohibition (Copper inside)
29=Blind via prohibition top
30=Blind via prohibition bottom
31=Buried via prohibition
32=Component names top
33=Component values top
34=Component names bottom
35=Component values bottom
36=Frontpanel (milling)
37=Frontpanel (documentation)
38=Frontpanel (lettering)
39=Position inside bottom (AML)
40=Position inside top (AML)
41=Separation into single PCBs
100=appears on all copper layers

Textfunktionen

0=Normal text
1=Component name (IC17, R3, ...)
2=Component value (10k, 20µF, 7805, NE555, 2N3055)
3=Symbol name (IC17a, IC3c)
4=Signal name (seldom used in components)
5=Pin name (CLK, RES, a "|" starts and ends a overline indicating inverse function)
11=date of project last modified
12=time of project last modified
13=date of display/print
14=time of display/print
15=output scale in %, may contain '.' or ',' as decimal separator
16=project filename without extension
100=page number (schematic only)
101=user defined property of owning Signal, component or project
102=PCB variant name
103=project filename with extension
105=page name (schematic only)

Pin Funktionen

0=NC
1=Input
2=Output
3=IO=Input/Output
4=OC=Open Collector
5=Power (power pin of a power consuming IC)
6=Passiv
7=Tristate
8=Supply (output pin of a power supply component)
9=None
10=Illegal (normally not used)

CXF automatisch einlesen

Um Bauteile von einer fremden Bauteile-Datenbank in TARGET direkt einzufügen, wird kurzerhand die Zwischenablage zweckentfremdet. Dazu muss bloß von der fremden Bauteile-Software ein CXF-File mit einem vorangestellten "$CF_TARGET_CXF" im unformatierten Textformat (CF_TEXT) in die Zwischenablage kopiert werden. Sofort erscheint das Bauteil am Cursor in TARGET. Der Inhalt der Zwischenablage wird durch "TARGET 3001!: Received CXF" ersetzt.

Zudem wurde das Bauteil zur weiteren Verwendung in die TARGET-SQL-Datenbank eingefügt. Damit das Bauteil dabei gleich in die richtige Bauteil-Kategorie kommt, kann es sinnvoll sein, den Benutzer vorher zu fragen, wo er es einsortiert haben will. Dazu muss die fremde Bauteile-Software die TARGET-Kategorien abfragen und dem Benutzer zur Auswahl anzeigen. Kopiert man den reinen Text "$CF_TARGET_CAT_REQ" in die Zwischenablage, reagiert TARGET mit der folgenden Textantwort in der Zwischenablage:

$CF_TARGET_CAT_ANSW
$CAT Audio
$SUB Audiofilter 2
$SUB Audioverstärker 6
$SUB Radio 3
$SUB Signalgeber/Summer 8
$SUB Sonstige Audio 1
$SUB Sprache 4
$SUB Telefon 5
$CAT Diode
$SUB Brückengleichrichter 10
$SUB IR-Diode 86
...

Die Sprache der Antwort hängt vom installierten TARGET ab. Hat der Benutzer die richtige Kategorie bzw. Unterkategorie ausgewählt, kann endlich das Bauteil über die Zwischenablage übertragen werden:

$CF_TARGET_CXF
COMPONENT    NAME=CY7C1049DV33    VALUE=    PREFIX=IC    SYMBOLS=1    PACKAGE=44    PROPERTIES=6
LAST_MODIFIED_BY=K11970
LAST_MODIFIED=2010.04.27 15:30:07
COMPONENT_TYPE_ID=86
COMPONENT_FUNCTION=Digital-IC
COMPONENTTYPE=IC\Digital
LAST_MODIFIED_PACKAGE=2010.04.27 15:41:07
PACKAGE    NAME=SOJ36    X1=0    Y1=0    LAYER=4
PAD    XM=-10800000    YM=-4750000    WIDTH=500000    HEIGHT=1800000    FORM=2    LAYER=2    PINNUMBER=1
PAD    XM=-9530000    YM=-4750000    WIDTH=500000    HEIGHT=1800000    FORM=2    LAYER=2    PINNUMBER=2
...

Beachten Sie dabei den Wert "COMPONENT_TYPE_ID=86" in den Properties, welcher der gewählten Bauteile-Kategorie-Nummer entspricht. Sofort wird automatisch das Bauteil, wie oben beschrieben, in die SQL-Datenbank eingefügt und - falls ein Schaltplan-Fenster offen ist - auch direkt an den Cursor gehängt.