Control
Control
Dieses Handbuch wendet sich an ausgebildetes und mit der Bedienung und
Programmierung einer CNC-Maschine vertrautes Fachpersonal. Nicht nur die
Bedienung, sondern insbesondere auch die elektrische Installation, die Parametrierung
und die Inbetriebnahme der CNC-Steuerung dürfen nur von dazu befähigten Personen
durchgeführt werden.
Insbesondere bei Arbeiten an der elektrischen Anlage und bei Testläufen während der
Parametrierung oder PLC-Programmierung, aber auch bei Ausführung von NC-
Programmen durch den Maschinenbediener, können Achs- und Spindelantriebe sowie
andere mechanische Baugruppen plötzlich und unerwartet anlaufen und dabei schwere
Personen- und/oder Sachschäden verursachen. Antriebskomponenten, von denen eine
Gefahr ausgehen kann, sind daher entsprechend zu sichern und gegen jeden Zugang
(auch durch unbeteiligte Personen) abzusperren.
Bei der Maschineneinrichtung kann das Verfahren der Achsen und das Ingangsetzen
der Spindelantriebe möglich (und notwendig) sein, ohne dass der Zugang zum
Arbeitsraum der Maschine durch Sicherheitseinrichtungen blockiert ist. Hierbei ist stets
mit unerwarteten Maschinenbewegungen (ausgelöst durch Bedienungsfehler oder
mögliche Fehlfunktionen der Maschine) zu rechnen, die zu schweren Verletzungen
führen können.
1
Hinweise zu diesem Handbuch
Jedem Bediener einer mit dieser CNC-Steuerung ausgestatteten Maschine ist das
Bedienerhandbuch zur Verfügung zu stellen. Bevor dieser mit der Bedienung und/oder
Programmierung der CNC-Maschine betraut wird, ist sicherzustellen, dass das
Handbuch von ihm gelesen und verstanden worden ist.
Techniker, die eine Maschine mit der CNC-Steuerung ausrüsten und/oder erstmalig in
Betrieb nehmen, müssen darüber hinaus das Technikerhandbuch gelesen und
verstanden haben.
Dieses Handbuch ist Bestandteil des Lieferumfangs der CNC-Steuerung und muss stets
griffbereit in der Nähe der Hardwarekomponenten der Steuerung bzw. der mit der
Steuerung ausgestatteten Maschine aufbewahrt werden.
Falls der Hersteller oder Lieferant der Steuerung neue, überarbeitete Versionen dieses
Handbuchs zur Verfügung stellt, sind die im Umlauf befindlichen und die an der
Maschine aufbewahrten Handbücher umgehend durch die neuen Versionen zu
ersetzen.
2
1 Parameter
Die Datei [Link] enthält über die im Handbuch Installation beschriebenen Parameter
hinaus weitere, speziell für die Konfiguration der Steuerung PNC-2 benötigte Parameter.
Diese Parameter sind in folgende Sections gegliedert:
3
1.1 [Control]
Diese Section dient der Angabe von Parametern, die die Busbaugruppe betreffen:
[Control]
NetworkAdr=<Adresse>
Parameter=<Parameter>
DeviceCount=<Anzahl Baugruppen> 0...15
PathBlockSize=<Blocklänge Bahndaten> 1...7
PathBufSize=<Puffergröße Bahndaten> <Blocklänge Bahndaten>...254
InvertAlarm=<Alarmeingänge invertiert> 0|1
Adresse
ist die Adresse des Gerätes im Netzwerk (USB-Seriennummer) und muß nur angegeben
werden, wenn mehrere Buseinheiten mit dem PC verbunden sind.
Parameter
ist ein für interne Zwecke des Herstellers reservierter Parameter; hier ist immer 0
einzutragen.
Anzahl Baugruppen
ist die Anzahl der zusätzlich zur Busbaugruppe PNC-2-BU1 vorhandenen, weiteren
Baugruppen (max. 14).
Blocklänge Bahndaten
gibt an, wie viele Positionsdaten während der Bahninterpolation gleichzeitig in Form
eines Blockes vom CNC-Steuerungsrechner zur Buseinheit übertragen werden sollen.
Enthält die Buseinheit bis zu vier Achsbaugruppen, sollte immer die maximale
Blocklänge (7) angegeben werden; bei mehr als vier Achsen kann es u.U. notwendig
sein, die Blocklänge zu verkleinern, wenn es zu Problemen mit der Leistung des
Steuerungsrechners kommt.
Puffergröße Bahndaten
ist die Größe des Pufferspeichers, in den die Positionsdatenblöcke übertragen werden.
Durch Verwendung dieses Pufferspeichers (Mindestgröße = Blocklänge Bahndaten + 2)
ist sichergestellt, dass sich kurzzeitige Unterbrechungen des CNC-
Steuerungsprogramms durch das Betriebssystem Windows nicht durch Aussetzer bei
der Bewegung der Achsen bemerkbar machen. Der dadurch unvermeidbare leichte
Zeitversatz zwischen der Ausführung des NC-Programms und der tatsächlichen
Bewegung der Achsen steigt mit der Puffergröße. Daher sollte stets die kleinstmögliche
Puffergröße angegeben werden, mit der ein reibungsloser Betrieb möglich ist;
üblicherweise genügt eine Puffergröße von ca. 50 bis 100.
4
Alarmeingänge invertiert
5
1.2 [Axis]
Diese Sections enthalten die Parameter zur Konfiguration der Achsbaugruppen:
[Axis_<ID>] 1...15
Name=<Bezeichnung> X|Y|Z|U|V|W|A|B|C|E|*
Precision=<Anzeigeauflösung> 0...4
MinPos=<SW-Endschalter min.> mm (°)
MaxPos=<SW-Endschalter max.> mm (°)
Modulo=<Modulo> mm (°)
RotAxis=<Drehachse> 0|1
MaxFeed=<max. Geschwindigkeit> > 0 mm/min (°/min)
FastFeedManual=<Eilgang Handbetrieb> > 0 mm/min (°/min)
FastFeedAuto=<Eilgang Automatikbetrieb> > 0 mm/min (°/min)
FastFeedDryRun=<Eilgang Programmtestlauf> > 0 mm/min (°/min)
TravelUnit=<Teilweg> > 0 mm (°)
StepsPerUnit=<Schritte/Teilweg> >0
InvertDirection=<Richtung invertiert> 0|1
InvertCommand=<Sollwert invertiert> 0|1
PositionGain=<KP> 0...32767
IntegralGain=<KI> 0...32767
DerivativeGain=<KD> 0...32767
IntegrationLimit=<max. I> 0...32767
MaxStepFrequency=<max. Schrittfrequenz> > 0...4000 kHz
ErrorLimit=<max. Schleppfehler> > 0 mm (°)
Acceleration=<max. Beschleunigung> > 0 mm/s² (°/s²)
LimitAngle=<Grenzwinkel> 0°...45 °
ArcTolerance=<Kreistoleranz> > 0 mm (°)
InvertInput1=<Eingang 1 invertiert> 0|1
InvertInput2=<Eingang 2 invertiert> 0|1
InvertAlarm=<Alarmeingang invertiert> 0|1
AlarmDelay=<Verzögerung Alarm> >= 0 ms
EnableOutput=<Ausgang Reglerfreigabe>
BrakeOutput=<Ausgang Bremse>
BrakeDelay=<Verzögerung Bremse> >= 0 ms
Gantry=<Gantry-Achse> 1...15
ID
ist die eindeutige Nummer der Achse (1 = erste Achsbaugruppe nach Busbaugruppe, 2
= zweite Achsbaugruppe usw.).
Bezeichnung
ist die Bezeichnung der Achse. Die Hauptachsen werden mit einen NC-
Koordinatenbuchstaben bezeichnet; es darf nicht mehreren Hauptachsen derselbe
Koordinatenbuchstabe zugeordnet werden. Hilfsachsen werden mit einem Stern ("*")
bezeichnet.
6
Anzeigeauflösung
ist die Anzahl der Nachkommastellen, die bei der Positionsanzeige auf dem CNC-
Bildschirm dargestellt werden sollen.
SW-Endschalter min.
SW-Endschalter max.
geben die Lage der Software-Endschalter an, die den Gesamtweg der Achse
begrenzen. In beiden Feldern muss 0 eingegeben werden, wenn es sich um eine Achse
mit endlosem Verfahrweg handelt und der dann unter Modulo angegebene Wert
ungleich 0 ist.
Modulo
wird bei Achsen mit endlosem Verfahrweg (üblicherweise Rundachsen) verwendet. Ist
hier ein Wert ungleich 0 angegeben, wird in der Positionsanzeige der CNC stets der
Divisionsrest aus der Division der tatsächlichen Position durch den angegebenen Wert
dargestellt. Bei einer Rundachse mit Modulo = 360° würde dann z.B. beim Verfahren
von der Position 0° auf die Position 725° die Achse etwas mehr als zwei Umdrehungen
ausführen und die Positionsanzeige anschließend 5° anzeigen.
Drehachse
ist auszuwählen, wenn es es sich nicht um eine Linear-, sondern um eine Drehachse
handelt. Diese Angabe wird vom Interpolator der Steuerung benötigt, um beim
gemeinsamen Verfahren von Linear-und Rundachsen die Geschwindigkeitsprofile nach
Achstypen getrennt berechnen zu können.
max. Geschwindigkeit
Eilgang Handbetrieb
Eilgang Automatikbetrieb
Eilgang Programmtestlauf
geben die Eilganggeschwindigkeit (bei G0) für die verschiedenen Betriebsarten der CNC
an. Wird mehr als eine Achse gleichzeitig verfahren, erfolgt eine Begrenzung der
Eilganggeschwindigkeit auf die kleinste für eine der beteiligten Achsen angegebene
Eilganggeschwindigkeit.
7
Teilweg
ist ein Wegabschnitt, der zur Positionsmessung bzw. zur Schrittsignalerzeugung (bei
Schrittmotorantrieben) in eine bestimmte Anzahl von Schritten (des Messsystems bzw.
des Schrittmotors) unterteilt ist. Bei Linearachsen mit Gewindespindel wird hier der einer
Umdrehung des Messystems (bzw. des Schrittmotors) entsprechende Weg angegeben
(üblicherweise gleich der Spindelsteigung); bei Rundachsen wird, abhängig von der
Getriebeübersetzung, der einer Umdrehung des Messystems bzw. Motors
entsprechende Winkel angegeben.
Schritte/Teilweg
gibt an, wieviel Schrittimpulse das Wegmeßsystem je Teilweg zählt bzw. wieviel
Schrittimpulse der Schrittmotorantrieb je Teilweg benötigt. Bei Wegmeßsystemen
(Encoder oder Glasmaßstäbe) ist zu berücksichtigen, dass die Decodierung der
Messdaten über einen Quadraturdecoder erfolgt und dadurch die anzugebende
Schrittanzahl dem Vierfachen der Strichanzahl des Meßsystems entspricht.
Richtung invertiert
Sollwert invertiert
kann verwendet werden, um die Polarität des analogen Drehzahlsollwerts bzw. den
Zustand des Richtungsausgangs zu invertieren.
KP
KI
KD
max. I
8
max. Schrittfrequenz
gibt bei Verwendung des analogen Sollwertausgangs die bei Maximaldrehzahl des
Motors (d.h. bei maximalem Drehzahlsollwert) vom Wegmeßsystem gezählte
Schrittfrequenz an (in kHz). Bei Schrittmotorantrieben ist hier die am
Schrittimpulsausgang der Achsbaugruppe bei Maximaldrehzahl des Motors
auszugebende Schrittfrequenz anzugeben. Der Maximalwert beträgt 4.000 kHz.
max. Schleppfehler
ist der maximal zulässige Schleppfehler der Achse. Eine Überschreitung führt zur
Abschaltung aller Achsantriebe und Ausgabe einer entsprechenden Fehlermeldung.
Multipliziert man den hier angegebenen Wert mit Schritte/Teilweg, darf das Ergebnis
maximal 32767 betragen.
max. Beschleunigung
Grenzwinkel
Kreistoleranz
gibt die maximale Abweichung der Endpunkte der vom CNC-Interpolator aus
Kreisbögen (G2/G3) erzeugten Geradensegmente vom ursprünglichen Kreisbogen an.
Diese Toleranz sollte ungefähr der Größenordnung der Auflösung der Achse
entsprechen (z.B. 0,001 mm).
Eingang 1 invertiert
Eingang 2 invertiert
Alarmeingang 1 invertiert
ermöglicht es, den Schaltzustand der drei Eingänge der Achsbaugruppe zu invertieren.
Im Normalzustand sind diese Eingänge aktiv (Spannung anliegend), wenn der Schalter
nicht betätigt ist bzw. kein Alarm ansteht; bei Invertierung muß Spannung anliegen,
wenn der Schalter betätigt ist bzw. ein Alarm ansteht.
Verzögerung Alarm
gibt an, wieviele Millisekunden zwischen Aktivierung der Reglerfreigabe und Aktivierung
des Alarmeingangs vergehen sollen.
9
Ausgang Reglerfreigabe
gibt (wenn ungleich Null) die ID eines Digitalausgangs (auf einer Digital-
Ein-/Ausgabebaugruppe) an, der zusätzlich zu dem auf der Achsbaugruppe befindlichen
Schaltausgang für die Reglerfreigabe verwendet werden soll. Hier kann auch bei
mehreren Achsen dieselbe ID angegeben werden, wenn für die Reglerfreigabe der
dazugehörigen Achsantriebe eine gemeinsame Leitung verwendet wird.
Ausgang Bremse
gibt (wenn ungleich Null) die ID eines Digitalausgangs (auf einer Digital-
Ein-/Ausgabebaugruppe) an, der zum Lösen der Bremse der Achse dient.
Verzögerung Bremse
gibt an, wieviele Millisekunden nach Aktivierung der Reglerfreigabe bis zum Lösen der
Bremse bzw. nach dem Aktivieren der Bremse bis zur Ausschaltung der Reglerfreigabe
gewartet werden soll.
Gantry
ordnet der Achsbaugruppe eine zweite Achsbaugruppe zu, mit der zusammen ein
Gantry-Antrieb gebildet wird. Für die zweite Baugruppe werden keine Parameter
angegeben; diese werden identisch von der ersten Baugruppe übernommen.
10
1.3 [Spindle]
Diese Sections enthalten die Parameter zur Konfiguration der Hauptspindelbaugruppen:
[Spindle_<ID>] 1...15
MaxSpeed<Getriebestufe>=<max. Drehzahl> > 0 1/min
Encoder=<Encodereingang> 0|1
Quadrature=<Quadratursignal> 0|1
Index=<Indexmarke> 0|1
StepsPerRevolution=<Schritte/Umdrehung> >0
MaxSyncSpeed=<max. Drehzahl G33> > 0 1/min
InvertDirection=<Richtung invertiert> 0|1
InvertCommand=<Sollwert invertiert> 0|1
InvertInput1=<Eingang 1 invertiert> 0|1
InvertInput2=<Eingang 2 invertiert> 0|1
InvertAlarm=<Alarmeingang invertiert> 0|1
AlarmDelay=<Verzögerung Alarm> >= 0 ms
ID
Getriebestufe
max. Drehzahl
ist die höchste Solldrehzahl der jeweiligen Getriebestufe; bei dieser Drehzahl wird am
Sollwertausgang 10 V ausgegeben.
Encodereingang
Quadratursignal
Indexmarke
Schritte/Umdrehung
gibt an, wieviel Schrittimpulse der Encoder je Spindelumdrehung zählt. Ist die Option
Quadratursignal ausgewählt, ist zu berücksichtigen, dass die Decodierung der
Messdaten über einen Quadraturdecoder erfolgt und dadurch die anzugebende
Schrittanzahl dem Vierfachen der Strichanzahl des Encoders entspricht.
11
max. Drehzahl G33
Werden die Schrittimpulse des Encoders zum synchronen Verfahren der Achsantriebe
verwendet (G33), ist die Übertragung der Synchronimpulse auf eine Taktrate von 125
kHz begrenzt. Bei hohen Encoderauflösungen wird daher der Encodertakt durch einen
intern errechneten Wert geteilt, der sich an der max. verwendeten Drehzahl orientiert,
die hier anzugeben ist. Beispiel: Bei Schritte/Umdrehung = 10000 können die
Encoderimpulse 1:1 nur bis maximal 750/min als Synchrontakt übertragen werden; gibt
man nun unter max. Drehzahl G33 einen Wert von 1500/min an, wird der Encodertakt
durch 2 geteilt, damit diese Drehzahl erreichbar ist.
Richtung invertiert
Sollwert invertiert
Eingang 1 invertiert
Eingang 2 invertiert
Alarmeingang 1 invertiert
Verzögerung Alarm
gibt an, wieviele Millisekunden zwischen Aktivierung der Reglerfreigabe und Aktivierung
des Alarmeingangs vergehen sollen.
12
1.4 [Servo]
Diese Sections enthalten die Parameter zur Konfiguration der PWM-Ausgänge der
Servobaugruppen:
[Servo_<ID>]
MinPWM=<min. Pulsweite> µs
MaxPWM=<max. Pulsweite> µs
MinPos=<min. Position> °
MaxPos=<max. Position> °
HomePos=<Grundstellung> °
ID
ist die eindeutige Nummer des PWM-Ausgangs und setzt sich zusammen aus Nummer
der Servobaugruppe (1 = erste Servobaugruppe nach Busbaugruppe, 2 = zweite
Servobaugruppe usw.) * 10 + Nummer des Ausgangs der Baugruppe (1 bis 4).
min. Pulsweite
max. Pulsweite
gibt die dem Verfahrweg des Servos entsprechende minimale und maximale Länge des
PWM-Impulses an (in µs).
min. Position
max. Position
Grundstellung
13
1.5 [ModbusTCP]
Diese Section enthält die IP-Adressen von bis zu 9 Modbus-TCP-Geräten:
[ModbusTCP]
IP<ID>=<IP-Adresse>
...
IP<ID>=<IP-Adresse>
ID
ist die eindeutige Nummer des Gerätes (1 = erstes Gerät, 2 = zweites Gerät usw.).
14
2 PLC-Programme
Die Syntax der PLC-Programme ist an die der Programmiersprache „C“ angelehnt und
enthält folgende Sprachelemente:
• Deklarationen
• Anweisungen
• Ausdrücke
• integrierte Funktionen
15
2.1 Deklarationen
Ein PLC-Programm besteht aus folgenden Deklarationen:
• Variablen
• Konstanten
• Funktionen
Am Anfang des Programms werden zunächst die Konstanten und Variablen deklariert.
Darauf folgen die Deklarationen der benötigten Funktionen. Ruft eine Funktion eine
andere Funktion auf, so muss diese vorher deklariert worden sein. Daher werden die am
tiefsten verschachtelten Funktionen am Anfang des Programms deklariert und die
Funktion main am Ende des Programms. Eine Funktion mit diesem Namen muss
vorhanden sein, da bei ihrer ersten Anweisung die Programmausführung beginnt.
Mit der Anweisung #include kann der Inhalt einer anderen Quelltextdatei in den
aktuellen Quelltext eingebunden werden. So ist es möglich, häufig verwendete Source-
Abschnitte in eigenen Dateien zu speichern und in neue Programme bei Bedarf
einzubinden. Nach der #include-Anweisung folgt eine String-Konstante mit dem
Dateinamen der einzubindenden Quelltextdatei.
Kommentare in einem Programm beginnen entweder mit /* und enden mit */ (sie
können sich dann über mehrere Zeilen erstrecken) oder sie beginnen mit // und enden
am Zeilenende.
16
2.1.1 Variablen
Es wird zwischen globalen und lokalen Variablen unterschieden. Globale Variablen
werden vor der ersten Funktion deklariert, lokale Variablen innerhalb einer Funktion.
Eine globale Variable ist von allen Funktionen aus sichtbar, eine lokale Variable nur
innerhalb der Funktion, in der sie deklariert wurde. Daher dürfen in zwei verschiedenen
Funktionen die lokalen Variablen identische Namen haben. Für lokale Variablen wird
beim Eintritt in die Funktion kein neuer Speicher reserviert, sondern sie haben eine
statische Speicheradresse und können daher bei rekursivem Aufruf derselben Funktion
überschrieben werden.
Variablen werden deklariert, indem ihr Typ, ihr Name und ihr Initialisierungswert
angegeben werden. Bei Array-Variablen wird zusätzlich die Anzahl der Elemente
angegeben.
Als Typen stehen char für 8-Bit-Variablen und int für 32-Bit-Variablen zur Verfügung.
char- und int-Variablen sind zuweisungskompatibel und werden automatisch
konvertiert. Ein Datenverlust bei der Zuweisung von int nach char wird nicht
abgefangen.
Der Name einer Variable muss mit einem Buchstaben oder einem Unterstrich beginnen
und darf nicht identisch mit dem Namen einer anderen Variablen (die auch global oder
lokal zu derselben Funktion ist), einer Konstanten, einer Funktion oder einem
Schlüsselwort sein.
Eine Array-Variable enthält mehrere Elemente, auf die einzeln zugegriffen werden kann.
Die Anzahl der Elemente wird bei der Deklaration direkt nach ihrem Namen angegeben,
eingeschlossen in eckige Klammern. Beim späteren Zugriff auf eine solche Variable
muss der Index in eckigen Klammern nach dem Variablennamen angegeben werden
(als beliebiger Ausdruck). Der kleinste zulässige Index ist Null, der größte die deklarierte
Länge minus Eins (Bereichsüberschreitungen werden nicht geprüft).
Mit einem Stern vor dem Variablennamen kann ein Zeiger (Pointer) deklariert werden.
Zeiger belegen immer 32 Bit Speicherplatz. Sie sind zuweisungskompatibel zu allen
anderen Typen. Dereferenziert wird eine Zeigervariable, indem bei ihrer Verwendung
ebenfalls ein Stern vorangestellt wird oder indem ihr, eingeschlossen in eckige
Klammern, ein Index folgt. Eine Array-Variable, die ohne Index in eckigen Klammern
benutzt wird, wirkt wie ein Zeiger auf das erste Element des Arrays.
Optional kann mit dem Zeichen "=" ein Initialisierungswert angegeben werden. Nach
dem Zeichen wird eine Konstante erwartet. Dieses ist bei Arrays entweder eine String-
Konstante oder eine Aufzählung der einzelnen Werte, eingeschlossen in geschweifte
Klammern und getrennt mit Kommazeichen. Werden weniger Zeichen bzw. Werte als
die deklarierte Elementanzahl angegeben, werden die restlichen Elemente mit Null
initialisiert. Die Initialisierung der globalen Variablen erfolgt einmal am Programmanfang;
lokale Variablen werden bei jedem Eintritt in die Funktion erneut initialisiert.
Wird auf eine lokale Variable, für die ein Initialisierungswert angegeben ist, nur lesend
zugegriffen, ist eine erneute Initialisierung bei jedem Aufruf der Funktion nicht
erforderlich. Bei der Deklaration solcher Variablen kann dem Typ ein const
vorangestellt werden.
Sollen mehrere Variablen desselben Typs deklariert werden, können deren Namen und
evtl. Initialisierungswerte jeweils mit einem Komma den vorhergehenden angehängt
werden. Eine Deklaration wird mit einem Semikolon beendet.
17
2.1.2 Konstanten
Konstante Werte können als Zeichenkonstanten angegeben werden (eingeschlossen in
einfache Anführungszeichen), als Integerkonstanten (numerische Werte) oder als
Stringkonstanten (eingeschlossen in doppelte Anführungszeichen).
In Zeichen- oder Stringkonstanten steht außerdem "\r" für "Return" (ASCII 13), "\n" für
"New Line" (ASCII 10) und "\t" für "Tab" (ASCII 8).
Integerkonstanten, die mit 0x oder 0X beginnen, sind hexadezimale Werte. Steht einer
Integerkonstante ein Minuszeichen voran, wird der Wert negiert.
Mit dem Schlüsselwort #define kann einer Konstanten ein Name zugeordnet werden.
Bei jedem Auftreten dieses Namens wird die entsprechende Konstante verwendet. Nach
#define dürfen keine zusammengesetzten Ausdrücke stehen.
Wie eine Konstante verhält sich außerdem sizeof. Nach sizeof kann eine Variable
angegeben werden (eingeschlossen in runde Klammern) und es wird dann die Größe
des Speicherplatzes dieser Variable in Bytes zurückgeliefert.
18
2.1.3 Funktionen
Eine Funktion wird deklariert, indem man den Typ ihres Rückgabewertes angibt (oder
void, wenn kein Wert zurückgegeben wird), danach den Namen der Funktion und
schließlich die Parameterliste, eingeschlossen in runde Klammern. Werden keine
Parameter übergeben, kann man () oder (void) nach dem Funktionsnamen angeben.
Die Parameterliste besteht für jeden Parameter aus dem Typ (char oder int) und
einem Namen für den Parameter. Mehrere Parameter werden jeweils durch ein Komma
getrennt.
Funktionsparameter werden vom Compiler wie Variablen angelegt, deren Inhalt vor dem
Aufruf der Funktion gefüllt wird. Innerhalb einer Funktion können sie wie lokale Variablen
genutzt werden. Wie bei lokalen Variablen gilt auch für die Parameter, dass sie bei
rekursivem Eintritt in die Funktion überschrieben werden, da die PLC nicht über einen
Stapelspeicher (Stack) für lokale Variablen und Parameter verfügt.
Nach der Parameterliste folgt eine geschweifte Klammer, anschließend können lokale
Variablen deklariert werden, dann folgen die einzelnen Anweisungen und schließlich
wieder eine geschweifte Klammer.
19
2.2 Anweisungen
Folgende Arten von Anweisungen werden unterschieden:
• Zuweisungen
• Funktionsaufrufe
• Kontrollanweisungen
20
2.2.1 Zuweisungen
Zuweisungen bestehen aus einem Variablennamen, einem Zuweisungsoperator, einem
Ausdruck und einem Semikolon. Ist die Variable als Array deklariert, muss der Array-
Index in Form eines entsprechenden Ausdrucks in eckigen Klammern hinter dem
Variablennamen angegeben werden.
In diesem Falle wird die entsprechende Operation zwischen der Variable und dem
Ergebnis des Ausdrucks vor der Zuweisung vorgenommen. So entspricht z.B. a+=1 der
Anweisung a=a+1. Eine besondere Form stellen die Operatoren "++" und "--" dar, mit
denen der Inhalt einer Variable um 1 erhöht oder erniedrigt werden kann. Diese
Operatoren können nicht in Ausdrücken verwendet werden.
21
2.2.2 Funktionsaufrufe
Eine Funktion wird aufgerufen, indem ihr Name angegeben wird, gefolgt von den als
Parameter zu übergebenden Ausdrücken (eingeschlossen in runde Klammern, getrennt
durch Kommazeichen). Funktionen ohne Parameter werden aufgerufen, indem ihrem
Namen () folgt.
22
2.2.3 Kontrollanweisungen
Folgende Kontrollanweisungen dienen der Kontrolle des Programmablaufs:
if (<Bedingung>) <Block>;
switch (<Ausdruck>)
{
case <Konstante>: <Block>;
case <Konstante>: <Block>;
...
default: <Block>;
};
break;
continue;
return;
return <Ausdruck>;
Ein Block ist entweder eine einzelne Anweisung (ohne nachfolgendes Semikolon) oder
eine Folge von Anweisungen (eingeschlossen in geschweifte Klammern). Der Block
kann auch leer sein bzw. fehlen. Eine Bedingung ist ein beliebiger Ausdruck. Wenn er
einen Wert ungleich Null liefert, ist die Bedingung erfüllt.
if wertet diesen Ausdruck aus und führt den nachstehenden Block nur aus, wenn die
Bedingung erfüllt ist. Folgt ein else, wird der darauf folgende Block ausgeführt, wenn
die Bedingung nicht erfüllt ist.
while führt den Block solange wiederholt aus, wie die Bedingung erfüllt ist. Die
Auswertung und Prüfung der Bedingung erfolgt vor der Ausführung des Blocks.
do führt den Block ebenfalls solange aus, wie die Bedingung erfüllt ist, jedoch wird sie
nach Ausführung des Blocks ausgewertet und geprüft (der Block wird also mindestens
einmal durchlaufen).
for führt zunächst einmal die erste angegebene Anweisung aus und prüft dann die
Bedingung. Ist sie erfüllt, werden erst der Block und dann die zweite angegebene
Anweisung ausgeführt, und zwar solange wiederholt, wie die Bedingung erfüllt ist.
23
switch beginnt abhängig vom Wert des Ausdrucks mit der Ausführung der nach dem
entsprechenden case stehenden Anweisungen und setzt die Ausführung bis zum
Auftreten eines break bzw. bis zum Ende der switch-Anweisung fort. Ist kein zum
Wert des Ausdrucks passendes case vorhanden, werden die nach default stehenden
Anweisungen ausgeführt.
break setzt die Ausführung mit der der aktuellen while-, do-, for- oder switch-
Anweisung folgenden Anweisung fort.
continue bricht die Ausführung des Blocks der aktuellen while-, do- oder for-
Anweisung ab und fährt mit dem nächsten Schleifendurchlauf fort.
return verläßt die Funktion. Liefert die Funktion einen Wert zurück, kann ein
entsprechender Ausdruck dem return nachgestellt werden.
24
2.3 Ausdrücke
Die einfachste Form eines Ausdrucks ist eine einzelne Konstante, eine einzelne Variable
oder ein Funktionsaufruf. In diesem Falle liefert der Ausdruck den Wert der Konstanten
oder den Inhalt der Variablen bzw. den Rückgabewert der Funktion. Bei Array-Variablen
muss in eckigen Klammern ein Ausdruck für den Index angegeben werden.
+ Addition
- Subtraktion
* Multiplikation
/ Division
% Divisionsrest
& bitweises AND
| bitweises OR
^ bitweises XOR
<< bitweises Verschieben nach links
>> bitweises Verschieben nach rechts
&& logisches Und
|| logisches Oder
= gleich
!= ungleich
< kleiner
<= kleiner oder gleich
> größer
>= größer oder gleich
Wenn die Reihenfolge der Operationen nicht durch Klammerebenen bestimmt ist, gelten
folgende Vorrangregeln (die Operationen der höchsten Stufe werden zuerst ausgeführt):
25
2.4 Integrierte Funktionen
Für die Kommunikation mit der CNC, den Zugriff auf Hardwarebaugruppen sowie für
diverse weitere Zwecke steht eine Reihe von integrierten Funktionen zur Verfügung.
Diese Funktionen werden genauso aufgerufen wie im Programm deklarierte Funktionen.
Die Namen dieser Funktionen sind reservierte Wörter, die nicht bei der Deklaration von
Konstanten, Variablen oder Funktionen verwendet werden dürfen.
• Arithmetische Funktionen
• Systemfunktionen
• Zugriff auf Ein-Ausgabebaugruppen
• Zugriff auf Achsbaugruppen
• Zugriff auf Hauptspindelbaugruppen
• Zugriff auf Busbaugruppe
• Zugriff auf Bedienfeld
26
2.4.1 Arithmetische Funktionen
int min(int Value1, int Value2)
gibt den kleineren der beiden Werte <Value1> und <Value2> zurück.
gibt den größeren der beiden Werte <Value1> und <Value2> zurück.
27
2.4.2 Steuerung des Programmablaufs
int PgRequest(int ID, int *Param1, int *Param2)
gibt 1 zurück, wenn die Anforderung <ID> der CNC zu verarbeiten ist. In diesem Falle
werden in <Param1> und <Param2> zwei Parameterwerte zu der anstehenden
Anforderung geliefert, die Anforderung muss danach verarbeitet und mit der Funktion
PgResponse quittiert werden.
Der erste Aufruf der Funktion PgRequest definiert gleichzeitig den entsprechenden M-
Code ("M<RequestId>") als gültig für die Verwendung in einem NC-Programm.
quittiert die Verarbeitung der Anforderung <ID> und gibt einen Rückgabewert <Result>
an die CNC bzw. das parallel laufende PLC-Programm zurück. Wurde die Anforderung
korrekt verarbeitet, muss <Result> einen Wert ungleich 0 haben. Andernfalls ist 0 als
<Result> zu übergeben.
veranlaßt die Verarbeitung der Anforderung <ID> mit den Parameterwerten <Param1>
und <Param2> durch ein anderes, parallel laufendes PLC-Programm.
hält die Programmausführung für eine Zeitspanne von <Time> Millisekunden an.
speichert den Wert <Value> unter dem Schlüsselbegriff <Key> im Abschnitt <Section>
der Datei "[Link]".
gibt den unter dem Schlüsselbegriff <Key> im Abschnitt <Section> der Datei "[Link]"
gespeicherten Wert zurück. Existiert der Eintrag nicht, wird 0 zurückgegeben.
28
2.4.3 Zugriff auf Benutzerschnittstelle
void UiInfo(char *Text, int Value)
zeigt eine Informationsmeldung <Text> auf dem CNC-Bildschirm an. Diese kann
Formatanweisungen zur Ausgabe des Wertes <Value> enthalten. Wird als <Text> ein
Leerstring übergeben, wird die zuletzt angezeigte Informationsmeldung wieder vom
Bildschirm gelöscht, wenn nicht zwischenzeitlich eine Fehlermeldung ausgegeben
wurde.
zeigt einen Wert <Text> auf dem CNC-Bildschirm an. Der Text kann
Formatanweisungen zur Ausgabe des Wertes <Value> enthalten. Wird als <Text> ein
Leerstring übergeben, wird der zuletzt angezeigte Wert wieder vom Bildschirm gelöscht.
zeigt eine Fehlermeldung <Text> auf dem CNC-Bildschirm an. Diese kann
Formatanweisungen zur Ausgabe des Wertes <Value> enthalten.
29
2.4.4 Zugriff auf Digital-Ein-/Ausgabebaugruppen
int DgGetDI(int ID)
gibt den Zustand (0 oder 1) des Digitaleingangs <ID> zurück. Ist <ID>%100 Null, wird
der Zustand (Bitmuster) aller Digitaleingänge der Baugruppe geliefert.
wartet maximal <Time> Millisekunden, bis der Digitaleingang <ID> den Zustand <Value>
hat und gibt 1 zurück, wenn der erwartete Zustand eingetreten ist; andernfalls wird 0
zurückgegeben. Ist <ID>%100 Null, wird auf den Zustand (Bitmuster <Value>) aller
Digitaleingänge der Baugruppe gewartet.
schaltet den Digitalausgang <ID> ein (<Value> = 1) oder aus (<Value> = 0). Ist <ID>
%100 Null, wird der Zustand aller Digitalausgänge der Baugruppe entsprechend des
Bitmusters <Value> gesetzt.
gibt den Schaltzustand (0 oder 1) des Digitalausgangs <ID> zurück. Ist <ID>%100 Null,
wird der Zustand (Bitmuster) aller Digitalausgänge der Baugruppe geliefert.
schaltet den Digitalausgang <ID> um ("Ein" statt "Aus" bzw. "Aus" statt "Ein"). Ist <ID>
%100 Null, wird der Zustand aller Digitalausgänge der Baugruppe umgeschaltet.
schaltet den Digitalausgang <ID> für <Time> Millisekunden ein und dann wieder aus. Ist
<ID>%100 Null, werden alle Digitalausgänge der Baugruppe ein- und wieder
ausgeschaltet.
setzt den dem Digitaleingang <ID> zugeordneten Ereigniszähler auf 0 zurück. Ist <ID>
%100 Null, werden alle Ereigniszähler der Baugruppe zurückgesetzt.
30
int DgWaitCount(int ID, int Value, int Time)
wartet maximal <Time> Millisekunden, bis der dem Digitaleingang <ID> zugeordnete
Ereigniszähler den Zählerstand <Value> erreicht hat und gibt 1 zurück, wenn der
erwartete Zählerstand erreicht wurde; andernfalls wird 0 zurückgegeben.
gibt 1 zurück, wenn seit dem letzten Aufruf von DgGetEvent oder DgWaitEvent die
Ereigniserkennung des Digitaleingangs <ID> ausgelöst wurde; andernfalls wird 0
zurückgegeben. Ist <ID>%100 Null, wird 0 zurückgegeben.
wartet maximal <Time> Millisekunden, bis die dem Digitaleingang <ID> zugeordnete
Ereigniserkennung ausgelöst wird. Wird in der angegebenen Zeit ein Ereignis ausgelöst,
wird 1 zurückgegeben, andernfalls 0.
31
2.4.5 Zugriff auf Analog-Ein-/Ausgabebaugruppen
int AnGetAI(int ID)
gibt am Analogausgang <ID> die Spannung <Voltage> (in mV) aus. Ist <ID>%100 Null,
wird an allen Analogausgängen der Baugruppe die Spannung <Voltage> ausgegeben.
32
2.4.6 Zugriff auf Achsbaugruppen
int AxGetDI(int ID, int Input)
gibt den Schaltzustand des Digitaleingangs <Input> (1 = MI1, 2 = MI2, 3 = MAL) der
Achsbaugruppe <ID> zurück. Ist <Input> Null, wird der Zustand (Bitmuster) aller
Digitaleingänge der Baugruppe geliefert.
wartet maximal <Time> Millisekunden, bis der Digitaleingang <Input> (1 = MI1, 2 = MI2,
3 = MAL) der Achsbaugruppe <ID> den Zustand <Value> hat und gibt 1 zurück, wenn
der erwartete Zustand eingetreten ist; andernfalls wird 0 zurückgegeben. Ist <Input>
Null, wird auf den Zustand (Bitmuster <Value>) aller Digitaleingänge der Baugruppe
gewartet.
gibt am Analogausgang der Achsebaugruppe <ID> die Spannung <Voltage> (mV) aus.
setzt die aktuelle Position der Achse <ID> auf <Pos>. <Pos> ist in Vielfachen von 0,001
mm bzw. 0,001 ° anzugeben.
gibt die aktuelle Position der Achse <ID> zurück. Der Positionswert ist ein Vielfaches
von 0,001 mm bzw. 0,001 °. Ist die Servoregelung aktiv, wird die Sollposition geliefert;
andernfalls die Istposition.
33
int AxWaitReady(int ID, int Time)
wartet maximal <Time> Millisekunden, bis der Achsantrieb <ID> betriebs- bzw.
einschaltbereit ist (Alarmeingang inaktiv) und gibt 1 zurück, wenn der erwartete Zustand
eingetreten ist; andernfalls wird 0 zurückgegeben. Bei <ID> = 0, wird gewartet, bis alle
Achsantriebe bereit sind.
int AxMove(int ID, int Relative, int Pos, int Feed, int Input,
int StopAbruptly)
verfährt die Achse <ID> auf die absolute (<Relative> = 0) oder relative (<Relative>
ungleich 0) Position <Pos> mit der Geschwindigkeit <Feed> (mm/min). <Pos> ist in
Vielfachen von 0,001 mm bzw. 0,001 ° anzugeben. Die Achse wird verfahren bis der
Eingang <Input> (1 = MI1, 2 = MI2, 3 = Indexmarke) der Achsbaugruppe seinen Zustand
wechselt. Ist <Input> = 0, wird die komplette Strecke gefahren. Die Funktion gibt 1
zurück, wenn der angegebene Eingang seinen Zustand wechselte bzw. (bei <Limit> = 0)
die komplette Strecke gefahren wurde. Es wird 0 zurückgegeben, wenn bei <Input> = 0
die Zielposition nicht erreicht wurde (Abbruch der Bewegung durch den Bediener oder
Antriebsfehler) oder wenn bei <Input> ungleich 0 der Eingang keine Zustandsänderung
erfuhr. Ist <StopAbruptly> ungleich 0, wird die Verfahrbewegung bei Zustandsänderung
des Eingangs bzw. Erreichen der Indexmarke ohne Bremsrampe abrupt angehalten.
Für eine interpolierte Achse darf die Funktion AxMove nur aufgerufen werden, wenn
eine CNC-Anforderung zu verarbeiten ist; nur für Hilfsachsen darf der Aufruf auch
asynchron zur CNC erfolgen.
setzt die Referenzposition <Pos1> und den Status "Referenzfahrt erfolgt" der Achse
<ID>. Ist <Here> ungleich 0, wird die aktuelle Position zur Referenzposition. Andernfalls
die Position, an der beim vorangegangenen AxMove mit <Input> ungleich 0 der Eingang
seinen Zustand gewechselt hat. Handelt es sich um eine Gantry-Achse, wird die
Referenzposition <Pos2> für den zweiten Antrieb verwendet.
Für eine interpolierte Achse darf die Funktion AxHome nur aufgerufen werden, wenn
eine CNC-Anforderung zu verarbeiten ist; nur für Hilfsachsen darf der Aufruf auch
asynchron zur CNC erfolgen.
gibt den Status "Referenzfahrt erfolgt" (0 oder 1) der Achse <ID> zurück. Ist <ID> Null,
wird 1 zurückgegeben, wenn für alle Hauptachsen die Referenzfahrt erfolgt ist.
34
int AxMovePos(int ID1, int Pos1, int ID2, int Pos2, int ID3, int
Pos3, int Feed)
führt eine Verfahrbewegung von bis zu drei Achsen <ID1> bis <ID2> auf die Positionen
<Pos1> bis <Pos3> mit der Geschwindigkeit <Feed> (mm/min) durch. Für weniger als
drei zu verfahrende Achsen kann für <ID1>, <ID2> oder <ID3> 0 übergeben werden.
Werden die Positionen erreicht, wird 1 zurückgegeben; bei Nichterreichen der
Positionen (Abbruch der Bewegung durch den Bediener oder Antriebsfehler) wird 0
zurückgegeben.
Für interpolierte Achsen darf die Funktion AxMovePos nur aufgerufen werden, wenn
eine CNC-Anforderung zu verarbeiten ist; nur wenn es sich bei allen beteiligten Achsen
um Hilfsachsen handelt, darf der Aufruf auch asynchron zur CNC erfolgen.
führt ein automatisches Servo-Tuning der Achse <ID> durch und liefert den ermittelten
KP-Wert zurück. Die Achse wird dabei ausgehend von der aktuellen Position um 0,1 mm
hin- und her verfahren.
35
2.4.7 Zugriff auf Hauptspindelbaugruppen
int SpGetDI(int ID, int Input)
gibt den Schaltzustand des Digitaleingangs <Input> (1 = MI1, 2 = MI2, 3 = MAL) der
Hauptspindelbaugruppe <ID> zurück. Ist <Input> Null, wird der Zustand (Bitmuster) aller
Digitaleingänge der Baugruppe geliefert.
wartet maximal <Time> Millisekunden, bis der Digitaleingang <Input> (1 = MI1, 2 = MI2,
3 = MAL) der Hauptspindelbaugruppe <ID> den Zustand <Value> hat und gibt 1 zurück,
wenn der erwartete Zustand eingetreten ist; andernfalls wird 0 zurückgegeben. Ist
<Input> Null, wird auf den Zustand (Bitmuster <Value>) aller Digitaleingänge der
Baugruppe gewartet.
setzt die aktuelle Winkelposition der Hauptspindel <ID> auf <Pos>. Die Position ist in
Vielfachen von 0.001° anzugeben.
gibt die aktuelle Winkelposition (in Vielfachen von 0.001°) der Hauptspindel <ID> zurück.
36
int SpWaitReady(int ID, int Time)
wartet maximal <Time> Millisekunden, bis der Hauptspindelantrieb <ID> betriebs- bzw.
einschaltbereit ist (Alarmeingang inaktiv) und gibt 1 zurück, wenn der erwartete Zustand
eingetreten ist; andernfalls wird 0 zurückgegeben. Bei <ID> = 0, wird gewartet, bis alle
Hauptspindelantriebe bereit sind.
ändert den Drehzahlsollwert der Hauptspindel <ID> auf die der Getriebestufe <Gear>
und dem Drehzahlwert <Value> (0.001/min) entsprechende Spannung. Soll eine
negative Spannung ausgegeben werden, ist für <Value> ein negativer Wert anzugeben.
gibt die aktuelle Drehzahl der Hauptspindel <ID> in Vielfachen von 0.001/min zurück. Ist
die Spindel mit einem Encoder ausgestattet, wird die tatsächliche (gemessene)
Drehzahl zurückgegeben und ihr Vorzeichen gibt die Drehrichtung an; andernfalls wird
der zuletzt mit SetSpindleRPM ausgegebene Drehzahlsollwert (mit dem dabei
angegebenen Vorzeichen) zurückgegeben.
37
2.4.8 Zugriff auf Servobaugruppen
void SvSetPos(int ID, int Pos)
fährt den Servo <ID> auf die Position <Pos>. <Pos> ist in Vielfachen von 0,001 °
anzugeben.
liefert die aktuelle Position des Servos <ID> (in Vielfachen von 0,001 °).
38
2.4.9 Zugriff auf Modbus-TCP-Geräte
int MbGetIR(int ID, int Adr)
setzt das Holding-Register mit der Adresse <Adr> auf den Wert <Value>.
Die Funktionen MbGetHR und MbSetHR dienen, aufgerufen mit <ID>=0, auch dem
Zugriff auf die Holding-Register (Adresse 0 bis 65535) eines in der PLC implementierten
Modbus-TCP-Servers. Dieser Server unterstützt die Modbus-Funktion 3 ("read holding
registers"), beschränkt auf ein einzelnes Register, sowie die Modbus-Funktion 6 ("write
single holding register"). Der Modbus-Server ermöglicht die Kommunikation zwischen
der PLC und bis zu (gleichzeitig) 32 externen Geräten bzw. Softwareanwendungen, die
als Modbus-Clients fungieren.
39
2.4.10 Zugriff auf Busbaugruppe
int BuGetAlarm(void)
gibt den Zustand der Alarmeingänge der Busbaugruppe zurück. Sind alle vier Eingänge
aktiv (normaler Betriebszustand), wird 0x00 zurückgegeben. Bit 0 des Rückgabewertes
entspricht Eingang 1 (CA1), Bit 1 Eingang 2 (CA2) usw.
int BuGetCEO(void)
gibt den Schaltzustand des Not-Aus-Relais (CEO) der Busbaugruppe zurück. Ist der
Relaiskontakt geöffnet (ALARM STEUERUNG ausgelöst), wird 1 zurückgegeben.
schaltet den Not-Aus-Ausgang (CEO) der Busbaugruppe. Wenn <CEO> ungleich Null
ist, wird ALARM STEUERUNG ausgelöst und das Relais öffnet; bei Null wird der
Relaiskontakt geschlossen (normaler Betriebszustand).
40
2.4.11 Zugriff auf Bedienfeld
int PnSetPot(int Pot, int Percent)
setzt den Prozentwert (aktuelle Stellung des Potentiometers <Pot>, 1 oder 2) des
Bedienfeldes auf den Wert <Percent>.
gibt die Stellung des Potentiometers <Pot> (1 oder 2) des Bedienfeldes als Prozentwert
zurück.
41
2.5 Programmablauf
Alle PLC-Programme werden bei der Initialisierung der Steuerungssoftware gestartet
und dann parallel ausgeführt, bis die Steuerungssoftware beendet wird.
Die Kommunikation zwischen der CNC und den PLC-Programmen erfolgt über die
Funktionen PgRequest und PgResponse. Ein PLC-Programm prüft dabei kontinuierlich
durch Aufruf von PgRequest, ob eine von ihm zu verarbeitende Anforderung vorliegt.
Ist dies der Fall, verarbeitet es die Anforderung und antwortet mit PgResponse. Mit der
Funktion PgExecute kann ein PLC-Programm eine Anforderung durch ein anderes
PLC-Programm verarbeiten lassen.
Eine Anforderung der CNC oder eines anderen PLC-Programms muss innerhalb von 2
Sekunden von einem der parallel ablaufenden PLC-Programme durch Aufruf der
Funktion PgRequest entgegengenommen und die entsprechende Anforderung muss
dann innerhalb von 60 Sekunden verarbeitet und mit PgResponse quittiert werden.
42
3 PLC-Anforderungen
Für Maschinenfunktionen, deren Ausführung beim Ablauf von NC-Programmen oder bei
der manuellen Bedienung der Maschine notwendig ist, stellt die CNC entsprechende
Anforderungen an die PLC. Diese führt die Anforderungen aus und meldet die
erfolgreiche Ausführung bzw. etwaige Fehler bei der Ausführung an die CNC zurück.
43
3.1 Schnittstelle CNC/PLC
Folgende Anforderungen können von der CNC an die PLC übermittelt werden:
44
Nach Ausführung einer Anforderung ist von der PLC ein Wert ungleich 0
zurückzuliefern, wenn die Anforderung ausgeführt wurde und 0, wenn ein Fehler auftrat.
Die M-Funktionen M0, M48, M49 und M62 sind vollständig in der CNC implementiert; für
diese Funktionen werden keine Anforderungen übermittelt und sie sind, unabhängig von
der Software der PLC, immer in NC-Programmen verfügbar. Die Funktionen M1, M2 und
M30 sind in der CNC implementiert, rufen jedoch ggf. zusätzlich die entsprechenden
Maschinenfunktionen auf, wenn diese in der PLC ebenfalls implementiert sind. Alle
übrigen M-Funktionen können in NC-Programmen nur genutzt werden, wenn die
entsprechenden Anforderungen in der Software der PLC implementiert sind.
Die Funktionen M3/M4, M14 und M23/M24 werden von der CNC nicht nur aufgerufen,
wenn sie explizit programmiert sind bzw. manuell aufgerufen werden, sondern auch
dann, wenn sie bereits aktiv sind und sich das CNC-Register S ändert.
Die Funktion M6 wird von der CNC nur aufgerufen, wenn sich die aktuelle
Werkzeugnummer T geändert hat.
M12 wird von der CNC zunächst mit Parameter P1 = 0 aufgerufen; die PLC sollte dann
den Meßtaster anfahren und die Z-Position zurückliefern. Die CNC ermittelt dann die
Werkzeugkorrekturdaten als Differenz zwischen dieser Position und der aktuellen
Maschinenposition. Dann erfolgt ein zweiter Aufruf von M12 (P1 = 1) zum Freifahren
(Rückzug vom Meßtaster).
45
Der Aufruf der intern durch die CNC verwendeten Maschinenfunktionen geschieht wie
folgt:
wird einmal beim Start der PC-Software und jedesmal beim Ausschalten der Maschine
(Funktionstaste Umsch+F2) aufgerufen. Die CNC kann hiermit z.B. einen Reset des
Not-Aus-Kreises durchführen.
wird aufgerufen, wenn die Maschine über die Funktionstaste Umsch+F1 eingeschaltet
wird (ReqP1 = 1) oder über Umsch+F2 ausgeschaltet wird (ReqP1 = 0). Die PLC kann
hier z.B. die Leistungselektronik (Servoregler etc.) der Maschine ein- oder ausschalten
und z.B. mit ReqRes = 0 zurückmelden, dass ein Einschalten nicht möglich war (z.B.
Not-Aus betätigt).
wird beim Einschalten der Maschine nach M91 (mit ReqP1 = 1) und beim Ausschalten
vor M91 (mit ReqP1 = 0) aufgerufen.
904 (Referenzfahrt)
wird bei Anforderung einer Referenzfahrt durch den Benutzer (mit der Funktionstaste
Umsch+F3) aufgerufen. War die Referenzfahrt erfolgreich, setzt die PLC ReqRes = 1.
dient dem Freifahren der Achsen unter Kontrolle der CNC nach Auslösung eines
Hardware-Endschalters.
wird mit ReqP1 = 1 aufgerufen, wenn dem Bediener auf dem PC-Bildschirm eine
Fehlermeldung angezeigt wird und mit ReqP1 = 0, wenn der Bediener diese bestätigt
hat. Die PLC kann hier z.B. eine Warnlampe ein- und wieder ausschalten.
46