KUKA-外部自动运行模板程序——个人设计模式&思路

KUKA-外部自动运行模板程序

1. 前言

为何想写这些经验?

之前只专注于工业自动化PLC部分,对机器人侧的设计逻辑了解较浅,所以一直有系统学习KUKA机器人的想法。上段时间刚好有些空闲学习了KUKA机器人应用技术的基础知识,加之最近项目有大量KUKA机器人可供学习实践。因此突发兴趣,想通过边学边用的机会把认为有记录分享价值的调试操作理论理解实践经验总结成文进行记录分享。

编写目的用途

  • 方便自己以后记录回顾、参考积累、对比升级完善(好记性不如电子文档化)
  • 方便快速分享给他人参考&进行技术交流
  • 供我发布的其它经验进行关联参考
  • 自己理解下的经验文档呈现(在查阅网上其他类似博文后觉得不够贴切,毕竟每个工程师都有自己的理解与实现方式,写出来的经验不一定符合自己的理解与需求)

技术经验测试环境

  • PLC:
    • 控制器:Siemens S7-1214C DC/DC/DC
    • IDE:TIA-Portal V17
  • ROB:
    • 控制器:KRC4 (8.6.13)
      • 系统固件:KSS 8.6.13
      • 选件包:KUKA.PROFINET S (V5.0.5.51)
    • 本体:KR 210 R2700-2
    • IDE:WorkVisual 6.0.31

基本准备条件

提前组态配置好PLC与KUKA的PN通讯。基本配置过程可以参考我的另一篇文章“
KUKA PROFINET通讯配置——作为设备站1

2. KUKA外部自动介绍

KUKA机器人自动模式分为**内部自动(AUT)**与 外部自动(AUT_EXT)。外部自动我理解的就是在一个自动化系统中KUKA机器人作为一个从站单元,通过外部交互信号进行控制的自动运行方式。内部自动我的理解是机器人作为单站或主站,在机器人内部控制系统中进行自动运行的方式。

在我接触过的大部分机器如 ABB、KUKA、FANUC、KAWASAKI等都有一套用于外部自动控制运行的一套方法或标准接口。有的比较自由,用户可以直接利用后台程序与系统变量给自己编写一套符合自己需求的外部自动运行程序模板(如川崎)。有的比较严格必须按照官方系统提供的步骤进行配置才可以全面可靠地通过外部控制机器人的自动运行过程(如KUKA、ABB、FANUC等)。德国KUKA机器人对外部自动运行接口设计地十分谨慎、严谨。KUKA工程师专门为外部控制需求单独指定了一个运行模式【AUT_EXT】。同时还为之列出专门的外部自动系统变量配置表、外部自动标准交互时序图、外部自动标准交互程序Cell.src。德工设计上谨慎、严谨、细致认真的同时使用上也不可避免地相对其它机器人有些复杂繁琐。能理解,毕竟很多矛盾对立地事物,一般其二者难以兼得。

KUAK官方手册2上是这么说明介绍的:
如果机器人进程(程序选择激活、使能启动、失能停止、报警与复位等)应由一个上级控制系统进行控制 (如由一个 PLC),则这一控制通过外部自动运行接口进行。上级控制系统通过外部自动运行接口向机器人控制系统发出机器人进程的相关信号 (如错误确认、程序启动等)。机器人控制系统向上级控制系统发送有关运行状态和故障状态的信息。

2.1 KUKA外部自动交互信号——理解说明

