Vous êtes sur la page 1sur 69

Communication KUKA Roboter GmbH

CREAD/CWRITE

Programmierung CREAD/CWRITE und verwandte Anweisungen


Für KUKA System Software 8.2, 8.3
Für VW System Software 8.2

Stand: 27.01.2014

Version: KSS 8.2, 8.3 CREAD/CWRITE V1


CREAD/CWRITE

© Copyright 2014
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

Publikation: Pub KSS 8.2, 8.3 CREAD/CWRITE (PDF) de


Buchstruktur: KSS 8.2, 8.3 CREAD/CWRITE V1.1
Version: KSS 8.2, 8.3 CREAD/CWRITE V1

2 / 69 Stand: 27.01.2014 Version: KSS 8.2, 8.3 CREAD/CWRITE V1


Inhaltsverzeichnis

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

5 Konfiguration der externen Module ........................................................... 13


6 Programmierung .......................................................................................... 15
6.1 Übersicht Programmierung ........................................................................................ 15
6.2 Zeichen und Schriftarten ............................................................................................ 15
6.3 CHANNEL .................................................................................................................. 15
6.4 COPEN ...................................................................................................................... 16
6.5 CREAD ...................................................................................................................... 17
6.5.1 Lese-Modus für CREAD ....................................................................................... 18
6.6 CWRITE ..................................................................................................................... 19
6.6.1 Schreib-Modus für CWRITE ................................................................................. 20
6.7 CCLOSE .................................................................................................................... 20
6.8 CIOCTL ...................................................................................................................... 21
6.9 SREAD ....................................................................................................................... 22
6.10 SWRITE ..................................................................................................................... 23
6.11 CAST_TO .................................................................................................................. 24
6.12 CAST_FROM ............................................................................................................. 25
6.13 Erlaubte Datentypen in CAST-Anweisungen ............................................................. 26
6.14 Variable "Status" ........................................................................................................ 27
6.14.1 Strukturtyp STATE_T ............................................................................................ 27
6.14.2 Rückgabewerte für die Variable RET1 ................................................................. 27
6.15 Variable "Format" ....................................................................................................... 29
6.15.1 Variable "Format" für CREAD/SREAD ................................................................. 29
6.15.2 Variable "Format" für CWRITE/SWRITE .............................................................. 29
6.15.3 Umwandlungszeichen ........................................................................................... 31
6.15.4 Welches Format für welche Variable? .................................................................. 31
6.15.5 Umwandlungsbeispiele ......................................................................................... 33
6.16 Funktionen für den Kommandokanal $FCT_CALL .................................................... 34
6.16.1 krl_mount() ............................................................................................................ 35
6.16.2 krl_unmount() ........................................................................................................ 36
6.16.3 krl_fopen() ............................................................................................................. 37
6.16.4 krl_fclose() ............................................................................................................ 40
6.16.5 krl_fclose_all() ....................................................................................................... 40
6.16.6 krl_feof() ................................................................................................................ 41

Stand: 27.01.2014 Version: KSS 8.2, 8.3 CREAD/CWRITE V1 3 / 69


CREAD/CWRITE

6.16.7 krl_fflush() ............................................................................................................. 42


6.16.8 krl_fgetc() ............................................................................................................. 42
6.16.9 krl_fgets() ............................................................................................................. 43
6.16.10 krl_fscanf() ............................................................................................................ 44
6.16.11 krl_fputc() ............................................................................................................. 45
6.16.12 krl_fputs() ............................................................................................................. 45
6.16.13 krl_fwriteln() .......................................................................................................... 46
6.16.14 krl_fprintf() ............................................................................................................ 47
6.16.15 krl_fseek() ............................................................................................................. 48
6.16.16 krl_fsizeget() ......................................................................................................... 49
6.16.17 krl_mkdir() ............................................................................................................. 49
6.16.18 krl_rename() ......................................................................................................... 50
6.16.19 krl_remove() ......................................................................................................... 51

7 Beispielprogramme ..................................................................................... 53
7.1 Externes Modul: Funktion über LD_EXT_FCT aufrufen ............................................ 53
7.2 Kommandokanal $CMD: Programm starten, stoppen, abwählen ............................. 53
7.3 CREAD/CWRITE mit CAST-Anweisungen kombinieren ........................................... 53
7.4 Kommandokanal $FCT_CALL: Zeichen in Datei schreiben ...................................... 54

8 Anhang ......................................................................................................... 57
8.1 Fehler beim Schreiben in den Kommandokanal $FCT_CALL ................................... 57

9 KUKA Service ............................................................................................... 59


9.1 Support-Anfrage ........................................................................................................ 59
9.2 KUKA Customer Support ........................................................................................... 59

Index ............................................................................................................. 67

4 / 69 Stand: 27.01.2014 Version: KSS 8.2, 8.3 CREAD/CWRITE V1


1 Einleitung

1 Einleitung

1.1 Zielgruppe

Diese Dokumentation richtet sich an Benutzer mit folgenden Kenntnissen:


 Fortgeschrittene KRL-Programmierkenntnisse
 Fortgeschrittene Systemkenntnisse der Robotersteuerung
 Fortgeschrittene Systemkenntnisse der Steuerungen, mit denen die Ro-
botersteuerung kommuniziert

Für den optimalen Einsatz unserer Produkte empfehlen wir unseren


Kunden eine Schulung im KUKA College. Informationen zum Schu-
lungsprogramm sind unter www.kuka.com oder direkt bei den Nieder-
lassungen zu finden.

1.2 Dokumentation des Industrieroboters

Die Dokumentation zum Industrieroboter besteht aus folgenden Teilen:


 Dokumentation für die Robotermechanik
 Dokumentation für die Robotersteuerung
 Bedien- und Programmieranleitung für die System-Software
 Anleitungen zu Optionen und Zubehör
 Teilekatalog auf Datenträger
Jede Anleitung ist ein eigenes Dokument.

1.3 Darstellung von Hinweisen

Sicherheit Diese Hinweise dienen der Sicherheit und müssen beachtet werden.

Diese Hinweise bedeuten, dass Tod oder schwere Ver-


letzungen sicher oder sehr wahrscheinlich eintreten
werden, wenn keine Vorsichtsmaßnahmen getroffen werden.

Diese Hinweise bedeuten, dass Tod oder schwere Ver-


letzungen eintreten können, wenn keine Vorsichtsmaß-
nahmen getroffen werden.

Diese Hinweise bedeuten, dass leichte Verletzungen


eintreten können, wenn keine Vorsichtsmaßnahmen
getroffen werden.

Diese Hinweise bedeuten, dass Sachschäden eintreten


können, wenn keine Vorsichtsmaßnahmen getroffen
werden.

Diese Hinweise enthalten Verweise auf sicherheitsrelevante Informa-


tionen oder allgemeine Sicherheitsmaßnahmen.
Diese Hinweise beziehen sich nicht auf einzelne Gefahren oder ein-
zelne Vorsichtsmaßnahmen.

Dieser Hinweis macht auf Vorgehensweisen aufmerksam, die der Vorbeu-


gung oder Behebung von Not- oder Störfällen dienen:

Stand: 27.01.2014 Version: KSS 8.2, 8.3 CREAD/CWRITE V1 5 / 69


CREAD/CWRITE

Mit diesem Hinweis gekennzeichnete Vorgehensweisen


müssen genau eingehalten werden.

Hinweise Diese Hinweise dienen der Arbeitserleichterung oder enthalten Verweise auf
weiterführende Informationen.

Hinweis zur Arbeitserleichterung oder Verweis auf weiterführende In-


formationen.

1.4 Verwendete Begriffe

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.

6 / 69 Stand: 27.01.2014 Version: KSS 8.2, 8.3 CREAD/CWRITE V1


2 Funktionsbeschreibung

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.

Stand: 27.01.2014 Version: KSS 8.2, 8.3 CREAD/CWRITE V1 7 / 69


CREAD/CWRITE

8 / 69 Stand: 27.01.2014 Version: KSS 8.2, 8.3 CREAD/CWRITE V1


3 Sicherheit

3 Sicherheit
Die Sicherheitsinformationen zum Industrieroboter sind im Kapitel "Sicherheit"
der Bedien- und Programmieranleitung für Systemintegratoren oder der Be-
dien- und Programmieranleitung für Endanwender zu finden.

Das Kapitel "Sicherheit" in der Bedien- und Programmieranleitung


der System Software muss beachtet werden. Tod von Personen,
schwere Verletzungen oder erhebliche Sachschäden können sonst
die Folge sein.

Stand: 27.01.2014 Version: KSS 8.2, 8.3 CREAD/CWRITE V1 9 / 69


CREAD/CWRITE

10 / 69 Stand: 27.01.2014 Version: KSS 8.2, 8.3 CREAD/CWRITE V1


4 Kommunikations-Kanäle

4 Kommunikations-Kanäle

4.1 Kommunikation über externe Module

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

Abb. 4-1: Kommunikation über externe Module

4.2 Kommunikation über den Kommandokanal $CMD

Beschreibung CWRITE kann über den Kommandokanal Anweisungen an einen Programm-


Interpreter übergeben. Beispiel: Ein Programm über den Kommandokanal mit
RUN starten und mit STOP anhalten.
CREAD ist für den Kommandokanal nicht relevant.

Konfiguration Der Kommandokanal muss für die Kommunikation mit CWRITE nicht konfigu-
riert werden.

Stand: 27.01.2014 Version: KSS 8.2, 8.3 CREAD/CWRITE V1 11 / 69


CREAD/CWRITE

Übersicht

Abb. 4-2: Kommunikation über den Kommandokanal $CMD

4.3 Kommunikation über den Kommandokanal $FCT_CALL

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 57)
CREAD ist für den Kommandokanal nicht relevant.

Konfiguration Der Kommandokanal muss für die Kommunikation mit CWRITE nicht konfigu-
riert werden.

Übersicht

Abb. 4-3: Kommunikation über den Kommandokanal $FCT_CALL

