发布时间: 2026-01-15

CNC上下料(无视觉引导)


1. 简介

本方案为无视觉引导的 CS 机器人机床上下料应用,采用固定点位抓取、固定点位放置模式,完成机床加工工件的自动上料、下料及成品码垛作业。机器人通过预设坐标点位运动,无需视觉识别与定位,流程简单、稳定性高、调试便捷,适用于工件规格统一、来料位置固定、码垛规则固定的自动化加工场景。

2. 项目开始前准备工作

2.1流程示意图

2.2 IO表及通讯协议定义

目前工业环境中与外围设备有许多通讯方式如:Profinet、Ethernet/IP、ModbusTCP等总线通讯,也有socket套接字,Tcp\IP等无协议通讯,若不使用通讯也可以采用硬接线的方式定义IO,选择适合自己的方式最重要,此文档举例使用总线通讯。
布尔寄存器
PLC>-ROBOT
重命名
ROBOT>-PLC
重命名
GP_bool_in[0]
启动任务
GP_bool_out[0]
吸真空
GP_bool_in[1]
暂停任务
GP_bool_out[1]
破真空
GP_bool_in[2]
停止任务
GP_bool_out[2]
取料完成
GP_bool_in[3]
自动释放抱闸
GP_bool_out[3]
放料完成
GP_bool_in[4]
备用
GP_bool_out[4]
 
GP_bool_in[5]
备用
GP_bool_out[5]
安全原点信号
GP_bool_in[6]
备用
GP_bool_out[6]
 
GP_bool_in[7]
吸真空负压反馈
GP_bool_out[7]
 
GP_bool_in[8]
允许取料
GP_bool_out[8]
 
GP_bool_in[9]
允许放料
GP_bool_out[9]
 
整数寄存器
GP_Int_in[0]
任务号
GP_Int_in_out[0]
与PLC定义的报警输出代码
1. 吸真空超时
2. 破真空超时
3. 机器人不在安全位
4. (根据需求自定义)
注:机器人当前状态可从寄存器中直接读取,因此无需配置到布尔量中,如下图

2.3 硬件连接

2.3.1开机/远程开机

开机可以选择按示教器按钮也可12V与ON接通开机。

2.3.2急停

急停为冗余双回路,若不需要外部急停则短接24V与EI0和24V与EI1。

2.3.3网口

2.4 机器人配置

2.4.1机器人基本配置

1. 安装方式(默认正装)
2. 负载设置(设置负载和重心,如设置不正确,会影响拖动效果和碰撞灵敏度)
3. 根据需求看是否需要设置工具坐标
4. 根据需求看是否需要设置用户坐标

2.4.2通讯配置

步骤:
1. 点击右上角艾利特logo,选择设置,找到网络,设置IP地址
 
2. 打开配置选项卡,选择profinet,点击启用,如果PLC需连接多台机器人务必更改设备名称,否则开机PLC会报错需要重新配置,profinet详细配置可查看另一篇文档《CS机器人profinet通讯配置》
 

2.4.3 IO配置-安全原点信号

安全原点信号即机器人在原点会自动输出一个信号,安装高级IO配置插件后可以输出为布尔量,无需配置到 “可配置IO”
1.设置原点,新定义一个原点
2.参考原点选择刚才建好的原点,点击应用。
3.I/O里选择输出布尔寄存器,选中前面IO表定义好的布尔量将名字重命名,如果这里不重命名,后续在I/O高级配置插件中无法找到此信号。
4.在I/O高级配置中找到重命名后的布尔量选择需要输出的内容,选择触发模式。
同理,按照此方式,将其余定义好的输入输出信号一一配置好。

2.4.4 主程序和释放抱闸配置

在启动选项卡配置开机自动加载任务文件,即主程序
自动释放抱闸配置后,机器人收到这个上升沿信号后,会依次打开电源,释放抱闸,若已经打开电源,会直接释放抱闸
注:配置界面启动内的启动任务数字输入可不配置,建议大家使用IO高级插件来配置启动、停止等信号

2.5启动时序

1.远程开机或者示教器点击开机按钮
2.PLC读到机器人电源关闭状态给机器人发送打开电源,等待机器人打开电源信号、发送自动释放抱闸信号,等待反馈抱闸已释放信号
3.读到机器人抱闸释放完成信号情况下,给机器人一个启动信号,收到机器人反馈运行中,关掉 启动信号
4.如需要程序重新开始,则给机器人停止信号,机器人反馈停止中,关闭停止信号,再给机器人启动信号,机器人反馈运行中,再关闭启动信号

3. 程序编程

下面提供一个脚本,可放在程序开头执行一次,方便后续调用某些函数:
def SetPara():
  #      Alarm 1---吸真空超时
  #                   2---破真空超时
  #                   3---机器人不在安全位
  global alarmRegister_int,startRegister_bool,connect1
  alarmRegister_int=0
  startRegister_bool=0
  connect1=False
end 
def Alarm(alarm_No):
  SetPara()
  write_output_integer_register(alarmRegister_int, alarm_No)
  textmsg("机器人报警中,等待启动信号")
  while read_input_boolean_register(startRegister_bool) == False:
    sleep(0.01)
  end
  write_output_integer_register(alarmRegister_int, 0)
  textmsg("机器人已启动")
end
 
 
def ResetBool(startAddress,endAddress): 
    address = startAddress
    while (True):
        write_output_boolean_register(address,False)
        address = address + 1
        if address > endAddress:
            break
        end
    end
end
 
def ResetInt(startAddress,endAddress): 
    address = startAddress
    while (True):
        write_output_integer_register(address, 0)
        address = address + 1
        if address > endAddress:
            break
        end
    end
end
 
def ResetFloat(startAddress,endAddress): 
    address = startAddress
    while (True):
        write_output_float_register(address, 0)
        address = address + 1
        if address > endAddress:
            break
        end
    end
end

3.1 框架介绍

开始前任务只运行一次,结束后在主程序里一直循环。
Function.scrip:脚本内可能有项目所需要使用的脚本。
初始化任务:初始化变量以及信号
回原点:回原位程序
初始化:复位布尔寄存器0-3,吸真空、破真空、取料完成和放料完成
复位整数寄存器报警代码
建立干涉区后,通过干涉区判断机器人当前位置,来写回原逻辑,若都不满足则报警输出到PLC,机器人不在安全位(具体需求可根据项目实际情况写)。
机器人主任务使用开关指令程序看起来更加简洁直观(此程序中“任务号”是一个变量,程序逻辑在机器人端,也可以把“任务号”关联到整数寄存器,让PLC写逻辑,机器人只执行)
取料:取料程序
放料:放料码垛程序
2.13版本后新增了偏移节点和等待超时的指令,可以灵活运用到程序里。
等待PLC允许取料后,进行取料(检测真空超时后报警输出PLC处理),取料完成后设置完成信号等于高。
等待允许放料信号后,将取料完成信号置为低,开始一个简单的码垛子任务(码垛编写方法详见码垛手册,此文档只做整体案例示例)。
码垛任务中嵌套气缸动作信号,完成后回原点,输出一个放料完成信号的脉冲。
提交反馈