KUKA在线测量样例程序

程序简介

功能说明

用户从机器人侧触发Mech-Metrics使用Mech-MSR进行测量,并向Mech-Metrics返回测量结果。

文件路径

Mech-MSR和Mech-Metrics软件安装目录下Mech-MSR/center/MSR_Interface/KUKA/MSR_METRICS_SAMPLE.src

所需资源

Mech-MSR方案和Mech-Metrics工程

使用前提

  • 在线测量系统侧准备:

    • 当前工件在Mech-Metrics中已关联至Mech-MSR方案。

    • 当前特征在Mech-Metrics中绑定至Mech-MSR工程。

    • Mech-MSR方案和工程已在Mech-MSR中打开。

  • 机器人侧准备:

    • 已完成KUKA标准接口通信配置

    • 已完成KUKA自动标定

    • 已示教测量位置。

    • 已在机器人侧移动机器人到第一个待测量位置。

    • 开始测量前已提前预热机器人与相机30分钟。

    • 开始测量前已保证外部光照和温度稳定。

此样例程序仅是示例程序。用户需根据实际情况在此基础上进行修改,请勿直接使用该程序。

程序解读

以下为MSR_METRICS_SAMPLE样例程序的代码及相关解释说明。

&ACCESS RVP
&PARAM EDITMASK = *
&PARAM TEMPLATE = C:\KRC\Roboter\Template\vorgabe
DEF MSR_METRICS_SAMPLE( )
  ;FUNCTION: Test Metrics
  INT MSR_Continuous_Mode,Measure_Result,MSR_Status
  MSR_Continuous_Mode = 0
  Measure_Result = 0
  Failed_Count[1] = 0
  Failed_Count[2] = 0
  Failed_Count[3] = 0
  MSR_Init_Socket("XML_Kuka_MSR",20,30,60)
  MSR_Start_Measure(1,"Piece01","ABC",2,10,20,30,40,50,60,70,80,MSR_Continuous_Mode,MSR_Status)
  IF MSR_Status <> 8100 THEN
    MSR_LOG("Run failed!")
    HALT;
  ENDIF
  MSR_Set_Piece_Info(1,"Piece01",MSR_Status)
  IF MSR_Status <> 8103 THEN
    MSR_LOG("Run failed!")
    HALT;
  ENDIF