12 / 69 Stand: 27.01.2014 Version: KSS 8.2, 8.3 CREAD/CWRITE V1


5 Konfiguration der externen Module

5 Konfiguration der externen Module

In dieser Dokumentation wird nicht die vollständige Konfiguration ei-


nes externen Moduls beschrieben. Diese ist modulspezifisch. Es wer-
den nur die Einstellungen beschrieben, die mit CREAD/CWRITE
zusammenhängen.

Datei Die externen Module sind in der Datei $CUSTOM.DAT deklariert.


DECL EXT_MOD_T $EXT_MOD_x={O_FILE[] " ",OPTION 0}

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.

Stand: 27.01.2014 Version: KSS 8.2, 8.3 CREAD/CWRITE V1 13 / 69


CREAD/CWRITE

14 / 69 Stand: 27.01.2014 Version: KSS 8.2, 8.3 CREAD/CWRITE V1


6 Programmierung

6 Programmierung

6.1 Übersicht Programmierung

Alle Anweisungen (außer CHANNEL) können sowohl in SRC- als auch in


SUB-Dateien verwendet werden.
Anweisungen können von Interrupt-Programmen unterbrochen werden.
Wenn innerhalb des Interrupt-Programms auf Kanäle zugegriffen wird, kön-
nen diese Zugriffe nur von anderen Interrupt-Programmen unterbrochen wer-
den.
Die Tabelle zeigt, welche Anweisungen für welche Kanäle relevant sind:

Anweisung Externes Modul Externes Modul Kommandokanal Kommandokanal


Typ Typ $CMD $FCT_CALL
LD_EXT_OBJ LD_EXT_FCT
CHANNEL + + - -
COPEN + + - -
CREAD + - - -
CWRITE + + + +
CCLOSE + + - -
CIOCTL + + - -
SREAD Anweisung ist nicht auf einen Kanal bezogen
SWRITE Anweisung ist nicht auf einen Kanal bezogen
CAST_TO Anweisung ist nicht auf einen Kanal bezogen
CAST_FRO Anweisung ist nicht auf einen Kanal bezogen
M

6.2 Zeichen und Schriftarten

In den Syntaxbeschreibungen werden folgende Zeichen und Schriftarten ver-


wendet:

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

Die CHANNEL-Anweisung muss nicht programmiert werden. Sie ist


bereits für alle externen Module in der Datei $CUSTOM.DAT vordefi-
niert. Zum Verständnis wird die Anweisung hier dennoch erläutert.

Stand: 27.01.2014 Version: KSS 8.2, 8.3 CREAD/CWRITE V1 15 / 69


CREAD/CWRITE

Beschreibung CHANNEL verknüpft eine vordefinierte Strukturvariable mit einem Namen.


Dies ist notwendig, wenn ein externes Modul angesprochen werden soll, da
die vordefinierten Strukturvariablen nicht direkt angesprochen werden kön-
nen. Beispielsweise kann das externe Modul LD_EXT_OBJ1 nicht direkt über
$EXT_MOD_1 angesprochen werden.

Syntax CHANNEL :Kanalname :Schnittstellenname Strukturvariable

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

Beispiel CHANNEL-Anweisung für das externe Modul 1:


CHANNEL :LD_EXT_OBJ1 :LD_EXT_OBJ1 $EXT_MOD_1

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.

Syntax COPEN (:Kanalname, Handle)

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.

16 / 69 Stand: 27.01.2014 Version: KSS 8.2, 8.3 CREAD/CWRITE V1


6 Programmierung

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.

Stand: 27.01.2014 Version: KSS 8.2, 8.3 CREAD/CWRITE V1 17 / 69


CREAD/CWRITE

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.

6.5.1 Lese-Modus für CREAD

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.

18 / 69 Stand: 27.01.2014 Version: KSS 8.2, 8.3 CREAD/CWRITE V1


6 Programmierung

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.

Beispiel mit Hauptprogramm mit Interrupt-Deklaration:


Interrupt
INTERRUPT DECL 10 WHEN $DATA_LD_EXT_OBJ2<>0 DO OBJ_INT ()
INTERRUPT ON 10
...

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.

Syntax CWRITE (HandleΙ$CMDΙ$FCT_CALL, Status, Modus, Format, Var1 <,


…,Var10>)

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)

Stand: 27.01.2014 Version: KSS 8.2, 8.3 CREAD/CWRITE V1 19 / 69


CREAD/CWRITE

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.

6.6.1 Schreib-Modus für CWRITE

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

20 / 69 Stand: 27.01.2014 Version: KSS 8.2, 8.3 CREAD/CWRITE V1


6 Programmierung

Ein Kommandokanal ist immer offen und muss weder geöffnet noch geschlos-
sen werden.
CCLOSE löst einen Vorlaufstopp aus.

Wenn versucht wird, einen bereits geschlossenen Kanal mit CC-


LOSE noch einmal zu schließen, wird der Status #CMD_ABORT zu-
rückgegeben.

Syntax CCLOSE (Handle, Status)

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

Beschreibung CIOCTL ist nur relevant für externe Objekte.


 CIOCTL kann beliebige Daten an ein externes Objekt übertragen, bei-
spielsweise Konfigurationsdaten um einen Dateinamen zu ändern.
 CIOCTL kann beliebige Daten eines externen Objekts abfragen.
CIOCTL wird verwendet, um Daten zusätzlich zu den von CREAD/CWRITE
kommunizierten Daten zu übertragen, z. B. um nach einer gescheiterten
CREAD- oder CWRITE-Anweisung eine detaillierte Fehlermeldung abzufra-
gen. Die CIOCTL-Anweisung kann nicht anstatt CREAD/CWRITE verwendet
werden, da sie zwar die gleichen Daten übertragen kann, jedoch die Daten
nicht formatieren kann.
CIOCTL kann auch vom Kommando-Interpreter aufgerufen werden.
CIOCTL besitzt immer einen Rückgabewert. Der Rückgabewert kann im KRL-
Programm abgefragt und ausgewertet werden.

Syntax CIOCTL (Handle, Request, Argument, String, Retval)

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

Stand: 27.01.2014 Version: KSS 8.2, 8.3 CREAD/CWRITE V1 21 / 69


CREAD/CWRITE

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)

Rückgabewerte Wert Beschreibung


0 CIOCTL wurde erfolgreich ausgeführt.
1 CIOCTL wurde nicht erfolgreich ausgeführt.
Ursache: Der Kanal ist geschlossen.
2 CIOCTL wurde nicht erfolgreich ausgeführt.
Ursache: CIOCTL wurde von einem anderen Interpreter
aufgerufen als COPEN.
Beispiel: COPEN wurde von S_INT aufgerufen, CIOCTL
wurde von R_INT aufgerufen.
Wenn CIOCTL vom Kommando-Interpreter aufgerufen
wird, wird die Anweisung immer ausgeführt, unabhängig
davon, von welchem Interpreter COPEN aufgerufen wurde.
3 CIOCTL wurde nicht erfolgreich ausgeführt.
Ursache: Ungültige Anforderungsnummer
>0 Fehlernummer, die vom externen Modul zurückgegeben
wird.

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.

Syntax SREAD (String, Status, OFFSET, Format, Var1 <, …,Var10>)

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)

22 / 69 Stand: 27.01.2014 Version: KSS 8.2, 8.3 CREAD/CWRITE V1


6 Programmierung

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.

Syntax SWRITE (String, Status, OFFSET, Format, Var1 <, …,Var10>)

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)

Stand: 27.01.2014 Version: KSS 8.2, 8.3 CREAD/CWRITE V1 23 / 69


CREAD/CWRITE

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

Beschreibung CAST_TO ermöglicht es, mit einer einzigen CWRITE-Anweisung Datenmen-


gen von bis zu 4 KB zu verarbeiten. CAST_TO fasst einzelne Variablen zu ei-
nem Puffer zusammen. CWRITE schreibt diesen Puffer dann in den Kanal.
Maximalgröße des Puffers: 4 KB (= 4 096 Bytes). Wenn die Datenmengen so
groß sind, dass die Maximalgröße des Puffers nicht ausreicht, müssen meh-
rere CWRITE-Anweisungen hintereinander verwendet werden.

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]=" "

CAST_TO löst keinen Vorlaufstopp aus. Wenn jedoch Variablen verarbeitet


werden, die einen Vorlaufstopp auslösen, wird dadurch indirekt ein Vorlauf-
stopp ausgelöst.

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.

24 / 69 Stand: 27.01.2014 Version: KSS 8.2, 8.3 CREAD/CWRITE V1


6 Programmierung

 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.

Syntax CAST_TO (Puffer, OFFSET, Var1 <, …,Var10>)

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

Beschreibung CAST_FROM ermöglicht es, mit einer einzigen CREAD-Anweisung Daten-


mengen von bis zu 4 KB zu verarbeiten. Wenn CREAD einen Puffer aus ei-
nem Kanal gelesen hat, kann CAST_FROM den Puffer in einzelne Variablen
aufteilen.
Maximalgröße des Puffers: 4 KB (= 4 096 Bytes) . Wenn die Datenmengen so
groß sind, dass die Maximalgröße des Puffers nicht ausreicht, müssen meh-
rere CREAD-Anweisungen hintereinander verwendet werden.

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]=" "

CAST_FROM löst keinen Vorlaufstopp aus. Wenn jedoch Variablen verarbei-


tet werden, die einen Vorlaufstopp auslösen, wird dadurch indirekt ein Vorlauf-
stopp ausgelöst.

Stand: 27.01.2014 Version: KSS 8.2, 8.3 CREAD/CWRITE V1 25 / 69


CREAD/CWRITE

Syntax CAST_FROM (Puffer, OFFSET, Var1 <, …,Var10>)

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.

6.13 Erlaubte Datentypen in CAST-Anweisungen

Übersicht Datentyp Größe


