KUKA 机器人消息库(MsgLib)程序详解与调用指南

一、程序概述

该程序是一个基于 KUKA 机器人编程语言(KRL,KUKA Robot Language)的消息处理库,用于在机器人程序运行过程中生成、管理各类交互消息(如通知、提示、错误、对话框等)。通过封装标准化的消息处理逻辑,简化了开发者与机器人用户的交互设计,支持消息参数化、日志记录、程序控制等功能。

二、核心接口与功能概览

程序提供了 7 个核心全局子程序 / 函数,覆盖不同类型的消息需求,具体如下:

三、通用参数解释

各函数的参数存在共性,核心参数定义如下:

四、核心函数详解

1. MsgNotify通知消息功能

生成非阻塞的通知消息,用于提示信息(如运行状态、警告等),不暂停程序执行。

代码逻辑

GLOBAL DEF MsgNotify(sText[]:IN, sModul[]:IN, nNumPar:IN, sTextPar[]:IN, nMsgNr:IN,MsgOpt:IN)
  ; 1. 处理MsgOpt默认值(若参数无效则设为默认:VL_Stop=TRUE, Clear_P_Reset=TRUE, Log_To_DB=FALSE)
  ; 2. 校验并截断消息文本(sText[]最大80字符,sModul[]最大24字符)
  ; 3. 处理参数插入:若nNumPar有效则替换%1为数值,否则替换为sTextPar[]文本
  ; 4. 调用系统函数Set_KrlMsg生成#NOTIFY类型消息
END

示例

MsgNotify("this is a notify message") ; 简单通知
MsgNotify("this is a %1 notify message", "Tech", , "asd") ; 带文本参数的通知(%1替换为"asd")

2. MsgQuit:退出消息

功能生成阻塞的退出消息,程序会暂停并等待消息被处理(如用户确认)后再继续执行。

代码逻辑

GLOBAL DEF MsgQuit(sText[]:IN, sModul[]:IN, nNumPar:IN, sTextPar[]:IN, nMsgNr:IN,MsgOpt:IN)
  ; 1. 同MsgNotify的参数处理(默认值、文本截断、参数插入)
  ; 2. 调用Set_KrlMsg生成#QUIT类型消息
  ; 3. 循环等待消息处理完成(通过Exists_KrlMsg检查消息句柄是否存在)
  WHILE ( Exists_KrlMsg(nHandle) )
    WAIT sec 0.1
  ENDWHILE
END

示例

MsgQuit("this is a quit message", "myMod") ; 简单退出消息
INT myInt=123
MsgQuit("this is the %1 quit message", "Module", myInt) ; 带数值参数(%1替换为123)

3. MsgState:状态消息

功能生成状态类消息,返回消息句柄(nHandle),用于后续通过句柄管理消息(如更新、清除)。

代码逻辑

GLOBAL DEF MsgState(nHandle:OUT, sText[]:IN, sModul[]:IN, nNumPar:IN, sTextPar[]:IN, nMsgNr:IN,MsgOpt:IN)
  ; 1. 同MsgNotify的参数处理
  ; 2. 调用Set_KrlMsg生成#STATE类型消息,返回句柄到nHandle
END

用途

适用于需要持续显示并动态更新的状态信息(如进度、实时数据),通过句柄可后续操作消息。

4. MsgLoop:循环消息

功能

生成持续显示的循环消息(如 “运行中...”),发送空字符串可取消消息。

代码逻辑

GLOBAL DEF MsgLoop(sText[]:IN,sModul[]:IN)
  ; 1. 截断文本(sText[]最大80字符,sModul[]默认"Appl")
  ; 2. 若消息文本非空且含有效字符,调用MsgState生成循环消息
  ; 3. 若消息文本为空或仅空格,清除已有的循环消息(通过句柄lnHandle)
END

示例

MsgLoop("this is the loop message") ;

显示循环消息MsgLoop(" "); 取消循环消息

5. MsgDialog:对话框消息

功能

生成带软键的交互式对话框,等待用户选择后返回结果(nAnswer),支持最多 7 个软键选项。

代码逻辑