;FOLD PTP P3 CONT Vel=100 % PDAT3 Tool[1] Base[0];%{PE}
;FOLD Parameters ;%{h}
;Params IlfProvider=kukaroboter.basistech.inlineforms.movement.old; Kuka.IsGlobalPoint=False; Kuka.PointName=P3; Kuka.BlendingEnabled=True; Kuka.MoveDataPtpName=PDAT3; Kuka.VelocityPtp=100; Kuka.CurrentCDSetIndex=0; Kuka.MovementParameterFieldEnabled=True; IlfCommand=PTP
;ENDFOLD
$BWDSTART = FALSE
PDAT_ACT = PPDAT3
FDAT_ACT = FP3
BAS(#PTP_PARAMS, 100.0)
;SET_CD_PARAMS (0)
PTP XP3 C_Dis
;ENDFOLD
  MSR_Measure_Feature(1,1,MSR_Status)
  IF MSR_Status <> 8101 THEN
    MSR_LOG("Run failed!")
    HALT;
  ENDIF
;FOLD PTP P2 CONT Vel=100 % PDAT2 Tool[1] Base[0];%{PE}
;FOLD Parameters ;%{h}
;Params IlfProvider=kukaroboter.basistech.inlineforms.movement.old; Kuka.IsGlobalPoint=False; Kuka.PointName=P2; Kuka.BlendingEnabled=True; Kuka.MoveDataPtpName=PDAT2; Kuka.VelocityPtp=100; Kuka.CurrentCDSetIndex=0; Kuka.MovementParameterFieldEnabled=True; IlfCommand=PTP
;ENDFOLD
$BWDSTART = FALSE
PDAT_ACT = PPDAT2
FDAT_ACT = FP2
BAS(#PTP_PARAMS, 100.0)
;SET_CD_PARAMS (0)
PTP XP2 C_Dis
;ENDFOLD
  MSR_Measure_Feature(1,1,MSR_Status)
  IF MSR_Status <> 8101 THEN
    MSR_LOG("Run failed!")
    HALT;
  ENDIF
;FOLD PTP P4 CONT Vel=100 % PDAT4 Tool[1] Base[0];%{PE}
;FOLD Parameters ;%{h}
;Params IlfProvider=kukaroboter.basistech.inlineforms.movement.old; Kuka.IsGlobalPoint=False; Kuka.PointName=P4; Kuka.BlendingEnabled=True; Kuka.MoveDataPtpName=PDAT4; Kuka.VelocityPtp=100; Kuka.CurrentCDSetIndex=0; Kuka.MovementParameterFieldEnabled=True; IlfCommand=PTP
;ENDFOLD
$BWDSTART = FALSE
PDAT_ACT = PPDAT4
FDAT_ACT = FP4
BAS(#PTP_PARAMS, 100.0)
;SET_CD_PARAMS (0)
PTP XP4 C_Dis
;ENDFOLD
  MSR_Measure_Feature(1,1,MSR_Status)
  IF MSR_Status <> 8101 THEN
    MSR_LOG("Run failed!")
    HALT;
  ENDIF
  MSR_End_Measure(1,Measure_Result,Failed_Count[],MSR_Status)
  IF MSR_Status <> 8102 THEN
    MSR_LOG("Run failed!")
    HALT;
  ENDIF
  MSR_View_Piece_Data(1,"Piece01",MSR_Status)
  IF MSR_Status <> 8104 THEN
    MSR_LOG("Run failed!")
    HALT;
  ENDIF
  WAIT SEC 1
END

下表为上述程序的逻辑解读。在上述代码中,被注释掉的行以;开头,下表不解释被注释掉的内容。

流程 代码及说明

初始化通信

INT MSR_Continuous_Mode,Measure_Result,MSR_Status
MSR_Continuous_Mode = 0
Measure_Result = 0
Failed_Count[1] = 0
Failed_Count[2] = 0
Failed_Count[3] = 0
MSR_Init_Socket("XML_Kuka_MSR",20,30,60)
  • INT MSR_Continuous_Mode,Measure_Result,MSR_Status:声明三个整数变量MSR_Continuous_Mode、Measure_Result和MSR_Status。

    • MSR_Continuous_Mode = 0:初始化MSR_Continuous_Mode变量为0,用于存储运行模式。

    • Measure_Result = 0:初始化Measure_Result变量为0,用于存储最终的测量结果。

    • MSR_Status:用于保存命令返回状态码,并在每次关键命令后进行校验。

    • Failed_Count[1] = 0:初始化Failed_Count数组的第一个元素为0,用于保存工件超出一级公差带的测量项数量。

    • Failed_Count[2] = 0:初始化Failed_Count数组的第二个元素为0,用于保存工件超出二级公差带的测量项数量。

    • Failed_Count[3] = 0:初始化Failed_Count数组的第三个元素为0,用于保存工件超出三级公差带的测量项数量。

  • MSR_Init_Socket("XML_Kuka_MSR",20,30,60):建立在线测量系统与机器人之间的TCP协议通信连接。

    • "XML_Kuka_MSR":网络配置文件名。

    • 20:通信状态对应信号编号(与XML配置文件参数一致)。

    • 30:接收状态对应信号编号(与XML配置文件参数一致)。

    • 60:该参数表示通信超时等待时间,单位为秒。

开始测量

MSR_Start_Measure(1,"Piece01","ABC",2,10,20,30,40,50,60,70,80,MSR_Continuous_Mode,MSR_Status)
IF MSR_Status <> 8100 THEN
  MSR_LOG("Run failed!")
  HALT;
ENDIF
  • MSR_Start_Measure(1,"Piece01","ABC",2,10,20,30,40,50,60,70,80,MSR_Continuous_Mode,MSR_Status):开始测量任务并设置自定义参数。

    • 1:工件编号。

    • "Piece01":工件名称。

    • "ABC":工件SN。

    • 2:质量检测模式,1代表全检,2代表半检。

    • 10,20,30,40,50,60,70,80:设置的自定义参数。

    • MSR_Continuous_Mode:用于保存Mech-Metrics返回的运行模式。

    • MSR_Status:用于保存命令返回状态码。

  • IF MSR_Status <> 8100 THEN …​ ENDIF:若状态码不为8100,表示开始测量指令执行失败,机器人侧记录日志并停止程序。

    此处的检测模式、自定义参数需与Mech-Metrics中设置的一致。

为Mech-Metrics传入工件

MSR_Set_Piece_Info(1,"Piece01",MSR_Status)
IF MSR_Status <> 8103 THEN
  MSR_LOG("Run failed!")
  HALT;
ENDIF
  • MSR_Set_Piece_Info(1,"Piece01",MSR_Status):向Mech-Metrics中传入SN码为Piece01的工件,并获取指令状态码。

    • 1:工件编号。

    • "Piece01":工件SN。

  • IF MSR_Status <> 8103 THEN …​ ENDIF:若状态码不为8103,表示传入工件信息失败,机器人侧记录日志并停止程序。

移动机器人到指定位置并进行特征测量

$BWDSTART = FALSE
PDAT_ACT = PPDAT3
FDAT_ACT = FP3
BAS(#PTP_PARAMS, 100.0)
PTP XP3 C_Dis
MSR_Measure_Feature(1,1,MSR_Status)
IF MSR_Status <> 8101 THEN
   MSR_LOG("Run failed!")
   HALT;
ENDIF
$BWDSTART = FALSE
PDAT_ACT = PPDAT2
FDAT_ACT = FP2
BAS(#PTP_PARAMS, 100.0)
PTP XP2 C_Dis
MSR_Measure_Feature(1,1,MSR_Status)
IF MSR_Status <> 8101 THEN
   MSR_LOG("Run failed!")
   HALT;
ENDIF
$BWDSTART = FALSE
PDAT_ACT = PPDAT4
FDAT_ACT = FP4
BAS(#PTP_PARAMS, 100.0)
PTP XP4 C_Dis
MSR_Measure_Feature(1,1,MSR_Status)
IF MSR_Status <> 8101 THEN
   MSR_LOG("Run failed!")
   HALT;
ENDIF
  • $BWDSTART = FALSE:禁用反向路径校正,即在执行过程中不进行路径回溯。

  • PDAT_ACT = PPDAT3:设置当前点到点运动的参数为PPDAT3,包含速度、加速度和过渡设置。PDAT_ACT = PPDAT2和PDAT_ACT = PPDAT4为同理。

  • FDAT_ACT = FP3:设置当前位置的坐标系数据为FP3,用于定义机器人的运动基准。FDAT_ACT = FP2和FDAT_ACT = FP4为同理。

  • BAS(#PTP_PARAMS, 100.0):应用点到点运动的基本参数,速度设为 100%。

  • PTP XP3 C_Dis:机器人以点到点方式精准移动至XP3点。PTP XP2 C_Dis和PTP XP4 C_Dis为同理。

  • MSR_Measure_Feature(1,1,MSR_Status):机器人侧将触发工件编号为1、测量特征的测量编号为1的Mech-MSR工程运行,并获取指令状态码。

    • 第一个1:工件编号。

    • 第二个1:特征测量编号。

  • IF MSR_Status <> 8101 THEN …​ ENDIF:每次触发特征测量后均检查状态码。若状态码不为8101,机器人侧记录日志并停止程序。

用户需提前示教测量位置(XP2、XP3、XP4)。具体示教方法可参考自动标定中KUKA自动标定篇中示教标定起始点部分的操作。

结束测量

MSR_End_Measure(1,Measure_Result,Failed_Count[],MSR_Status)
IF MSR_Status <> 8102 THEN
  MSR_LOG("Run failed!")
  HALT;
ENDIF
  • MSR_End_Measure(1,Measure_Result,Failed_Count[],MSR_Status):结束测量,存储测量结果至Measure_Result,并更新Failed_Count数组,同时获取指令状态码。

  • IF MSR_Status <> 8102 THEN …​ ENDIF:若状态码不为8102,表示结束测量指令执行失败,机器人侧记录日志并停止程序。

查询历史数据

MSR_View_Piece_Data(1,"Piece01",MSR_Status)
IF MSR_Status <> 8104 THEN
  MSR_LOG("Run failed!")
  HALT;
ENDIF
WAIT SEC 1
END
  • MSR_View_Piece_Data(1,"Piece01",MSR_Status):通过外部传入工件SN,将Mech-Metrics软件主界面的数据视图切换为传入SN的工件,并获取指令状态码。

  • IF MSR_Status <> 8104 THEN …​ ENDIF:若状态码不为8104,表示历史数据查询失败,机器人侧记录日志并停止程序。

该页面是否有帮助?

可以通过以下方式反馈意见:

我们重视您的隐私

我们使用 cookie 为您在我们的网站上提供最佳体验。继续使用该网站即表示您同意使用 cookie。如果您拒绝,将使用一个单独的 cookie 来确保您在访问本网站时不会被跟踪或记住。