Entdecken Sie eBooks
Kategorien
Entdecken Sie Hörbücher
Kategorien
Entdecken Sie Zeitschriften
Kategorien
Entdecken Sie Dokumente
Kategorien
CREAD/CWRITE
Stand: 11.07.2011
© Copyright 2011
KUKA Roboter GmbH
Zugspitzstraße 140
D-86165 Augsburg
Deutschland
Diese Dokumentation darf – auch auszugsweise – nur mit ausdrücklicher Genehmigung der KUKA
Roboter GmbH vervielfältigt oder Dritten zugänglich gemacht werden.
Es können weitere, in dieser Dokumentation nicht beschriebene Funktionen in der Steuerung lauffä-
hig sein. Es besteht jedoch kein Anspruch auf diese Funktionen bei Neulieferung bzw. im Servicefall.
Wir haben den Inhalt der Druckschrift auf Übereinstimmung mit der beschriebenen Hard- und Soft-
ware geprüft. Dennoch können Abweichungen nicht ausgeschlossen werden, so dass wir für die voll-
ständige Übereinstimmung keine Gewähr übernehmen. Die Angaben in dieser Druckschrift werden
jedoch regelmäßig überprüft und notwendige Korrekturen sind in der nachfolgenden Auflage enthal-
ten.
Technische Änderungen ohne Beeinflussung der Funktion vorbehalten.
Original-Dokumentation
KIM-PS5-DOC
Inhaltsverzeichnis
1 Einleitung ..................................................................................................... 5
1.1 Zielgruppe .................................................................................................................. 5
1.2 Dokumentation des Industrieroboters ........................................................................ 5
1.3 Darstellung von Hinweisen ........................................................................................ 5
1.4 Verwendete Begriffe .................................................................................................. 6
2 Funktionsbeschreibung .............................................................................. 7
3 Sicherheit ..................................................................................................... 9
4 Kommunikations-Kanäle ............................................................................ 11
4.1 Kommunikation über externe Module ........................................................................ 11
4.2 Kommunikation über den Kommandokanal $CMD .................................................... 11
4.3 Kommunikation über den Kommandokanal $FCT_CALL .......................................... 12
7 Beispielprogramme ..................................................................................... 51
7.1 Externes Modul: Funktion über LD_EXT_FCT aufrufen ............................................ 51
7.2 Kommandokanal $CMD: Programm starten, stoppen, abwählen ............................. 51
7.3 CREAD/CWRITE mit CAST-Anweisungen kombinieren ........................................... 51
7.4 Kommandokanal $FCT_CALL: Zeichen in Datei schreiben ...................................... 52
8 Anhang ......................................................................................................... 55
8.1 Fehler beim Schreiben in den Kommandokanal $FCT_CALL ................................... 55
Index ............................................................................................................. 65
1 Einleitung
1.1 Zielgruppe
Sicherheit Diese Hinweise dienen der Sicherheit und müssen beachtet werden.
Hinweise Diese Hinweise dienen der Arbeitserleichterung oder enthalten Verweise auf
weiterführende Informationen.
Begriff Beschreibung
CIFS Common Internet File System
Dateisystem für Datei-, Druck- und weitere Server-
Dienste in Netzwerken
Ethernet Ethernet ist eine Datennetztechnologie für lokale
Datennetze (LANs). Sie ermöglicht den Datenaus-
tausch in Form von Datenrahmen zwischen den ver-
bundenen Teilnehmern.
Header-Datei Textdatei, die Deklarationen und andere Bestandteile
des Quelltextes enthält
IP Internet Protocol
Das Internet-Protokoll hat die Aufgabe, Subnetze über
physikalische MAC-Adressen zu definieren.
KR C KUKA Robotersteuerung (KUKA Robot Controller)
KRL KUKA Roboter Programmiersprache (KUKA Robot
Language)
Little Endian Byte-Reihenfolge für die Codierung einfacher Zahlen-
werte
Im Little Endian-Format wird das niederwertigste Bit an
der ersten Stelle gespeichert.
stdio.h Header-Datei der Programmiersprache C und C++
TCP Transmission Control Protocol
Protokoll über den Datenaustausch zwischen den Teil-
nehmern eines Netzwerks. TCP stellt einen virtuellen
Kanal zwischen 2 Endpunkten einer Netzwerkverbin-
dung her. Auf diesem Kanal können in beide Richtun-
gen Daten übertragen werden.
2 Funktionsbeschreibung
Funktionen CREAD und CWRITE sind flexible Anweisungen, mit denen zwischen der Ro-
botersteuerung und einer anderen Steuerung kommuniziert werden kann.
Ebenso können sie für die Kommunikation innerhalb der Robotersteuerung
genutzt werden.
CREAD liest Daten aus einem Kanal. CWRITE schreibt Daten in einen Kanal.
Mit CREAD/CWRITE kann über folgende Kanäle kommuniziert werden:
Externe Module
(>>> 4.1 "Kommunikation über externe Module" Seite 11)
Kommandokanal $CMD (nur CWRITE)
(>>> 4.2 "Kommunikation über den Kommandokanal $CMD" Seite 11)
Kommandokanal $FCT_CALL (nur CWRITE)
(>>> 4.3 "Kommunikation über den Kommandokanal $FCT_CALL" Sei-
te 12)
Beispiel Die Robotersteuerung empfängt über ein geladenes externes Modul Positi-
onsdaten von einer anderen Steuerung, z. B. von einem Kamerasystem. Mit
CREAD liest die Robotersteuerung diese Positionsdaten aus dem externen
Modul.
3 Sicherheit
Diese Dokumentation enthält Sicherheitshinweise, die sich spezifisch auf die
hier beschriebene Software beziehen.
Die grundlegenden Sicherheitsinformationen zum Industrieroboter sind im Ka-
pitel "Sicherheit" der Bedien- und Programmieranleitung für Systemintegrato-
ren oder der Bedien- und Programmieranleitung für Endanwender zu finden.
4 Kommunikations-Kanäle
Beschreibung Externe Module sind Treiber für beliebige Schnittstellen, beispielsweise für
TCP/IP oder für Ethernet-Schnittstellen. Ein externes Modul wird immer au-
ßerhalb der Robotersteuerung als O-File realisiert und dann in die Roboter-
steuerung integriert.
Die Realisierung und Integration von externen Modulen ist nicht Be-
standteil dieser Dokumentation. Diese Dokumentation behandelt, wie
über CREAD/CWRITE mit integrierten externen Modulen kommuni-
ziert werden kann.
Externe Module können sowohl für die Kommunikation innerhalb der Roboter-
steuerung eingesetzt werden als auch für die Kommunikation mit anderen
Steuerungen.
Es gibt 2 Typen von externen Modulen:
LD_EXT_OBJ
Mit diesem Typ können über CREAD und CWRITE Daten ausgetauscht
werden.
LD_EXT_FCT
Dieser Typ enthält Funktionen. Die Funktionen werden über CWRITE auf-
gerufen. LD_EXT_FCT kann Funktionsparameter an CWRITE zurückge-
ben. (CREAD ist bei diesem Typ nicht möglich.)
Die Robotersteuerung kann mit maximal 4 externen Modulen (2 pro Typ)
gleichzeitig kommunizieren.
Konfiguration Die externen Module müssen für die Kommunikation mit CREAD/CWRITE
konfiguriert werden.
(>>> 5 "Konfiguration der externen Module" Seite 13)
Übersicht
Konfiguration Der Kommandokanal muss für die Kommunikation mit CWRITE nicht konfigu-
riert werden.
Übersicht
Beschreibung Mithilfe von CWRITE können über den Kommandokanal Operationen auf dem
Dateisystem ausgeführt werden. Beispiel: Eine Datei über den Kommandoka-
nal öffnen und ein Zeichen oder eine Zeichenkette in die Datei schreiben.
Die Dateisystem-Funktionen können sowohl aus einem Roboter-Interpreter-
Programm als auch aus einem Submit-Interpreter-Programm heraus aufgeru-
fen werden. Es ist nicht zulässig, eine Datei aus dem einem Interpreter heraus
zu öffnen und auf diese Datei anschließend aus dem anderen Interpreter he-
raus zuzugreifen, z. B. um darauf zu schreiben oder die Datei wieder zu
schließen.
Beim Aufruf einer Dateisystem-Funktion wird eine spezifische Anzahl an Pa-
rametern an diese Funktion übergeben. Jede dieser Funktionen liefert über
CWRITE einen Rückgabewert. Der Rückgabewert zeigt an, ob die Funktion
erfolgreich ausgeführt oder mit einem Fehler abgebrochen wurde. Bei einem
Fehler kann die Ursache über die zurückgegebene Fehlernummer einge-
grenzt werden.
(>>> 8.1 "Fehler beim Schreiben in den Kommandokanal $FCT_CALL" Sei-
te 55)
CREAD ist für den Kommandokanal nicht relevant.
Konfiguration Der Kommandokanal muss für die Kommunikation mit CWRITE nicht konfigu-
riert werden.
Übersicht
Parameter O_FILE[]
In die eckige Klammer müssen Pfad und Dateiname des O-Files eingetragen
werden, z. B. DRIVERS\tcpdrv.o.
O-Files liegen immer unterhalb des Verzeichnisses C:\KRC\ROBOTER. Die-
ser Teil des Pfades muss nicht angegeben werden.
OPTION (Bit 0)
Bit 0 von OPTION legt fest, was mit einem externen Modul bei CCLOSE ge-
schieht. Die Einstellung heißt "Force unload".
Wert Beschreibung
Bit 0 = 1 "Force unload" ist aktiv. CCLOSE schließt den Kanal zum
Modul, das Modul wird entladen und die Modul-Umgebung
wird zerstört.
Bit 0 = 0 "Force unload" ist nicht aktiv. CCLOSE schließt den Kanal
zum Modul. Das Modul bleibt geladen und die Modul-Um-
gebung wird nicht zerstört. Bei einem zukünftigen COPEN
muss das Modul nicht neu geladen werden.
OPTION (Bit 1)
Bit 1 von OPTION ist nur relevant für externe Module vom Typ LD_EXT_OBJ
mit inaktivem "Force unload". Die Einstellung heißt "Leave data".
Wert Beschreibung
Bit 1 = 1 "Leave data" ist aktiv. Bei CCLOSE bleiben alle empfange-
nen, aber noch nicht gelesenen Daten erhalten. Wenn der
Kanal erneut geöffnet wird, können diese Daten von
CREAD gelesen werden.
Bit 1 = 0 "Leave data" ist nicht aktiv. CCLOSE löscht alle empfange-
nen, aber noch nicht gelesenen Daten.
6 Programmierung
Syntax-Element Darstellung
KRL-Code Schriftart Courier
Großschreibung
Beispiele: GLOBAL; ANIN ON; OFFSET
Elemente, die durch pro- Kursiv
grammspezifische Anga- Groß-/Kleinschreibung
ben ersetzt werden müssen
Beispiele: Strecke; Zeit; Format
Optionale Elemente In spitzen Klammern
Beispiel: <STEP Schrittweite>
Elemente, die sich gegen- Getrennt durch das Zeichen "|"
seitig ausschließen
Beispiel: IN |OUT
6.3 CHANNEL
Erläuterung der
Element Beschreibung
Syntax
Kanalname Name für das externe Modul
Schnitt- Vordefinierte Signalvariable
stellenname
Strukturva- Strukturvariable für das externe Modul ($EXT_MOD_x)
riable
6.4 COPEN
Beschreibung Bevor über ein externes Modul mit CREAD/CWRITE kommuniziert werden
kann, muss der Kanal mit COPEN geöffnet werden.
Ein Kommandokanal ist immer offen und muss weder geöffnet noch geschlos-
sen werden.
Wenn ein Kanal in einem SRC-Programm geöffnet wurde, muss er wieder ge-
schlossen werden, bevor er in einem SUB-Programm geöffnet werden kann.
Umgekehrt muss ein Kanal, der in einem SUB-Programm geöffnet wurde, wie-
der geschlossen werden, bevor er in einem SRC-Programm geöffnet werden
kann.
Wenn ein Kanal, der bereits geöffnet ist, vom gleichen Interpreter erneut ge-
öffnet wird, dann wird das gleiche Handle nochmal zurückgegeben.
Erläuterung der
Element Beschreibung
Syntax
Kanalname Kanalname, der mit der CHANNEL-Anweisung vereinbart
wurde
Handle Typ: INT
Handle-Variable, an die zurückgemeldet wird, ob der Kanal
geöffnet wurde
Handle > 0
Der Kanal wurde geöffnet. Die Verwaltungsnummer des
geöffneten Kanals wurde zurückgemeldet.
Handle = 0
Fehler. Der Kanal konnte nicht geöffnet werden.
Handle < 0
Das Modul wurde erfolgreich geladen, es konnte jedoch
nicht initialisiert werden. Die Nummer spezifiziert die Ur-
sache des Initialisierungsfehlers laut Treiberdokumen-
tation.
Die Variable Handle muss deklariert werden. Es ist sinnvoll, sie in der
Datei $CONFIG.DAT folgendermaßen zu deklarieren und zu initiali-
sieren:
INT HANDLE = 0
Durch die Deklaration in der Datei $CONFIG.DAT steht die Variable in allen
Programmen zur Verfügung.
6.5 CREAD
Beschreibung CREAD liest Daten aus einem geladenen externen Modul vom Typ
LD_EXT_OBJ.
Aus externen Modulen vom Typ LD_EXT_FCT und aus einem Kommandoka-
nal kann nicht gelesen werden.
Daten vom Typ INT müssen im Little Endian-Format vorliegen und ein
Vorzeichen haben.
Daten vom Typ REAL müssen in 32-Bit-Darstellung im Standardformat
IEEE 754 vorliegen.
Syntax CREAD (Handle, Status, Modus, TIMEOUT, OFFSET, Format, Var1 <,
…,Var10>)
Erläuterung der
Element Beschreibung
Syntax
Handle Typ: INT
Handle-Variable, die von COPEN an CREAD übergeben
wird und den Kanal identifiziert
Status Typ: STATE_T
Status, der automatisch an CREAD zurückgemeldet wird
(>>> 6.14 "Variable "Status"" Seite 27)
Modus Typ: MODUS_T
Der Lese-Modus muss initialisiert werden.
(>>> 6.5.1 "Lese-Modus für CREAD" Seite 18)
TIMEOUT Typ: REAL
Der Timeout ist nur relevant bei Lese-Modus ABS. Der
Timeout legt fest, wie lange auf Daten gewartet wird.
0.0 … 60.0 s
Beispiel:
TIMEOUT=10.0: Wenn nach 10 Sekunden keine Daten
eingetroffen sind, ist die CREAD-Anweisung beendet.
Element Beschreibung
OFFSET Typ: INT
Die Stelle innerhalb des empfangenen Textstrings, an der
CREAD mit dem Lesen beginnt. Wenn von Anfang an gele-
sen werden soll, muss der Offset auf 0 gesetzt werden.
Beispiele:
OFFSET=0: CREAD beginnt an der 1. Stelle mit dem
Lesen.
OFFSET=2: CREAD beginnt an der 3. Stelle mit dem
Lesen. Die Stellen 1 und 2 bleiben unberücksichtigt.
Der Offset wird beim Lesen hochgezählt. Wenn bei einer
weiteren CREAD-Anweisung wieder an der 1. Stelle mit
dem Lesen begonnen werden soll, muss der Offset vor die-
ser Anweisung auf 0 gesetzt werden. Anderenfalls wird der
hochgezählte Offset der vorigen Anweisung übernommen.
Format Typ: CHAR-Feld
Damit die empfangenen Daten in die Variablen Var1 …
Var10 geschrieben werden können, müssen sie formatiert
werden. Für jede der Variablen muss ein Format angege-
ben werden.
(>>> 6.15 "Variable "Format"" Seite 29)
Var1 … Variablen, in die die empfangenen Daten geschrieben wer-
Var10 den. Pro Anweisung sind maximal 10 Variablen möglich.
Beschreibung Der Modus beim Lesen wird durch eine Variable vom Typ MODUS_T be-
stimmt. MODUS_T ist ein vordefinierter Aufzählungstyp:
ENUM MODUS_T SYNC, ASYNC, ABS, COND, SEQ
Für CREAD sind nur ABS und COND relevant:
Wert Beschreibung
ABS CREAD wartet solange, bis der Kanal Daten zum Lesen be-
reitstellt oder bis das Warten durch Timeout abgebrochen
wird.
COND CREAD prüft, ob Daten zum Lesen vorhanden sind:
Wenn Daten vorhanden sind, werden diese gelesen.
Wenn keine Daten vorhanden sind, wird nicht gewartet.
Die CREAD-Anweisung gilt als beendet.
COND ist sinnvoll, wenn die CREAD-Anweisung über einen
Interrupt dann ausgelöst wird, wenn Daten zum Lesen vor-
handen sind.
(>>> "Lesen mit Interrupt" Seite 18)
Lesen mit Um zu ermitteln, ob Daten zum Lesen bereitstehen, wird eine Systemvariable
Interrupt abgefragt:
$DATA_LD_EXT_OBJx für das externe Modul LD_EXT_OBJx
Wenn Daten eintreffen, wird die Systemvariable vom Kanaltreiber hochge-
zählt. Die Daten können dann mit einem Interrupt-Programm gelesen werden.
Beim Warmstart, Öffnen und Schließen eines Kanals werden die Variablen mit
0 initialisiert. Wenn die Option "Leave data" aktiviert ist, wird die Variable nicht
zurückgesetzt.
Interrupt-Programm:
DEF OBJ_INT ()
DECL MODUS_T MODE
...
INTERRUPT OFF 10
WHILE ($DATA_LD_EXT_OBJ2<>0)
...
MODE=#COND
OFFSET=0
CREAD (HANDLE,..., MODE,...)
...
ENDWHILE
INTERRUPT ON 10
END
6.6 CWRITE
Ein Aufruf von CWRITE im Trigger ist nicht möglich. CWRITE kann
stattdessen in einem Trigger-Unterprogramm verwendet werden.
Beschreibung CWRITE schreibt Daten in ein geladenes externes Modul vom Typ
LD_EXT_OBJ. In einem geladenen externen Modul vom Typ LD_EXT_FCT
ruft CWRITE eine Funktion auf.
CWRITE schreibt Anweisungen in den Kommandokanal $CMD.
CWRITE ruft über den Kommandokanal $FCT_CALL eine Funktion auf.
CWRITE löst einen Vorlaufstopp aus.
Erläuterung der
Element Beschreibung
Syntax
Handle Typ: INT
Handle-Variable, die von COPEN an CWRITE übergeben
wird und den Kanal zum externen Modul identifiziert
$CMD Vordefinierte Handle-Variable für das Schreiben in den
Kommandokanal $CMD
$FCT_CALL Vordefinierte Handle-Variable für das Schreiben in den
Kommandokanal $FCT_CALL
Status Typ: STATE_T
Status, der automatisch an CWRITE zurückgemeldet wird
(>>> 6.14 "Variable "Status"" Seite 27)
Modus Typ: MODUS_T
Der Schreib-Modus muss initialisiert werden.
(>>> 6.6.1 "Schreib-Modus für CWRITE" Seite 20)
Element Beschreibung
Format Typ: CHAR-Feld
Die Variablen Var1 … Var10 müssen in einen Textstring
umgewandelt werden, damit sie in den Kanal geschrieben
werden können. Format legt das Format des zu erzeugen-
den Texts fest. Für jede der Variablen muss ein Format
angegeben werden.
(>>> 6.15 "Variable "Format"" Seite 29)
Bei externen Modulen vom Typ LD_EXT_FCT und beim
Kommandokanal $FCT_CALL: Statt eines Formats wird an
dieser Stelle der Name der aufzurufenden Funktion ange-
geben.
(>>> 6.16 "Funktionen für den Kommandokanal
$FCT_CALL" Seite 34)
Var1 … Variablen, deren Daten in den Kanal geschrieben werden.
Var10 Pro Anweisung sind maximal 10 Variablen möglich.
Bei externen Modulen vom Typ LD_EXT_FCT und beim
Kommandokanal $FCT_CALL: Die Variablen Var1 … Var10
enthalten die Übergabeparameter für die Funktion, die mit
Format aufgerufen wird.
Beschreibung Der Modus beim Schreiben wird durch eine Variable vom Typ MODUS_T be-
stimmt. MODUS_T ist ein vordefinierter Aufzählungstyp:
ENUM MODUS_T SYNC, ASYNC, ABS, COND, SEQ
Für CWRITE sind nur SYNC und ASYNC relevant:
Wert Beschreibung
SYNC Die CWRITE-Anweisung gilt als ausgeführt, wenn die Part-
nersteuerung die übermittelten Daten aus dem Empfangs-
puffer abgeholt hat.
ASYNC Beim Schreiben auf externe Module vom Typ
LD_EXT_FCT und beim Schreiben in den Kommandokanal
$FCT_CALL ist der Modus ASYNC nicht erlaubt.
Für die anderen Kanäle gilt: Die CWRITE-Anweisung gilt
als ausgeführt, wenn die Daten im Empfangspuffer der
Partnersteuerung eingetroffen sind.
Vorteil gegenüber SYNC: Das Programm läuft schneller
ab.
Nachteil gegenüber SYNC: Daten könnten verlorenge-
hen.
ABS, Wenn der Modus einen anderen Wert hat als SYNC oder
COND, SEQ ASYNC, wird defaultmäßig im Modus SYNC geschrieben.
6.7 CCLOSE
Beschreibung CCLOSE schließt den Kanal zu einem externen Modul. Ob das Modul entla-
den wird und ob zum Lesen anstehende Daten gelöscht werden, ist abhängig
von der Konfiguration.
(>>> 5 "Konfiguration der externen Module" Seite 13).
Ein Kommandokanal ist immer offen und muss weder geöffnet noch geschlos-
sen werden.
CCLOSE löst einen Vorlaufstopp aus.
Erläuterung der
Element Beschreibung
Syntax
Handle Typ: INT
Handle-Variable, die von COPEN an CCLOSE übergeben
wird und den Kanal identifiziert
Status Typ: STATE_T
Status, der automatisch an CCLOSE zurückgemeldet wird
(>>> 6.14 "Variable "Status"" Seite 27)
6.8 CIOCTL
Erläuterung der
Element Beschreibung
Syntax
Handle Typ: INT
Handle-Variable, die von COPEN an CIOCTL übergeben
wird und den Kanal identifiziert
Request Typ: INT
Anforderungsnummer, die by value an das externe Modul
übertragen wird. Nur Anforderungsnummern > 0 sind
erlaubt.
Hinter einer Anforderungsnummer können die verschie-
densten Funktionalitäten hinterlegt sein, beispielsweise
kann eine Anforderungsnummer ein bestimmtes Pro-
gramm starten. Die Bedeutung der Anforderungsnummern
ist modulspezifisch.
Argument Typ: INT
Daten, die an das externe Modul übertragen werden
Element Beschreibung
String Typ: CHAR-Feld
Feld, das an das externe Modul übertragen wird. Maximal
128 Feldelemente.
Retval Typ: INT
Rückgabewert, der by reference an das externe Modul
übertragen wird. Das externe Modul kann den Wert verän-
dern.
(>>> "Rückgabewerte" Seite 22)
6.9 SREAD
Beschreibung SREAD hat eine ähnliche Funktion und Syntax wie CREAD. Im Gegensatz zu
CREAD liest SREAD jedoch nicht Daten aus einem Kanal, sondern aus einem
CHAR-Feld.
SREAD kann in Programmen mit CREAD kombiniert werden. Vorteile:
CREAD kann darauf beschränkt werden, Daten aus dem Kanal zu lesen.
Komplexere Formatierungen können von SREAD übernommen werden.
Dadurch werden die Programme flexibler.
CREAD kann maximal 10 Variablen verarbeiten. Durch die Kombination
mit mehreren SREAD-Anweisungen können die Daten von mehr als 10
Variablen gelesen werden.
Erläuterung der
Element Beschreibung
Syntax
String Typ: CHAR-Feld
Der String wird gelesen, formatiert und in die Variablen
Var1 … Var10 geschrieben.
Status Typ: STATE_T
Status, der automatisch an SREAD zurückgemeldet wird
(>>> 6.14 "Variable "Status"" Seite 27)
Element Beschreibung
OFFSET Typ: INT
Die Stelle innerhalb des Strings, an der SREAD mit dem
Lesen beginnt. Wenn von Anfang an gelesen werden soll,
muss der Offset auf 0 gesetzt werden.
Beispiele:
OFFSET=0: SREAD beginnt an der 1. Stelle mit dem
Lesen.
OFFSET=2: SREAD beginnt an der 3. Stelle mit dem
Lesen. Die Stellen 1 und 2 bleiben unberücksichtigt.
Der Offset wird beim Lesen hochgezählt. Wenn bei einer
weiteren SREAD-Anweisung wieder an der 1. Stelle mit
dem Lesen begonnen werden soll, muss der Offset vor die-
ser Anweisung auf 0 gesetzt werden. Anderenfalls wird der
hochgezählte Offset der vorigen Anweisung übernommen.
Format Typ: CHAR-Feld
Formate, in die der String umgewandelt wird, damit er in
die Variablen Var1 … Var10 geschrieben werden kann. Für
jede der Variablen muss ein Format angegeben werden.
(>>> 6.15 "Variable "Format"" Seite 29)
Var1 … Variablen, in die der zerlegte und formatierte String
Var10 geschrieben wird. Pro Anweisung sind maximal 10 Variab-
len möglich.
6.10 SWRITE
Beschreibung SWRITE hat eine ähnliche Funktion und Syntax wie CWRITE. Im Gegensatz
zu CWRITE schreibt SWRITE jedoch nicht Daten in einen Kanal, sondern in
ein CHAR-Feld.
SWRITE kann in Programmen mit CWRITE kombiniert werden. Vorteile:
CWRITE kann darauf beschränkt werden, Daten in den Kanal zu schrei-
ben. Komplexere Formatierungen können von SWRITE übernommen
werden. Dadurch werden die Programme flexibler.
CWRITE kann maximal 10 Variablen verarbeiten. Durch die Kombination
mit mehreren SWRITE-Anweisungen können die Daten von mehr als 10
Variablen geschrieben werden.
SWRITE löst einen Vorlaufstopp aus.
Erläuterung der
Element Beschreibung
Syntax
String Typ: CHAR-Feld
In den String werden die formatierten Inhalte der Variablen
Var1 … Var10 geschrieben.
Status Typ: STATE_T
Status, der automatisch an SWRITE zurückgemeldet wird
(>>> 6.14 "Variable "Status"" Seite 27)
Element Beschreibung
OFFSET Typ: INT
Die Stelle innerhalb des Strings, an der SWRITE mit dem
Schreiben beginnt. Wenn von Anfang an geschrieben wer-
den soll, muss der Offset auf 0 gesetzt werden.
Beispiele:
OFFSET=0: SWRITE beginnt an der 1. Stelle mit dem
Schreiben.
OFFSET=2: SWRITE beginnt an der 3. Stelle mit dem
Schreiben. Die Stellen 1 und 2 bleiben unberücksichtigt.
Der Offset wird beim Schreiben hochgezählt. Wenn bei
einer weiteren SWRITE-Anweisung wieder an der 1. Stelle
mit dem Schreiben begonnen werden soll, muss der Offset
vor dieser Anweisung auf 0 gesetzt werden. Anderenfalls
wird der hochgezählte Offset der vorigen Anweisung über-
nommen.
Format Typ: CHAR-Feld
Wandelt die Variablen Var1 … Var10 um, bevor sie in den
String geschrieben werden. Für jede der Variablen muss
ein Format angegeben werden.
(>>> 6.15 "Variable "Format"" Seite 29)
Var1 … Variablen, deren Daten in den String geschrieben werden.
Var10 Pro Anweisung sind maximal 10 Variablen möglich.
6.11 CAST_TO
Wenn der Puffer in der Datenliste deklariert wird, darf kein Initialwert
gesetzt werden! Grund: Der Initialwert wird vom aktuellen Wert über-
schrieben. Der aktuelle Wert kann bis zu 4 KB groß sein und damit
die maximal erlaubte Länge einer KRL-Zeile übersteigen.
RICHTIG: DECL CHAR mybuffer[4096]
FALSCH: DECL CHAR mybuffer[4096]=" "
Umwandlungs- Wenn mit CWRITE ein Puffer übertragen wird, der vorher mit CAST_TO er-
zeichen zeugt wurde, dann sind in der CWRITE-Anweisung nur folgende Umwand-
lungszeichen erlaubt:
r (= Rohdatenformat)
s (= Stringformat)
r hat gegenüber s folgende Vorteile:
Wenn das Zeichen 0 übertragen wird, interpretiert s dies als Ende des
Strings. Dieses Problem besteht bei r nicht.
Der Offset zählt in Bytes. Wenn CREAD die Daten mit r, also binär, liest,
kann anhand des Offsets leicht ausgerechnet werden, wieviele Werte be-
reits übertragen wurden.
Erläuterung der
Element Beschreibung
Syntax
Puffer Typ: CHAR-Feld
Puffer, in den die Variablen Var1 … Var10 geschrieben wer-
den
OFFSET Typ: INT
Die Stelle innerhalb des Puffers (in Bytes), ab der in den
Puffer geschrieben wird. Der Offset beginnt bei 0.
Beispiele:
OFFSET=0: Mit dem Schreiben wird an der 1. Stelle be-
gonnen.
OFFSET=2: Mit dem Schreiben wird an der 3. Stelle be-
gonnen. Die Stellen 1 und 2 bleiben unberücksichtigt.
Var1 … Variablen, die in den Puffer geschrieben werden. Pro
Var10 Anweisung sind maximal 10 Variablen möglich.
Bei nicht initialisierten Variablen oder Feldelementen wer-
den zufällige Werte in den Puffer geschrieben. Da zufällige
Werte beim Empfänger des Puffers Probleme verursachen
können, wird empfohlen, alle Variablen und Feldelemente
zu initialisieren.
Jede Variable schreibt soviel Bytes in den Puffer, wie es
ihrem Datentyp entspricht.
(>>> 6.13 "Erlaubte Datentypen in CAST-Anweisungen"
Seite 26)
Beispiel:
INT Var1, BOOL Var2, REAL Var3
Var1 schreibt 4 Bytes in den Puffer, Var2 schreibt 1
Byte, Var3 schreibt 4 Bytes.
6.12 CAST_FROM
Wenn der Puffer in der Datenliste deklariert wird, darf kein Initialwert
gesetzt werden! Grund: Der Initialwert wird vom aktuellen Wert über-
schrieben. Der aktuelle Wert kann bis zu 4 KB groß sein und damit
die maximal erlaubte Länge einer KRL-Zeile übersteigen.
RICHTIG: DECL CHAR mybuffer[4096]
FALSCH: DECL CHAR mybuffer[4096]=" "
Erläuterung der
Element Beschreibung
Syntax
Puffer Typ: CHAR-Feld
Puffer, dessen Daten in die Variablen Var1 … Var10
geschrieben werden
OFFSET Typ: INT
Die Stelle innerhalb des Puffers (in Bytes), ab der die
Daten verwendet werden, um sie in die Variablen Var1 …
Var10 zu schreiben. Der Offset beginnt bei 0.
Beispiele:
OFFSET=0: Der Puffer wird ab der 1. Stelle verwendet.
OFFSET=2: Der Puffer wird ab der 3. Stelle verwendet.
Die Stellen 1 und 2 bleiben unberücksichtigt.
Var1 … Variablen, die mit den Daten aus dem Puffer beschrieben
Var10 werden. Pro Anweisung sind maximal 10 Variablen mög-
lich.
Jede Variable erhält soviel Bytes aus dem Puffer, wie es
ihrem Datentyp entspricht.
(>>> 6.13 "Erlaubte Datentypen in CAST-Anweisungen"
Seite 26)
Beispiel:
INT Var1, BOOL Var2, REAL Var3
Var1 erhält 4 Bytes, Var2 erhält 1 Byte, Var3 erhält 4
Bytes.
Der Status einer Anweisung wird automatisch an die Variable Status zurück-
gegeben. Status ist eine Variable vom Typ STATE_T und muss deklariert wer-
den.
(>>> 6.14.1 "Strukturtyp STATE_T" Seite 27)
Die Variable Status ist Bestandteil folgender Anweisungen:
CREAD
CWRITE
CCLOSE
SREAD
SWRITE
CMD_STAT RET1 Über die Variable RET1 wird zurückgegeben, ob eine Anweisung erfolgreich
durchgeführt wurde.
(>>> 6.14.2 "Rückgabewerte für die Variable RET1" Seite 27)
INT MSG_NO Wenn während der Ausführung der Anweisung ein Fehler auftritt, enthält die
Variable MSG_NO die Fehlernummer. MSG_NO ist relevant für folgende An-
weisungen:
CREAD
CWRITE
SREAD
SWRITE
INT HITS Die Anzahl der korrekt gelesenen oder geschriebenen Formate. INT HITS ist
relevant für folgende Anweisungen:
CREAD
CWRITE
SREAD
SWRITE
INT LENGTH Die Länge der korrekt in Variablen gewandelten Bytes laut Formatangabe.
INT LENGTH ist relevant für folgende Anweisungen:
CREAD
SREAD
Beschreibung Über die Variable RET1 wird zurückgegeben, ob eine Anweisung erfolgreich
durchgeführt wurde. Die Variable RET1 ist vom Typ CMD_STAT und ist Be-
standteil des Strukturtyps STATE_T.
CMD_STAT ist ein vordefinierter Aufzählungstyp:
Wert Beschreibung
CMD_OK Nur relevant bei Lese-Modus COND:
Es wurde geprüft, ob Daten zum Lesen vorhanden sind.
Es sind jedoch keine Daten zum Lesen vorhanden.
CMD_TIMEOU Nur relevant bei Lese-Modus ABS:
T
Das Lesen wurde wegen Überschreitens der Wartezeit
abgebrochen.
DATA_END Nur relevant beim Lesen aus einem externen Modul
vom Typ LD_EXT_OBJ:
Alle Daten wurden gelesen.
CMD_ABORT Das Lesen wurde abgebrochen.
Mögliche Ursachen:
Fehlermeldung vom Kanal
Fehler beim Auslesen der Daten
Ein anderer Lese-Modus als ABS oder COND wur-
de initialisiert.
Der Lese-Modus wurde nicht initialisiert.
FMT_ERR Das angegebene Format passt nicht zum Variablentyp
der Variable Var1 … Var10.
Wert Beschreibung
DATA_OK Nur relevant für das Schreiben auf ein externes Modul
und in den Kommandokanal $FCT_CALL:
Die Anweisung wurde erfolgreich ausgeführt.
CMD_ABORT Die Anweisung wurde nicht erfolgreich ausgeführt.
CMD_SYN Nur relevant für das Schreiben in den Kommandokanal
$CMD:
Die Anweisung ist syntaktisch falsch und kann nicht
ausgeführt werden.
FMT_ERR Nur relevant für das Schreiben auf ein externes Modul
und in den Kommandokanal $CMD:
Das angegebene Format passt nicht zum Variablentyp
der Variable Var1 … Var10.
SREAD/SWRITE Folgende Werte kann RET1 für SREAD und SWRITE annehmen:
Wert Beschreibung
CMD_OK Die Anweisung wurde erfolgreich ausgeführt.
CMD_ABORT Die Anweisung wurde nicht erfolgreich ausgeführt.
FMT_ERR Das angegebene Format passt nicht zum Variablentyp
der Variable Var1 … Var10.
Wert Beschreibung
CMD_OK Die Anweisung wurde erfolgreich ausgeführt.
CMD_ABORT Die Anweisung wurde nicht erfolgreich ausgeführt.
Mögliche Ursachen:
Der Kanal ist bereits geschlossen
Das Handle ist ungültig.
Der Kanal wurde von einem anderen Prozess geöff-
net.
Element Beschreibung
W Maximale Anzahl der zu lesenden Zeichen. Optional.
Z Anzahl der zu beschreibenden Feldelemente. Optional.
U Umwandlungszeichen
(>>> 6.15.3 "Umwandlungszeichen" Seite 31)
Zeichen Beschreibung
+ Der umgewandelte Wert wird immer mit Vorzeichen darge-
stellt: positive Werte mit +, negative Werte mit -.
Wenn dieses Formatierungszeichen nicht verwendet wird,
werden positive Werte ohne Vorzeichen und negative Wer-
te mit - dargestellt.
- Der umgewandelte Wert wird links ausgerichtet.
Zeichen Beschreibung
# Im Format x wird jedem Wert, der ungleich Null ist, 0 voran-
gestellt.
In den Formaten e, f und g wird immer ein Dezimalpunkt
eingefügt.
0 Der umgewandelte Wert wird links mit Nullen aufgefüllt bis
zur Mindestweite W.
[Leerzei- Im Format d, e, f, g oder i wird dem umgewandelten Argu-
chen] ment links ein Leerzeichen vorangestellt.
* Die Formate c und r berücksichtigen Leerzeichen im Daten-
string nicht immer korrekt. Zur Vermeidung von Fehlinter-
pretationen können für die Leerzeichen eigene
Formatangaben mit dem Zeichen * verwendet werden.
Ein Format, dem dieses Zeichen vorangestellt ist, korres-
pondiert nicht mit einer Variablen Var1 … Var10, sondern mit
einem Leerzeichen im Datenstring.
Element G Genauigkeitsangabe
Format Beschreibung
r bei einem Feld Anzahl der darzustellenden Feldelemente
e, f Stellenzahl rechts vom Dezimalpunkt
g Anzahl der signifikanten Stellen
s Maximale Anzahl der dargestellten Zeichen
Andere Formate Anzahl der darzustellenden Zeichen. Umfasst der
Quellwert mehr Zeichen, wird gekürzt oder gerundet.
Element U Umwandlungszeichen
(>>> 6.15.3 "Umwandlungszeichen" Seite 31)
6.15.3 Umwandlungszeichen
Zeichen Beschreibung
c Als Argument wird ein einzelner Character erwartet, der als
ASCII-Zeichen weiterverarbeitet wird.
Bei Formaten mit dem Umwandlungszeichen c kann keine
Weite W angegeben werden.
d Ganzzahl in Dezimaldarstellung
e Exponentialschreibweise
Das Argument wird ins Format [-]m.nnnnnnE[+-]xx umge-
wandelt. Über die zweite Ziffernkette in Format wird die An-
zahl der Ziffern rechts vom Dezimalpunkt festgelegt.
f Dezimalpunktdarstellung
Ein Argument wird im Format [-]mm.nnnnnn dargestellt.
Über die zweite Ziffernkette in Format wird die Anzahl der
Ziffern rechts vom Dezimalpunkt festgelegt.
g Die Formatierung erfolgt mit %e oder %f, je nachdem, wel-
ches Format die kürzere Darstellung ermöglicht.
i Ganzzahl in Dezimaldarstellung
r Wandelt den Wert der zugehörigen Variablen nicht in
ASCII, sondern übernimmt ihn in Binärdarstellung. Beim
Format %r wird nicht geprüft, ob die Variable oder das Feld-
element initialisiert sind.
s Stellt eine Zeichenkette dar.
x Hexadezimale Schreibweise. Stellt das Argument in Basis
16 dar.
Die Verwendung der Formate ist identisch für CREAD und SREAD einerseits
und CWRITE und SWRITE andererseits.
Beschreibung Für die meisten Datentypen sind mehrere Formate erlaubt, z. B. für CHAR-
Felder "%s" und "%1.<Z>r". Welches Format gewählt werden muss, ist abhän-
gig davon, in welcher Form die Partnersteuerung die Daten versendet oder
empfangen kann.
Bei Feldern kann über die Angabe "Z" festgelegt werden, wieviele Feldele-
mente berücksichtigt werden sollen. Wenn für "Z" kein Wert angegeben wird,
werden alle Feldelemente berücksichtigt. Beim ersten nicht initialisierten Wert
wird jedoch abgebrochen. Ausnahme ist das Format r: Hier wird nicht abge-
brochen, sondern für nicht initialisierte Variablen oder Feldelemente werden
zufällige Werte ausgegeben.
Anmerkungen:
Datentyp BOOL
Jeder Wert ungleich Null wird in TRUE gewandelt.
Datentyp ENUM
Es wird geprüft, ob der Wert ein gültiger ENUM-Wert ist. Wenn nicht, wird
das Lesen abgebrochen. Die erste ENUM-Konstante hat den Wert 1.
Formatangaben für Felder
Wenn zu wenige Daten vorliegen, um den Formatangaben zu genügen (z.
B. Format "%2.5r", aber nur 7 Bytes vorhanden), dann wird für dieses For-
mat nichts gelesen und die CREAD-Anweisung abgebrochen. Die nicht
berücksichtigten Daten liegen weiterhin zum Lesen bereit.
Format %r
Es werden nur soviele Bytes gelesen, wie die Variable fassen kann. Der
Rest steht weiterhin zum Lesen bereit. Wenn ein Feld groß genug ist, aber
die Zahl der Bytes nicht ein Vielfaches der Größe eines Feldelements ist,
dann bleiben die überzähligen Bytes für das folgende Format oder die
nächste CREAD-Anweisung zum Lesen stehen.
Format INT- REAL- BOOL- ENUM- CHAR-
Feld Feld Feld Feld Feld
%s +
%1.<Z>r + + + +
%2.<Z>r + + +
%4.<Z>r + + + +
%r + + + + +
%.<Z>r + + + + +
6.15.5 Umwandlungsbeispiele
Beispiel 1 Der Wert der Integer-Variablen VI wird in dezimaler und hexadezimaler ASCII-
Darstellung übertragen. Das erste CWRITE überträgt die Zeichen 123. Das
zweite CWRITE überträgt die Zeichen 7B.
INT VI
VI=123
CWRITE(HANDLE,SW_T,MW_T,"%d",VI)
CWRITE(HANDLE,SW_T,MW_T,"%x",VI)
Beim Format "%r" wird nicht geprüft, ob die Variable oder das Feldelement in-
itialisiert sind. Für nicht initialisierte Feldelemente werden zufällige Werte
übertragen.
Beispiel 4 Die ersten fünf Feldelemente eines Feldes werden binär übertragen:
REAL VR[10]
CWRITE(HANDLE,SW_T,MW_T,"%.5r",VR[])
Beispiel 5 Alle Feldelemente bis zum ersten nicht initialisierten Element werden übertra-
gen:
CHAR VS[100]
CWRITE(HANDLE,SW_T,MW_T,"%s",VS[])
Beispiel 7 Der interne Wert der ENUM-Konstante wird in ASCII übertragen. Die entspre-
chende Zahl wird übertragen:
DECL ENUM_TYP E
CWRITE(HANDLE,SW_T,MW_T,"%d",E)
Vor dem Zurücksetzen und der Abwahl eines Programms oder vor ei-
ner Satzanwahl muss unbedingt geprüft werden, ob noch Dateien ge-
öffnet sind. Wenn noch Dateien geöffnet sind, müssen sie
geschlossen werden. Erst dann darf ein Programm zurückgesetzt, abge-
wählt oder eine Satzanwahl ausgeführt werden.
6.16.1 krl_mount()
Erläuterung der
Element Beschreibung
Syntax
Name Name des zu erstellenden Mount-Punktes, der im KRL-
Programm für den Zugriff auf das Netzlaufwerk verwendet
wird
Der Name muss mit dem Zeichen "/" beginnen und darf
kein weiteres Zeichen "/" enthalten.
Pfad Pfad zum freigegebenen Verzeichnis, auf den sich der
Mount-Punkt beziehen soll
Der Pfad muss mit den Zeichen "// beginnen und die ein-
zelnen Verzeichnisse müssen mit dem Zeichen "/" getrennt
sein.
Im Pfad muss die IP-Adresse des Hosts verwendet wer-
den, auf dem das Verzeichnis freigegeben wurde, z. B. "//
160.160.113.23/transfer". Die Auflösung von Host-Namen,
z. B. "//pcrc40763/transfer", wird nicht unterstützt.
Benutzer Name des Benutzers, unter dem die Verbindung zum Netz-
laufwerk hergestellt werden soll
Passwort Verschlüsseltes Passwort des Benutzers
6.16.2 krl_unmount()
Erläuterung der
Element Beschreibung
Syntax
Name Name des erstellten Mount-Punktes
Der Name muss mit dem Zeichen "/" beginnen und darf
kein weiteres Zeichen "/" enthalten.
6.16.3 krl_fopen()
Erläuterung der
Element Beschreibung
Syntax
Name Dateiname ohne Pfad- oder mit relativer Pfadangabe
Datei ohne Pfadangabe, z. B. "MyFile.txt": Die Datei
wird im Verzeichnis ROBOTER\UserFiles gesucht oder
erstellt.
Datei mit Pfadangabe, z. B. "TestDir/MyFile.txt": Die
Datei wird im Verzeichnis ROBOTER\UserFiles\TestDir
gesucht oder erstellt.
Datei auf Netzwerkpfad, z. B. "/MyMount/MyFile.txt":
Die Datei wird auf einem freigegebenen Netzlaufwerk
gesucht oder erstellt. Der Mount-Punkt zum Netzlauf-
werk mit dem Namen MyMount muss zuvor über
krl_mount() erzeugt worden sein.
Modus Modus zum Öffnen der Datei
(>>> "Modi zum Öffnen" Seite 38)
Handle Handle-Variable für die geöffnete Datei
Beim Öffnen der Datei wird über diese Variable ein Datei-
Handle zurückgegeben. Alle Funktionsaufrufe, die sich auf
die geöffnete Datei beziehen, müssen diese Handle-Varia-
ble verwenden.
Pufferung Puffermodus für die geöffnete Datei. Optional.
Wenn kein Puffermodus angegeben wird, gilt der Default-
Wert.
#FULL_BUFF: Beim Schreiben in die Datei wird solan-
ge in einen Puffer geschrieben bis der Puffer voll ist
oder die Funktion krl_fflush() aufgerufen wird. Dann
wird der Inhalt des Puffers in die Datei geschrieben.
Die Größe des Puffers ist abhängig vom verwendeten
CIFS.
#LINE_BUFF: Beim Schreiben in die Datei wird solan-
ge in einen Puffer geschrieben bis ein Zeilenende-Zei-
chen erkannt wird, der Puffer voll ist oder die Funktion
krl_fflush() aufgerufen wird. Dann wird der Inhalt des
Puffers in die Datei geschrieben.
#NO_BUFF: Ohne Pufferung wird direkt in die Datei ge-
schrieben.
Default: #FULL_BUFF
Beispiel 1 Die Datei ROBOTER\UserFiles\MyFile.txt wird als Textdatei für den lesenden
Zugriff geöffnet:
CWRITE($FCT_CALL, State, Mode, "krl_fopen", "MyFile.txt", "r",
FileHandle)
Beispiel 3 Die Datei MyFile.txt wird auf einem freigegebenen Netzlaufwerk als Textdatei
für den lesenden Zugriff und ohne Pufferung geöffnet. Der Mount-Punkt zum
Netzlaufwerk mit dem Namen Net1 muss zuvor über krl_mount() erzeugt wor-
den sein:
CWRITE($FCT_CALL, State, Mode, "krl_fopen", "/Net1/MyFile.txt", "r",
FileHandle, #NO_BUFF)
6.16.4 krl_fclose()
Erläuterung der
Element Beschreibung
Syntax
Handle Handle-Variable, die beim Aufruf von krl_fopen() zurückge-
geben wurde und die Datei eindeutig identifiziert
6.16.5 krl_feof()
Erläuterung der
Element Beschreibung
Syntax
Handle Handle-Variable, die beim Aufruf von krl_fopen() zurückge-
geben wurde und die Datei eindeutig identifiziert
Status Variable für die Position des Dateizeigers
TRUE: Dateiende ist erreicht.
FALSE: Dateiende ist noch nicht erreicht.
Beispiel Das Prüfergebnis, ob das Dateiende erreicht ist, wird in die Variable "Pointer-
Pos" geschrieben:
CWRITE($FCT_CALL, State, Mode, "krl_feof", FileHandle, PointerPos)
6.16.6 krl_fflush()
Erläuterung der
Element Beschreibung
Syntax
Handle Handle-Variable, die beim Aufruf von krl_fopen() zurückge-
geben wurde und die Datei eindeutig identifiziert
Beispiel Alle Daten im Puffer werden in die vom Handle übergebene Datei geschrie-
ben:
CWRITE($FCT_CALL, State, Mode, "krl_fflush", FileHandle)
6.16.7 krl_fgetc()
Erläuterung der
Element Beschreibung
Syntax
Handle Handle-Variable, die beim Aufruf von krl_fopen() zurückge-
geben wurde und die Datei eindeutig identifiziert
Zeichen Variable für das aus der Datei gelesene Zeichen
Beispiel Ein einzelnes Zeichen wird aus der vom Handle übergebenen Datei gelesen
und in die Variable "SingleChar" geschrieben:
CWRITE($FCT_CALL, State, Mode, "krl_fgetc", FileHandle, SingleChar)
6.16.8 krl_fgets()
Syntax krl_fgets(INT Handle, CHAR[] Puffer, INT Anzahl <, CHAR Trenn-
zeichen>)
Erläuterung der
Element Beschreibung
Syntax
Handle Handle-Variable, die beim Aufruf von krl_fopen() zurückge-
geben wurde und die Datei eindeutig identifiziert
Puffer Variable für den Puffer, in den die gelesene Zeichenkette
geschrieben wird
Anzahl Maximale Anzahl an Zeichen (inklusive Zeilenende-Zei-
chen), die aus der Datei gelesen werden sollen
Trennzeichen Trennzeichen bis zu dem gelesen werden soll. Optional.
Beispiel 1 Es wird eine ganze Zeile aus der vom Handle übergebenen Datei gelesen,
maximal aber 256 Zeichen:
CWRITE($FCT_CALL, State, Mode, "krl_fgets", FileHandle, Buff[], 256)
Beispiel 2 Es wird aus der vom Handle übergebenen Datei bis zum Zeichen ":" gelesen,
maximal aber 100 Zeichen:
CWRITE($FCT_CALL, State, Mode, "krl_fgets", FileHandle, Buff[], 100,
":")
6.16.9 krl_fscanf()
Erläuterung der
Element Beschreibung
Syntax
Handle Handle-Variable, die beim Aufruf von krl_fopen() zurückge-
geben wurde und die Datei eindeutig identifiziert
Format Zeichenkette mit den zu lesenden Formaten (maximal 8)
Für jedes Format muss eine Variable Var1 … Var8 angege-
ben werden, in die die gelesenen Daten geschrieben wer-
den können. Das angegebene Format legt auch den
Datentyp der zugehörigen Variablen fest.
Var1 … Var8 Variablen, in die die gelesenen Daten geschrieben werden.
Die Anzahl der Variablen muss der Anzahl der zu lesenden
Formate entsprechen (maximal 8).
Erlaubte Datentypen: INT, REAL, BOOL, ENUM, CHAR
und CHAR-Feld
Beispiel Es werden 3 Werte, die mit dem Zeichen ";" getrennt sind, aus der vom Handle
übergebenen Datei formatiert gelesen:
CWRITE($FCT_CALL, State, Mode, "krl_fscanf", FileHandle, "%s;%i;%c",
StringVar[], IntVar, CharVar)
6.16.10 krl_fputc()
Erläuterung der
Element Beschreibung
Syntax
Handle Handle-Variable, die beim Aufruf von krl_fopen() zurückge-
geben wurde und die Datei eindeutig identifiziert
Zeichen Zeichen, das in die Datei geschrieben wird
Beispiel Das Zeichen "x" wird in die vom Handle übergebene Datei geschrieben:
CWRITE($FCT_CALL, State, Mode, "krl_fputc", FileHandle, "x")
6.16.11 krl_fputs()
Erläuterung der
Element Beschreibung
Syntax
Handle Handle-Variable, die beim Aufruf von krl_fopen() zurückge-
geben wurde und die Datei eindeutig identifiziert
String Zeichenkette, die in die Datei geschrieben wird
Beispiel 1 Eine konstante Zeichenkette wird in die vom Handle übergebene Datei ge-
schrieben:
CWRITE($FCT_CALL, State, Mode, "krl_fputs", FileHandle, "write
this!")
Beispiel 2 Die in der Variablen "StringVar[]" enthaltene Zeichenkette wird in die vom
Handle übergebene Datei geschrieben:
CWRITE($FCT_CALL, State, Mode, "krl_fputs", FileHandle, StringVar[])
6.16.12 krl_fwriteln()
Erläuterung der
Element Beschreibung
Syntax
Handle Handle-Variable, die beim Aufruf von krl_fopen() zurückge-
geben wurde und die Datei eindeutig identifiziert
String Zeichenkette, die in die Datei geschrieben wird
Wenn der String leer ist, wird eine leere Zeile in die Datei
geschrieben.
Beispiel Eine leere Zeile wird in die vom Handle übergebene Datei geschrieben:
CWRITE($FCT_CALL, State, Mode, "krl_fwriteln", FileHandle, " ")
6.16.13 krl_fprintf()
Erläuterung der
Element Beschreibung
Syntax
Handle Handle-Variable, die beim Aufruf von krl_fopen() zurückge-
geben wurde und die Datei eindeutig identifiziert
Format Zeichenkette mit den zu schreibenden Formaten (maximal
8)
Für jedes Format muss ein Parmeter Par1 … Par8 mit den
zu schreibenden Werten angegeben werden. Das angege-
bene Format legt auch den Datentyp des zugehörigen
Parameters fest.
Par1 … Par8 Parameter mit den zu schreibenden Werten. Die Anzahl
der Parameter muss der Anzahl der zu schreibenden For-
mate entsprechen (maximal 8).
Erlaubte Datentypen: INT, REAL, BOOL, ENUM, CHAR
und CHAR-Feld
Beispiel Es werden 3 Werte, die mit dem Zeichen ";" getrennt sind, formatiert in die
vom Handle übergebene Datei geschrieben:
CWRITE($FCT_CALL, State, Mode, "krl_fprintf", FileHandle,
"%s;%x;%c", "Item1", 'HA0', CharVar)
6.16.14 krl_fseek()
Erläuterung der
Element Beschreibung
Syntax
Handle Handle-Variable, die beim Aufruf von krl_fopen() zurückge-
geben wurde und die Datei eindeutig identifiziert
Modus Modus für die Positionierung des Dateizeigers
#SEEK_BEGIN: Setzt den Zeiger auf Dateianfang.
#SEEK_END: Setzt den Zeiger auf Dateiende.
#SEEK_CUR: Setzt den Zeiger auf eine relative Positi-
on zur aktuellen Position.
Offset Offset zur aktuellen Position des Dateizeigers (nur rele-
vant, wenn Modus = #SEEK_CUR)
Der Offset wird in Byte angegeben und kann sowohl positiv
als auch negativ sein.
Beispiel Der Dateizeiger in der vom Handle übergebenen Datei wird um 5 Byte zurück-
gesetzt:
CWRITE($FCT_CALL, State, Mode, "krl_fseek", FileHandle, #SEEK_CUR,
-5)
6.16.15 krl_fsizeget()
Erläuterung der
Element Beschreibung
Syntax
Handle Handle-Variable, die beim Aufruf von krl_fopen() zurückge-
geben wurde und die Datei eindeutig identifiziert
Größe Variable für die ermittelte Dateigröße in Byte
Beispiel Die Größe der vom Handle übergebenen Datei wird ermittelt und in die Varia-
ble "IntVar" geschrieben:
CWRITE($FCT_CALL, State, Mode, "krl_fsizeget", FileHandle, IntVar)
MSG_NO Beschreibung
-10 Ungültige Anzahl an Funktionsparametern wurde übergeben.
-11 Mindestens ein Funktionsparameter besitzt einen ungültigen
Wert.
-12 Mindestens ein Funktionsparameter besitzt einen falschen
Datentyp.
-13 Mindestens ein Funktionsparameter ist keine Variable,
obwohl eine Variable erwartet wird.
6.16.16 krl_mkdir()
Erläuterung der
Element Beschreibung
Syntax
Name Verzeichnisname ohne Pfad- oder mit relativer Pfadangabe
Verzeichnis ohne Pfadangabe, z. B. "NewDir": Das Ver-
zeichnis wird unter ROBOTER\UserFiles erstellt.
Verzeichnis mit Pfadangabe, z. B. "TestDir/NewDir":
Das Verzeichnis wird unter ROBOTER\UserFiles\Test-
Dir erstellt.
Verzeichnis auf Netzwerkpfad, z. B. "/MyMount/New-
Dir": Das Verzeichnis wird auf einem freigegebenen
Netzlaufwerk erstellt. Der Mount-Punkt zum Netzlauf-
werk mit dem Namen MyMount muss zuvor über
krl_mount() erzeugt worden sein.
Beispiel 2 Ein neues Verzeichnis wird auf dem Mount "MyMount" erstellt:
CWRITE($FCT_CALL, State, Mode, "krl_mkdir", "/MyMount/NewDir")
6.16.17 krl_rename()
Erläuterung der
Element Beschreibung
Syntax
OldName Alter Datei- oder Verzeichnisname ohne Pfad- oder mit
relativer Pfadangabe
(>>> 6.16.3 "krl_fopen()" Seite 36)
(>>> 6.16.16 "krl_mkdir()" Seite 48)
NewName Neuer Datei- oder Verzeichnisname ohne Pfad- oder mit
relativer Pfadangabe
Der hier angegebene Pfad muss mit dem unter OldName
angegebenen Pfad übereinstimmen.
Beispiel 2 Das Verzeichnis "NewDir" auf dem Mount "MyMount" wird umbenannt:
CWRITE($FCT_CALL, State, Mode, "krl_rename", "/MyMount/NewDir", "/
MyMount/TestDir")
6.16.18 krl_remove()
Erläuterung der
Element Beschreibung
Syntax
Name Datei- oder Verzeichnisname ohne Pfad- oder mit relativer
Pfadangabe
(>>> 6.16.3 "krl_fopen()" Seite 36)
(>>> 6.16.16 "krl_mkdir()" Seite 48)
Beispiel 2 Das Verzeichnis "NewDir" auf dem Mount "MyMount" wird gelöscht:
CWRITE($FCT_CALL, State, Mode, "krl_remove", "/MyMount/NewDir")
7 Beispielprogramme
COPEN lädt das externe Modul. CWRITE ruft die Funktion auf. CLOSE entlädt
das externe Modul.
DEF FUNCTION()
INT HANDLE
DECL CHAR STRING[30]
DECL STATE_T STAT
DECL MODUS_T MOD
COPEN(:LD_EXT_FCT1, HANDLE)
IF HANDLE <=0 THEN
ERRMSG ("Cannot open ld_ext_fct1")
ENDIF
MOD=#SYNC
STRING[]="test data for ext. mod."
CWRITE(HANDLE,STAT,MOD,"MyOwnFunction",STRING[])
IF STAT.RET<>#DATA_OK THEN
ERRMSG("Cannot send data to ld_ext_fct1")
ENDIF
CCLOSE(HANDLE,STAT)
IF STAT.RET<>#CMD_OK THEN
ERRMSG("Cannot close ld_ext_fct1")
ENDIF
END
Das Programm A6.SRC soll über den Kommandokanal $CMD gestartet, ge-
stoppt und abgewählt werden. Dazu dienen die folgenden Programmzeilen in
einer SUB-Datei.
DECL STATE_T STAT
DECL MODUS_T MODE
MODE=#SYNC
...
;select program A6()
;to start the program the START-button or
;an external start-signal is needed
IF $FLAG[1]==TRUE THEN
CWRITE($CMD,STAT,MODE,"RUN/R1/A6()")
$FLAG[1]=FALSE
ENDIF
;stop program A6()
IF $FLAG[2]==TRUE THEN
CWRITE($CMD,STAT,MODE,"STOP 1")
$FLAG[2]=FALSE
ENDIF
;cancel program A6()
IF $FLAG[3]==TRUE THEN
CWRITE($CMD,STAT,MODE,"CANCEL 1")
$FLAG[3]=FALSE
ENDIF
Beispiel 1 Die Integer-Werte 1 bis 1024 werden mit einer einzigen CWRITE-Anweisung
in den Kanal geschrieben. Dafür werden die Werte zuerst mit CAST_TO in
den Puffer BIGSTRING[] geschrieben. CWRITE schreibt den Puffer dann in
den Kanal.
Beispiel 2 Eine zweite Roboterstation empfängt die Daten aus Beispiel 1. Sie liest die
Daten aus dem Kanal und schreibt sie in den Puffer BIGSTRING_2[]. Der Puf-
fer wird dann in die Variable VAR geschrieben.
DECL CHAR BIGSTRING_2[4096]
...
INT VAR[1024]
...
OFFSET=0
CREAD(HANDLE,STAT,MODEREAD,TIMEOUT,OFFSET,"%1.4096r",BIGSTRING_2[])
...
OFFSET=0
FOR N=1 to 1024
CAST_FROM (BIGSTRING_2[],OFFSET,VAR[n])
ENDFOR
...
Über den Kommandokanal $FCT_CALL soll das Zeichen "a" in die Datei My-
Test.TXT geschrieben werden. Wenn die Datei bereits vorhanden ist, soll der
Inhalt der Datei beim Öffnen gelöscht werden.
Für jeden Funktionsaufruf mit CWRITE soll überprüft werden, ob die Funktion
erfolgreich ausgeführt oder mit einem Fehler abgebrochen wurde. Wenn ein
Fehler aufgetreten ist, kann abhängig von der Fehlerursache die dazu pas-
sende Fehlerbehandlung programmiert werden. Wenn kein Fehler aufgetre-
ten ist, soll das Zeichen geschrieben und die Datei wieder geschlossen
werden.
ELSE
; no error occured
; write a character to the file
CWrite($FCT_CALL, STAT, MODE, "krl_fputc", HANDLE, MYCHAR)
IF (STAT.RET1 == #CMD_ABORT) THEN
; error treatment
...
ENDIF
; close the file
CWRITE($FCT_CALL, STAT, MODE, "krl_fclose", HANDLE)
IF (STAT.RET1 == #CMD_ABORT) THEN
; error treatment
...
ENDIF
ENDIF
8 Anhang
9 KUKA Service
9.1 Support-Anfrage
Einleitung Die Dokumentation der KUKA Roboter GmbH bietet Informationen zu Betrieb
und Bedienung und unterstützt Sie bei der Behebung von Störungen. Für wei-
tere Anfragen steht Ihnen die lokale Niederlassung zur Verfügung.
Verfügbarkeit Der KUKA Customer Support ist in vielen Ländern verfügbar. Bei Fragen ste-
hen wir gerne zur Verfügung!
Index
Symbole Funktionen 7
$CMD 19 Funktionsbeschreibung 7
$CONFIG.DAT 17
$CUSTOM.DAT 13, 15 H
$DATA_LD_EXT_OBJx 18 Handle 16, 17, 19, 21
$EXT_MOD_x 16 Header-Datei 6
$FCT_CALL 19, 34 Hinweise 5
HITS, Anzahl korrekte Formate 27
A
ABS 18 I
Anhang 55 IEEE 754 17
ASYNC 20 Interrupt 15, 18, 19
IP 6
B
Begriffe, verwendete 6 K
Beispielprogramme 51 Kenntnisse, benötigte 5
Kommando-Interpreter 21, 22
C Kommandokanal, $CMD 11
CAST_FROM 25 Kommandokanal, $FCT_CALL 12
CAST_TO 24 KR C 6
CAST-FROM 51 KRL 6
CAST-TO 51 krl_fclose() 39
CCLOSE 20 krl_feof() 40
CHANNEL 15 krl_fflush() 40
CIFS 6 krl_fgetc() 41
CIOCTL 21 krl_fgets() 41
CMD_ABORT 28, 29 krl_fopen() 36
CMD_OK 28, 29 krl_fprintf() 45
CMD_STAT, Aufzählungstyp 27 krl_fputc() 43
CMD_SYN 28 krl_fputs() 44
CMD_TIMEOUT 28 krl_fscanf() 42
COND 18 krl_fseek() 46
COPEN 16 krl_fsizeget() 47
CREAD 17 krl_fwriteln() 45
CREAD, Lese-Modus 18 krl_mkdir() 48
CWRITE 19 krl_mount() 35
CWRITE, Schreib-Modus 20 krl_remove() 49
krl_rename() 48
D krl_unmount() 36
DATA_END 28 KUKA Customer Support 57
DATA_OK 28
Datentypen, CAST-Anweisungen 26 L
Dokumentation, Industrieroboter 5 LD_EXT_FCT 11, 20
LD_EXT_OBJ 11
E Leave Data, Option für externes Modul 13, 19
Einleitung 5 LENGTH, Byte-Länge 27
Ethernet 6 Little Endian 6, 17, 30
Ethernet-Schnittstelle 11
Externe Module 11, 13 M
MODUS_T, Strukturdatentyp 18, 20
F MSG_NO, Fehlernummer 27, 55
Fehlerbehandlung, $FCT_CALL 34
Fehlernummern 27, 55 O
FMT_ERR 28 O-File 11, 13
Force unload, Option für externes Modul 13 Offset 18, 23, 24, 25, 26
Format 29
Format, Variable 29 P
Formatierungszeichen 29 Programm-Interpreter 11
Programmierung 15
Programmierung, Übersicht 15
R
RET1, Rückgabewerte 27
Rückgabewerte, RET1 27
S
Schriftarten 15
Schulungen 5
Service, KUKA Roboter 57
Sicherheit 9
Sicherheitshinweise 5
SRC-Programm 16
SREAD 22
STATE_T, Strukturtyp 27
Status 27
stdio.h 6
SUB-Programm 16
Support-Anfrage 57
SWRITE 23
SYNC 20
T
TCP 6
TCP/IP 11
Timeout 17
U
Umwandlungsbeispiele 33
Umwandlungszeichen 24, 29, 31
V
Verwendete Begriffe 6
Vorlaufstopp 19, 21, 23, 24, 26
Z
Zeichen 15
Zielgruppe 5