GLOBAL DEF MsgDialog(nAnswer:OUT,sText[]:IN,...sDialogSK7[]:IN,NoBrakes:IN, nMsgNr:IN,MsgOpt:IN)
  ; 1. 处理MsgOpt默认值和文本截断
  ; 2. 配置软键(sDialogSK1到sDialogSK7),设置软键文本(最大24字符)
  ; 3. 调用系统函数SET_KRLDLG生成对话框消息
  ; 4. 循环等待用户选择(通过Exists_KrlDlg检查对话框状态)
  ; 5. 若NoBrakes=TRUE,保持机器人刹车松开(不锁轴)
END

示例

MsgDialog(DialogAnswer, "StartPTP", "CrossMeld", "Achse 3", "YES", "NO", "Cancel") ;

对话框消息文本为"StartPTP",模块"CrossMeld",参数"Achse 3",软键为YES/NO/Cancel;

用户选择后,DialogAnswer返回对应软键索引(如1=YES,2=NO)

6. MsgNotifyTextPar 与 MsgQuitTextPar:带多文本参数的消息

功能

支持 2 个文本参数的通知 / 退出消息(%1和%2占位符),当nNumPar=0时启用文本参数,nNumPar>0时启用数值参数。

代码逻辑

GLOBAL DEF MsgNotifyTextPar(...)
  ; 1. 同MsgNotify的参数处理
  ; 2. 若nNumPar=0,替换%1为sTextPar[],%2为sTextPar2[]
  ; 3. 若nNumPar>0,替换%1为数值nNumPar
  ; 4. 调用Set_KrlMsg生成#NOTIFY类型消息
END

示例

MsgNotifyTextPar("Error: %1 - %2", "CrossMeld", 0, "Sensor", "Disconnected", 511);

消息文本为"Error: Sensor - Disconnected",模块"CrossMeld",编号511

7. CheckOfMsgOpt:消息选项校验函数

功能

校验MsgOpt结构体参数的有效性,为未定义或无效的成员设置默认值。

码逻辑

DEFFCT KrlMsgOpt_TCheckOfMsgOpt(LocalMsgOpt:IN)
  ; 1. 检查VL_Stop:无效则设为TRUE
  ; 2. 检查Clear_P_Reset:无效则设为TRUE
  ; 3. 检查Log_To_DB:无效则设为FALSE
  ; 4. 返回校验后的MsgOpt
ENDFCT

作用确保所有消息选项有合理默认值,避免因参数缺失导致的程序错误。

五、关键技术细节

文本长度控制:所有文本参数(如sText[]、sModul[])均有长度限制,超过部分会被截断(如sText[]最大 80 字符),避免消息显示异常。

参数占位符:通过%1(单参数)或%1+%2(双参数)在消息文本中插入动态内容,支持数值(nNumPar)或文本(sTextPar[])参数。

阻塞与非阻塞非阻塞:MsgNotifyMsgStateMsgLoop不暂停程序;阻塞:MsgQuitMsgDialog会等待消息处理完成后再继续。

消息管理:通过句柄(nHandle)标识消息,可通过系统函数(如Exists_KrlMsg、Clear_KrlMsg)检查或清除消息。

日志与控制MsgOpt.Log_To_DB控制消息是否记录到系统日志;MsgOpt.VL_Stop控制是否触发程序提前停止。

六、程序用途与优势

标准化交互:统一消息格式和处理逻辑,简化机器人程序的用户交互设计。

灵活参数化:支持动态插入数值 / 文本参数,适应不同场景的消息需求(如错误详情、状态数据)。

程序控制:通过MsgOpt灵活配置消息是否阻塞、是否记录日志、是否自动清除,平衡交互体验与系统性能。

多场景支持:覆盖通知、警告、错误、状态显示、用户确认等多种交互场景,满足机器人调试、运行、维护全流程需求。

七、消息函数调用指南

一、调用前的准备

确保消息库已加载该消息库(MsgLib)需作为子程序被主程序或其他模块引用,通常通过 EXTERN 声明或在程序头文件中包含,确保机器人系统能识别这些全局函数。

参数格式要求

字符串参数(如 sText[]、sModul[])需用双引号包裹(如 "Error")。

数值参数(如 nNumPar、nMsgNr)直接传递数字(如 123)。

可选参数可省略(用逗号分隔占位),系统会自动使用默认值。

二、常用函数调用

示例

1. MsgNotify:发送通知消息(非阻塞)

用途:提示运行状态、警告等,不暂停程序。