1 INT 4 Bytes
2 REAL 4 Bytes
3 BOOL 1 Byte
4 CHAR 1 Byte
5 ENUM 4 Bytes
6 SIGNAL 1 Byte
7 FRAME 6*REAL
8 POS 6*REAL + 2*INT
9 AXIS 6*REAL
10 E3POS 6*REAL + 2*INT +
3*REAL
11 E3AXIS 6*REAL + 3*REAL
12 E6POS 6*REAL + 2*INT *
6*REAL
13 E6AXIS 6*REAL + 6*REAL

Felder CAST-Anweisungen können Felder der einfachen Datentypen 1 … 5 verarbei-


ten. Die CAST-Anweisungen prüfen nicht, ob alle Feldelemente initialisiert
sind. Nicht initialisierte Elemente werden mit zufälligen Werten beschrieben.

26 / 69 Stand: 27.01.2014 Version: KSS 8.2, 8.3 CREAD/CWRITE V1


6 Programmierung

Strukturtypen In CAST-Anweisungen dürfen nur die Strukturtypen 7 … 13 verwendet wer-


den. Wenn andere Strukturtypen verarbeitet werden sollen, müssen sie Kom-
ponente für Komponente verarbeitet werden.

6.14 Variable "Status"

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

6.14.1 Strukturtyp STATE_T

Beschreibung STATE_T ist ein vordefinierter Strukturtyp:


STRUC STATE_T CMD_STAT RET1, INT MSG_NO, INT HITS, INT LENGTH

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

6.14.2 Rückgabewerte für die Variable RET1

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:

Stand: 27.01.2014 Version: KSS 8.2, 8.3 CREAD/CWRITE V1 27 / 69


CREAD/CWRITE

ENUM CMD_STAT CMD_OK, CMD_TIMEOUT, DATA_OK, DATA_BLK,


DATA_END, CMD_ABORT, CMD_SYN, FMT_ERR

CREAD Folgende Werte kann RET1 für CREAD annehmen:

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.

CWRITE Folgende Werte kann RET1 für CWRITE annehmen:

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.

CCLOSE Folgende Werte kann RET1 für CCLOSE annehmen:

28 / 69 Stand: 27.01.2014 Version: KSS 8.2, 8.3 CREAD/CWRITE V1


6 Programmierung

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.

6.15 Variable "Format"

Die Variable Format ist Bestandteil folgender Anweisungen:


 CREAD
 CWRITE
 SREAD
 SWRITE

6.15.1 Variable "Format" für CREAD/SREAD

Eine Formatangabe für CREAD oder SREAD ist folgendermaßen aufgebaut:


"%<W>U"
Formatangaben für Felder sind folgendermaßen aufgebaut: "%<W<.Z>>U"

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)

Formatangaben für CREAD/SREAD dürfen keine Formatierungszei-


chen enthalten, z. B. #.

6.15.2 Variable "Format" für CWRITE/SWRITE

Eine Formatangabe für CWRITE oder SWRITE ist folgendermaßen aufge-


baut: "%<FW.G>U"

Element F Formatierungszeichen. Optional.


Es können mehrere Formatierungszeichen auf ein Format angewendet wer-
den.

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.

Stand: 27.01.2014 Version: KSS 8.2, 8.3 CREAD/CWRITE V1 29 / 69


CREAD/CWRITE

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 W Mindestzahl der auszugebenden Stellen. Optional.


Dezimalpunkte werden auf die Mindestzahl angerechnet, Vorzeichen nicht.
Um die Mindestzahl zu erreichen, werden Null-Bytes im Little Endian-Format
angefügt. Die Mindestzahl wird bei Bedarf überschritten.
Beispiele:
 VAR=1.56
"%+8.4d", VAR
Ergebnis: _ _ + 1 . 5 6 0 0
 VAR=125.568
"%+8.4d", VAR
Ergebnis: + 1 2 5 . 5 6 8 0
Wenn die Weite mit 0x angegeben wird, bedeutet dies, dass die auszugeben-
den Stellen mit Nullen aufgefüllt werden.
Beispiel:
 VAR=1
"%+04d", VAR
Ergebnis: + 0 0 0 1
Im Vergleich dazu die Angabe ohne 0:
 "%+4d", VAR
Ergebnis: _ _ _ + 1
Wenn keine Weite angegeben wird, gelten folgende Standardweiten:
 INT, REAL, ENUM: 4 Bytes
 BOOL, CHAR: 1 Byte

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.

30 / 69 Stand: 27.01.2014 Version: KSS 8.2, 8.3 CREAD/CWRITE V1


6 Programmierung

Element U Umwandlungszeichen
(>>> 6.15.3 "Umwandlungszeichen" Seite 31)

6.15.3 Umwandlungszeichen

Das Umwandlungszeichen ist Bestandteil der Variable Format.


Zulässig sind die in den Tabellen aufgeführten Umwandlungszeichen. Sie ent-
sprechen den Formatzeichen der Funktion fprintf() der Programmiersprache
C. Nicht unterstützt werden die Zeichen o, p, n, u und [liste] aus fprintf().
Groß- und Kleinschreibung wird bei den Umwandlungszeichen nicht unter-
schieden. Boolesche Werte werden als 0 oder 1 ausgegeben, ENUM-Kons-
tanten als Zahlen.

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.

Zusätzlich zu den Zeichen aus fprintf() wurde das Zeichen r eingeführt:

Format mit r Beschreibung


"%x.xr" Liest oder schreibt eine Byte-Folge der angegebenen
Länge (z. B. "%2.5r").
"%r" Liest oder schreibt alle vorhandenen Bytes.
"%1r" Liest oder schreibt ein Byte. Im Gegensatz zu den
anderen Umwandlungszeichen muss hier das Lesen
eines einzelnen Bytes explizit mit 1 angegeben wer-
den.

6.15.4 Welches Format für welche Variable?

Die Verwendung der Formate ist identisch für CREAD und SREAD einerseits
und CWRITE und SWRITE andererseits.

Stand: 27.01.2014 Version: KSS 8.2, 8.3 CREAD/CWRITE V1 31 / 69


CREAD/CWRITE

Vorgehensweise 1. Aus den folgenden Tabellen die passende auswählen.


2. In der Kopfzeile der Tabelle den Datentyp der Variable Var suchen.
In der Spalte dieses Datentyps sind alle erlaubten Formate mit "+" gekenn-
zeichnet.

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.

CREAD/SREAD Format INT REAL BOOL ENUM CHAR


%d, %i, %x + + + + +
%f, %e, %g +
%c + + + +
%1r + + + +
%2r + + +
%4r + + + +
%r + + + + +

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 + + + + +

32 / 69 Stand: 27.01.2014 Version: KSS 8.2, 8.3 CREAD/CWRITE V1


6 Programmierung

CWRITE/SWRITE Format INT REAL BOOL ENUM CHAR


%d, %i, %x + + + +
%f, %e, %g + +
%c +
%1r + + + +
%2r + + +
%4r + + + +
%r + + + + +

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)

Beispiel 2 Der Wert der Integer-Variablen VI wird binär übertragen:


INT VI
VI=123
CWRITE(HANDLE,SW_T,MW_T,"%r",VI)

Beispiel 3 Alle Feldelemente eines Feldes werden übertragen:


REAL VR[10]
CWRITE(HANDLE,SW_T,MW_T,"%r",VR[])

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[])

Es werden 20 Bytes binär übertragen.

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 6 Die ersten 50 Feldelemente werden übertragen:


CHAR VS[100]
CWRITE(HANDLE,SW_T,MW_T,"%s",VS[])

Stand: 27.01.2014 Version: KSS 8.2, 8.3 CREAD/CWRITE V1 33 / 69


CREAD/CWRITE

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)

Beispiel 8 Zwei REAL-Werte werden mit zusätzlichem Text übertragen:


REAL V1,V2
V1=3.97
V2=-27.3
CWRITE(...,...,...,"value1=%+#07.3f value2=+#06.2f",V1,V2)

Folgende Daten werden übertragen:


 value1=+03.970
 value2=-27.30

6.16 Funktionen für den Kommandokanal $FCT_CALL

Die hier beschriebenen Dateisystem-Funktionen müssen in Klein-


schreibung geschrieben werden. Großbuchstaben sind nicht erlaubt.

Übersicht Dateisystem-Funktionen für den Kommandokanal $FCT_CALL werden über


CWRITE aufgerufen. Die Funktionsparameter müssen beim Aufruf als Var1 …
Var10 an CWRITE übergeben werden. Außerdem muss der von CWRITE
übergebene Schreib-Modus #SYNC sein.
Die Dateien, auf die die Funktionen zugreifen, werden defaultmäßig lokal im
Verzeichnis C:\KRC\ROBOTER\UserFiles abgelegt. Die Maximalgröße der
dort abgelegten Dateien ist auf insgesamt 10 MB begrenzt, d. h. die Gesamt-
größe aller dort abgelegter Dateien darf diese Grenze nicht überschreiten. Zu-
sätzlich besteht die Möglichkeit, über die Funktion krl_mount() ein
freigegebenes Netzlaufwerk für den Dateizugriff zu verwenden.
Die Dateisystem-Funktionen können sowohl aus einem Roboter-Interpreter-
Programm als auch aus einem Submit-Interpreter-Programm heraus aufgeru-
fen werden.

Es wird empfohlen, Dateien nicht über eine längere Zeit geöffnet zu


halten. Dateien möglichst erst dann öffnen, wenn auf sie zugegriffen
werden soll, und anschließend sofort wieder schließen.

Beim Öffnen einer Datei wird eine dateispezifische Handle-Variable


zurückgegeben. Bei der Programmierung ist darauf zu achten, dass
der Datei-Handle nicht verlorengehen kann, z. B. durch Überschrei-
ben der Handle-Variable oder durch einen falsch gewählten Geltungsbereich
der Handle-Variable. Es besteht dann keine Möglichkeit mehr diese Datei ex-
plizit zu schließen.
Tritt dieses Problem im Dauerbetrieb mehrfach auf, kann dies dazu führen,
dass keine freien Datei-Handles mehr verfügbar und dadurch keine Da-
teioperationen mehr durchführbar sind.

