Sie sind auf Seite 1von 69
Communication KUKA Roboter GmbH CREAD/CWRITE Programmierung CREAD/CWRITE und verwandte Anweisungen Für KUKA
Communication KUKA Roboter GmbH CREAD/CWRITE Programmierung CREAD/CWRITE und verwandte Anweisungen Für KUKA
Communication KUKA Roboter GmbH CREAD/CWRITE Programmierung CREAD/CWRITE und verwandte Anweisungen Für KUKA
Communication KUKA Roboter GmbH CREAD/CWRITE Programmierung CREAD/CWRITE und verwandte Anweisungen Für KUKA
Communication KUKA Roboter GmbH CREAD/CWRITE Programmierung CREAD/CWRITE und verwandte Anweisungen Für KUKA

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

Für KUKA System So ftware 8.2, 8.3 Für VW System Software 8.2 Stand: 27.01.2014 Version: KSS

Stand: 27.01.2014

Version: KSS 8.2, 8.3 CREAD/CWRITE V1

Für KUKA System So ftware 8.2, 8.3 Für VW System Software 8.2 Stand: 27.01.2014 Version: KSS
CREAD/CWRITE
CREAD/CWRITE
CREAD/CWRITE
CREAD/CWRITE

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

Inhaltsverzeichnis

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

CREAD/CWRITE
CREAD/CWRITE
CREAD/CWRITE
CREAD/CWRITE

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

9 KUKA Service

57

59

9.1 Support-Anfrage

59

9.2 KUKA Customer Support

59

Index

67

1 Einleitung

1 Einleitung
1 Einleitung
1 Einleitung
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.Steuerungen, mit denen die Ro- botersteuerung kommuniziert 1.2 Dokumentation des Industrieroboters Die Dokumentation

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.

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.

bedeuten, dass Tod oder schwere Ver- letzungen eintreten können , wenn keine Vorsichtsmaß- nahmen getroffen werden.
getroffen werden. Diese Hinweise bedeuten, dass leichte Verletzungen eintreten können , wenn keine Vorsichtsmaßnahmen

getroffen werden.

Diese Hinweise bedeuten, dass leichte Verletzungen eintreten können, wenn keine Vorsichtsmaßnahmen

werden. Diese Hinweise bedeuten, dass Sachschäden eintreten können , wenn keine Vorsichtsmaßnahmen getroffen

werden.

Diese Hinweise bedeuten, dass Sachschäden eintreten können, wenn keine Vorsichtsmaßnahmen getroffen

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.können , wenn keine Vorsichtsmaßnahmen getroffen Dieser Hinweis macht auf Vorgehensweisen aufmerksam, die der

Dieser Hinweis macht auf Vorgehensweisen aufmerksam, die der Vorbeu- gung oder Behebung von Not- oder Störfällen dienen:

CREAD/CWRITE
CREAD/CWRITE
CREAD/CWRITE
CREAD/CWRITE

CREAD/CWRITE

Mit diesem Hinweis gekennzeichnete Vorgehensweisen müssen genau eingehalten werden.

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.

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.

2 Funktionsbeschreibung

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

CREAD/CWRITE
CREAD/CWRITE
CREAD/CWRITE
CREAD/CWRITE

CREAD/CWRITE

3 Sicherheit

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

muss beachtet werden. Tod von Personen, schwere Verletzungen oder erhebliche Sachschäden können sonst die Folge sein.
CREAD/CWRITE
CREAD/CWRITE
CREAD/CWRITE
CREAD/CWRITE

CREAD/CWRITE

4 Kommunikations-Kanäle

4 Kommunikations-Kanäle
4 Kommunikations-Kanäle
4 Kommunikations-Kanäle
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.

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

Übersicht

Die externen Module müssen für die Kommunikation mit CREAD/CWRITE konfiguriert werden.

(>>> 5 "Konfiguration der externen Module" Seite 13)

5 "Konfiguration der externen Module" Seite 13) Abb. 4-1: Kommunikation über externe Module 4.2

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.

CREAD/CWRITE
CREAD/CWRITE
CREAD/CWRITE
CREAD/CWRITE

CREAD/CWRITE

Übersicht

CREAD/CWRITE Übersicht Abb. 4-2: Kommunikation über den Kommandokanal $CMD 4.3 Kommunikation über den Kommandokanal

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

4.3 Kommunikation über den Kommandokanal $FCT_CALL

Beschreibung

Konfiguration

Übersicht

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.

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

die Kommunikation mit CWRITE nicht konfigu- riert werden. Abb. 4-3: Kommunikation über den Kommandokanal $FCT_CALL 12

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

5 Konfiguration der externen Module

5 Konfiguration der externen Module
5 Konfiguration der externen Module
5 Konfiguration der externen Module
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.

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.

CREAD/CWRITE
CREAD/CWRITE
CREAD/CWRITE
CREAD/CWRITE

CREAD/CWRITE

6 Programmierung

6 Programmierung
6 Programmierung
6 Programmierung
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- grammspezifische Anga- ben ersetzt werden müssen

Kursiv

Groß-/Kleinschreibung

Beispiele: Strecke; Zeit; Format

Optionale Elemente

In spitzen Klammern

Beispiel: <STEP Schrittweite>

Elemente, die sich gegen- seitig ausschließen

Getrennt durch das Zeichen "|"

Beispiel: IN |OUT

6.3 CHANNEL

Die CHANNEL-Anweisung muss nicht programmiert werden. Sie ist bereits für alle externen Module in der

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.

CREAD/CWRITE
CREAD/CWRITE
CREAD/CWRITE
CREAD/CWRITE

CREAD/CWRITE

Beschreibung

Syntax

