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