# COMPACT II

COMPACT II (Comshares Program for Automatically Controlling Tools) ist eine Programmiersprache zur Erstellung von NC-Programmen. Das Vokabular der Sprache deckte alle üblichen NC-Verfahren ab, wie Drehen Bohren, Fräsen, Drahtschneiden, Brennschneiden und Stanzen. Durch den Einsatz von Programmiersprachen wurde die manuelle NC-Programmierung durch die maschinelle Programmierung ergänzt bzw. abgelöst. Entwickelt in den 1970er Jahren, verwendeten 1981 bereits über 3800 Firmen COMPACT II zur Programmierung von ca. 18.500 NC-Maschinen.

## Allgemein

Die Nutzung von numerisch gesteuerten Maschinen, deren Entwicklung 1949 begann, konzentrierte sich zuerst auf die Fertigung komplexer Geometrien der Luft- und Raumfahrtindustrie. Bereits Mitte der 1950er Jahre entstand für diese Industrie das Programmiersystem APT, das mit seiner Symbolsprache diese Fertigungsprozesse beschreiben konnte. Anfang der 1960er Jahre führte die Erkenntnis, dass sich diese Technologie auch zur Fertigung einfacherer Teile eignet, dazu, dass zunehmend NC-Maschinen für Bohr-, Fräs- und Drehbearbeitung zum Einsatz kamen. Mit dieser Zunahme wuchs auch der Bedarf an Steuerprogrammen, die zunächst manuell erstellt wurden. Da die manuelle Programmierung zeitaufwendig und fehleranfällig war, ergab sich der Zwang zur Rationalisierung. Somit begann Ende der 1960er Jahre der zunehmende Einsatz von maschineller Programmierung und die Entwicklung alternativer Programmiersprachen, wie COMPACT II, die nicht APT als Grundlage hatten. COMPACT II wurde in den Jahren 1967 -1969 von Chuck Hutchins und Bruce Nourse, beides Mitarbeiter von Comshare (USA), entwickelt. Im Februar 1969 gründeten sie zusammen mit Kenneth R. Stephanz und Urbanes van Bemden die Manufacturing Data Systems Inc.(MDSI) , Ann Arbor, Michigan (USA). Compact II wurde dann von MDSI weiterentwickelt einschließlich einer Bibliothek für Postprozessoren. Ab Januar 1976 wurde das System vom Tochterunternehmen MDSI Deutschland angeboten und zunächst auf Time-Sharing -Computern eingesetzt.

## Funktionalität

Die Ziele des Einsatzes der Programmiersprache waren die Verkürzung der Programmierzeiten, die Verwendung einer Sprache für unterschiedliche Maschinen-Steuerungs-Kombinationen und die Erzeugung fehlerfreier NC-Daten. Dieses wurde erreicht durch die Verwendung von englischem Vokabular aus der Fachsprache der Fertigungstechnik und der Definition geometrischer Sachverhalte. Die Syntax war flexibel und erlaubte z. B. die Verwendung technologischer und geometrischer Definitionen in einer Anweisung und unterschied sich damit von den bereits in den 1950er Jahren entwickelten APT-Systemen. Die Anwender waren nach einer einwöchigen Schulung in der Lage NC-Programme rechnergestützt zu erstellen.

### Syntax

Die Syntax der Sprache unterschied zwischen Haupt- und Nebenworten. Ein COMPACT II Teileprogramm bestand somit aus Sätzen mit einem Hauptwort gefolgt von Nebenworten, wobei Hauptwörter aus 5 Gruppen zur Verfügung standen.

#### Hauptwortgruppen mit Beispielen

