![]() |
![]() |
![]() |
Intro:
Irgendwann stellte sich mir die Frage, ob man in einem laufenden KRL-Programm Werte über die Tastatur am KCP einlesen und weiterverarbeiten kann. Die Antwort lautet JA und das läuft bei Kuka unter dem Begriff 'Anwendermeldungen'.
Anwendermeldungen:
Kuka unterscheidet zwischen 4 Typen von Anwendermeldungen, darunter ist auch der Typ "Abfrage". Mit diesem ist es möglich Werte einzulesen. Das ist alles recht gut in folgendem Dokument beschrieben. Es gibt sogar auf der KRC1 im TP-Verzeichnis ein Beispiel-Programm Namens MSG_DEMO.src in dem alle vier Nachrichtentypen vorgestellt werden, ABER ...
Das Programm blieb regelmäßig in einer der "WHILE $MSG.VALID"-Schleifen hängen.
Eine Suche im Roboter-Forum ergab schnell, dass dies ein bekanntes Problem ist,
aber leider funktionierte bei mir die beschriebene Lösung mit dem Zähler nicht.
Das Programm lief in der Ablaufart "Inkremental Step" wunderbar, also schien der Steuerung im Automatik-Modus
irgendetwas zu schnell zu gehen. Nach endlosem Trial & Error mit WAIT-Anweisungen brachte ein WAIT SEC 0.2
hinter dem Festlegen des Meldungstyps den Durchbruch. Unten findet ihr mein abgewandeltes MSG_DEMO-Programm,
das fehlerfrei bei mir läuft. (KRC1 v4.1.7 SP08)
Programm:
&ACCESS RVP
&COMMENT Example on user messages
DEF msg_demo_vLoulli( )
DECL INT ANSWER, OFFSET
DECL STATE_T STATE
DECL MSG_T EMPTY_MSG
;---------------------Acknowledgement-Message----------
;The programm is stopped until this message is acknowledged over the
softkeys.
EMPTY_MSG={MSG_T: VALID FALSE,RELEASE FALSE,TYP #NOTIFY,MODUL[] "
",KEY[] " ",PARAM_TYP #VALUE,PARAM[] " ",DLG_FORMAT[]
" ",ANSWER 0}
$MSG_T=EMPTY_MSG
$MSG_T.KEY[]="DEMO1: Acknowledgement%1" ;%1 will be replaced
by $MSG_T.PARAM[]
$MSG_T.PARAM[]="-Message"
$MSG_T.PARAM_TYP=#VALUE
$MSG_T.TYP=#QUIT
WAIT SEC 0.2 ;mandatory to solve a bug with unreleased status messages
$MSG_T.VALID=TRUE
WHILE $MSG_T.VALID
WAIT SEC 0.05
ENDWHILE
;---------------------Status-Message----------
;This message should disappear after it is released.
EMPTY_MSG={MSG_T: VALID FALSE,RELEASE FALSE,TYP #NOTIFY,MODUL[] "
",KEY[] " ",PARAM_TYP #VALUE,PARAM[] " ",DLG_FORMAT[]
" ",ANSWER 0}
$MSG_T=EMPTY_MSG
$MSG_T.KEY[]="DEMO2: Status-Message"
$MSG_T.TYP=#STATE
WAIT SEC 0.2 ;mandatory to solve a bug with unreleased status messages
$MSG_T.VALID=TRUE
WAIT SEC 4 ;the status-message should disappear after this delay
$MSG_T.RELEASE=TRUE
WAIT SEC 0.5 ;mandatory to help reducing a bug with unreleased status
messages
;-------------------Dialog-Query----------------
;This message allows user reply over the softkeys.
EMPTY_MSG={MSG_T: VALID FALSE,RELEASE FALSE,TYP #NOTIFY,MODUL[] "
",KEY[] " ",PARAM_TYP #VALUE,PARAM[] " ",DLG_FORMAT[]
" ",ANSWER 0}
$MSG_T=EMPTY_MSG
$MSG_T.KEY[]="DEMO3: DIALOG-Message, Please choose one of the below
options:"
$MSG_T.DLG_FORMAT[]="A|B|C"
$MSG_T.TYP=#DIALOG
WAIT SEC 0.2 ;mandatory to solve a bug with unreleased status messages
$MSG_T.VALID=TRUE
WHILE ($MSG_T.VALID==TRUE)
WAIT SEC 0.05
ENDWHILE
ANSWER=$MSG_T.ANSWER
;---------------------Notification-Message----------
;This message is displayed until it is acknowledged but the programm
is not stopped.
EMPTY_MSG={MSG_T: VALID FALSE,RELEASE FALSE,TYP #NOTIFY,MODUL[] "
",KEY[] " ",PARAM_TYP #VALUE,PARAM[] " ",DLG_FORMAT[]
" ",ANSWER 0}
$MSG_T=EMPTY_MSG
OFFSET=0
;SWRITE converts ANSWER to a string and represents also an alternative
to using $MSG_T.PARAM[]
SWRITE($MSG_T.KEY[],STATE,OFFSET,"DEMO4: Notification, The previously
chosen option was number: %d",ANSWER)
$MSG_T.TYP=#NOTIFY
WAIT SEC 0.2 ;mandatory to solve a bug with unreleased status messages
$MSG_T.VALID=TRUE
END
Download:
![]() |
![]() |
msg_demo_vLoulli.src | KUKA_User_Messages_Programming.pdf |
Haftungsausschluss:
Das vorliegende Projekt erfordert Fachkenntnisse. Nachmachen auf eigene Gefahr und Haftung.
Nächste Themen: