Sie sind auf Seite 1von 8

SOFTWARE

SOFTWARE KRL (KUKA ROBOT LANGUAGE) Programmieren von Anwendermeldungen Expertenteil e Copyright KUKA Roboter GmbH Diese

KRL (KUKA ROBOT LANGUAGE)

Programmieren von Anwendermeldungen

Expertenteil

eCopyright

KUKA Roboter GmbH

Diese Dokumentation darf -- auch auszugsweise -- nur mit ausdrücklicher Genehmigung des Herausgebers 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 Software geprüft. Dennoch können Abweichungen nicht ausgeschlossen werden, so daß wir für die vollständige Übereinstimmung keine Gewähr überneh- men. Die Angaben in dieser Druckschrift werden jedoch regelmäßig überprüft, und notwendige Korrekturen sind in den nachfol- genden Auflagen enthalten. Technische Änderungen ohne Beeinflussung der Funktion vorbehalten.

Dokumentationsumfang: 8 Seiten KUKA Interleaf

Inhaltsverzeichnis

Inhaltsverzeichnis 1 Programmieren von Anwendermeldungen   . . . . . . . . . .

1

Programmieren von Anwendermeldungen

 

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

3

1.1

Begriffsbestimmung

 

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

3

1.1.1

Hinweismeldungen

 

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

3

1.1.2

Zustandsmeldungen

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

3

1.1.3

Quittierungsmeldungen

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

3

1.1.4

Dialoganfragen

 

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

3

1.1.5

Simulation

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

3

1.2

Anwendung

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

4

1.2.1

Hinweismeldungen

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

5

1.2.2

Zustandsmeldungen

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

6

1.2.3

Quittierungsmeldungen

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

6

1.2.4

Dialoganfragen

 

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

6

1.2.5

Simulation

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

7

1.3

Beispielprogramm

“MSG_DEMO.SRC”

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

7

1.4

Variablen und Deklarationen

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

8

1 Programmieren von Anwendermeldungen Innerhalb von Anwenderprogrammen und Technologiepaketen (KRL) besteht die Möglich-

1 Programmieren von Anwendermeldungen

Innerhalb von Anwenderprogrammen und Technologiepaketen (KRL) besteht die Möglich- keit frei definierbare Meldungen zur Anzeige auf dem KCP zu bringen. Grundsätzlich kann man hier zwischenHinweismeldungen, Zustandsmeldungen,Quittungsmeldungen undDia- loganfragen unterscheiden. Wichtigster Bestandteil ist hierfür eine standardisierte Schnitt- stelle zwischen Grundsystem und Bedienoberfläche. Die jeweils unterschiedlichen Mel- dungstypen erfordern spezifische Handhabung, wobei darüber hinaus noch zwischen Meldungen mit Datenbankzugriff (TECH--Pakete) und einfachen User--Meldungen ohne Datenbankzugriff unterschieden wird.

Für Inbetriebnahme und Testzwecke, steht mit der sogenannten Simulation ein Mechanis- mus zur Verfügung, der es erlaubt logische Ausdrücke durch UND--Verknüpfung mit einer direktvonderBedienoberflächesteuerbaren Variablezu simulieren.Sinnvoll einsetzenkann man diesen Mechanismus vor allem in Schleifenabruchbedingungen.

1.1

Begriffsbestimmung

1.1.1

Hinweismeldungen

Einfachste Art von Meldungen die lediglich Informationscharakter besitzen. Die Abarbeitung des laufenden Anwenderprogramms

Einfachste Art von Meldungen die lediglich Informationscharakter besitzen. Die Abarbeitung des laufenden Anwenderprogramms wird nicht unterbrochen. Die Meldungen müssen nicht quittiert werden. Denkbar ist auch deren Einsatz für Programmfortschrittsanzeigen in einem speziellen Fenster der BOF. Hinweismeldungen lassen sich von der KRL--Ebene nicht lö- schen.

1.1.2

Zustandsmeldungen

Zustandsmeldungenbesitzen Informationscharakterund werdenquasi automatischzurück- genommen. Die Abarbeitung des laufenden

Zustandsmeldungenbesitzen Informationscharakterund werdenquasi automatischzurück- genommen. Die Abarbeitung des laufenden Anwenderprogramms kann bedingt unterbro- chen werden.

 

Zustandsmeldungen sind nicht quittierbar, sie müssen vom Verursacher (Anwenderpro- gramm) explizit gelöscht werden. Es kann jeweils nur eine aktive Meldung abgesetzt wer- den.

1.1.3

Quittierungsmeldungen

Quittierungsmeldungen zeigen Störungen des Programmfortschrittes an . Erst nach explizi- tem Quittieren der anstehenden

Quittierungsmeldungen zeigen Störungen des Programmfortschrittes an . Erst nach explizi- tem Quittieren der anstehenden Meldung kann der Programmlauf fortgesetzt werden. Mit der Quittierung wird die Aktive Meldung automatisch gelöscht.

1.1.4

Dialoganfragen

ÜberDialoganfragenwirdderBedieneraufgefordert zwischenfrei definierbarenAlternativen auszuwählen. Das Ergebnis der

ÜberDialoganfragenwirdderBedieneraufgefordert zwischenfrei definierbarenAlternativen auszuwählen. Das Ergebnis der Bedienereingabe wird in einer entsprechenden KRL-- Va-- riable hinterlegt. Mit der Bedienereingabe wird der Dialog automatisch geschlossen und der zuvor unterbrochene Programmlauf fortgesetzt.

1.1.5

Simulation

In Analogie zu der bekannten Simulationstaste bei WAIT FOR-- Anweisungen wird automa- tisch die Simulationstaste zur Anzeige gebracht. Das Drücken der Simulationstaste bewirkt dasLöschenderkorrespondierendenMeldungundläßt eineentsprechende bool’scheKRL-- Variable auf FALSE abfallen. Der Programmablauf wird nicht unterbrochen. Die Simulation kann zum gezielten Verlassen von Schleifen eingesetzt werden.

1.2

Anwendung

1.2 Anwendung Die Schnittstelle zwischen KRL--Anwenderprogramm und Bedienoberfläche wird durch die sogenannte

Die Schnittstelle zwischen KRL--Anwenderprogramm und Bedienoberfläche wird durch die sogenannte MSG--Struktur repräsentiert. Um allen, der möglichen Einsatzfälle gerecht zu werden, ist die MSG--Struktur als recht komplexes Gebilde angelegt.

STRUC MSG_T

BOOL VALID

 

Feuert die Meldung ab (TRUE). Je nach Meldungstyp wird VALID unterschiedlich behandelt. (siehe 1.1.1 bis 1.1.4)

BOOL RELEASE

 

veranlaßt das Löschen einer Zustandsmeldung

MSG_TYP TYP,

Definition des Meldungstyps

gültige Werte:

#NOTIFY

Hinweismeldung

#STATE

Zustandsmeldung

#QUIT

Quittierungsmeldung

#DIALOG

Dialoganfrage

CHAR MODUL[12]

Textvariable die einen eindeutigen Modulbezeichner (Mo-- dulschlüssel) enthält, welcher dem Datenbankzugriff dient. IstMODUL einLeerstring sowird KEYals Meldungstextin-- terpretiert . Wenn KEY einem Platzhalter für PARAM ent-- hält werden beide verknüpft. Ist Modul nicht leer und in der Datenbank kann kein Eintrag mit entsprechendem Schlüsssel gefunden werden , dann wird KEY als Mel-- dungstext ausgegeben, wobei KEY nicht mit einem Para-- meter verknüpft werden kann.

CHAR KEY[40]