在KUKA老手册中有这样一张概览图:
在这里插入图片描述
KUKA外部自动交互信号分为【输入端】、【输出端】两部分。【输出端】又分为【启动条件】、【程序状态】、【机器人位置】、【运行方式】4个子类分组。主要信号共计34个=输入8+输出(9+4+9+4),示教器上可以配置每个信号变量的映射关系。示教器配置界面如下实际截图所示:

  • 外部自动配置:输入端】前3个决定程序编号格式的配置值,以及9个输入IO信号的映射配置值。用于外部系统(如PLC)进行外部启动/停止ROB程序与动作的控制信号。
    配置-外部输入端

    • PGNO_TYPE:(Program_Type)程序号类型选择配置,具体配置说明如下:(类型3时PGNO_REQ、PGNO_PARITY 以及 PGNO_VALID等程序号确认信号不适用,功能无效)
      在这里插入图片描述

    • REFLECT_PROG_NR:程序号反馈启用与否配置。该变量确定是否将程序编号映射到输出端的范围上。从用 PGNO_FBIT_REFL 确反馈地址首位。0-关闭该功能,1-启用该功能。
      定的输出端起进行输出。

    • PGNO_LENGTH:类型:变量此变量确定了上级控制系统传送的程序编号的位宽。值域:1… 16。 (示例:PGNO_LENGTH = 4 => 外部程序编号位宽为 4。若 PGNO_TYPE 的值为 2,则只允许位宽为 4、8、12 和 16。)

    • PGNO_FBIT:程序编号第一位所代表的输入端。值域:1 … 8192。(示例:PGNO_FBIT = 5 => 外部程序编号从输入端 $IN[5] 开始。)

    • PGNO_PARITY:外部控制系统传递奇偶位的输入端配置。遵循如下配置规则:
      在这里插入图片描述

    • PGNO_VALID:外部系统(如PLC)校验确认程序号无误后发送程序号有效信号给ROB,触发ROB正确执行对应子程序。遵循如下配置规则:
      在这里插入图片描述

    • $EXT_START:用于外部系统(PLC)启动触发机器人开始继续运行,该信号为上升沿触发启动。信号在$I_O_ACT==TRUE时才有效,在下面启动条件具备时才可正常启动机器人运行程序。

    • $MOVE_ENABLE:运行使能信号,用于外部系统(PLC)允许/禁止机器人的一切程序与动作运行以及驱动装置上电。该信号配置以后ROB无论手动还是自动都无法运行程序移动机器人,可让ROB处于软硬件完全失能状态。当信号复位为FALSE时,机器人立即停止运行关闭驱动器,同时发出“确认全部运行开通”错误报警信息如下图所示。当信号重新置位为TRUE时,需要复位或确认报警信息后,且重新发出外部启动($EXT_START)信号上升沿才能继续运行机器人的程序与动作。手动模式下确认后才可手动操作运行机器人。这里注意如下图手册中提示$CHCK_MOVEA系统变量的配置值。
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述

    • $CONF_MESS:ROB停止故障排除后,用于外部系统(PLC)确认复位机器人停止报警信息($STOPMESS),该信号好只在上升沿时有效。

    • $DRIVES_OFF:驱动关闭信号,常ON信号。如果在此输入端上施加了持续至少 20 毫秒的低脉冲,则上级控制系统会关断机器人驱动装置。

    • $DRIVES_ON:驱动打开信号。如果在此输入端上施加了持续至少 20 毫秒的高脉冲,则上级控制系统会接通机器人驱动装置。前提$DRIVES_OFF==TRUE。

    • $I_O_ACT:外部自动IO接口启用激活,信号置TRUE后,外部系统(PLC)才可以利用外部自动IO接口输入信号进行正常时序交互后启动机器人程序。。默认设置:$IN[1025]。(注:机器人中的$IN[1025]是常1信号,$IN[1026]是常0信号,类似PLC中的“AlwaysTrue”与“AlwaysFalse”)。
      特别提示:
      正常外部自动交互时序过程中若该信号为FALSE则ROB将无法启动程序且报警信息窗口无人任何报警提示信息,处于无任何相应状态,容易误导、忽略、不易察觉原因。所以遇到此情况请注意排查此激活信号的配置与实际状态。

  • 外部自动配置:输出端-启动条件】用于外部系统(如PLC)进行外部启动ROB程序前,判断启动的条件的状态信号。
    配置-启动条件

    • $RC_RDY1:(RobotController_Ready)机器人控制器准备就绪可以由外部进行启动时,信号置位为1,控制器准备未就绪时,信号复位为0。

    • $ALARM_STOP:急停报警,与急停回路一样采用常闭信号。当ROB触发安全急停(STOP0 或STOP1)时,信号复位为0;急停解除并复位后,信号置位为1。内/外急停触发可以通过如下信号综合判断:
      在这里插入图片描述

    • $USER_SAF:常闭信号,安全反映用户安全防护装置的状态(如:安全门、安全光栅、安全握杆确认开关)。不同模式下的状态逻辑如下:

      • AUT内部自动模式/EXT外部自动模式:安全防护装置打开时复位为0,上锁恢复时,信号置位为1;
      • T1/T2测试模式:安全握杆确认开关松开时,复位为0,正常握力时使能,信号置位为1.
        在这里插入图片描述
    • $PERI_RDY:驱动装置接通关断状态。驱动装置已接通,中间回路已充满电,信号置位为1;驱动装置已关断,中间回路未充满电,信号复位为0。这个信号状态可以在示教器界面直观显示如下图:(PERI这个缩写联想不到合适的英文全写,官方手册上也没找到存个疑问,唯一有点相似的就是“peripherals:外设”)在这里插入图片描述

    • $ROB_CAL:(Robot Calibrated)显示机器人零点校准状态,已校准置位为1。只要机器人轴的零点已删除,则该信号复位为 0。

    • $I_O_ACTCONF:(IO_Activated_Confirm)外部自动IO接口已激活。当ROB处于选择“EXT模式”且外部系统发出“$I_O_ACT == TRUE”时,信号置位为1,代表ROB端外部自动接口激活可以开始进行外部启动控制交互时序了。

    • $STOPMESS:(Stop Messages)停止报警提示信息出现与否状态,ROB出现了一条要求停住机器人的信息提示时,信号置位为1。(例如:紧急停止按键、运行开通或操作人员防护装置)

    • $PGNO_FBIT_REFL:(PGNO_FirstBit_Reflect)反馈程序号镜像的地址首位,前提输入端 REFLECT_PROG_NR 的值为 1,启用了程序号反馈功能。

    • $ALARM_STOP_INTERN:(Alarm_STOP_Internal)显示内部急停报警状态,常闭信号。当ROB内部触发了急停(如,smartPAD上的急停按钮按下)则信号复位为0。与前面的“$ALARM_STOP”配合综合判断区分外部/内部急停。

  • 外部自动配置:输出端-程序状态】用于外部系统(如PLC)进行外部启动程序后,监控判断ROB程序的执行状态以及机器人运动状态的状态信号。
    在这里插入图片描述

    • $PRO_ACT:( Process_Activated)这个信号反映CELL.SRC程序的实时运行状态。当机器人外部自动接口程序(CELL.SRC)启动运行后,信号置为1,当CELL程序跳转到其它子程序、cell运行停止时,信号复位为0。官方手册补充说明如下:
      • 当一个机器人层面上的过程激活时,始终给该输出端赋值。在处理一个程序或中断时,过程为激活状态。程序结束时的程序处理只有在所有脉冲输出端和触发器均处理完毕之后才视为未激活。
      • 在出现故障停机时,可区别下列几种情况:(根据英文版 “编辑”对应“processed”应该被翻译为“运行处理中”)
        • 当中断已激活,但在故障停机时还未得到编辑,则过程被视为未激活 ($PRO_ACT=FALSE)
        • 当中断已激活并且在出现故障停机时已得到编辑,则过程被视为激活 ($PRO_ACT=TRUE),直到中断程序被处理完毕或运行到 HALT (停止)($PRO_ACT=FALSE) 为止。
        • 当中断已激活并且程序运行到 HALT (停止),则过程被视为未激活($PRO_ACT=FALSE)。当某一个时刻后满足了中断条件时,则过程被视为激活 ($PRO_ACT=TRUE),直到中断程序被处理完毕或运行到 HALT (停止)($PRO_ACT=FALSE) 为止。
    • PGNO_REQ :(PGNO_Request)程序编号请求,当ROB请求外部系统(如PLC)发送新程序号时,信号置位为1,ROB收到程序号后执行对应子程序,子程序执行结束后ROB继续请求外部系统(如PLC)发送新程序号时,信号又置位为1。如果 PGNO_TYPE 值为 3 ,则 PGNO_REQ 无作用。
    • APPL_RUN:(Application_Run)反映ROB子程序运行状态。CELL程序跳转执行程序号对应子程序时,信号置位为1,执行完返回Cell程序后,信号复位为0。每个程序号对应的就是一个具体的应用程序。
    • $PRO_MOVE:(Program_move)机器人本体进行动作移动时,信号置位为1,机器人各轴停止运动时,信号复位为0。该信号是 $ROB_STOPPED 的取反。
  • 外部自动配置:输出端-机器人位置】用于外部系统(如PLC)进行外部启动程序后,监控ROB运动轨迹、运动位置等位置状态信号。
    配置-机器人位置

    • $IN_HOME:机器人运动到达预设定原点(全局点位HOME)位姿时,置位为1,离开复位为0;
    • $IN_HOME1~5: 机器人运动到达预设定原点1-5 ( 全局点位HOME1~5 )位姿时,置位为1,离开复位为0;最多可以额外设定5个起始原点位置。
    • $ON_PATH:机器人位于编程设定的轨迹上时,置位为1,离开轨迹、程序复位或选择了语句后复位为0。在进行了 BCO 运行后信号重新置位为1。但信号 ON_PATH 无公差范围,机器人一离开轨迹,该信号立即复位为0。
    • $NEAR_POSRET:上级控制系统可以通过该信号确定机器人在球体内是否位于在"POS_RET" 中保存的位置周围。上级控制系统可用该信息决定是否允许重新启动该程序。信号 NEAR_POSRET 无公差范围,用户可以在文件"CUSTOM.DAT"中通过系统变量 $NEARPATHTOL 定义球体的半径。默认 200MM。
    • $ROB_STOPPED:如果机器人停止运动了,信号置位为1。即使对于 WAIT 指令,在等待期间也置位该信号。该信号是 $PRO_MOVE 的取反。
  • 外部自动配置:输出端-运行方式】用于外部系统(如PLC)监控判断ROB所处与的运行模式状态信号。对应示教器上的4种模式切换。
    配置-运行方式

    • $T1:“测试1运行” 即 “T1模式” 手动慢速示教模式 ——TEST1
    • $T2:“测试2运行” 即 “T2模式” 手动高速示教模式 ——TEST2
    • $AUT:“自动运行” 即 “AUT模式” 自动可全速运行模式 ——AUTO
    • $EXT:“外部自动运行” 即 “AUT EXT模式” 外部控制的自动可全速运行模式 ——AUTO EXT