Dateisystem-Funktionen möglichst nicht in zeitkritischen KRL-Ab-


schnitten einsetzen. Es ist nicht möglich, die Ausführungszeit von Da-
teioperationen zu bestimmen, da im Hintergrund ein Dateisystem (im
Extremfall als gemountetes Netzlaufwerk) bedient werden muss.
Will man ein solches Logging implementieren, sind die zeitkritischen Zustän-
de zunächst in KRL-Variablen zu puffern, und dann in einer zeitlich unkriti-
schen Phase an das Dateisystem zu übergeben.

34 / 69 Stand: 27.01.2014 Version: KSS 8.2, 8.3 CREAD/CWRITE V1


6 Programmierung

Fehlerbe- Jede Dateisystem-Funktion liefert über CWRITE einen Rückgabewert, der im


handlung KRL-Programm abgefragt und ausgewertet werden kann. Der Rückgabewert
zeigt an, ob die Funktion erfolgreich ausgeführt oder mit einem Fehler abge-
brochen wurde.
Ob ein Fehler aufgetreten ist, wird über die Variable Status.RET1 abgefragt,
die beim Aufruf von CWRITE übergeben wird:
 Status.RET1= #DATA_OK: Funktion erfolgreich ausgeführt
 Status.RET1= #CMD_ABORT: Funktion mit Fehler abgebrochen
(>>> 6.14 "Variable "Status"" Seite 27)
Bei einem Fehler kann die Ursache über die zurückgegebene Fehlernummer
eingegrenzt werden. Die Fehlernummer wird über die Variable Sta-
tus.MSG_NO abgefragt. Die möglichen Fehlernummern sind für jede Funktion
beschrieben.

6.16.1 krl_mount()

Beschreibung Erstellen und Verbinden eines Mount-Punktes


Um sich aus KRL heraus mit einem freigegebenen Netzlaufwerk zu verbinden,
muss ein Name für den Mount-Punkt vergeben werden und der vollständige
Pfad zum freigegebenen Verzeichnis bekannt sein. Außerdem wird ein Benut-
zername und das verschlüsselte Passwort des Benutzers benötigt, unter dem
eine Verbindung zum Netzlaufwerk hergestellt werden soll.
Für die Verschlüsselung des Passworts steht das Programm khash.exe im
Verzeichnis C:\KRC\UTIL\Hash der Robotersteuerung zur Verfügung. Das
Programm khash.exe muss mit Angabe des Passworts auf der Windows-
Shell cmdk.exe ausgeführt werden.
Lautet das Passwort für den Benutzer beispielsweise "kuka", wird das Ver-
schlüsselungsprogramm auf der Windows-Shell wie folgt aufgerufen:
khash.exe kuka
Auf der Windows-Shell wird dann das verschlüsselte Passwort angezeigt, das
beim Aufruf von krl_mount() im KRL-Programm verwendet werden muss.

Syntax krl_mount(CHAR[] Name, CHAR[] Pfad, CHAR[] Benutzer, CHAR[]


Passwort)

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

Stand: 27.01.2014 Version: KSS 8.2, 8.3 CREAD/CWRITE V1 35 / 69


CREAD/CWRITE

Beispiel Es wird ein Mount-Punkt zum Netzlaufwerk \\160.160.113.23\transfer mit dem


Namen TransferNet erstellt. Die Verbindung wird für den Benutzer Administ-
rator mit dessen verschlüsseltem Passwort hergestellt:
CWRITE($FCT_CALL, State, Mode, "krl_mount", "/TransferNet",
"//160.160.113.23/transfer", "Administrator",
"04FF94D4B99A1153C8CF3D479089A77AFE")

Fehlernummern MSG_NO Beschreibung


-2 Operation fehlgeschlagen: Mount-Punkt nicht (mehr) vorhan-
den
-8 Dateisystem nicht verfügbar: Fehler bei der Angabe des Ziel-
verzeichnisses
-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.
-14 Mindestens ein Funktionsparameter-String ist leer.
-15 Mindestens ein Funktionsparameter-String ist zu lang.
-16 Mindestens ein Funktionsparameter-String enthält ungültige
Zeichen, z. B. \ * ? " < > : , = ; ] [ ) ( } { für Pfade etc.

6.16.2 krl_unmount()

Beschreibung Entfernen eines Mount-Punktes


Mit dieser Funktion kann die Verbindung zu einem Netzlaufwerk, die mit
krl_mount() erzeugt wurde, getrennt werden.

Syntax krl_unmount(CHAR[] Name)

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.

Beispiel Die Verbindung zum Mount-Punkt TransferNet wird getrennt:


CWRITE($FCT_CALL, State, Mode, "krl_unmount", "/TransferNet")

Fehlernummern MSG_NO Beschreibung


-2 Operation fehlgeschlagen: Ungültiger Benutzer, falsches
Passwort, Mount-Punkt nicht (mehr) vorhanden
-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.
-14 Mindestens ein Funktionsparameter-String ist leer.
-15 Mindestens ein Funktionsparameter-String ist zu lang.
-16 Mindestens ein Funktionsparameter-String enthält ungültige
Zeichen, z. B. \ * ? " < > : , = ; ] [ ) ( } { für Pfade etc.

36 / 69 Stand: 27.01.2014 Version: KSS 8.2, 8.3 CREAD/CWRITE V1


6 Programmierung

6.16.3 krl_fopen()

Beschreibung Öffnen einer Datei


Abhängig vom ausgewählten Modus wird eine Datei als Text- oder Binärdatei
für den lesenden und/oder schreibenden Zugriff geöffnet. Die zur Verfügung
stehenden Modi entsprechen denen der Funktion fopen() der Header-Datei
stdio.h.
In KRL-Programmen können maximal 11 Dateien gleichzeitig mit dieser Funk-
tion geöffnet sein.

Es wird empfohlen, Dateien nicht über eine längere Zeit geöffnet zu


halten. Dateien möglichst erst dann öffnen, wenn auf sie zugegriffen
werden soll, und anschließend sofort wieder schließen.

Beim Öffnen einer Datei wird eine dateispezifische Handle-Variable


zurückgegeben. Bei der Programmierung ist darauf zu achten, dass
der Datei-Handle nicht verlorengehen kann, z. B. durch Überschrei-
ben der Handle-Variable oder durch einen falsch gewählten Geltungsbereich
der Handle-Variable. Es besteht dann keine Möglichkeit mehr diese Datei ex-
plizit zu schließen.
Tritt dieses Problem im Dauerbetrieb mehrfach auf, kann dies dazu führen,
dass keine freien Datei-Handles mehr verfügbar und dadurch keine Da-
teioperationen mehr durchführbar sind.

Syntax krl_fopen(CHAR[] Name, CHAR[] Modus, INT Handle <,


BUFF_MODE_T Pufferung>)

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)

Stand: 27.01.2014 Version: KSS 8.2, 8.3 CREAD/CWRITE V1 37 / 69


CREAD/CWRITE

Element Beschreibung
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

Modi zum Öffnen Modus Beschreibung


"r" Öffnen als Textdatei für den lesenden Zugriff
In diesem Modus kann eine Datei mehrfach hintereinander
(auch von Roboter- und Submit-Interpreter gleichzeitig) geöff-
net werden, ohne sie vorher zu schließen. Es wird jeweils ein
anderes Handle zurückgegeben. Jedes dieser Handle muss
irgendwann geschlossen werden, sonst kann die Datei nicht
in einem anderen Modus geöffnet werden.
"w" Öffnen als Textdatei für den schreibenden Zugriff
In diesem Modus wird der Inhalt der Datei beim Öffnen
gelöscht. Wenn die Datei nicht vorhanden ist, wird sie neu
erstellt.
"a" Öffnen als Textdatei für den schreibenden Zugriff
In diesem Modus wird der Inhalt der Datei beim Öffnen nicht
gelöscht, sondern die geschriebenen Werte am Dateiende
eingefügt. Wenn die Datei nicht vorhanden ist, wird sie neu
erstellt.
"rb" Öffnen als Binärdatei für den lesenden Zugriff (Verhalten
siehe Modus "r")
"wb" Öffnen als Binärdatei für den schreibenden Zugriff (Verhalten
siehe Modus "w")
"ab" Öffnen als Binärdatei für den schreibenden Zugriff (Verhalten
siehe Modus "a")
"r+" Öffnen als Textdatei für den lesenden und schreibenden
Zugriff (Verhalten siehe Modus "r")
Hinweis: Der Dateizeiger zeigt nach dem Öffnen auf den
Dateianfang. Damit beim Schreiben keine Inhalte überschrie-
ben werden, muss der Dateizeiger mithilfe der Funktion
krl_fseek() an das Dateiende gesetzt werden.

38 / 69 Stand: 27.01.2014 Version: KSS 8.2, 8.3 CREAD/CWRITE V1


6 Programmierung

Modus Beschreibung
"w+" Öffnen als Textdatei für den schreibenden und lesenden
Zugriff (Verhalten siehe Modus "w")
"a+" Öffnen als Textdatei für den schreibenden und lesenden
Zugriff (Verhalten siehe Modus "a")
"rb+" Öffnen als Binärdatei für den lesenden und schreibenden
Zugriff (Verhalten siehe Modus "r")
Hinweis: Der Dateizeiger zeigt nach dem Öffnen auf den
Dateianfang. Damit beim Schreiben keine Inhalte überschrie-
ben werden, muss der Dateizeiger mithilfe der Funktion
krl_fseek() an das Dateiende gesetzt werden.
"wb+" Öffnen als Binärdatei für den schreibenden und lesenden
Zugriff (Verhalten siehe Modus "w")
"ab+" Öffnen als Binärdatei für den schreibenden und lesenden
Zugriff (Verhalten siehe Modus "a")

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 2 Die Datei ROBOTER\UserFiles\test\MyFile.txt wird als Binärdatei für den