| Initialisierung Identifikation |
| MACHIN,... | | NC-Maschinen Name |
| IDENT,... | | Programmname zur Identifizierung |
| SETUP,... | | Start-Einstellungen |
| Geometrie |
| DPTn,... | DEFINE POINT | Punkt Definition |
| DCIRn,... | DEFINE CIRCLE | Kreis Definition |
| DPBn,... | DEFINE PART BOUNDARY | Kontur Definition |
| Werkzeug-Daten |
| ATCHG | AUTOMATIC TOOL CHANGE | Werkzeugwechsel |
| Technologie-Daten |
| MOVE | | Anfahrbefehl im Eilgang |
| CUT | | Fahren mit Vorschubgeschwindigkeit |
| CONT | CONTOUR | Fahren auf Kreis |
| FLT | FLOAT TAP | Gewindebohren |
| Ende-Anweisung |
| END | | Ende des Quellenprogrammes |

#### Code Beispiel 2-1/2D Fräsen

* MOVE,TOLN1,TOLN2/2XS
| MOVE | | Bewegen im Eilgang |
| TOLN1 | To LINE 1 | vor Linie 1 |
| TOLN2 | TO LINE 2 | vor Linie 2 |
| /2XS | 2 X SMALL | LN2 parallel um |
| | | 2mm in -x verschoben |
* MOVE,ZB-15
| MOVE | | Bewegen im Eilgang |
| ZB-15 | Z BASE | auf -15 unter Z-Basis |
* CUT,PASTLN6
| CUT | | Bewegen mit Vorschub |
| PASTLN6 | PAST LINE 6 | Hinter Linie 6 |
* MOVE,PASTLN4,OFFLN1/2YS,ZB-10
| MOVE | | Bewegen im Eilgang |
| PASTLN4 | PAST LINE 4 | Hinter linie 4 |
| OFFLN1/2YS | OFF LINE 1 | Auf die Y-kleinere |
| | | Seite von Linie 1 |
| | | plus 2 mm Verschiebung |
| ZB-10 | Z BASE | auf -10 unter Z-Basis |
* ICON,CIR2,CCW,S(0),F(90)
| ICON | IN CONTUR | Vorschubbewegung innerhalb Kreis |
| CIR2 | CIRCLE 2 | Kreis 2 |
| CCW | COUNTER CLOCKWISE | gegen Uhrzeigersinn |
| S(0) | START | Start bei 0 Grad |
| F(90) | FINISH | Fertig bei 90 Grad (CCW) |
* ICON,CIR1,CCW,S(90),F(180)
| ICON | IN CONTUR | Vorschubbewegung innerhalb Kreis |
| CIR2 | CIRCLE 2 | Kreis 2 |
| CCW | COUNTER CLOCKWISE | gegen Uhrzeigersinn |
| S(90) | START | Start bei 90 Grad (CCW) |
| F(180) | FINISH | Fertig bei 180 Grad |
* CUT,PASTLN1/1YS
| CUT | | Bewegen mit Vorschub |
| PASTLN1 | PAST LINE 1 | Hinter Linie 1 |
| 1YS | 1 Y SMALL | plus 1 mm Verschiebung |
* RET
| RET | RETRACT | voller Rückzug in Z |
* HOME
| HOME | Eilgang zur HOME-Position |

#### Code Beispiel komplexe Zirkularbewegung

Die Nebenwörter XS, XL, YS, YL wirken je nach Kontext als Modifikatoren oder als Selektoren. In Ergänzung zu einem Geometrieelement sind es Modifikatoren, alleinstehend sind es Selektoren.
| CONT,CIR1,CW,S(OFFLN1/1XS,YL) | ,F(OFFLN1/1XS,YS) |
| CONT, | CONTOUR |
| | Fahren auf dem Kreis |
| CIR1, | Zirkel 1 ist ausgewählt |
| CW, | CLOCKWISE |
| | Fahren im Uhrzeigersinn |
| S(....), | START |
| | Startposition der Bewegung |
| (OFFLN1/ | OFFSET LINE 1 |
| | Verschiebe Linie 1 parallel |
| / 1XS, | 1 mm Abstand in -X Richtung |
| XS, | X SMALL (Modificator) |
| ,YL) | Y LARGE (Selector) |
| | von den beiden Schnittpunkten |
| | wähle den mit größerem Y-Wert |
| F(....), | FINISH |
| | Endposition |
| OFFLN1/ | OFFSET LINE 1 |
| | Verschiebe Linie 1 parallel |
| /1XS | 1 mm Abstand in -X Richtung |
| XS, | X SMALL (Modificator) |
| ,YS) | Y Small (Selector) |
| | von den beiden Schnittpunkten |
| | wähle den mit kleineren Y-Wert |