2.2 KUKA外部自动交互时序图——理解说明

KUKA不但制定了外部自动启动模式所需要的信号表,还给出了这些外部信号交互过程的逻辑时许图供外部系统控制器编程参考。不同应用场合、不同编程语言编写出来的程序可能各不相同,但只要最终这些关键信号按照时序图逻辑顺序收发则可以正常实现接口定义的各项功能。KUKA官方手册给出了6种操作情况下的交互时序图,每张时序图大致可以分为三部分,
第一部分:用于程序启动与调用子程序交互(图中绿色部分);
第二部分:用于系统停止故障报警与复交互(图中蓝色部分);
第三部分:系统运行启动前应该具备的基本前提条件(图中红色部分);
时序图中未带“$”符号的信号为非系统变量不反应机器人的实时系统状态,由ROB cell程序中外部自动交互程序P00()判断收发。
注意白色未划分部分不是信号变量,只是为了方便指示正常cell程序与App程序的运行情况,并不代表某个信号的0与1逻辑值。
PGNO/PGNO_PARITY 是一组信号变量,指示代表程序号与奇偶校验位在何时发送与清空,并不代表某个信号的0与1逻辑值。
三大部分划分大致如下:
在这里插入图片描述

  • 1-首次正常启动机器人程序运行 并 通过程序号调用对应应用子程序(使用PGNO_Valid信号):
    在这里插入图片描述

    • 第1阶段:PLC与KRC上电后,启动前必须事先准备好的状态条件,PLC侧编程应该判断这些准备条件到位后才能进行后续启动,建议启动前条件不满足进行对应的报警提示指示。
      • $USER_SAF(用户安全装置闭合):安全门、安全光栅等机器人工作区域内安全防护装置必须处于安全可靠关闭状态,确保工作区域内无人且不可随意进入。 该信号在手动下由机器人示教器“使能握杆”(确认开关)决定,在自动模式下由 X11接口>安全防护双回路决定。
      • $ALARM_STOP(急停报警):反映机器人实时急停状态,常闭信号。机器人没有任何急停报警触发的条件下才可以打开驱动器、启动机器人。
      • $MOVE_ENABLE(运行使能):由外部控制器PLC发出允许机器人运行使能条件。这是外部系统决定是否启动运行与停止运行的关键信号。除了安全急停触发紧急停止外,外部PLC需要在运行中途停下机器人运动只能通过断开此信号。
      • $PERI_RDY(驱动装置就绪):实时反映驱动器上电状态,驱动上电后才可以进行启动。驱动器上电必须在上面3个前提条件下才可以成功上电。可以在示教器上手动操作 或 外部系统通过$DRIVES_ON与$DRIVES_OFF配合进行上电。
      • $IN_HOME(在原点附近):机器人必须在HOME点上或在HOME点附近启动并在启动后自动运行至运动轨迹上。 所以一开始应该将机器人手动移动至Home点附近或在Cell初始化程序中直接执行BCO运动。
      • $ON_PATH(在运动轨迹上):可以在T1模式下选择Cell程序时执行BCO运动提前回到运动估计上。没有该信号只要保证在HOME附近也可以启动程序且会在首次启动后自动执行一次BCO运行到轨迹上。
    • 第2阶段:若驱动器未上电就绪,外部PLC可以远程通过这两个$DRIVES_ON与$DRIVES_OFF配合进行远程驱动上电操作。驱动打开信号。如果在此输入端上施加了持续至少 20 毫秒的高脉冲,则上级控制系统会接通机器人驱动装置。前提$DRIVES_OFF==TRUE。具体信号使用说明看上面【 2.1 KUKA外部自动交互信号——理解说明】。
    • 第3阶段:在外部自动模式下机器人未启动运行前本身就处于 停止运行报警状态需要提前复位故障信息才可以正常进行后续启动交互步骤。$CONF_MESS 上施加一个上升沿即可复位确认故障报警状态。
    • 第4阶段:启动激活Cell程序运行。所有启动条件都具备后,外部PLC即可通过$EXT_START信号的上升沿触KRC运行程序运行。首次启动从Cell.SRC开始运行程序运行后将同步激活$PRO_ACT信号置位为1,即表示程序启动完成并处于运行中。
    • 第5阶段:外部自动主函数Cell程序调用子应用程序。Cell程序运行到P00()发出程序号请求给外部PLC。PLC在收到$PGNO_REQ请求信号后发出 选定的程序号(PGNO)与对应的奇偶校验位(PGNO_PARITY),最后通过发出PGNO_VALID信号确认程序号与奇偶校验位发送完毕,KRC收到有效信号后开始进行程序号读取与奇偶校验。
    • 第6阶段:调用对应子应用程序完成具体动作任务。上一阶段验证程序号准确无误后,KRC自动判断跳转到对应子程序段,首先通过P00()反馈成功调用的程序编号紧接着就调用对应的EXAPLE.SRC应用程序。
    • 第7阶段:子程序运行结束返回Cell程序,之后循环请求程序号>再进入对应子程序从而不断地根据PLC需求自动完成PLC下发的所有动作任务。到此就完成外部自动正常启动交互的所有流程。
  • 2-首次正常启动机器人程序运行 并 通过程序号调用对应应用子程序(不使用PGNO_Valid信号):
    请添加图片描述

    • 第1~4阶段:与正常启动(使用PGNO_Valid信号)基本一致。
    • 第5阶段:程序号与奇偶校验位的确认 复用$EXT_START进行确认。流程无需$PGNO_VALID参与。
    • 第6~7阶段:与正常启动(使用PGNO_Valid信号)基本一致。
  • 3-安全防护打开停止运行后重新启动运行程序:
    请添加图片描述

    • 第1阶段:ROB在运行过程中意外打开了安全防护装置,KRC系统将立即报警并立即进行关闭驱动器、停止程序运行的的动作。此阶段采取脱离轨迹的直接立即刹车制动停机以确保人员安全。
    • 第2阶段:人员退出区域并恢复安全防护装置的闭合状态。
    • 第3阶段:(同正常启动)由于驱动器掉电了,需要进行驱动器上电激活操作,OFF信号保持置位不动,ON信号给出20ms的一个高脉冲即可触激活驱动器上电使能。只有驱动器使能后才可以进行后续程序启动流程。
    • 第4阶段:(同正常启动)故障信息复位阶段,通过CONF_MESS信号上升沿确认故障信息即可复位运行停止故障报警信息STOPMESS。只有复位停止故障信息后才可以进行后续程序启动步骤。
    • 第5阶段:(同正常启动)通过EXT_START信号上升沿触发启动继续运行KRC程序。
  • 4-紧急停止运行后重新启动运行程序:
    请添加图片描述

    • 第1~5阶段:ROB在运行过程中意外触发急停报警,KRC系统将进行有序停机流程。首先报警然后开始进行沿轨迹的减速刹车停止动作、停止程序运行、最后再关闭驱动器。此阶段不会脱离轨迹。
    • 第6阶段:操作人员接触内外部急停报警状态。
    • 第7阶段:(同正常启动)由于驱动器掉电了,需要进行驱动器上电激活操作,OFF信号保持置位不动,ON信号给出20ms的一个高脉冲即可触激活驱动器上电使能。只有驱动器使能后才可以进行后续程序启动流程。
    • 第8阶段:(同正常启动)故障信息复位阶段,通过CONF_MESS信号上升沿确认故障信息即可复位运行停止故障报警信息STOPMESS。只有复位停止故障信息后才可以进行后续程序启动步骤。
    • 第9阶段:(同正常启动)通过EXT_START信号上升沿触发启动继续运行KRC程序。
  • 5-运行使能条件断开后重新启动运行程序:
    请添加图片描述

    • 第1~3阶段:ROB在运行过程中外部运行使能信号MOVE_ENABLE突然关闭,KRC系统将进行报警并进行沿轨迹方向上的刹车制动动作,刹车动作完毕立即停止程序运行。此阶段不会脱离运行轨迹并且驱动器无需断电。
    • 第4阶段:外部系统重新置位打开运行使能信号MOVE_ENABLE。
    • 第5阶段:(同正常启动)故障信息复位阶段,通过CONF_MESS信号上升沿确认故障信息即可复位运行停止故障报警信息STOPMESS。只有复位停止故障信息后才可以进行后续程序启动步骤。
    • 第6阶段:(同正常启动)通过EXT_START信号上升沿触发启动继续运行KRC程序。
  • 6-用户编程停止运行后重新启动运行程序:
    请添加图片描述

    • 第1阶段:ROB在运行过程中通过程序代码主动停止机器人运行,KRC系统程序正常停止运行并且不会发出报警信息。此过程不会导致报警信息、轨迹偏离与驱动器掉电关闭。
    • 第2阶段:(同正常启动)通过EXT_START信号上升沿触发启动继续运行KRC程序。