schreibenden und lesenden Zugriff geöffnet. Wenn die Datei bereits vorhan-
den ist, wird der Inhalt der Datei gelöscht. Wenn die Datei nicht vorhanden ist,
wird die Datei neu erstellt:
CWRITE($FCT_CALL, State, Mode, "krl_fopen", "Test/MyFile.txt",
"wb+", 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)

Fehlernummern MSG_NO Beschreibung


-1 Interner Fehler
-2 Operation fehlgeschlagen, z. B. weil die Datei außerhalb
eines KRL-Programms geöffnet wurde oder der Modus "r",
"r+", "rb" oder "rb+" ist, aber die Datei nicht vorhanden ist
-6 Datei ist bereits geöffnet.
-8 Dateisystem nicht verfügbar: Fehler bei der Angabe des Ziel-
verzeichnisses
-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.
-14 Mindestens ein Funktionsparameter-String ist leer.
-15 Mindestens ein Funktionsparameter-String ist zu lang.
-16 Mindestens ein Funktionsparameter-String enthält ungültige
Zeichen, z. B. \ * ? " < > : , = ; ] [ ) ( } { für Pfade etc.

Stand: 27.01.2014 Version: KSS 8.2, 8.3 CREAD/CWRITE V1 39 / 69


CREAD/CWRITE

MSG_NO Beschreibung
-30 Ein direkter Zugriff auf das ROBOTER-Verzeichnis ist nicht
zulässig.
-31 Ungültiger absoluter Pfad
-32 Mount-Punkt nicht gefunden
-40 Öffnen der Datei ist nicht möglich, weil bereits 11 Dateien
geöffnet sind.

6.16.4 krl_fclose()

Beschreibung Schließen einer Datei


Die Datei ist durch das übergebene Handle eindeutig bestimmt. Nach dem
Schließen der Datei ist das Handle ungültig und kann nicht für weitere Datei-
system-Operationen verwendet werden.
Beim Schließen werden die in einen Puffer geschriebenen Inhalte in die Datei
geschrieben.

Syntax krl_fclose(INT Handle)

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 Eine Datei wird über ein Datei-Handle geschlossen:


CWRITE($FCT_CALL, State, Mode, "krl_fclose", FileHandle)

Fehlernummern MSG_NO Beschreibung


-1 Interner Fehler
-2 Operation fehlgeschlagen
-3 Es ist keine Datei geöffnet.
-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.

6.16.5 krl_fclose_all()

Diese Funktion steht nur für KUKA System Software 8.3 zur Verfü-
gung.

Beschreibung Schließen aller Dateien


Mit dieser Funktion können alle offenen Dateien gleichzeitig geschlossen wer-
den oder alle Dateien, die von einem bestimmten Interpreter mit krl_open() ge-
öffnet wurden.

Syntax krl_fclose_all(INT Interpreter)

40 / 69 Stand: 27.01.2014 Version: KSS 8.2, 8.3 CREAD/CWRITE V1


6 Programmierung

Erläuterung der Element Beschreibung


Syntax Interpreter Alle Dateien, die von dem hier angegebenen Interpreter mit
krl_open() geöffnet wurden, werden geschlossen.
 0: Schließt alle Dateien, die vom Submit-Interpreter ge-
öffnet wurden.
 1: Schließt alle Dateien, die vom Roboter-Interpreter
geöffnet wurden.
 -1: Schließt alle Dateien, die von dem Interpreter geöff-
net wurden, der aktuell krl_fclose_all() aufruft.
 -99: Schließt alle Dateien, die geöffnet wurden, unab-
hängig vom Interpreter.

Beispiel Alle Dateien, die vom Roboter-Interpreter mit krl_open() geöffnet wurden, wer-
den geschlossen.
CWRITE($FCT_CALL, State, Mode, "krl_fclose_all", 1)

Fehlernummern MSG_NO Beschreibung


-1 Interner Fehler
-2 Operation fehlgeschlagen
-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.

6.16.6 krl_feof()

Beschreibung Prüfen, ob Dateizeiger das Dateiende erreicht hat


Diese Funktion kann beim Lesen von Dateien verwendet werden. Wenn der
Dateizeiger das Dateiende erreicht hat, können keine weiteren Zeichen mehr
aus der Datei gelesen werden. Die Funktion liefert erst nach mindestens ei-
nem Leseversuch richtige Werte.

Syntax krl_feof(INT Handle, BOOL Status)

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)

Fehlernummern MSG_NO Beschreibung


-3 Es ist keine Datei geöffnet.
-10 Ungültige Anzahl an Funktionsparametern wurde übergeben.
-11 Mindestens ein Funktionsparameter besitzt einen ungültigen
Wert.

Stand: 27.01.2014 Version: KSS 8.2, 8.3 CREAD/CWRITE V1 41 / 69


CREAD/CWRITE

MSG_NO Beschreibung
-12 Mindestens ein Funktionsparameter besitzt einen falschen
Datentyp.
-13 Mindestens ein Funktionsparameter ist keine Variable,
obwohl eine Variable erwartet wird.

6.16.7 krl_fflush()

Beschreibung Schreibt alle Daten im Puffer in die Datei

Syntax krl_fflush(INT Handle)

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)

Fehlernummern MSG_NO Beschreibung


-2 Operation fehlgeschlagen
-3 Es ist keine Datei geöffnet.
-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.

6.16.8 krl_fgetc()

Beschreibung Lesen des nächsten Zeichens aus einer Datei

Syntax krl_fgetc(INT Handle, CHAR 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
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)

Fehlernummern MSG_NO Beschreibung


-3 Es ist keine Datei geöffnet.
-4 Dateiende wurde erreicht.
-10 Ungültige Anzahl an Funktionsparametern wurde übergeben.
-11 Mindestens ein Funktionsparameter besitzt einen ungültigen
Wert.

42 / 69 Stand: 27.01.2014 Version: KSS 8.2, 8.3 CREAD/CWRITE V1


6 Programmierung

MSG_NO Beschreibung
-12 Mindestens ein Funktionsparameter besitzt einen falschen
Datentyp.
-13 Mindestens ein Funktionsparameter ist keine Variable,
obwohl eine Variable erwartet wird.

6.16.9 krl_fgets()

Beschreibung Lesen einer Zeichenkette aus einer Datei


Das Lesen mit dieser Funktion ist sowohl zeilenweise als auch bis zu einem
definierten Trennzeichen möglich.
 Wenn kein Trennzeichen angegeben ist, werden solange Zeichen in einen
Puffer gelesen bis entweder ein Zeilenende erreicht ist oder die maximal
mögliche Anzahl an Zeichen gelesen wurde.
 Wenn ein Trennzeichen angegeben ist, werden solange Zeichen in einen
Puffer gelesen bis das Trennzeichen oder die maximal mögliche Anzahl
an Zeichen gelesen wurde.

Syntax krl_fgets(INT Handle, CHAR[] Puffername, INT Puffergröße, INT


Gelesen<, CHAR Trennzeichen>)

Erläuterung der Element Beschreibung


Syntax Handle Handle-Variable, die beim Aufruf von krl_fopen() zurückge-
geben wurde und die Datei eindeutig identifiziert
Puffername Variable für den Puffer, in den die gelesene Zeichenkette
geschrieben wird
Puffergröße Maximal mögliche Anzahl an Zeichen (inkl. Zeilenende-
Zeichen), die aus der Datei gelesen und in den Puffer
geschrieben werden kann
Gelesen Variable für die Anzahl an Zeichen, die tatsächlich aus der
Datei gelesen wurden
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,
Gelesen)

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,
Gelesen, ":")

Fehlernummern MSG_NO Beschreibung


-2 Operation fehlgeschlagen
-3 Es ist keine Datei geöffnet.
-4 Dateiende wurde erreicht.
-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.

Stand: 27.01.2014 Version: KSS 8.2, 8.3 CREAD/CWRITE V1 43 / 69


CREAD/CWRITE

MSG_NO Beschreibung
-13 Mindestens ein Funktionsparameter ist keine Variable,
obwohl eine Variable erwartet wird.
-41 Ein Wert konnte nicht gelesen werden. Die Werte vor diesem
Wert wurden korrekt gelesen.

6.16.10 krl_fscanf()

Beschreibung Formatiertes Lesen einer Zeichenkette aus einer Datei


Das zu lesende Format wird als Zeichenkette an die Funktion übergeben und
in Variablen geschrieben.
Die zur Verfügung stehenden Formate sind der gegenüber der Standard-Im-
plementierung in der Programmiersprache C eingeschränkt.
Folgende Formate sind erlaubt:
 "%d", "%i", "%u", "%x", "%e", "%f", "%g", "%s" und "%c"
Folgende Formate sind nicht erlaubt:
 %o", "%p", "%n" und Listen "[Liste]"
Ebenfalls nicht erlaubt sind:
 Formatkonkretisierungen für Längenangaben, Vorzeichen oder Füll- und
Konvertierungszeichen, z. B. "%6.2.f", "%-d", "%+d", "%#f", etc.

Syntax krl_fscanf(INT Handle, CHAR[] Format, Var1 <, … , Var8>)

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)

Fehlernummern MSG_NO Beschreibung


-1 Interner Fehler
-2 Operation fehlgeschlagen
-4 Dateiende wurde erreicht.
-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.

44 / 69 Stand: 27.01.2014 Version: KSS 8.2, 8.3 CREAD/CWRITE V1


6 Programmierung

MSG_NO Beschreibung
-13 Mindestens ein Funktionsparameter ist keine Variable,
obwohl eine Variable erwartet wird.
-14 Mindestens ein Funktionsparameter-String ist leer.
-15 Mindestens ein Funktionsparameter-String ist zu lang.
-42 Der Formatstring enthält eine unzulässige Formatanweisung.
-43 Die Anzahl der zu lesenden Werte im Formatstring entspricht
nicht der Anzahl der übergebenen Parameter.
-44 Für einen Parameter wurde eine falsche Formatierung ange-
geben.

6.16.11 krl_fputc()

Beschreibung Schreiben eines Zeichens in eine Datei