Textvariable die einen eindeutigen Schlüssel zum Mel-- dungstextderDatenbankenthält.IstMODULeinLeerstring oder MODUL wird in der Datenbank nicht gefunden, wird dies im Meldungsfenster unter Verursacher angezeigt und der KEY direkt als Meldungstext interpretiert.

MSG_PRM_TYP PARAM_TYP

Typ -- Definition von PARAM

gültige Werte:

#VALUE

Zahlenwert oder Text

#WORDS

ohne Datenbankzugriff. PARAM wird direkt mit dem Key verknüpft. $MSG.PARAM[] wird ig--

#KEY

noriert Datenbankschlüssel, existiert kein entspre-- chender Eintrag im “MO-- DUL”wird der Schlüssel als Parameterstring über-- nommen

CHAR PARAM[20]

zusätzlicher Parameter der mit dem eigentlichen Mel-- dungstext verknüpft zur Anzeige gebracht wird. Der Inhalt von PARAM wird in Abhängigkeit von PARAM_TYP inter-- pretiert.

CHAR DLG_FORMAT[70] Formatstring der bei Dialoganfragen die Beschriftung der Softkeys definiert. Die einzelnen Softkeys

CHAR DLG_FORMAT[70]

Formatstring der bei Dialoganfragen die Beschriftung der Softkeys definiert. Die einzelnen Softkeys werden durch “|” voneinander getrennt. Es können maximal 7 Softkeys be legt werden. Jeder Softkey repräsentiert dabei eine mögli-- che Dialogantwort. Es ist darauf zu achten, daß die Be-- schriftung jedes einzelnen Softkeys nicht länger als ca.10 Zeichen ist und nur die jeweils benötigte Anzahl Softkeys definiert wird. Die möglichen Antworten sollten einen sinn-- vollen Zusammenhang mit dem Meldungstext ergeben. z.B.: MSG.MODUL= ”BAUTEIL1.SRC ” MSG.KEY= ”Wiederholen ?” MSG.DLG_FORMAT= ”Ja|Nein” Die so definierten Softkeys werden dynamisch in der Soft-- keyleiste an jeweils freien Positionen eingereiht.

INT ANSWER Liefert das Ergebnis einer Dialoganfrage.Der zurückgelie-- ferte Wert gibt an welcher Softkey gedrückt wurde. Die Zählung ergibt sich bei aufsteigender Reihenfolge aus den Formatstring DLG_FORMAT, wobei die Zählung mit 1 be-- ginnt. In Anlehnung an das vorhergehende Beispiel würde das Drücken des Softkeys “Nein”ANSWER =2 zurück lie-- fern.

Standardvorbesetzung der MSG--Struktur:

DECL MSG_T $MSG_T= { VALID FALSE, RELEASE FALSE ,TYP #NOTIFY, MODUL[] ””, KEY[] ””, PARAM_TYP #VALUE, PARAM[] ””, DLG_FORMAT[] ””, ANSWER }

DerSimulationsmechanismuskommtmiteinersehr einfachenSchnittstelle aus,die überfol- gende globale Variablen realisiert ist.

BOOL $LOOP_CONT

Simulationsergebnis das als Schleifenabbruchbedingung eingesetzt werden kann. $LOOP_CONT fällt auf den Wert FALSE ab, sobald die Simulationstaste gedrückt wurde. Muß auf den Wert TRUE geschaltet werden bevor mittels $LOOP_MSG gefeuert wird.

CHAR $LOOP_MSG[60]

Feuert die Simulation sobald der Wert ungleich Leerstring ist und bringt den enthaltenen Text sowie die Simulations-- taste zur Anzeige. Muß auf Leerstring zurück gesetzt werden um die Simula-- tion zu beenden.

Grundsätzliche erfordert jede Art von Meldung und der Simulationsmechanismus eine spe- zifische Abfolge im Anwenderprogramm (Handshake). In den Punkten 1.1.1 -- 1.1.5 ist diese zeitliche Abfolge dargestellt.

1.2.1

Hinweismeldungen

(1)

$MSG_T--Struktur füllen;

(2)

Feuern indem $MSG_T.VALID = TRUE gesetzt wird;

(3)

Meldung wird nun angezeigt;

(4)

Warten $MSG_T.VALID==FALSE

(5)

weiter mit nächster Meldung

1.2.2 Zustandsmeldungen

1.2.2 Zustandsmeldungen (1) $MSG_T--Struktur füllen; (2) $MSG_T.RELEASE = FALSE setzen; (3) Feuern

(1)

$MSG_T--Struktur füllen;

(2)

$MSG_T.RELEASE = FALSE setzen;

(3)

Feuern indem $MSG_T.VALID = TRUE gesetzt wird;

(4)

Zustandsmeldung wird nun angezeigt;

G

G

G

(5)

Zustandsmeldung wieder Löschen indem $MSG_T.RELEASE=TRUE gesetzt wird;

(6)

Meldung ist nicht mehr sichtbar;

(7)

Warten auf $MSG_T.VALID== FALSE ;

(8)

Weiter mit nächster Meldung;

1.2.3 Quittierungsmeldungen

(1)

$MSG_T--Struktur füllen;

(2)

Programmlauf stoppen

(3)

Feuern indem $MSG_T.VALID = TRUE gesetzt wird;

(4)

Quittierungsmeldung wird nun angezeigt;

G

G

G

(5)

QuittierungsmeldungkannbeiBedarfgelöschtindem$MSG_T.RELEASE=TRUEge- setzt wird;

(6)

Wenn der Bediener die Meldung quittiert wird $MSG_T.VALID automatisch auf FALSE zurück gesetzt;

(7)

Sobald $MSG_T.VALID auf FALSE geht kann mit demProgrammlauf fortgesetztwer- den;

(8)

Weiter mit nächster Meldung;

1.2.4 Dialoganfragen

(1)

Programmlauf stoppen

(2)

$MSG_T--Struktur füllen;n

(3)

Feuern indem $MSG_T.VALID = TRUE gesetzt wird;

(4)

Dialoganfrage wird nun angezeigt;

G

G

G

(5)

Dialoganfrage kann bei Bedarf gelöscht werden indem MSG.RELEASE=TRUE ge- setzt wird;

(6)

Wenn der Bediener die Meldung quittiert wird $MSG_T.VALID und $MSG_T.REA- LEASE automatisch auf FALSE zurück gesetzt;

(7) Sobald $MSG_T.VALID auf FALSE geht kann das Ergebnis der Anfrage in

(8) $MSG_T.ANSWER abgeholt und mit dem Programmlauf fortgesetzt werden; Weiter mit nächster Meldung; 1.2.5 Simulation

(8)

$MSG_T.ANSWER abgeholt und mit dem Programmlauf fortgesetzt werden;

Weiter mit nächster Meldung;

1.2.5

Simulation

(1)

$LOOP_CONT=TRUE setzen;

(2)

Feuern indem $LOOP_MSG= ”Meldungstext”gesetzt wird;

(3)

Simulationstaste und Meldungstext werden nun angezeigt;

(4)

Simulation kann aktiv beendet werden indem $LOOP_MSG[] =”“gesetzt wird;

G

G

G

(5)

Sobald der Anwender die Simulationstaste betätigt wird $LOOP_CONT automatisch auf FALSE gesetzt.

(6)

Simulation beenden indem $LOOP_MESSAGE[] mit LEERZEICHEN aufgefüllt wird.

(7)

Simulationsmeldung und Softkey ”SIMULATION”werden nicht mehr angezeigt.

(8)

Weiter mit nächster Simulation oder Meldung;

1.3

Beispielprogramm “MSG_DEMO.SRC”

DECL INT ANSWER

DECL INT OFFSET

DECL STATE_T STATE

DECL MSG_T EMPTY_MSG

EMPTY_MSG={MSG_T: VALID FALSE,RELEASE FALSE,TYP #NOTIFY,MODUL[] ” ”,KEY[] ””,PARAM_TYP #VALUE,PARAM[] ””,DLG_FORMAT[] ””,ANSWER 0}

;------------------------------------------QUITTIERUNGSMELDUNG--------------------

$MSG_T=EMPTY_MSG ;Reinitialisierung

$MSG_T.MODUL[]=””

$MSG_T.KEY[]=”DEMO: QUIT--MESSAGE + %1”

$MSG_T.PARAM[]=”PARAM”

$MSG_T.PARAM_TYP=#WORDS

$MSG_T.TYP=#QUIT

$MSG_T.VALID=TRUE ;feuern

WHILE $MSG_T.VALID ;auf Quittierung warten

WAIT SEC 0.05

ENDWHILE

;------------------------------------DIALOGANFRAGE--------------------------------

$MSG_T=EMPTY_MSG ;Reinitialisierung

$MSG_T.MODUL[]=””

$MSG_T.KEY[]=”DEMO: DIALOG + %1”

$MSG_T.PARAM[]=”PARAM”

$MSG_T.PARAM_TYP=#KEY

$MSG_T.TYP=#DIALOG

$MSG_T.DLG_FORMAT[]=”A|B|C” $MSG_T.VALID=TRUE ;feuern WHILE $MSG_T.VALID ;auf Beantwortung warten WAIT SEC 0.05

$MSG_T.DLG_FORMAT[]=”A|B|C”

$MSG_T.VALID=TRUE ;feuern

WHILE $MSG_T.VALID ;auf Beantwortung warten

WAIT SEC 0.05

ENDWHILE

ANSWER=$MSG_T.ANSWER

;------------------------------------HINWEISMELDUNG------------------------------------

$MSG_T=EMPTY_MSG ;Reinitialisierung

$MSG_T.MODUL[]=””

$MSG_T.KEY[]=”DEMO: DIALOG ANSWER = %1”;”%1”symbolisiert einen Platzhalter fuer den Parameterstring

OFFSET=0

SWRITE($MSG_T.PARAM[],STATE,OFFSET,”%d”,ANSWER)

;formatierte Ausgabe der vorhergehenden

;Dialogantwort in den Parameterstring

$MSG_T.PARAM_TYP=#VALUE ;warten um Meldung sicher zu Anzeige zu bringen

$MSG_T.VALID=TRUE ;feuern

WHILE $MSG_T.VALID

WAIT SEC 0.05

ENDWHILE

;-------------------------------------- SIMULATION----------------------------------------------

$LOOP_CONT=TRUE ;Vorbesetzung

$LOOP_MSG[]=”HALLO ich die SIMULATION von $IN[10] !”;feuern

WHILE $LOOP_CONT or $IN[10] ;Simulation der Abruchbedingung $IN[10]==TRUE

ENDWHILE

$LOOP_MSG[]=”

END

1.4 Variablen und Deklarationen

Implementiert in $operate.dat und $option.dat auf Steuerungsebene.

ENUM MSG_TYP NOTIFY, STATE, QUIT, DIALOG

ENUM MSG_PRM_TYP VALUE, WORDS, KEY

STRUC MSG_T BOOL VALID, BOOL RELEASE, MSG_TYP TYP, CHAR MODUL[12], CHAR KEY[40], MSG_PRM_TYP PARAM_TYP, CHAR PARAM[20], CHAR DLG_FOR- MAT[70], INT ANSWER

DECL MSG_T $MSG_T={ VALID FALSE, RELEASE FALSE, TYP #NOTIFY, MODUL[] ” ”, KEY[] ””, PARAM_TYP #VALUE, PARAM[] ””, DLG_FORMAT[] ””, ANSWER 0, }

BOOL $LOOP_CONT=FALSE

CHAR $LOOP_MSG[60]

1