2.3 KUKA外部自动接口程序 cell.src——理解说明

下面展示主程序Cell.src 源代码结构

  • 示教器显示如下图:
    请添加图片描述

  • WorkVisual显示如下图:
    请添加图片描述
    注意下面以示教器显示图中行号进行简单说明】

  • 程序行1——CELL()
    CELL()程序是KUKA官方提供的外部自动模板程序,是外部自动运行接口调用的主程序,用户只需要将自己的任务子程序放在对应接口处调用即可。为何KUKA工程师为何取名CELL?为何不用Main()定义?我开始也不解,比较好奇的我找了各种线上线下资料都没有结果,后来在DeepSeek上问了下,回答比较长感觉也有几分道理吧,DeepSeek总结说:
    “CELL程序”的名称源于制造业中独立生产单元的概念,既体现了模块化设计的工程思想,也借用了生物学中“细胞”的隐喻(独立、自洽、可扩展)。这种命名方式符合工业自动化的通用术语规范,便于跨团队协作和技术交流。"
    有兴趣的盆友也可查查考古下作者原意。

  • 程序行6——INI
    CELL程序初始化,外部自动接口程序中的一些变量的初始化。展开看的话很简单主,要是一个DYM[3]三字符数组的声名定义以及给变量DMY[3]初始化值"—"。DMY字面上看好像不容易理解,但看了P00()程序对这个变量的使用应该就能明吧,这个数组用来存储外部自动错误处理过程中的标识字符串,默认是“CTL”为停止信息报警,“P00”为应用程序报警。DMY变量名缩写来源也没有查到官方说明,但是在微软的Copilot识别理解中翻译为Dummy的缩写,在高级语言中Dummy通常用来表示程序中的未实现的空函数或空定义。

  • 程序行7—— BASISTECH INI
    运动过程中的基本运动参数配置以及一些必要中断的声名与启用。展开看的话也比较简首先声明了一个全局中断3,并通过系统基本配置函数BAS()初始化运动参数。

  • 程序行8~9—— CHECK HOME
    原点位置检测,在自动运行时检测机器人当前位姿是否处于原点位置,如果在T1/T2模式下直接跳过检测直接运行下行的PTP HOME指令进行手动回原点动作。此逻辑防止在机器人自动运行时在非轨迹处运行程序导致碰撞事故,确保机器人自动运动轨迹从原点开始。可以理解为是一个软件程序上的防呆措施。

  • 程序行10—— AUTOEXT INI
    外部自动交互初始化,展开就一行通过P00()执行外部自动初始化流程,进一步查看P00源代码可知其主要是对外部自动的交互信号配置及状态进行合法有效性检查,以及置位/复位交互信号为初始状态。

  • 程序行11~30—— BASISTECH INI
    上半部分是所有的初始化步骤,这个部分就是CELL程序的主循环。循环获取判断外部程序号,并调用对应子程序完成预定动作任务。外部自动正常运行后一直是在这个循环中,除非异常退出跳转重新启动,否则不应该在主循环外。跳出主循环外部自动将无法运行,需要手动复位后重新启动。

  • 程序行12—— P00(…,#PGNO_GET,…)
    请求程序号:外部自动交互时序在这个专用函数内部实现。转至声名可以看到其包含 发出程序号请求、程序号校验、程序号解析、程序号反馈等一系列 外部自动启动的关键时序逻辑。这一行配合后面的SWITCH语句实现程序号获取+程序号选择执行功能。

  • 程序行13~29—— BASISTECH INI
    获取的程序编号值保存在全局变量PGNO内,通过SWITCH进行编号匹配选择任务程序号,其中每个CASE 1~255 对应最多255个程序号,用户根据项目需求自行复制CASE程序段进行补充扩展。未使用的程序号或者无效的程序号通过DEFAULT 默认程序段进行异常编号处理与报警提示。

  • 程序行15~17—— CASE xx
    正常跳转到CASE语句后将首先执行P00(…,#PGNO_ACKN,…)进行程序号调用成功反馈。找到程序定义可知主要是复位程序号请求信号以及置位APPL_RUN应用程序运行状态标志位。反馈后下一步直接调用跳转到对应的“EXAMPLE1()”任务程序中去。这里由于是提示用户接口使用的作用,并未声明定义实际的函数体,所以注释掉了,需要时删除分号取消注释,将函数名称修改为自己定义好的任务子程序即可完成CELL程序调用接口的配置。

  • 程序行27~28—— DEFAULT
    若收到的程序号超出定义的范围则会执行DEFAULT程序段,在默认程序段中首先通过P00(…,#PGNO_FAULT,…)产生程序号错误报警,然后复位程序号请求"PGNO_REQ"。这个是必要的,否则程序号不存在会导致外部自动一直请求程序号,且程序号异常无法报警提示甄别。

2.4 KUKA外部自动交互流程整体分析理解

如果仔细看完上面这一节内容会觉得整个交互流程还是比较繁琐复杂的。首先学习理解 交互信号定义、然后学习理解信号交互时序图、最后是看懂CELL.SRC基本设计框架。如果你不想了解那么仔细,也不需要看上面这一节。设计这套交互标准的工程师也会考虑实用性与可操作性,当然使用上也不会太麻烦。这些交互信号与时序程序已经集成在系统自带的模板中了,对于机器人侧只需要配置好信号与最终调用接口即可,外部控制系统(如PLC、PC)官方似乎未给出标准模板,编程人员需要根据交互时序图进行交互程序的编写测试。具体使用配置步骤在下面两节说明。

3. KUKA外部自动程序模板——使用步骤

PN设备站通讯——组态配置

首先第一点保证机器人与外部系统能进行正常的通讯,这是外部系统能控制机器人的前提。机器人需要根据外部系统使用的通讯协议(TCP、RS485、Profinet、Ethcat等甚至可以是IO信号线交互)配置好通讯软硬件接口,这就是设备的组态配置。这里以我常用的Profinet协议组态配置为例进行说明。已经在另外一篇文章【KUKA PROFINET通讯配置——作为设备站】进行分享,参考其第一部分即可。

外部自动系统变量配置

与外部系统通讯配置测试完毕后,接下来就是进行外部自动交互信号与通讯数据点位进行关联映射了。机器人工程师与外部接口设计工程师一同协商确定好需要那些关键信号以及这些信号对应那些数据点位,最终指定一个交互信号表。机器人侧根据这个制定的交互信号表在示教器上依次进入 主菜单>配置>输入输出>外部自动信号(注意登录到专家或管理员权限下操作),即可进入一个配置表>>点击左下角编辑按钮>>即可对配置值进行修改>>退出编辑后自动生效。在这里如果按照我的模板进行配置可以参考我的另一篇文章【KUKA-交互信号表模板——使用说明3。如果需要对交互信号注释信息进行批量快速导入可以参考我的另一篇文章【KUKA-交互信号表模板——使用说明4

在这里插入图片描述

如果需要在WorkVsual-IDE中进行配置的话也是可以的,因为需要修改系统配置文件,不熟悉的人员不建议这样操作,否则容易不小心改错,导致一些不可预料的故障与风险。配置文件在KRC:\R1\System$config.dat数据文件中的第二个折叠项下
在这里插入图片描述
展开【AUTOEXT GLOBALS】折叠后,可以看到关键的外部自动交互信号配置项的值以INT全局变量初始化赋值实现。
在这里插入图片描述

创建&编写用户程序

根据KRC程序框架结构,在机器人【Files】选项卡中依次展开对应控制器下的工程目录树KRC:\R1 右击R1文件夹新建一个用户应用程序文件夹APP,右击APP文件夹点击【+Add…】选则Module模板(注:需要添加项目编目后才有模板),创建动作模块程序。这里创建三个空模板程序,通过联机表单【inLine Form】编写简单动作程序。
在这里插入图片描述
这里我编写了三个测试程序 画一个圆、画一横直线、画一竖直线。检查无语法错误后,下载到机器人系统进行手动位置示教与轨迹动作运行测试。在这里插入图片描述

CELL程序接口配置(调用子程序)

完成各动作子程序编辑后根据动作编号,将全局可调用的动作程序填写在CELL调用接口处。
在这里插入图片描述

编译下载&点位轨迹示教&手动运行测试

编译无误后将项目工程传输到机器人控制器中。(这里需要示教器上登录到专家及以上权限才可进行传输下载)
在这里插入图片描述
传输完毕后,在示教器上进行点位示教与手动运行测试。

调用Cell程序&切换为外部自动模式

机器人在完成上述步骤后没有报警,位姿处于非干涉位置,将机器人切换到T1模式,选择 R1\Cell.SRC主程序>>调整合适程序运行速率>>按住使能按钮与运行键进行首次回原点动作>>待提示已到达BCO点时释放按键>>将机器人切换为EXT_AUT外部自动模式,机器人处于等待外部系统发送程序状态。至此机器人侧所有准备工作完成,接下来就是外部系统PLC的工作了。

4. PLC外部自动运行程序模板——设计说明

一般情况下对于一台工业机器人,PLC侧主要实现对机器人控制系统的 启动/停止、驱动使能/失能、动作程序选择启动与暂停/停止、故障报警与复位、运行状态位姿的监控与保护。PLC工程师根据KUKA外部自动交互信号表与交互时序图编写机器人外部自动控制程序,虽然信号与时序官方都规定好了,但是编程的方式与具体代码实现并不统一。这里以我自己项目上常用的一种外部自动运行启动方式设计了一个比较通用的模板程序。

实现的外部控制操作方式

  1. 外部系统通过【复位键】复位机器人故障信息。
  2. 输入【程序号】 点击【启动按钮】即可启动机器人运行相应动作程序需。
  3. 机器人动作完成后回到原点等待下一次外部启动。
  4. 外部系统故障、异常、危险需禁止机器人启动时,外部可以控制机器人的使能信号立即停止机器人动作。
  5. 外部系统可以获取监控机器人当前的 运行模式、位置轨迹状态、驱动器状态、急停报警状态、程序运行状态、通讯状态等。

工程结构&调用层次关系说明

工程结构

在这里插入图片描述
在我们的项目中需要用到机器人外部自动的工艺流程程序中:

  • 首先调用“ROB-IO-Mapping[FC9]”实现快速对机器人组态的数据映射到ROB-IN[DB9],ROB-OUT[DB10]中方便后期交互程序使用。
  • 然后调用“AUTO-EXT-KUKA[FB100]”标准模板块实现机器人的外自动交互逻辑。
  • 再将映射的IO数据中打包好的结构体填入外部自动块中引脚接口中,补充系统时钟周期信号、控制信号等即完成整个调用流程。

外部自动交互信号结构体说明

在这里插入图片描述
这里定义了两个PLC数据类型 KUKA-EXT-IN、KUKA-EXT-OUT(有点类似C语言的结构体,描述中我就称其为结构体了),分别对应交互信号模板表的前32位固定的外部自动交互信号。由于交互信号表统一制定后前32位就不动了,使用上也是数据地址顺序也固定的对齐,因此十分符合一起打包成一个标准的结构体类型。这样带来的好处有:外部自动接口十分简化简洁、交互信号作为一组变量进行拖动引用十分方便、结构化方便交互数据映射时顺序严格对齐,避免了手动单一信号拖动低效、顺序易错、逻辑散乱不统一、不标准的缺点。
其中程序号地址在前16位且进行了预留,把一些不关键的信号放在16位内供选用。这是为了在兼容8-16位程序号的使用时,可以启用预留位置以及取消不关键的信号,其它信号改动很小的情况下快速切换为8位以上的外部自动模板程序。这里我的模板以最常用的8位程序号进行设计。
在模板使用过程中可以不用关注结构体的细节,直接调结构体实现底层信号整体拖动使用就行。

FB函数-块接口说明

Input(输入接口)

在这里插入图片描述
块调用时需要给出的输入信号与输入数据 ,这里是用户调用块启动机器人时的关键输入信号。

  • Enable:机器人的使能信号,只有使能情况下机器人才能进行手自动运行机器人操作,外部系统通过这个输入信号启用禁用机器人运行。一些安全性或保护性逻辑可以考虑用关联这个信号控制机器人的可靠停止运行。
  • Reset:机器人运行过程中的一些故障报警可以通过这个输入信号的上升沿进行复位,同时可以重新给驱动器上电。
  • EXT-Start:机器人程序处于停止运行,在没有故障的情况下可以通过这个信号启动/继续机器人程序运行。
  • PGNO与PGNO-Send 主要时是控制程序号的选择与发送的。根据PLC工艺流程给出程序编号,在满足程序号发送条件时给出允许发送信号,若无需条件直接给程序立即执行则可不使用这个PGNO-Send信号,直接输入常1信号即可。
  • ROB-EXT-OUT结构体:ROB输出发送给PLC输入的外部自动交互信号。是根据机器人硬件组态配置打包封装好的结构体变量,按照定义好的数据类型拖到接口上即可,块调用时无需关注与改动。底层内部信号不对外不程序开放,一般在HMI上也不允许读写,所以取消了HMI写权限,但考虑到维护调试过程中HMI需要监控底层交互信号状态,因此保留了读权限。

输入接口的形参数考虑直观性我一般按照如下规则排列变量接口:

  1. 按照简单位变量在上、复杂数据变量在前原则。
  2. 相关联参数变量就近原则。
  3. 工艺流程中使用频率高的关键信号在上,不常用的在下。
  4. 软件调用时的接口参数在上,与硬件组态相关的IO信号数据在下。

Output(输出接口)

在这里插入图片描述

  • ROB-EXT-IN结构体:PLC输出发送给的ROB输入的外部自动交互信号。是根据机器人硬件组态配置打包封装好的结构体变量,按照定义好的数据类型拖到接口上即可,块调用时无需关注与改动。底层内部信号不对外不程序开放,一般在HMI上也不允许读写,所以取消了HMI写权限,但考虑到维护调试过程中HMI需要监控底层交互信号状态,因此保留了读权限。

InOut(输入输出接口)

在这里插入图片描述
这个外部自动模板设计中没有既需要读也需要写入的接口数据,所以未定义。在之前的版本中我把外部自动的IO信号组合并打包封装起来,因此会放在这个接口上。后来发现输入输出分开打包会方便前期对组态IO的灵活映射,也符合“FB接口对信号读写区分以防止对输入信号的误写入操作”的设计理念。因此这里还是对信号组进行了拆分。

FB函数-局部数据说明

在这里插入图片描述

Static(静态数据)

这部份主要是一些内部状态和定时器、脉冲记录位等数据,这些数据对HMI是不可写的内部数据,所以取消了HMI的写权限。

  • WTD-OverFlow:通讯心跳检测到看门狗超时溢出则会置位这个信号,直到通讯心跳周期正常才可以通过复位输入复位这个溢出状态。
  • EXT-AUTO-Runnig:通过程序判断得到的机器人程序实时运行的状态,程序正常运行中置1,任何情况下停止运行复位为0。
  • PGNO-Now:程序记录的当前已经运行的程序号。供参考可能不同步,因为无法判断机器人在手动模式下取消切换过程序。正常自动运行情况下应该是同步的。
  • STATUS[]:程序提取机器人的所有状态位构成的状态数组。外部需要知道机器人的状态数据可以通过读这个状态数组实现。

Temp(临时数据)

块内部程序过程中的一些中间信号数据。可以不用关注。

Constant(常量)

外部自动程序段设计分析

在这里插入图片描述
整个外部自动交互模板程序块大致分为4部分共22段程序实现。

  • 第1段:实现对机器人通讯状态的检测,已检测机器人交互是否出现通讯中断或卡机超时等情况。
  • 第1-3部分:最主要的外部自动交互时序的实现,这里没有用步序实现,而是通过简单逻辑条件判断的方法实现,我觉得这样更加简洁灵活。其中第1部分主要是启动机器人前的基本运行条件的复位开通交互逻辑。第2部分是启动机器人程序运行的交互逻辑。第3部分则是机器人程序号验证触发交互逻辑的实现。这三个阶段也就是机器人启动时序的三个阶段。
  • 第4部份主要是通过外部自动反馈信号分析判断整合出机器人的状态信号数组,方便用户快速获取机器人全部状态信息。

程序段1:

在这里插入图片描述
如果机器人没有反馈脉冲则定时器将一直接通递增计时直到超时时间到达,此时TON.Q将输出并置位一个定时器溢出状态位,也就是通讯交互异常位。通过复位可以复位这个故障。所以机器人心跳脉冲上升沿必须在定时器溢出时间(PT=1S)之前出现一次复位定时器,也就是心跳脉冲周期必须在1S内才不会溢出,且由于是上升沿检测心跳必须不断重复出现。这个就类似单片机中的软件看门狗WTD,所以我也称其为看门狗吧。

程序段3:

在这里插入图片描述

程序段4:

在这里插入图片描述

程序段5:

在这里插入图片描述

程序段6:

在这里插入图片描述

程序段8:

在这里插入图片描述

程序段9:

在这里插入图片描述

程序段11:

在这里插入图片描述

程序段12:

在这里插入图片描述

程序段13:

在这里插入图片描述

程序段15:

在这里插入图片描述

程序段16:

在这里插入图片描述

程序段17:

在这里插入图片描述

程序段18:

在这里插入图片描述

程序段19:

在这里插入图片描述

程序段20:

在这里插入图片描述

程序段21-22:

在这里插入图片描述

5. PLC程序模板——使用步骤

1.KUKA PN通讯设备站——硬件组态配置

1.1导入GSD(通用站描述文件)文件

已经在另外一篇文章【KUKA PROFINET通讯配置——作为设备站】进行分享,参考其第二部分第1节即可。

1.2组态设备网络连接

已经在另外一篇文章【KUKA PROFINET通讯配置——作为设备站】进行分享,参考其第二部分第2节即可。

1.3组态设备子模块

已经在另外一篇文章【KUKA PROFINET通讯配置——作为设备站】进行分享,参考其第二部分第2节即可。

2. KUKA外部自动模板程序——标准块调用与编程

2.1 导入项目库

TIA个人库压缩文件下载链接外部自动模板库,下载后通过博图打开解压,再通过下面步骤导入博图库中进行调用,具体库使用方法参考官方文档5
在这里插入图片描述
其中:“以只读方式打开”默认勾选代表库只能打开调用不能修改更新库,若需要自行编辑修改模板库程序可以取消这个勾选框。

2.2 调用模板程序块&模板数据类型

打开模板库后,展开找到对应分类下的三组库模板程序文件。如下图,将需要的相关库文件拖入工程对应目录即可将模板导入工程并进行快速调用。库卡外部自动块与IO数据类型是以类型的库文件形式管理的,IO映射是以模板副本的方式存入库中的,使用方式都差不多拖入工程树对应组下即可使用,不同的是库类型可以进行版本控制记录。
在这里插入图片描述

2.3 创建工程结构分组&用户工艺流程程序块

这里以我的个人编程框架举例,可以不按照我的工程结构进行划分组。依次新建一个工艺设备组“3-1 ROB(机器人)”、“设备驱动控制块”、“EXT-AUTO(外部自动)”、“IO-Mapping(PN-IO映射)”。在工艺设备组“3-1 ROB(机器人)”下新建一个自动化块“ROB-AUTO”与其对应的DB数据块。自动化块也就是该设备在一个系统中的自动化运行流程逻辑实现的地方,这里就包含了自动流程、手动操作、设备对象间交互、底层功能块的调用。IO映射、外部自动启动作为机器人设备的一个底层驱动功能在这里进行调用。创建后的工程结构效果如图下所示
在这里插入图片描述
我会习惯将与整体系统流程无关的设备基础功能进行标准化、模块化的打包封装,然后将其单独放在“设备驱动控制块”组进行折叠。这样就可将整个系统需要频繁调试的运行流程统一在AUTO块中集中实现管理,而调试过程中已经相对稳定可靠、标准统一、无关工艺的模块化功能折叠起来十分简洁美观。易于编程上的 结构化、模块化、层次化、易读易懂易教。

2.5 设计用户工艺流程逻辑程序

这里我以一个简单的HMI界面模拟实体按键操作,演示单站手动 使能启动、程序切换、复位故障等基本的外部自动运行应用需求。

HMI界面设计

在这里插入图片描述

PLC用户程序结构:外部自动基本功能测试

在这里插入图片描述

程序分段说明:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.6下载测试验证

这个功能模块已经在实际项目中30多台KUKA机器人上测试稳定运行基本没有什么问题,上面的的简单测试工程编译通过暂时没有下载到实际设备中进行演示验证,后续有时间再实测录一个时评进行分享。测试工程内有1200与1500两的一样的测试组态与编程,方便不同硬件环境下测试。测试工程归档压缩文件下载链接KUKA-TEST-V17.zap17测试工程
在这里插入图片描述

6. 总结

不同项目、不同公司、不同工程师、不同编程习惯 会有不同的实现方式。机器人侧我也看到有很多项目直接跳过官方的CELL程序模板自行设计一个动作程序调用方式。PLC侧也有用SCL语言写的、也有用步序来写的。不管以何种方式 只要稳定可靠都行。对于大项目 批量工程中 对于这种通用的功能程序 还是 应该做到 模块化、标准化、简洁化 。程序没有十全十美,只有对于程序 不断优化、学习传承、使用更新迭代才能跟趋于完美。一份模块化、标准化、注释清晰、设计思路解释明确、使用说明详细、机器人侧、PLC侧 配套数据表格资料齐全的 程序模板才是一个完备的标准模板程序吧。
在工程项目实践中我时常发现很多可重复使用的设备功能、程序算法 没有一个统一简洁的模板程序。有些统一的模板程序缺乏相关的详细注释、使用说明与配套资料 导致其他工程师使用时十分麻烦、迷惑、有问题时难以更进一步的学习、理解、优化,所以就导致很多统一的模板无法推广传承、学习交流、更新迭代、优化升级。

根据自己的理解与经验设计一套比较系统完整的技术资料与博客,自我感觉算是比较完整了吧,希望在我今后的项目上能用得上。在自己技术行业内,能帮到各位同行从而发挥出一些技术分享价值吧。

终于系统的写完了这篇技术文档,从去年10月份有这个想法开始,到今年3月初结束,近5个月的时间。期间 需要在项目上抽空余时间 进行设备测试、反复看手册资料,边学边测、边写配套资料程序 ,真的要把一个稍微复杂点的技术环节表达完备清楚是件不容易的事情。好几次想放弃写这个费时费力、费脑子的文章了。当然我也是有些 拖延、懒散 的好习惯的,有时候没灵感那就不想按计划行事了,该吃吃、该喝喝、该玩玩。工作之余的时间总该随意点吧。

最后还是: 如发现疏漏错误之还请批评指正,欢迎一起学习交流讨论!

参考资料:


  1. KUKA PROFINET通讯配置——作为设备站 ↩︎

  2. KUKA 集成商开发手册 ↩︎

  3. KUKA-交互信号表模板——使用说明 ↩︎

  4. KUKA-WorkVisual长文本快速配置表模板——使用说明 ↩︎

  5. TIA Portal 库基本介绍-西门子官方 ↩︎

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值