Die Stelle, an der das Zeichen in die Datei geschrieben wird, ist abhängig vom
Modus, mit dem die Datei geöffnet wurde, sowie von der aktuellen Position
des Dateizeigers.

Syntax krl_fputc(INT Handle, CHAR 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
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")

Fehlernummern MSG_NO Beschreibung


-2 Operation fehlgeschlagen
-3 Es ist keine Datei geöffnet.
-5 Maximalgröße des Verzeichnisses C:\KRC\ROBOTER\User-
Files wurde erreicht.
-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.

6.16.12 krl_fputs()

Beschreibung Schreiben einer Zeichenkette in eine Datei


Mit dieser Funktion kann eine konstante Zeichenkette oder eine variable Zei-
chenkette in eine Datei geschrieben werden. Wenn eine Variable verwendet
wird, muss jedes Element des CHAR-Feldes initialisiert sein und einen gülti-
gen Wert enthalten.
Die Stelle, an der die Zeichenkette in die Datei geschrieben wird, ist abhängig
vom Modus, mit dem die Datei geöffnet wurde, sowie von der aktuellen Posi-
tion des Dateizeigers.

Syntax krl_fputs(INT Handle, CHAR[] String)

Stand: 27.01.2014 Version: KSS 8.2, 8.3 CREAD/CWRITE V1 45 / 69


CREAD/CWRITE

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[])

Fehlernummern MSG_NO Beschreibung


-2 Operation fehlgeschlagen
-3 Es ist keine Datei geöffnet.
-5 Maximalgröße des Verzeichnisses C:\KRC\ROBOTER\User-
Files wurde erreicht.
-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.
-14 Mindestens ein Funktionsparameter-String ist leer.

6.16.13 krl_fwriteln()

Beschreibung Zeilenweises Schreiben einer Zeichenkette in eine Datei


Mit dieser Funktion kann eine konstante Zeichenkette oder eine variable Zei-
chenkette in eine Datei geschrieben werden. An die zu schreibende Zeichen-
kette wird ein Zeilenende-Zeichen gehängt. Wenn eine Variable verwendet
wird, muss jedes Element des CHAR-Feldes initialisiert sein und einen gülti-
gen Wert enthalten.
Die Zeile, an der die Zeichenkette in die Datei geschrieben wird, ist abhängig
vom Modus, mit dem die Datei geöffnet wurde, sowie von der aktuellen Posi-
tion des Dateizeigers.

Syntax krl_fwriteln(INT Handle, CHAR[] String)

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, " ")

46 / 69 Stand: 27.01.2014 Version: KSS 8.2, 8.3 CREAD/CWRITE V1


6 Programmierung

Fehlernummern MSG_NO Beschreibung


-2 Operation fehlgeschlagen
-3 Es ist keine Datei geöffnet.
-5 Maximalgröße des Verzeichnisses C:\KRC\ROBOTER\User-
Files wurde erreicht.
-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.
-14 Mindestens ein Funktionsparameter-String ist leer.

6.16.14 krl_fprintf()

Beschreibung Formatiertes Schreiben einer Zeichenkette in eine Datei


Das zu schreibende Format wird als Zeichenkette an die Funktion übergeben.
Die Werte, die geschrieben werden sollen, werden ebenfalls übergeben.
Die zur Verfügung stehenden Formate sind der gegenüber der Standard-Im-
plementierung in der Programmiersprache C eingeschränkt.
Folgende Formate sind erlaubt:
 "%d", "%i", "%u", "%x", "%e", "%f", "%g", "%s" und "%c"
Folgende Formate sind nicht erlaubt:
 %o", "%p", "%n" und Listen "[Liste]"
Ebenfalls nicht erlaubt sind:
 Formatkonkretisierungen für Längenangaben, Vorzeichen oder Füll- und
Konvertierungszeichen, z. B. "%6.2.f", "%-d", "%+d", "%#f", etc.

Syntax krl_fprintf(INT Handle, CHAR[] Format, Par1, … , Par8)

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)

Stand: 27.01.2014 Version: KSS 8.2, 8.3 CREAD/CWRITE V1 47 / 69


CREAD/CWRITE

Fehlernummern MSG_NO Beschreibung


-1 Interner Fehler
-2 Operation fehlgeschlagen, z. B. weil die Datei außerhalb
eines KRL-Programms geöffnet wurde oder der Modus "r",
"r+", "rb" oder "rb+" ist, aber die Datei nicht vorhanden ist
-3 Es ist keine Datei geöffnet.
-5 Maximalgröße des Verzeichnisses C:\KRC\ROBOTER\User-
Files wurde erreicht.
-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.
-14 Mindestens ein Funktionsparameter-String ist leer.
-15 Mindestens ein Funktionsparameter-String ist zu lang.
-42 Der Formatstring enthält eine unzulässige Formatanweisung.
-43 Die Anzahl der zu lesenden Werte im Formatstring entspricht
nicht der Anzahl der übergebenen Parameter.
-44 Für einen Parameter wurde eine falsche Formatierung ange-
geben.

6.16.15 krl_fseek()

Beschreibung Positionieren des Dateizeigers


Mithilfe dieser Funktion kann der Dateizeiger an den Anfang oder das Ende
einer Datei sowie an eine Position relativ zur aktuellen Position gesetzt wer-
den.

Syntax krl_fseek(INT Handle, SEEK_MODE_T Modus , INT Offset)

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)

Fehlernummern MSG_NO Beschreibung


-1 Interner Fehler
-2 Operation fehlgeschlagen
-3 Es ist keine Datei geöffnet.

48 / 69 Stand: 27.01.2014 Version: KSS 8.2, 8.3 CREAD/CWRITE V1


6 Programmierung

MSG_NO Beschreibung
-7 Positionierung des Dateizeigers außerhalb der Dateigrenzen
(nur relevant bei Positionier-Modus SEEK_CUR)
-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.

6.16.16 krl_fsizeget()

Beschreibung Ermitteln der Dateigröße


Die Dateigröße wird in Byte angegeben. Mit dieser Funktion kann nur die Grö-
ße von Dateien ermittelt werden, die zuvor mit krl_fopen() geöffnet worden
sind.

Syntax krl_fsizeget(INT Handle, INT Größe)

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)

Fehlernummern MSG_NO Beschreibung


-2 Operation fehlgeschlagen
-3 Es ist keine Datei geöffnet.
-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.17 krl_mkdir()

Beschreibung Erstellen eines Verzeichnisses


Für diese Operation muss der Benutzer die notwendigen Lese- und
Schreibrechte besitzen.

Syntax krl_mkdir(CHAR[] Name)

Stand: 27.01.2014 Version: KSS 8.2, 8.3 CREAD/CWRITE V1 49 / 69


CREAD/CWRITE

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 1 Ein neues Verzeichnis wird unter ROBOTER\UserFiles erstellt:


CWRITE($FCT_CALL, State, Mode, "krl_mkdir", "NewDir")

Beispiel 2 Ein neues Verzeichnis wird auf dem Mount "MyMount" erstellt:
CWRITE($FCT_CALL, State, Mode, "krl_mkdir", "/MyMount/NewDir")

Fehlernummern MSG_NO Beschreibung


-2 Operation fehlgeschlagen
-8 Dateisystem nicht verfügbar: Fehler bei der Angabe des Ziel-
verzeichnisses
-10 Ungültige Anzahl an Funktionsparametern wurde übergeben.
-12 Mindestens ein Funktionsparameter besitzt einen falschen
Datentyp.
-14 Mindestens ein Funktionsparameter-String ist leer.
-15 Mindestens ein Funktionsparameter-String ist zu lang.

6.16.18 krl_rename()

Beschreibung Umbenennen einer Datei oder eines Verzeichnisses


Für diese Operation muss der Benutzer die notwendigen Lese- und
Schreibrechte besitzen. Die Datei, die umbenannt werden soll, darf nicht ge-
öffnet sein und es darf keine Datei mit dem neuen Namen vorhanden sein.

Syntax krl_rename(CHAR[] OldName, CHAR[] NewName)

Erläuterung der Element Beschreibung


Syntax OldName Alter Datei- oder Verzeichnisname ohne Pfad- oder mit
relativer Pfadangabe
(>>> 6.16.3 "krl_fopen()" Seite 37)
(>>> 6.16.17 "krl_mkdir()" Seite 49)
NewName Neuer Datei- oder Verzeichnisname ohne Pfad- oder mit
relativer Pfadangabe
Der hier angegebene Pfad muss mit dem unter OldName
angegebenen Pfad übereinstimmen.

Beispiel 1 Die Datei ROBOTER\UserFiles\MyFile.txt wird umbenannt:


CWRITE($FCT_CALL, State, Mode, "krl_rename", "MyFile.txt",
"YourFile.txt")

50 / 69 Stand: 27.01.2014 Version: KSS 8.2, 8.3 CREAD/CWRITE V1


6 Programmierung