Erläuterung der

Syntax

Beispiel

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.

CHANNEL :Kanalname :Schnittstellenname Strukturvariable

Element

Beschreibung

Kanalname

Name für das externe Modul

Schnitt-

Vordefinierte Signalvariable

stellenname

Strukturva-

Strukturvariable für das externe Modul ($EXT_MOD_x)

riable

CHANNEL-Anweisung für das externe Modul 1:

CHANNEL :LD_EXT_OBJ1 :LD_EXT_OBJ1 $EXT_MOD_1

6.4

COPEN

Beschreibung

Syntax

Erläuterung der

Syntax

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.

COPEN (:Kanalname, Handle)

Element

Beschreibung

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.

6 Programmierung

6 Programmierung
6 Programmierung
6 Programmierung
6 Programmierung
Die Variable Handle muss deklariert werden. Es ist sinnvoll, sie in der Datei $CONFIG.DAT folgendermaßen

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

Syntax

Erläuterung der

Syntax

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.

CREAD (Handle, Status, Modus, TIMEOUT, OFFSET, Format, Var1 <,

,Var10>)

Element

Beschreibung

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.

CREAD/CWRITE
CREAD/CWRITE
CREAD/CWRITE
CREAD/CWRITE

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- den. Pro Anweisung sind maximal 10 Variablen möglich.

Var10

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 abgefragt:

Interrupt

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

6 Programmierung

6 Programmierung
6 Programmierung
6 Programmierung
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

Interrupt

Hauptprogramm mit Interrupt-Deklaration:

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

Ein Aufruf von CWRITE im Trigger ist nicht möglich. CWRITE kann stattdessen in einem Trigger-Unterprogramm verwendet werden.

Beschreibung

Syntax

Erläuterung der

Syntax

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.

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

,Var10>)

Element

Beschreibung

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)

CREAD/CWRITE
CREAD/CWRITE
CREAD/CWRITE
CREAD/CWRITE

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. Pro Anweisung sind maximal 10 Variablen möglich.

Var10

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 ASYNC, wird defaultmäßig im Modus SYNC geschrieben.

COND, SEQ

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

6 Programmierung

6 Programmierung
6 Programmierung
6 Programmierung
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

Wenn versucht wird, einen bereits geschlossenen Kanal mit CC- LOSE noch einmal zu schließen, wird der Status #CMD_ABORT zu- rückgegeben.

Syntax

Erläuterung der

Syntax

6.8

CIOCTL

Beschreibung

Syntax

Erläuterung der

Syntax

CCLOSE (Handle, Status)

Element

Beschreibung

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)

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.

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

Element

Beschreibung

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

CREAD/CWRITE
CREAD/CWRITE
CREAD/CWRITE
CREAD/CWRITE

CREAD/CWRITE

Rückgabewerte

6.9

SREAD

Beschreibung

Syntax

Erläuterung der

Syntax

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)

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.

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.

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

Element

Beschreibung

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)

6 Programmierung

6 Programmierung
6 Programmierung
6 Programmierung
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 geschrieben wird. Pro Anweisung sind maximal 10 Variab- len möglich.

Var10

6.10

SWRITE

Beschreibung

Syntax

Erläuterung der

Syntax

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.

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

Element

Beschreibung

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)

CREAD/CWRITE
CREAD/CWRITE
CREAD/CWRITE
CREAD/CWRITE

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. Pro Anweisung sind maximal 10 Variablen möglich.

Var10

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

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-

zeichen

Wenn mit CWRITE ein Puffer übertragen wird, der vorher mit CAST_TO er- 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.

6 Programmierung

6 Programmierung
6 Programmierung
6 Programmierung
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

Erläuterung der

Syntax

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

Element

Beschreibung

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 Anweisung sind maximal 10 Variablen möglich.

Var10

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

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.

CREAD/CWRITE
CREAD/CWRITE
CREAD/CWRITE
CREAD/CWRITE

CREAD/CWRITE

Syntax

Erläuterung der

Syntax

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

Element

Beschreibung

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 werden. Pro Anweisung sind maximal 10 Variablen mög- lich.

Jede Variable erhält soviel Bytes aus dem Puffer, wie es ihrem Datentyp entspricht.

Var10

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

Felder

 

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

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.

6 Programmierung

6 Programmierung
6 Programmierung
6 Programmierung
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

CMD_STAT RET1

STATE_T ist ein vordefinierter Strukturtyp:

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

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

CREAD/CWRITE
CREAD/CWRITE
CREAD/CWRITE
CREAD/CWRITE

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:

6 Programmierung

6 Programmierung
6 Programmierung
6 Programmierung
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. #.

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.

CREAD/CWRITE
CREAD/CWRITE
CREAD/CWRITE
CREAD/CWRITE

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- ment links ein Leerzeichen vorangestellt.

chen]

*

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.

6 Programmierung

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

CREAD/CWRITE
CREAD/CWRITE
CREAD/CWRITE
CREAD/CWRITE

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

+

+ +

 

+

+

6 Programmierung

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

CREAD/CWRITE
CREAD/CWRITE
CREAD/CWRITE
CREAD/CWRITE

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

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.Submit-Interpreter-Programm heraus aufgeru- fen werden. Beim Öffnen einer Datei wird eine dateispezifische

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.

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.

zunächst in KRL-Variablen zu puffern, und dann in einer zeitlich unkriti- schen Phase an das Dateisystem

6 Programmierung

6 Programmierung
6 Programmierung
6 Programmierung
6 Programmierung

Fehlerbe-

handlung

Jede Dateisystem-Funktion liefert über CWRITE einen Rückgabewert, der im 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

Syntax

Erläuterung der

Syntax

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