#### Code Beispiel mit Konturdefinition

| MACHIN,FRAESMASCHINE | $ | Maschinenauswahl |
| IDENT, WINKEL ALS PROGRAMM-BEISPIEL | $ | Name Quellprogrammes |
| SETUP,LX,85LY,25LZ | $ | Startposition in X, Y und Z |
| BASE,25.4XA,25.4YA,ZA120 | $ | Bezugspunkt für folgenden Geometrie |
| DCIR1,76.2XB,63.5YB,7.94R | $ | Kreisdefinition mit Mittelpunkt und Radius |
| DPB1,RPT,XB,YB,10ZB,CR; SPT1,-15XB,-10YB,10ZB ; | $ | Konturbeschreibung |
| | $ | mit Referenz- und Startpunkt |
| YB,S(LN(XB));LN(120.65.XB,YB,45CCW) ; | $ | 2 Gerade |
| CIR(114.3XB,6.35YB,12.7R), CCW,S(YL):19.05YB; | $ | Kreis, Mittelpunkt und Radius |
| 10R;LN(CIR1,XL, 30CCW) ; | $ | Verrundung |
| | $ | bei Tangente an Zirkel 1 |
| CIR1,CCW; LN(CIR1,XS, 30CCW) | $ | 2-te Tangente |
| ;12.7R;XB,F(LN(-10YB)), NOMORE | $ | Verrundung |
| | $ | Ende der Kontur |
| ATCHG,TOOL1,TD20,GL200,900RPM, 230MMPM,CON | $ | Werkzeug |
| | $ | mit Technologiedaten |
| MOVE,PB1/SPT1 | $ | Eilgang zu Startpunkt |
| CUT,PB1 | $ | Fräsen der Kontour |
| END | $ | Program-Ende |

#### Code Beispiel mit arithmetischen Operationen