Beispiel 2 Das Verzeichnis "NewDir" auf dem Mount "MyMount" wird umbenannt:
CWRITE($FCT_CALL, State, Mode, "krl_rename", "/MyMount/NewDir", "/
MyMount/TestDir")

Fehlernummern MSG_NO Beschreibung


-2 Operation fehlgeschlagen
-6 Datei ist bereits geöffnet.
-8 Dateisystem nicht verfügbar: Fehler bei der Angabe des Ziel-
verzeichnisses
-10 Ungültige Anzahl an Funktionsparametern wurde übergeben.
-12 Mindestens ein Funktionsparameter besitzt einen falschen
Datentyp.
-14 Mindestens ein Funktionsparameter-String ist leer.
-15 Mindestens ein Funktionsparameter-String ist zu lang.

6.16.19 krl_remove()

Beschreibung Löschen einer Datei oder eines Verzeichnisses


Für diese Operation muss der Benutzer die notwendigen Lese- und
Schreibrechte besitzen. Die Datei, die gelöscht werden soll, darf nicht geöffnet
sein.

Syntax krl_remove(CHAR[] Name)

Erläuterung der Element Beschreibung


Syntax Name Datei- oder Verzeichnisname ohne Pfad- oder mit relativer
Pfadangabe
(>>> 6.16.3 "krl_fopen()" Seite 37)
(>>> 6.16.17 "krl_mkdir()" Seite 49)

Beispiel 1 Die Datei ROBOTER\UserFiles\MyFile.txt wird gelöscht:


CWRITE($FCT_CALL, State, Mode, "krl_remove", "MyFile.txt")

Beispiel 2 Das Verzeichnis "NewDir" auf dem Mount "MyMount" wird gelöscht:
CWRITE($FCT_CALL, State, Mode, "krl_remove", "/MyMount/NewDir")

Fehlernummern MSG_NO Beschreibung


-2 Operation fehlgeschlagen
-6 Datei ist bereits geöffnet.
-8 Dateisystem nicht verfügbar: Fehler bei der Angabe des Ziel-
verzeichnisses
-10 Ungültige Anzahl an Funktionsparametern wurde übergeben.
-12 Mindestens ein Funktionsparameter besitzt einen falschen
Datentyp.
-14 Mindestens ein Funktionsparameter-String ist leer.
-15 Mindestens ein Funktionsparameter-String ist zu lang.

Stand: 27.01.2014 Version: KSS 8.2, 8.3 CREAD/CWRITE V1 51 / 69


CREAD/CWRITE

52 / 69 Stand: 27.01.2014 Version: KSS 8.2, 8.3 CREAD/CWRITE V1


7 Beispielprogramme

7 Beispielprogramme

7.1 Externes Modul: Funktion über LD_EXT_FCT aufrufen

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

7.2 Kommandokanal $CMD: Programm starten, stoppen, abwählen

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

7.3 CREAD/CWRITE mit CAST-Anweisungen kombinieren

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.

Stand: 27.01.2014 Version: KSS 8.2, 8.3 CREAD/CWRITE V1 53 / 69


CREAD/CWRITE

DECL CHAR BIGSTRING[4096]


...
OFFSET=0
FOR n=1 TO 1024
CAST_TO (BIGSTRING[],OFFSET,N)
ENDFOR
CWRITE(HANDLE,STAT,MODEWRITE,"%1.4096r",BIGSTRING[])
...

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
...

7.4 Kommandokanal $FCT_CALL: Zeichen in Datei schreiben

Ü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.

54 / 69 Stand: 27.01.2014 Version: KSS 8.2, 8.3 CREAD/CWRITE V1


7 Beispielprogramme

DECL INT HANDLE


DECL STATE_T STAT
DECL MODUS_T MODE
...
CHAR MYCHAR
...
MODE = #SYNC
HANDLE = 0
MYCHAR = "a"
...
; create a file under C:\KRC\ROBOTER\UserFiles
CWRITE($FCT_CALL, STAT, MODE, "krl_fopen", "MyTest.TXT", "w",
HANDLE)
; check whether a error occured
IF (STAT.RET1 == #CMD_ABORT) THEN
IF (STAT.MSG_NO == -5) THEN
; error treatment if to many files are already open
...
ELSE
; check other error codes if required
...
ENDIF

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

Stand: 27.01.2014 Version: KSS 8.2, 8.3 CREAD/CWRITE V1 55 / 69


CREAD/CWRITE

56 / 69 Stand: 27.01.2014 Version: KSS 8.2, 8.3 CREAD/CWRITE V1


8 Anhang

8 Anhang

8.1 Fehler beim Schreiben in den Kommandokanal $FCT_CALL

Übersicht MSG_NO Beschreibung


-1 Interner Fehler
-2 Operation fehlgeschlagen: Ungültiger Benutzer, falsches
Passwort, Mount-Punkt nicht vorhanden, Datei nicht vorhan-
den, etc.
-3 Es ist keine Datei geöffnet.
-4 Dateiende wurde erreicht (relevant bei Lesefunktionen).
-5 Maximalgröße des Verzeichnisses C:\KRC\ROBOTER\User-
Files wurde erreicht (relevant bei Schreibfunktionen).
-6 Datei ist geöffnet (relevant beim Öffnen, Umbenennen oder
Löschen einer Datei).
-7 Positionierung des Dateizeigers außerhalb der Dateigrenzen
(nur relevant bei Positionier-Modus SEEK_CUR)
-8 Dateisystem nicht verfügbar: Fehler bei der Angabe des Ziel-
verzeichnisses
-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.
-14 Mindestens ein Funktionsparameter-String ist leer.
-15 Mindestens ein Funktionsparameter-String ist zu lang.
-16 Mindestens ein Funktionsparameter-String enthält ungültige
Zeichen, z. B. \ * ? " < > : , = ; ] [ ) ( } { für Pfade etc.
-30 Ein direkter Zugriff auf das ROBOTER-Verzeichnis ist beim
Öffnen einer Datei nicht zulässig.
-31 Ungültiger absoluter Pfad beim Öffnen einer Datei
-32 Mount-Punkt beim Öffnen einer Datei nicht gefunden
-40 Öffnen einer Datei ist nicht möglich, weil bereits 11 Dateien
geöffnet sind.
-41 Ein Wert konnte nicht gelesen werden. Die Werte vor diesem
Wert wurden korrekt gelesen.
-42 Der Formatstring enthält eine unzulässige Formatanweisung
(relevant beim formatierten Lesen und Schreiben).
-43 Die Anzahl der zu lesenden Werte im Formatstring entspricht
nicht der Anzahl der übergebenen Parameter (relevant beim
formatierten Lesen und Schreiben).
-44 Für einen Parameter wurde eine falsche Formatierung ange-
geben (relevant beim formatierten Lesen und Schreiben).

Stand: 27.01.2014 Version: KSS 8.2, 8.3 CREAD/CWRITE V1 57 / 69


CREAD/CWRITE

58 / 69 Stand: 27.01.2014 Version: KSS 8.2, 8.3 CREAD/CWRITE V1


9 KUKA Service

9 KUKA Service

9.1 Support-Anfrage

Einleitung Diese Dokumentation bietet Informationen zu Betrieb und Bedienung und un-
terstützt Sie bei der Behebung von Störungen. Für weitere Anfragen steht Ih-
nen die lokale Niederlassung zur Verfügung.

Informationen Zur Abwicklung einer Anfrage werden folgende Informationen benötigt:


 Typ und Seriennummer des Manipulators
 Typ und Seriennummer der Steuerung
 Typ und Seriennummer der Lineareinheit (wenn vorhanden)
 Typ und Seriennummer der Energiezuführung (wenn vorhanden)
 Version der System Software
 Optionale Software oder Modifikationen
 Diagnosepaket KrcDiag
Für KUKA Sunrise zusätzlich: Vorhandene Projekte inklusive Applikatio-
nen
Für Versionen der KUKA System Software älter als V8: Archiv der Soft-
ware (KrcDiag steht hier noch nicht zur Verfügung.)
 Vorhandene Applikation
 Vorhandene Zusatzachsen
 Problembeschreibung, Dauer und Häufigkeit der Störung

9.2 KUKA Customer Support

Verfügbarkeit Der KUKA Customer Support ist in vielen Ländern verfügbar. Bei Fragen ste-
hen wir gerne zur Verfügung!

Argentinien Ruben Costantini S.A. (Agentur)


Luis Angel Huergo 13 20
Parque Industrial
2400 San Francisco (CBA)
Argentinien
Tel. +54 3564 421033
Fax +54 3564 428877
ventas@costantini-sa.com

Australien Headland Machinery Pty. Ltd.


Victoria (Head Office & Showroom)
95 Highbury Road
Burwood
Victoria 31 25
Australien
Tel. +61 3 9244-3500
Fax +61 3 9244-3501
vic@headland.com.au
www.headland.com.au

Stand: 27.01.2014 Version: KSS 8.2, 8.3 CREAD/CWRITE V1 59 / 69


CREAD/CWRITE

Belgien KUKA Automatisering + Robots N.V.


Centrum Zuid 1031
3530 Houthalen
Belgien
Tel. +32 11 516160
Fax +32 11 526794
info@kuka.be
www.kuka.be

Brasilien KUKA Roboter do Brasil Ltda.


Travessa Claudio Armando, nº 171
Bloco 5 - Galpões 51/52
Bairro Assunção
CEP 09861-7630 São Bernardo do Campo - SP
Brasilien
Tel. +55 11 4942-8299
Fax +55 11 2201-7883
info@kuka-roboter.com.br
www.kuka-roboter.com.br

Chile Robotec S.A. (Agency)


Santiago de Chile
Chile
Tel. +56 2 331-5951
Fax +56 2 331-5952
robotec@robotec.cl
www.robotec.cl

China KUKA Robotics China Co.,Ltd.


Songjiang Industrial Zone
No. 388 Minshen Road
201612 Shanghai
China
Tel. +86 21 6787-1888
Fax +86 21 6787-1803
www.kuka-robotics.cn

Deutschland KUKA Roboter GmbH


Zugspitzstr. 140
86165 Augsburg
Deutschland
Tel. +49 821 797-4000
Fax +49 821 797-1616
info@kuka-roboter.de
www.kuka-roboter.de

60 / 69 Stand: 27.01.2014 Version: KSS 8.2, 8.3 CREAD/CWRITE V1


9 KUKA Service

Frankreich KUKA Automatisme + Robotique SAS


Techvallée
6, Avenue du Parc
91140 Villebon S/Yvette
Frankreich
Tel. +33 1 6931660-0
Fax +33 1 6931660-1
commercial@kuka.fr
www.kuka.fr

Indien KUKA Robotics India Pvt. Ltd.


Office Number-7, German Centre,
Level 12, Building No. - 9B
DLF Cyber City Phase III
122 002 Gurgaon
Haryana
Indien
Tel. +91 124 4635774
Fax +91 124 4635773
info@kuka.in
www.kuka.in

Italien KUKA Roboter Italia S.p.A.


Via Pavia 9/a - int.6
10098 Rivoli (TO)
Italien
Tel. +39 011 959-5013
Fax +39 011 959-5141
kuka@kuka.it
www.kuka.it

Japan KUKA Robotics Japan K.K.


YBP Technical Center
134 Godo-cho, Hodogaya-ku
Yokohama, Kanagawa
240 0005
Japan
Tel. +81 45 744 7691
Fax +81 45 744 7696
info@kuka.co.jp

Kanada KUKA Robotics Canada Ltd.


6710 Maritz Drive - Unit 4
Mississauga
L5W 0A1
Ontario
Kanada
Tel. +1 905 670-8600
Fax +1 905 670-8604
info@kukarobotics.com
www.kuka-robotics.com/canada

Stand: 27.01.2014 Version: KSS 8.2, 8.3 CREAD/CWRITE V1 61 / 69


CREAD/CWRITE

Korea KUKA Robotics Korea Co. Ltd.


RIT Center 306, Gyeonggi Technopark
1271-11 Sa 3-dong, Sangnok-gu
Ansan City, Gyeonggi Do
426-901
Korea
Tel. +82 31 501-1451
Fax +82 31 501-1461
info@kukakorea.com

Malaysia KUKA Robot Automation Sdn Bhd


South East Asia Regional Office
No. 24, Jalan TPP 1/10
Taman Industri Puchong
47100 Puchong
Selangor
Malaysia
Tel. +60 3 8061-0613 or -0614
Fax +60 3 8061-7386
info@kuka.com.my

Mexiko KUKA de México S. de R.L. de C.V.


Progreso #8
Col. Centro Industrial Puente de Vigas
Tlalnepantla de Baz
54020 Estado de México
Mexiko
Tel. +52 55 5203-8407
Fax +52 55 5203-8148
info@kuka.com.mx
www.kuka-robotics.com/mexico

Norwegen KUKA Sveiseanlegg + Roboter


Sentrumsvegen 5
2867 Hov
Norwegen
Tel. +47 61 18 91 30
Fax +47 61 18 62 00
info@kuka.no

Österreich KUKA Roboter Austria GmbH


Regensburger Strasse 9/1
4020 Linz
Österreich
Tel. +43 732 784752
Fax +43 732 793880
office@kuka-roboter.at
www.kuka-roboter.at

62 / 69 Stand: 27.01.2014 Version: KSS 8.2, 8.3 CREAD/CWRITE V1


9 KUKA Service

Polen KUKA Roboter Austria GmbH


Spółka z ograniczoną odpowiedzialnością
Oddział w Polsce
Ul. Porcelanowa 10
40-246 Katowice
Polen
Tel. +48 327 30 32 13 or -14
Fax +48 327 30 32 26
ServicePL@kuka-roboter.de

Portugal KUKA Sistemas de Automatización S.A.


Rua do Alto da Guerra n° 50
Armazém 04
2910 011 Setúbal
Portugal
Tel. +351 265 729780
Fax +351 265 729782
kuka@mail.telepac.pt

Russland KUKA Robotics RUS


Werbnaja ul. 8A
107143 Moskau
Russland
Tel. +7 495 781-31-20
Fax +7 495 781-31-19
info@kuka-robotics.ru
www.kuka-robotics.ru

Schweden KUKA Svetsanläggningar + Robotar AB


A. Odhners gata 15
421 30 Västra Frölunda
Schweden
Tel. +46 31 7266-200
Fax +46 31 7266-201
info@kuka.se

Schweiz KUKA Roboter Schweiz AG


Industriestr. 9
5432 Neuenhof
Schweiz
Tel. +41 44 74490-90
Fax +41 44 74490-91
info@kuka-roboter.ch
www.kuka-roboter.ch

Stand: 27.01.2014 Version: KSS 8.2, 8.3 CREAD/CWRITE V1 63 / 69


CREAD/CWRITE

Spanien KUKA Robots IBÉRICA, S.A.


Pol. Industrial
Torrent de la Pastera
Carrer del Bages s/n
08800 Vilanova i la Geltrú (Barcelona)
Spanien
Tel. +34 93 8142-353
Fax +34 93 8142-950
Comercial@kuka-e.com
www.kuka-e.com

Südafrika Jendamark Automation LTD (Agentur)


76a York Road
North End
6000 Port Elizabeth
Südafrika
Tel. +27 41 391 4700
Fax +27 41 373 3869
www.jendamark.co.za

Taiwan KUKA Robot Automation Taiwan Co., Ltd.


No. 249 Pujong Road
Jungli City, Taoyuan County 320
Taiwan, R. O. C.
Tel. +886 3 4331988
Fax +886 3 4331948
info@kuka.com.tw
www.kuka.com.tw

Thailand KUKA Robot Automation (M)SdnBhd


Thailand Office
c/o Maccall System Co. Ltd.
49/9-10 Soi Kingkaew 30 Kingkaew Road
Tt. Rachatheva, A. Bangpli
Samutprakarn
10540 Thailand
Tel. +66 2 7502737
Fax +66 2 6612355
atika@ji-net.com
www.kuka-roboter.de

Tschechien KUKA Roboter Austria GmbH


Organisation Tschechien und Slowakei
Sezemická 2757/2
193 00 Praha
Horní Počernice
Tschechische Republik
Tel. +420 22 62 12 27 2
Fax +420 22 62 12 27 0
support@kuka.cz

64 / 69 Stand: 27.01.2014 Version: KSS 8.2, 8.3 CREAD/CWRITE V1


9 KUKA Service

Ungarn KUKA Robotics Hungaria Kft.


Fö út 140
2335 Taksony
Ungarn
Tel. +36 24 501609
Fax +36 24 477031
info@kuka-robotics.hu

USA KUKA Robotics Corporation


51870 Shelby Parkway
Shelby Township
48315-1787
Michigan
USA
Tel. +1 866 873-5852
Fax +1 866 329-5852
info@kukarobotics.com
www.kukarobotics.com

Vereinigtes König- KUKA Automation + Robotics


reich Hereward Rise
Halesowen
B62 8AN
Vereinigtes Königreich
Tel. +44 121 585-0800
Fax +44 121 585-0900
sales@kuka.co.uk

Stand: 27.01.2014 Version: KSS 8.2, 8.3 CREAD/CWRITE V1 65 / 69


CREAD/CWRITE

66 / 69 Stand: 27.01.2014 Version: KSS 8.2, 8.3 CREAD/CWRITE V1


Index

Index
Symbole Funktionsbeschreibung 7
$CMD 19
$CONFIG.DAT 17 H
$CUSTOM.DAT 13, 15 Handle 16, 17, 19, 21
$DATA_LD_EXT_OBJx 18 Header-Datei 6
$EXT_MOD_x 16 Hinweise 5
$FCT_CALL 19, 34 HITS, Anzahl korrekte Formate 27

A I
ABS 18 IEEE 754 17
Anhang 57 Interrupt 15, 18, 19
ASYNC 20 IP 6

B K
Begriffe, verwendete 6 Kenntnisse, benötigte 5
Beispielprogramme 53 Kommando-Interpreter 21, 22
Kommandokanal, $CMD 11
C Kommandokanal, $FCT_CALL 12
CAST_FROM 53 KR C 6
CAST_FROM 25 KRL 6
CAST_TO 24, 53 krl_fclose_all() 40
CCLOSE 20 krl_fclose() 40
CHANNEL 15 krl_feof() 41
CIFS 6 krl_fflush() 42
CIOCTL 21 krl_fgetc() 42
CMD_ABORT 28, 29 krl_fgets() 43
CMD_OK 28, 29 krl_fopen() 37
CMD_STAT, Aufzählungstyp 27 krl_fprintf() 47
CMD_SYN 28 krl_fputc() 45
CMD_TIMEOUT 28 krl_fputs() 45
COND 18 krl_fscanf() 44
COPEN 16 krl_fseek() 48
CREAD 17 krl_fsizeget() 49
CREAD, Lese-Modus 18 krl_fwriteln() 46
CWRITE 19 krl_mkdir() 49
CWRITE, Schreib-Modus 20 krl_mount() 35
krl_remove() 51
D krl_rename() 50
DATA_END 28 krl_unmount() 36
DATA_OK 28 KUKA Customer Support 59
Datentypen, CAST-Anweisungen 26
Dokumentation, Industrieroboter 5 L
LD_EXT_FCT 11, 20
E LD_EXT_OBJ 11
Einleitung 5 Leave Data, Option für externes Modul 13, 19
Ethernet 6 LENGTH, Byte-Länge 27
Ethernet-Schnittstelle 11 Little Endian 6, 17, 30
Externe Module 11, 13
M
F MODUS_T, Strukturdatentyp 18, 20
Fehlerbehandlung, $FCT_CALL 35 MSG_NO, Fehlernummer 27, 57
Fehlernummern 27, 57
FMT_ERR 28 O
Force unload, Option für externes Modul 13 O-File 11, 13
Format 29 Offset 18, 23, 24, 25, 26
Format, Variable 29
Formatierungszeichen 29 P
Funktionen 7 Programm-Interpreter 11

Stand: 27.01.2014 Version: KSS 8.2, 8.3 CREAD/CWRITE V1 67 / 69


CREAD/CWRITE

Programmierung 15
Programmierung, Übersicht 15

R
RET1, Rückgabewerte 27
Rückgabewerte, RET1 27

S
Schriftarten 15
Schulungen 5
Service, KUKA Roboter 59
Sicherheit 9
Sicherheitshinweise 5
SRC-Programm 16
SREAD 22
STATE_T, Strukturtyp 27
Status 27
stdio.h 6
SUB-Programm 16
Support-Anfrage 59
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, 25

Z
Zeichen 15
Zielgruppe 5

68 / 69 Stand: 27.01.2014 Version: KSS 8.2, 8.3 CREAD/CWRITE V1


CREAD/CWRITE

Stand: 27.01.2014 Version: KSS 8.2, 8.3 CREAD/CWRITE V1 69 / 69

Vous aimerez peut-être aussi