发布时间: 2026-01-15

CNC上下料(无视觉引导)


1. 简介

此文档做一个CS机器人机床上下料示例(不带视觉),机器人到固定位置取料,再放料码垛。

2. 项目开始前准备工作

2.1 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.2 硬件连接

2.2.1开机/远程开机

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

2.2.2急停

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

2.2.3网口

2.3 机器人配置

2.3.1机器人基本配置

1. 安装方式(默认正装)

2. 负载设置(设置负载和重心,如设置不正确,会影响拖动效果和碰撞灵敏度)

3. 根据需求看是否需要设置工具坐标

4. 根据需求看是否需要设置用户坐标

2.3.2通讯配置

步骤:

1. 点击右上角艾利特logo,选择设置,找到网络,设置IP地址

 

2. 打开配置选项卡,选择profinet,点击启用,如果PLC需连接多台机器人务必更改设备名称,否则开机PLC会报错需要重新配置,profinet详细配置可查看另一篇文档《CS机器人profinet通讯配置》

 

2.3.3 IO配置-安全原点信号

安全原点信号即机器人在原点会自动输出一个信号,安装高级IO配置插件后可以输出为布尔量,无需配置到 “可配置IO”

1.设置原点,新定义一个原点

2.参考原点选择刚才建好的原点,点击应用。

3.I/O里选择输出布尔寄存器,选中前面IO表定义好的布尔量将名字重命名,如果这里不重命名,后续在I/O高级配置插件中无法找到此信号。

4.在I/O高级配置中找到重命名后的布尔量选择需要输出的内容,选择触发模式。

同理,按照此方式,将其余定义好的输入输出信号一一配置好。

2.3.4 主程序和释放抱闸配置

在启动选项卡配置开机自动加载任务文件,即主程序

自动释放抱闸配置后,机器人收到这个上升沿信号后,会依次打开电源,释放抱闸,若已经打开电源,会直接释放抱闸

注:配置界面启动内的启动任务数字输入可不配置,建议大家使用IO高级插件来配置启动、停止等信号

2.4启动时序

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处理),取料完成后设置完成信号等于高。

等待允许放料信号后,将取料完成信号置为低,开始一个简单的码垛子任务(码垛编写方法详见码垛手册,此文档只做整体案例示例)。

码垛任务中嵌套气缸动作信号,完成后回原点,输出一个放料完成信号的脉冲。

提交反馈