Ergänzt wurden die Hauptwörter durch die Verwendung von arithmetischen Operationen, Definition von Variablen sowie bedingten Sprunganweisungen, repetitiver Programmierung und Indizierung. Die Befehle dazu waren: DVRn, (definiere Variable), IF, DO, GOTO, USE(Blockname). Dieses Ergänzungen ermöglichten eine hohe Automatisierung der NC-Programm-Erstellung speziell für Teilefamilien.
Beispiel einer DO-Sequenz mit Inkrementieren eines Zählers DVR1,0 $ Der Zähler wird außerhalb der DO-Schleife initialisiert $ DVR Define Variable
$ und wird als Zähler #1 innerhalb der DO-Schleife verwendet $ <1>ICON,CIR1,CW,S(90),F(TANLN1)
OCON,CIR2,CCW,S(TANLN1),F(TANLN2) ICON,CIR3,CW,S(TANLN2),F(0) <2>DVR1,#1-90
$ Der Zähler (#1) wird jeweils um -90 erhöht $ DO1/2,ROTXY#1,3TMS $ Verursacht drei Wiederholungen der Werkzeugbewegungen $ erzeugt durch die Aussagen in <1> bis <2> $ wobei diese jedes Mal um weitere -90 Grad gedreht werden

### Ablauf

Das wesentliche Merkmal der maschinellen Programmierung ist die Erstellung eines Teileprogramms auch Quelltext oder Quellprogramm genannt, basierend auf der Werkstück-Geometrie und den Bearbeitungsschritten. Durch die Verarbeitung (Run) des Quellprogramms im Prozessor wird die Steuerungsinformationen für die NC-Maschine erzeugt. Da die maschinenspezifische Anpassung bereits durch einen Modul, der Teil des Prozessors ist, erfolgt, entfällt die übliche Ausgabe von CL-Data (cutter-location-data) und das bei APT-basierenden Systemen übliche Post-Processing. Der für die Anpassung notwendige Modul wurde deswegen als „Link“ bezeichnet.
Die Verarbeitung der COMPACT II Eingabeanweisungen erfolgte in einem Durchgang für den Geometrieteil, die Technologie und das maschinenspezifische Anpassen, einschließlich einer interaktiven Fehlerbeseitigung. APT-basierte Systeme benötigten dafür mehrere Durchläufe. Der Ablauf bei der Nutzung von Time-Sharing-Systemen begann mit der handschriftlichen Erstellung des Quellprogrammes. Dieses wurde auf einem Terminal (z.B ASR-33) mit einem Lochstreifenstanzer erfasst und ausgedruckt. Nach Prüfung des Textes wurde das Quellprogramm in das NC-System eingelesen und auf der Platte des Time-Sharing-Systems gespeichert. Eventuelle Fehler oder Ergänzungen konnten mit einem Editor noch durchgeführt werden. Durch die Anweisung "RUN" wurde die interaktive Programmausführung gestartet und jede Anweisung durch den Prozessors im Parser auf korrekte Syntax geprüft. Geprüft wurden weiterhin z.B: im Geometrieteil die Eindeutigkeit der Geometriedaten, im Technologieteil das Vorhandensein notwendiger Technologieparameter und im Link das Einhalten maschinen-spezfischer Grenzwerte. Gefundene Fehler wurden im Dialog zurückgemeldet und die Eingabeanweisung zum Editieren bereitgestellt. Nach der Korrektur und wenn die nochmalige Prüfung keine Fehler mehr fand, erfolgte die Verarbeitung der nächsten Anweisung. Waren alle Eingaben verarbeitet konnte optional die definierte Geometrie und der Werkzeugweg auf dem Plotter ausgegeben werden. Die Simulation des Werkzeugweges konnte in den drei Koordinatenebenen und auch isometrisch geplottet werden. Durch eine weitere RUN-Anweisung, mit der Angabe des Lochstreifen-File-Namens wurde die NC-Daten-File erzeugt und gespeichert und konnte anschließend über den Stanzer ausgegeben werden.

### Plattform

Die erste kommerzielle Version von COMPACT II lief auf einem 24-Bit-Computer von Scientific Data Systems (SDS), bekannt als SDS 940. Der Rechner hatte 192 kB Systemspeicher und eine 50-MB-Platte. Die gesamte Software war in der Programmiersprache Assembler geschrieben. 1970 stellte DEC den PDP-11 mit 64 kB Speicher vor, und kurz darauf Texas Instruments den TI-980 mit 128 kB Speicher. Dies ermöglichte, den Kunden auch eine Inhouse-Nutzung des COMAPCT-II-Systems anzubieten. MDSI erstellte in kürzester Zeit die notwendige Computeremulator-Software und auch ein Interrupt-orientiertes Betriebssystem (OS) und hatten jetzt das Potenzial, COMPACT II auf Minicomputer zu übertragen, ohne die Assembler-Software, die viele Mannjahre der Entwicklung gekostet hatte, neu zu schreiben. Es folgten dann noch die Minicomputer Data General-Eclipse und Data General-Nova.

## Geschichte

COMPACT II stand zu Beginn seiner Entwicklung als Name einer Sprache und eines Programmiersystems. Im Laufe der Weiterentwicklung bekamen die Systeme neue Namen, während der Kern des Systems, die Programmiersprache COMPACT II die Gleiche blieb. z. B. das System "Action Central" ein Minicomputer mit COMPACT II, graphischen Terminal, high speed Printer, high speed Reader-Punch. Aus dem "Action Central" wurden anschließend die SERIES I und SERIES II. Das System "NC-Graphics" bestand aus COMPACT II ergänzt mit einer Graphiksschnittstelle und Schnittstellen zu CAD-Systemen. EQUINOX war die letzte Produkteinführung von MDSI und war der Marketingname für eine Suite integrierter Softwareanwendungen auf einer PC-Plattform. Sie bestand auch wieder aus dem COMPACT II Prozessor ergänzt durch interaktive graphische Erstellung von Geometrie und COMPACT II Anweisungen.