示例:; 简单通知(仅消息文本)

MsgNotify("系统启动中...");

带模块名和数值参数(%1替换为数值)

INT temp = 35

MsgNotify("温度警告:当前%1℃", "温控模块", temp)

; 带文本参数(%1替换为文本)

MsgNotify("传感器%1连接正常", "检测模块", , "A1")

2. MsgQuit:发送退出消息(阻塞)

用途:提示严重信息(如错误),程序暂停等待处理后再继续。

示例:

; 简单退出消息MsgQuit("程序执行完成", "主模块"); 

带消息编号和选项(不记录日志)

KrlMsgOpt_T opt

opt.Log_To_DB = FALSE  ; 不写入日志

MsgQuit("机械臂到达极限位置", "运动模块", , , 5001, opt)

3. MsgDialog:显示对话框(等待用户选择)

用途:需要用户确认或选择的场景(如确认启动、选择模式)。

示例:

INT answer  ; 存储用户选择结果(1~7对应7个软键)

; 带3个软键的对话框(YES/NO/Cancel)

MsgDialog(answer, "是否执行自动上料?", "上料模块", , "YES", "NO", "Cancel");

根据用户选择执行不同逻辑

IF answer == 1 THEN  ; 用户选择第一个软键"YES" 

PTP HOME

AUTO_LOAD()  ; 调用自动上料程序

ELSEIF answer == 2 THEN  ; 用户选择"NO"

MsgNotify("取消自动上料", "上料模块")

ENDIF

4. MsgLoop:显示循环消息(持续提示)

用途:程序运行中持续显示状态(如 “运行中”),完成后取消。

示例:

; 开始循环显示"抓取中..."

MsgLoop("抓取中...", "抓取模块")

; 执行抓取动作(耗时操作)

; 完成后取消循环消息(传递空字符串)

MsgLoop(" ", "抓取模块")

5. MsgNotifyTextPar:带多文本参数的通知

用途:

消息文本中需要插入 2 个文本参数(%1 和 %2)。

示例:

; %1替换为"传送带A",%2替换为"堵塞"

MsgNotifyTextPar("设备%1发生%2故障", "物流模块", 0, "传送带A", "堵塞")

6. MsgState:生成状态消息(返回句柄)

用途:

需要后续管理的状态消息(如动态更新、手动清除)。

示例:

INT msg_handle  ; 消息句柄

; 生成状态消息并获取句柄

MsgState(msg_handle, "焊接进度:30%", "焊接模块")

; (后续逻辑)更新进度后清除旧消息,显示新消息

WAIT SEC 5

Clear_KrlMsg(msg_handle)  

; 清除旧消息MsgState(msg_handle, "焊接进度:60%", "焊接模块")

三、参数传递技巧

省略可选参数

函数的可选参数(如 nMsgNr、MsgOpt)可省略,只需用逗号占位。例如:

; 省略nNumPar、sTextPar、nMsgNr,仅传递必要参数

MsgNotify("操作完成", "主模块", , , , )

使用消息编号(nMsgNr)

为消息分配编号(如错误码),便于日志检索和问题定位:

MsgQuit("伺服电机故障", "驱动模块", , , 1002)  ; 1002为自定义故障码

配置消息选项(MsgOpt)

通过 MsgOpt 控制消息行为(如是否暂停、是否记录日志):

KrlMsgOpt_T opt

opt.VL_Stop = FALSE  ; 不触发程序提前停止

opt.Log_To_DB = TRUE  ; 写入系统日志

MsgNotify("电量低", "电源模块", , , , opt)

四、注意事项

文本长度限制

sText[] 最大 80 字符,sModul[] 最大 24 字符,超出部分会被截断。

阻塞函数的影响

MsgQuit 和 MsgDialog 会暂停程序执行,直到消息被处理(如用户确认),需合理安排调用时机,避免影响生产效率。

循环消息的取消

MsgLoop 必须通过传递空字符串(" ")取消,否则会一直显示。

声明:本内容为作者独立观点,不代表电子星球立场。未经允许不得转载。授权事宜与稿件投诉,请联系:editor@netbroad.com
觉得内容不错的朋友,别忘了一键三连哦!
赞 1
收藏 1
关注 26
成为作者 赚取收益
全部留言
0/200
成为第一个和作者交流的人吧