KUKA机械臂用KRL进行信息编程
信息的种类
信息提示的生成、删除或检验通过 KUKA 标准函数进行。
KUKA标准函数
信息提示函数:用该功能可在 KRL 程序中设置一条信息提示。 也就是说,将相应的信息提示加入内部信息缓存器中。 这个函数有4个参数,1个输入参数,3个输出参数。
EXTFCTP INT SET_KRLMSG(EKRLMSGTYPE TYPE :IN,KRLMSG_T MSG :OUT,KRLMSGPAR_T PAR[3] :OUT,KRLMSGOPT_T OPT :OUT)
/*
TYPE (类型): 信息提示的种类 (#Notify, #State, #Quit, #Waiting)。
MSG: 信息提示的一般信息 (发送人、信息号、信息文本)。
PAR[ ]: 占位符 %1、%2 和 %3 的 3 个可能参数 (即使不用,也必须代入)。
OPT (选项): 一般信息提示选项 (预进停止、记录在信息提示数据库中、程序复位或选择语句时连带删除信息提示) 。
函数的返回值: 称为 “ 句柄 ”(handle)。 用该句柄可检查是否成功生成了信息提示,同时,句柄也用作信息缓存器中的识别号。 这样便可检查或删除一条特定的信息提示。
== -1: 无法生成信息提示。(例如因为信息缓存器已过满。)
> 0: 信息提示已成功生成并以相应的识别号保存在信息缓存器中管理。
*/
检验信息提示是否存在函数:用该功能可检查一条带有定义句柄的特定信息提示是否还存在。 即检查该信息提示是否还在信息缓存器中。
DEFFCT BOOL Exists_KrlMsg(nHandle:IN)
DECL INT nHandle
/*
nHandle: 由函数 “Set_KrlMsg(…)” 提供的信息提示句柄。
函数返回值: TRUE: 该信息提示还存在于信息缓存器中。
FALSE: 该信息提示不再位于信息缓存器中 (即已被确认或删除)。
*/
删除信息提示函数:用该功能可删除一条信息提示。 也就是说,将相应的信息提示从内部信息缓存器中删除。
DEFFCT BOOL Clear_KrlMsg(nHandle:IN)
DECL INT nHandle
/*
nHandle: 由函数 “Set_KrlMsg(…)” 提供的信息提示句柄。
函数返回值: TRUE: 该信息提示已可删除。
FALSE: 该信息提示不可删除。
用函数 Clear_KrlMsg(handle) 删除的特殊功能: Clear_KrlMsg(-1): 删除所有由该过程引入的信息提示。
Clear_KrlMsg(-99): 删除所有引入的 KRL 用户信息提示。
*/
1、信息提示的类型
ENUM EKrlMsgType Notify, State, Quit, Waiting
//EKRLMSGTYPE :信息提示的类型。比如:确认信息,状态信息,提示信息,等待信息。
2、提示的信息
发送人、信息号、信息文本的结构体:KRLMSG_T
STRUC KrlMsg_T CHAR Modul[24], INT Nr, CHAR Msg_txt[80]
DECL KrlMsg_T mymessage
mymessage = {Modul[ ] "College", Nr 1906, Msg_txt[ ] "My first Message"}
//发送人:最多 24 个字符。 Modul[ ] "College"
//信息号:自定义的整数。 Nr 1906 ( 第 1906 号 )
//信息文本:最多 80 个字符,文字显示在信息提示的第二行。 Msg_txt[ ] “My first Message”
3、信息提示的变量
需要显示的变量结构体:KRLMSGPAR_T
如果需要显示传入的变量信息,则需要进行此项参数的赋值。例如显示当前生产的件数。
在信息文本中需要使用占位符。占位符的数量最多为 3 个,用 %1、 %2 和 %3表示。
Enum KrlMsgParType_T Value, Key, Empty
STRUC KrlMsgPar_T KrlMsgParType_T Par_Type, CHAR Par_txt[26], INT Par_Int, REAL Par_Real, BOOL Par_Bool
/*
Par_Type: 参数 / 占位符的类型
#VALUE: 参数直接以传递的形式代入信息文本中 (即作为字符串、INT、REAL 或 BOOL 值)
#KEY: 该参数是一个为载入相应的文本用于在信息提示数据库中进行查找的关键词
#EMPTY: 参数是空的
Par_txt[26]: 参数的文字或关键词
Par_Int: 将一个整数值作为参数传递
Par_Real: 将一个实数值作为参数传递
Par_Bool: 将一个布尔值作为参数传递,显示的文字为 TRUE 或 FALSE
*/
信息文本为 Msg_txt[ ] “My %1 Message” (我的第 %1 条消息)
DECL KrlMsgPar_T Parameter[3] ; 建立 3 组参数
DECL KrlMsg_T mymessage
mymessage = {Modul[ ] "College", Nr 1906, Msg_txt[ ] "My %1 Message"} //My First Message
Parameter[1] = {Par_Type #VALUE, Par_txt[ ] "First"}
Parameter[2] = {Par_Type #EMPTY}
Parameter[3] = {Par_Type #EMPTY}
信息输出提示:My First Message
4、信息提示的选项
信息提示的选项结构体:KRLMSGOPT_T
STRUC KrlMsgOpt_T BOOL VL_Stop, BOOL Clear_P_Reset, BOOL Clear_SAW, BOOL Log_To_DB
/*
VL_Stop: TRUE 触发一次预进停止。
缺省值: TRUE
Clear_P_Reset : 当复位或反选了程序后, TRUE 将删除所有状态、确认和等待信息。
缺省值: TRUE
Clear_P_SAW: 通过按键 “ 选择语句 ” (Satzanwahl) 执行了语句选择后,TRUE 将删除所有状态、确认和等待信息。
缺省值: FALSE
Log_To_DB: TRUE 使该信息提示记录在 Log 数据库中。
缺省值: FALSE
*/
提示信息举例
DECL KRLMSG_T mymessage
DECL KRLMSGPAR_T Parameter[3]
DECL KRLMSGOPT_T Option
DECL INT handle
mymessage = {modul[] "College", Nr 1906, msg_txt[] "My first Message"}
Option= {VL_STOP FALSE, Clear_P_Reset TRUE, Clear_P_SAW FALSE, Log_to_DB TRUE}
; 占位符为空占位符 [1..3]
Parameter[1] = {Par_Type #EMPTY}
Parameter[2] = {Par_Type #EMPTY}
Parameter[3] = {Par_Type #EMPTY}
handle = Set_KrlMsg(#NOTIFY, mymessage, Parameter[ ], Option)
状态信息举例
/*
通过输入端 17 (FALSE) 触发状态信息。 生成信息提示后程序被停住。
通过输入端 17 的状态 (TRUE) 删除信息提示。 然后程序继续运行。
同样,当程序复位或退出程序时信息提示也将消失。
可通过在信息提示选项中的设置 Clear_P_Reset TRUE 引发这种情况。
*/
DECL KRLMSG_T mymessage
DECL KRLMSGPAR_T Parameter[3]
DECL KRLMSGOPT_T Option
DECL INT handle
DECL BOOL present, erase
...
IF $IN[17]==FALSE THEN
mymessage={modul[] "College", Nr 1909, msg_txt[] "My Messagetext"}
Option= {VL_STOP FALSE, Clear_P_Reset TRUE, Clear_P_SAW FALSE, Log_to_DB TRUE}
; 占位符为空占位符 [1..3]
Parameter[1] = {Par_Type #EMPTY}
Parameter[2] = {Par_Type #EMPTY}
Parameter[3] = {Par_Type #EMPTY}
handle = Set_KrlMsg(#STATE, mymessage, Parameter[ ], Option)
ENDIF
erase=FALSE
; 用于在删除信息提示前停住程序的循环
REPAEAT
IF $IN[17]==TRUE THEN
erase=Clear_KrlMsg(handle) ; 删除信息提示
ENDIF
present=Exists_KrlMsg(handle) ; 附加的检测
UNTIL NOT(present) or erase