|
楼主 |
发表于 2025-5-22 02:52:03
|
显示全部楼层
'/////////////////////////////////////////////////////////////
'*/项目:XYO-A02 叶片上料 /*
'*/项目工程师: zhou Tel:136****7606 /*
'*/项目启动时间:2024/3/10 /*
'/////////////////////////////////////////////////////////////
'*/机械手系统IP:192.168.61.23.1030(系统指令&编程) /*
'*/机械手通讯IP:192.168.61.23.2030(PLC通讯) /*
'*/机械手通讯IP:192.168.61.42.8500(相机通讯) /*
'/////////////////////////////////////////////////////////////
'
'***************************SO输出信号说明****************************
'SO2(0):取料完成1 SO3(0):初始化正常结束
'SO2(1):取料完成2 SO3(1):初始化异常结束
'SO2(2):取料完成3 SO3(2):
'SO2(3):取料完成4 SO3(3):
'SO2(4):放料完成1 SO3(4):
'SO2(5):放料完成2 SO3(5):
'SO2(6):放料完成3 SO3(6): 抖料盘触发
'SO2(7):放料完成4 SO3(7):
'
'SO4(0):快换盘阀去基本位 SO5(0):取料3阀去基本位
'SO4(1):快换盘阀去工作位 SO5(1):取料3阀去工作位
'SO4(2):旋转气缸去基本位 SO5(2):取料4阀去基本位
'SO4(3):旋转气缸去工作位 SO5(3):取料4阀去工作位
'SO4(4):取料1阀去基本位 SO5(4):吸真空1去基本位
'SO4(5):取料1阀去工作位 SO5(5):吸真空1去工作位
'SO4(6):取料2阀去基本位 SO5(6):吸真空2去基本位
'SO4(7):取料2阀去工作位 SO5(7):吸真空2去工作位
'
'SO6(0):油脂1阀输出 SO7(0):快换盘异常报警
'SO6(1):油脂2阀输出 SO7(1):连续取料失败提示(上升沿接收黄灯提示不停机)
'SO6(2):油脂3阀输出 SO7(2):连续NG报警输出(上升沿接收红灯报警提示需复位)
'SO6(3):旋转气缸去工作位 SO7(3):
'SO6(4):毛刷转动输出 SO7(4):
'SO6(5):扫码请求 SO7(5):
'SO6(6): SO7(6):
'SO6(7): SO7(7):
'
'SO10():发料号(编号)
'SO11():快换盘放完(编号)
'SO12():快换盘取完(编号)
'SO13():预留数字输出
'***************************SI输入信号说明****************************
'SI2(0):允许取料1 SI3(0):物料感应1(抓手1)
'SI2(1):允许取料2 SI3(1):物料感应2(抓手2)
'SI2(2):允许取料3 SI3(2):物料感应3(抓手3)
'SI2(3):允许取料4 SI3(3): 中转感应器1
'SI2(4):流线允许放1 SI3(4): 中转感应器2
'SI2(5):流线允许放2 SI3(5): 中转感应器3
'SI2(6):流线允许放3 SI3(6): 抖料盘已就绪
'SI2(7):流线允许放4 SI3(7):
'
'SI4(0):快换盘阀在基本位 SI5(0):取料3阀在基本位
'SI4(1):快换盘阀在工作位 SI5(1):取料3阀在工作位
'SI4(2):旋转气缸在基本位 SI5(2):取料4阀在基本位
'SI4(3):旋转气缸在工作位 SI5(3):取料4阀在工作位
'SI4(4):取料1阀在基本位 SI5(4):吸真空1在基本位
'SI4(5):取料1阀在工作位 SI5(5):吸真空1在工作位
'SI4(6):取料2阀在基本位 SI5(6):吸真空2在基本位
'SI4(7):取料2阀在工作位 SI5(7):吸真空2在工作位
'
'SI6(0): SI7(0):
'SI6(1): SI7(1):
'SI6(2): SI7(2):连续NG接收复位
'SI6(3): SI7(3):
'SI6(4): SI7(4):
'SI6(5): SI7(5):
'SI6(6): SI7(6):
'SI6(7): SI7(7):
'
'SI10():收料号(编号)
'SI11():收换盘放完(编号)
'SI12():收换盘取完(编号)
'SI13():预留数字输入
'########################## 点位说明 #############################
'P0:HOME
'P1: 预留
'P2: 取料侧过渡点(正常手系)
'P3: 放料侧过渡点(正常手系)
'P4: 取料侧过渡点(相反手系)
'P5: 放料侧过渡点(相反手系)
'P6: 预留
'P7: 计算占用1
'P8: 计算占用2
'P9: 计算占用3
'P10~P14: 快换盘放1~5位
'P15~P19: 快换盘取1~5位
'P20~P24: 快换盘外侧1~5位(取快换盘后向外偏移)
'P25: 快换盘放总过渡(去放快换盘时外侧总过渡点)
'P26: 快换盘取总过渡(去取快换盘时外侧总过渡点)
'P30~P34: NG排料位置1~5位
'
'料号1----取放点位
'P100--P103:取码垛A1(4点码垛占用_-物料1)
'P104--P105:取抖料盘1&2(两个抖料盘点)
'P106--P107:取中转1&2(中转启用时中转取料点)
'P110--P111:放中转1&2(中转启用时中转放料点)
'P112--P114:放流线1&2&3(放入流线时点位)
'P115--P116:放流线1&2&3辅助(放入流线时点位辅助)
'P120--P139:涂油点位(涂油轨迹占用)
'P140--P145:刮油点位(清理毛刷)
'P150--P153:取码垛B1(4点码垛占用_-物料2)
'
'料号2----取放点位
'P200--P203:取码垛A2(4点码垛占用_-物料1)
'P204--P205:取抖料盘1&2(两个抖料盘点)
'P206--P207:取中转1&2(中转启用时中转取料点)
'P210--P211:放中转1&2(中转启用时中转放料点)
'P212--P214:放流线1&2&3(放入流线时点位)
'P215--P216:放流线1&2&3辅助(放入流线时点位辅助)
'P220--P239:涂油点位(涂油轨迹占用)
'P240--P245:刮油点位(清理毛刷)
'P250--P253:取码垛B2(4点码垛占用_-物料2)
'
'料号3----取放点位
'P300--P303:取码垛A3(4点码垛占用_-物料1)
'P304--P305:取抖料盘1&2(两个抖料盘点)
'P306--P307:取中转1&2(中转启用时中转取料点)
'P310--P311:放中转1&2(中转启用时中转放料点)
'P312--P314:放流线1&2&3(放入流线时点位)
'P315--P316:放流线1&2&3辅助(放入流线时点位辅助)
'P320--P339:涂油点位(涂油轨迹占用)
'P340--P345:刮油点位(清理毛刷)
'P350--P353:取码垛B3(4点码垛占用_-物料2)
'
'########################### 建立通讯 #############################
*GOHOME:
IF SI7(7)=1 THEN
START <CCD_ONLINE>,T2,T33 '启动相机连接子任务,T2=任务号,T33=任务等级
WAIT GEPSTS(0)>0 '等待和相机建立连接
START <CCD>,T3,T34 '启动相机通讯子任务
ENDIF
'*********************初始化参数****************************
ASPEED 2 '初始化速度(自动速度在MAIN第一步设置)
ACCEL 90 '加速率
DECEL 90 '减速度
DO2()=0 '复位所有输出信号
DO3()=0 '复位所有输出信号
SO2()=0 '复位所有输出信号
SO3()=0 '复位所有输出信号
SO4()=0 '复位所有输出信号
SO5()=0 '复位所有输出信号
SO6()=0 '复位所有输出信号
SO7()=0 '报警输出=0
SO10()=0 '发料号=0
SO11()=0 '快换盘放料号=0
SO12()=0 '快换盘取料号=0
HIGH%=100 '高速率
LOW%=80 '低速率
MIN%=50 '最低速率
Z!=0.00 '门型移动时Z安全高度
Z1!=50.00 '抬升高度
'
Plt0%=1 '托盘初始料位,根据需要,执行后从第1个开始。
Plt1%=1 '托盘初始料位,根据需要,执行后从第1个开始。
Plt2%=1 '托盘初始料位,根据需要,执行后从第1个开始。
Plt3%=1 '托盘初始料位,根据需要,执行后从第1个开始。
Plt4%=1 '托盘初始料位,根据需要,执行后从第1个开始。
Plt5%=1 '托盘初始料位,根据需要,执行后从第1个开始。
Plt10%=1 '托盘初始料位,根据需要,执行后从第1个开始。
Plt11%=1 '托盘初始料位,根据需要,执行后从第1个开始。
Plt12%=1 '托盘初始料位,根据需要,执行后从第1个开始。
Plt13%=1 '托盘初始料位,根据需要,执行后从第1个开始。
Plt14%=1 '托盘初始料位,根据需要,执行后从第1个开始。
Plt15%=1 '托盘初始料位,根据需要,执行后从第1个开始。
'定义托盘物料总个数,计数大于最大值时输出物料用完信号
NO1ZS%=6 '料号1单盘总数+1(行*列+1)
NO2ZS%=6 '料号2单盘总数+1(行*列+1)
NO3ZS%=15 '料号3单盘总数+1(行*列+1)
'
SGI1=0 '取料1连续NG计数清零
SGI2=0 '取料2连续NG计数清零
SGI3=0 '取料3连续NG计数清零
LOC3(P0)=Z! '第三轴的值改为Z!
LOC3(P2)=Z! '第三轴的值改为Z!
LOC3(P3)=Z! '第三轴的值改为Z!
LOC3(P4)=Z! '第三轴的值改为Z!
LOC3(P5)=Z! '第三轴的值改为Z!
MOTOR ON '电机马达ON
'
'*********************初始化判断****************************
*PANDUAN:
''获取机器人当前位置
P5000=WHRXY '开机运行,将当前点坐标强制写入P5000
X!=LOC1(P5000) 'X!等于P5000内X轴坐标值
Y!=LOC2(P5000) 'Y!等于P5000内Y轴坐标值
R!=LOC4(P5000) 'U!等于P5000内U轴坐标值
''左右手系判断
A%=ARMCND 'ARMCND为1=右手系统,2=左手系统,
IF A%=1 THEN
GOTO *R1 '去右手系统状态的位置判断
ELSE
GOTO *L1 '去左手系统状态的位置判断
ENDIF
'
''''根据机器人当前位置区不同的过渡点
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
*L1:
LEFTY '左手臂姿态
IF X!<-100.00 THEN '机械手在取料侧
DRIVE(3,Z!),CONT,S=HIGH% '第三轴移动到Z!
MOVE P,P3 '到放料过渡点
MOVE L,P2 '到取料过渡点左手
MOVE P,P0 '到HOME点
ELSEIF X!>100.00 THEN '判断机器人区域
DRIVE(3,Z!),CONT,S=HIGH%
MOVE P,P2 '到取料过渡点左手
MOVE P,P0 '到HOME点
ELSEIF X!>-100.00 AND X!<100.00 THEN '判断机器人区域
DRIVE(3,Z!),CONT,S=HIGH%
P9=WHRXY '开机运行,将当前点坐标强制写入P9
LOC2(P9)=400 'Y轴移动到安全位置
MOVE L,P9 '到取料过渡点
MOVE L,P2 '到取料过渡点左手
MOVE P,P0 '到HOME点
ENDIF
GOTO *QIGANGFUWEI
''''根据机器人当前位置区不同的过渡点
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
*R1:
RIGHTY '右手臂姿态
IF X!<-100.00 THEN '机械手在取料侧
DRIVE(3,Z!),CONT,S=HIGH% '第三轴移动到Z!
MOVE P,P5,CONT '到放料过渡点(回HOME前需要切手系的过渡)
MOVE L,P4,CONT '到取料过渡点(回HOME前需要切手系的过渡)
MOVE P,P2,CONT '到取料过渡点
MOVE P,P0,CONT '到HOME点
ELSEIF X!>100.00 THEN '判断机器人区域
DRIVE(3,Z!),CONT,S=HIGH%
MOVE P,P2,CONT '到取料过渡点
MOVE P,P0,CONT '到HOME点
ELSEIF X!>-100.00 AND X!<100.00 THEN '判断机器人区域
DRIVE(3,Z!),CONT,S=HIGH%
P9=WHRXY '开机运行,将当前点坐标强制写入P9
LOC2(P9)=400 'Y轴移动到安全位置
MOVE L,P9 '到取料过渡点
MOVE L,P4,CONT '到取料过渡点(回HOME前需要切手系的过渡)
MOVE P,P2,CONT '到取料过渡点
MOVE P,P0,CONT '到HOME点
ENDIF
GOTO *QIGANGFUWEI
'
''''气缸按需复位
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
*QIGANGFUWEI:
'快换盘阀门复位
SO4(1,0)=&B01 '快换盘基本位
WAIT SI4(0)=1 '等待快换盘到基本位
IF SI11()=0 AND SI12()<>0 THEN '如果机械手上无抓手
GOSUB *KUAIHUAN
ENDIF
IF SI10()=0 OR SI10()=1 THEN '获取PLC料号
MOVE P,P30,Z=Z!,S=HIGH% '到NG1排料位
ELSEIF SI10()=2 THEN '获取PLC料号
MOVE P,P31,Z=Z!,S=HIGH% '到NG2排料位
ELSEIF SI10()=3 THEN '获取PLC料号
MOVE P,P32,Z=Z!,S=HIGH% '到NG3排料位
ELSEIF SI10()=4 THEN '获取PLC料号
MOVE P,P33,Z=Z!,S=HIGH% '到NG4排料位
ENDIF
WAIT ARM
'取料1气缸复位
SO4(5,4)=&B01 '取料1气缸基本位
WAIT SI4(4)=1 '等待取料1气缸到基本位
'取料2气缸复位
SO4(7,6)=&B01 '取料2气缸基本位
WAIT SI4(6)=1 '等待取料2气缸到基本位
'取料3气缸复位
SO5(1,0)=&B01 '取料3气缸基本位
WAIT SI5(0)=1 '等待取料3气缸到基本位
'取料4气缸复位
SO5(3,2)=&B01 '取料4气缸基本位
WAIT SI5(2)=1 '等待取料4气缸到基本位
'真空发生器1复位
SO5(5,4)=&B01 '真空吸取1基本位
WAIT SI5(4)=1 '真空吸取1基本位到基本位
'真空发生器2复位
SO5(7,6)=&B01 '真空吸取2基本位
WAIT SI5(6)=1 '真空吸取2基本位到基本位
'旋转气缸复位
SO4(3,2)=&B01 '旋转气缸基本位
WAIT SI4(2)=1 '等待快旋转气缸到基本位
'
DELAY 300
MOVE P,P0 '到HOME点
GOTO *KUAIHUAN
'
'****************************快换盘处理***************************
'****************************快换盘处理***************************
'****************************快换盘处理***************************
*KUAIHUAN:
GOTO *KUAIHUAN1 '暂时屏蔽快换功能,需要时本行删除
IF SI11()<>1 AND SI11()<>2 AND SI11()<>3 OR SI12()=0 THEN '允许放都不对和允许取为0
SO7(0)=1 '快换识别异常ON
SO3(1) =1 '初始化异常结束
WAIT SI7(0)=1 '等待清除快换识别异常
SO7(0)=0 '快换识别异常OFF
SO3(1) =0 '初始化异常结束
WAIT SI7(0)=0 '等待清除快换识别异常
GOTO *KUAIHUAN
ELSEIF SI11()<>0 AND SI12()<>0 THEN '必须有地方放和有地方取
GOSUB *KUAI_HUAN_FANG
GOSUB *KUAI_HUAN_QU
ENDIF
*KUAIHUAN1:
SO3(0) =1 '初始化正常结束
DELAY 500 '等待PLC0.5秒
SO3(0) =0 '初始化正常结束
GOTO *MAIN
'****************************快换盘放***************************
*KUAI_HUAN_FANG:
IF SI11()=1 THEN
DRIVE(3,Z!),CONT,S=HIGH% 'Z到安全高度
P9=P20 '放快换盘过渡点1
P8=P10 '放快换盘1位
LOC3(P9)=Z! '第三轴的值改为Z!
LOC3(P8)=Z! '第三轴的值改为Z!
LOC3(P25)=Z! '第三轴的值改为Z!
MOVE L,P25,S=HIGH% '到快换进入位
MOVE L,P9,S=HIGH% '到过渡点上方
MOVE L,P8,S=LOW% '到放盘上方
MOVE L,P10,S=MIN% '到放盘释放位1
WAIT ARM
SO4(0)=0 '快换盘基本位
SO4(1)=1 '快换盘工作位
DELAY 300
WAIT SI4(1)=1 '等待到位
DRIVE(3,Z!),CONT,S=HIGH% '第三轴移动到Z!
SO11()=1 '回复PLC放完编号
WAIT SI11()=0 '等待PLC清除放请求
SO11()=0 '回复PLC放完编号
'
ELSEIF SI11()=2 THEN
DRIVE(3,Z!),CONT,S=HIGH% 'Z到安全高度
P9=P21 '放快换盘过渡点2
P8=P11 '放快换盘2位
LOC3(P9)=Z! '第三轴的值改为Z!
LOC3(P8)=Z! '第三轴的值改为Z!
LOC3(P25)=Z! '第三轴的值改为Z!
MOVE L,P25,S=HIGH% '到快换进入位
MOVE L,P9,S=HIGH% '到过渡点上方
MOVE L,P8,S=LOW% '到放盘上方
MOVE L,P11,S=MIN% '到放盘释放位2
WAIT ARM
SO4(0)=0 '快换盘基本位
SO4(1)=1 '快换盘工作位
DELAY 300
WAIT SI4(1)=1 '等待到位
DRIVE(3,Z!),CONT,S=HIGH% '第三轴移动到Z!
SO11()=2 '回复PLC放完编号
WAIT SI11()=0 '等待PLC清除放请求
SO11()=0 '回复PLC放完编号
'
ELSEIF SI11()=3 THEN
DRIVE(3,Z!),CONT,S=HIGH% 'Z到安全高度
P9=P22 '放快换盘过渡点3
P8=P12 '放快换盘3位
LOC3(P9)=Z! '第三轴的值改为Z!
LOC3(P8)=Z! '第三轴的值改为Z!
LOC3(P25)=Z! '第三轴的值改为Z!
MOVE L,P25,S=HIGH% '到快换进入位
MOVE L,P9,S=HIGH% '到过渡点上方
MOVE L,P8,S=LOW% '到放盘上方
MOVE L,P12,S=MIN% '到放盘释放位3
WAIT ARM
SO4(0)=0 '快换盘基本位
SO4(1)=1 '快换盘工作位
DELAY 300
WAIT SI4(1)=1 '等待到位
DRIVE(3,Z!),CONT,S=HIGH% '第三轴移动到Z!
SO11()=3 '回复PLC放完编号
WAIT SI11()=0 '等待PLC清除放请求
SO11()=0 '回复PLC放完编号
'
ELSEIF SI11()=4 THEN
DRIVE(3,Z!),CONT,S=HIGH% 'Z到安全高度
P9=P23 '放快换盘过渡点4
P8=P13 '放快换盘4位
LOC3(P9)=Z! '第三轴的值改为Z!
LOC3(P8)=Z! '第三轴的值改为Z!
LOC3(P25)=Z! '第三轴的值改为Z!
MOVE L,P25,S=HIGH% '到快换进入位
MOVE L,P9,S=HIGH% '到过渡点上方
MOVE L,P8,S=LOW% '到放盘上方
MOVE L,P13,S=MIN% '到放盘释放位4
WAIT ARM
SO4(0)=0 '快换盘基本位
SO4(1)=1 '快换盘工作位
DELAY 300
WAIT SI4(1)=1 '等待到位
DRIVE(3,Z!),CONT,S=HIGH% '第三轴移动到Z!
SO11()=4 '回复PLC放完编号
WAIT SI11()=0 '等待PLC清除放请求
SO11()=0 '回复PLC放完编号
'
ELSEIF SI11()=5 THEN
DRIVE(3,Z!),CONT,S=HIGH% 'Z到安全高度
P9=P24 '放快换盘过渡点5
P8=P14 '放快换盘5位
LOC3(P9)=Z! '第三轴的值改为Z!
LOC3(P8)=Z! '第三轴的值改为Z!
LOC3(P25)=Z! '第三轴的值改为Z!
MOVE L,P25,S=HIGH% '到快换进入位
MOVE L,P9,S=HIGH% '到过渡点上方
MOVE L,P8,S=LOW% '到放盘上方
MOVE L,P14,S=MIN% '到放盘释放位5
WAIT ARM
SO4(0)=0 '快换盘基本位
SO4(1)=1 '快换盘工作位
DELAY 300
WAIT SI4(1)=1 '等待到位
DRIVE(3,Z!),CONT,S=HIGH% '第三轴移动到Z!
SO11()=5 '回复PLC放完编号
WAIT SI11()=0 '等待PLC清除放请求
SO11()=0 '回复PLC放完编号
'
ENDIF
RETURN
'************************拾取快换盘**************************************
*KUAI_HUAN_QU:
SO4(0)=0 '快换盘基本位
SO4(1)=1 '快换盘工作位
DELAY 300
WAIT SI4(1)=1 '等待到位
IF SI12()=1 THEN
MOVE P,P15,Z=Z!,S=LOW% '到取快换盘1位
WAIT ARM
SO4(0)=1 '快换盘基本位
SO4(1)=0 '快换盘工作位
DELAY 300
WAIT SI4(0)=1 '等待到位
DRIVE(3,Z!),CONT,S=HIGH% '第三轴移动到Z!
P9=P20 '放快换盘过渡点1
P8=P25 '快换进出位(共用)
LOC3(P9)=Z! '第三轴的值改为Z!
LOC3(P8)=Z! '第三轴的值改为Z!
MOVE L,P9,S=LOW% '到取放位外侧(外侧)
MOVE L,P8,S=LOW% '到快换盘离开区域(外侧旁边)
SO12()=1 '回复PLC放完编号'
WAIT SI12()=0 '等待PLC清除取请求
SO12()=0 '回复PLC放完编号
'
ELSEIF SI12()=2 THEN
MOVE P,P16,Z=Z!,S=LOW% '到取快换盘2位
WAIT ARM
SO4(0)=1 '快换盘基本位
SO4(1)=0 '快换盘工作位
DELAY 300
WAIT SI4(0)=1 '等待到位
DRIVE(3,Z!),CONT,S=HIGH% '第三轴移动到Z!
P9=P21 '放快换盘过渡点2
P8=P25 '快换进出位(共用)
LOC3(P9)=Z! '第三轴的值改为Z!
LOC3(P8)=Z! '第三轴的值改为Z!
MOVE L,P9,S=LOW% '到取放位外侧(外侧)
MOVE L,P8,S=LOW% '到快换盘离开区域(外侧旁边)
SO12()=2 '回复PLC放完编号'
WAIT SI12()=0 '等待PLC清除取请求
SO12()=0 '回复PLC放完编号
'
ELSEIF SI12()=3 THEN
MOVE P,P17,Z=Z!,S=LOW% '到取快换盘3位
WAIT ARM
SO4(0)=1 '快换盘基本位
SO4(1)=0 '快换盘工作位
DELAY 300
WAIT SI4(0)=1 '等待到位
DRIVE(3,Z!),CONT,S=HIGH% '第三轴移动到Z!
P9=P22 '放快换盘过渡点3
P8=P25 '快换进出位(共用)
LOC3(P9)=Z! '第三轴的值改为Z!
LOC3(P8)=Z! '第三轴的值改为Z!
MOVE L,P9,S=LOW% '到取放位外侧(外侧)
MOVE L,P8,S=LOW% '到快换盘离开区域(外侧旁边)
SO12()=3 '回复PLC放完编号'
WAIT SI12()=0 '等待PLC清除取请求
SO12()=0 '回复PLC放完编号
'
ELSEIF SI12()=4 THEN
MOVE P,P18,Z=Z!,S=LOW% '到取快换盘4位
WAIT ARM
SO4(0)=1 '快换盘基本位
SO4(1)=0 '快换盘工作位
DELAY 300
WAIT SI4(0)=1 '等待到位
DRIVE(3,Z!),CONT,S=HIGH% '第三轴移动到Z!
P9=P23 '放快换盘过渡点4
P8=P25 '快换进出位(共用)
LOC3(P9)=Z! '第三轴的值改为Z!
LOC3(P8)=Z! '第三轴的值改为Z!
MOVE L,P9,S=LOW% '到取放位外侧(外侧)
MOVE L,P8,S=LOW% '到快换盘离开区域(外侧旁边)
SO12()=4 '回复PLC放完编号'
WAIT SI12()=0 '等待PLC清除取请求
SO12()=0 '回复PLC放完编号
'
ELSEIF SI12()=5 THEN
MOVE P,P19,Z=Z!,S=LOW% '到取快换盘5位
WAIT ARM
SO4(0)=1 '快换盘基本位
SO4(1)=0 '快换盘工作位
DELAY 300
WAIT SI4(0)=1 '等待到位
DRIVE(3,Z!),CONT,S=HIGH% '第三轴移动到Z!
P9=P24 '放快换盘过渡点5
P8=P25 '快换进出位(共用)
LOC3(P9)=Z! '第三轴的值改为Z!
LOC3(P8)=Z! '第三轴的值改为Z!
MOVE L,P9,S=LOW% '到取放位外侧(外侧)
MOVE L,P8,S=LOW% '到快换盘离开区域(外侧旁边)
SO12()=5 '回复PLC放完编号'
WAIT SI12()=0 '等待PLC清除取请求
SO12()=0 '回复PLC放完编号
'
ENDIF
RETURN
'
'****************************主程序***************************
'****************************主程序***************************
'****************************主程序***************************
*MAIN:
'ASPEED 50 '自动速度(已改为PLC控制)
IF SI10()=1 THEN '待增加获取PLC料号
IF SI7(7)=1 THEN '如果使用相机模版切换功能
'SEND "PW,1" TO GP0 '相机模版切换
'SEND GP0 TO PW$ '相机模版切换
DELAY 2000 '等相机切换模版反应时间
SO10()=1 '回复PLC料号(左舵IP-RH)
GOTO *LIAOHAO1B '去料号1程序(有相机)
ENDIF
SO10()=1 '回复PLC料号(左舵IP-RH)
B%=1 '1=放1个料,2=放2个料
C%=1 '1=无旋转中转,2=有旋转中转
GOTO *LIAOHAO1 '去料号1程序(无相机)
ELSEIF SI10()=2 THEN '待增加获取PLC料号
IF SI7(7)=1 THEN '如果使用相机模版切换功能
'SEND "PW,2" TO GP0 '相机模版切换
'SEND GP0 TO PW$ '相机模版切换
DELAY 2000 '等相机切换模版反应时间
ENDIF
SO10()=2 '回复PLC料号(左舵IP-LH)
B%=1 '1=放1个料,2=放2个料
C%=1 '1=无旋转中转,2=有旋转中转
'GOTO *LIAOHAO2 '去料号2程序
ELSEIF SI10()=3 THEN '待增加获取PLC料号
IF SI7(7)=1 THEN '如果使用相机模版切换功能
SEND "PW,3" TO GP0 '相机模版切换
'SEND GP0 TO PW$ '相机模版切换
DELAY 2000 '等相机切换模版反应时间
ENDIF
SO10()=3 '回复PLC料号(TC)
ASPEED 70 '速度
SGI0=1 '1=放1个料,2=放2个料
B%=1 '1=放1个料,2=放2个料
C%=1 '1=无旋转中转,2=有旋转中转
'GOTO *LIAOHAO3 '去料号3程序
ELSEIF SI10()=4 THEN '待增加获取PLC料号
IF SI7(7)=1 THEN '如果使用相机模版切换功能
SEND "PW,4" TO GP0 '相机模版切换
'SEND GP0 TO PW$ '相机模版切换
DELAY 2000 '等相机切换模版反应时间
ENDIF
SO10()=4 '回复PLC料号(右舵IP-RH)
B%=1 '1=放1个料,2=放2个料
C%=1 '1=无旋转中转,2=有旋转中转
'GOTO *LIAOHAO4 '去料号4程序
ELSEIF SI10()=5 THEN '待增加获取PLC料号
IF SI7(7)=1 THEN '如果使用相机模版切换功能
SEND "PW,5" TO GP0 '相机模版切换
'SEND GP0 TO PW$ '相机模版切换
DELAY 2000 '等相机切换模版反应时间
ENDIF
SO6()=5 '回复PLC料号(右舵IP-LH)
B%=1 '1=放1个料,2=放2个料
C%=1 '1=无旋转中转,2=有旋转中转
'GOTO *LIAOHAO5 '去料号5程序
ELSEIF SI10()=6 THEN '待增加获取PLC料号
IF SI7(7)=1 THEN '如果使用相机模版切换功能
SEND "PW,6" TO GP0 '相机模版切换
'SEND GP0 TO PW$ '相机模版切换
DELAY 2000 '等相机切换模版反应时间
ENDIF
SO10()=6 '回复PLC料号
B%=1 '1=放1个料,2=放2个料
C%=1 '1=无旋转中转,2=有旋转中转
'GOTO *LIAOHAO6 '去料号6程序
ELSEIF SI10()=7 THEN '待增加获取PLC料号
IF SI7(7)=1 THEN '如果使用相机模版切换功能
SEND "PW,7" TO GP0 '相机模版切换
'SEND GP0 TO PW$ '相机模版切换
DELAY 2000 '等相机切换模版反应时间
ENDIF
SO10()=7 '回复PLC料号
B%=1 '1=放1个料,2=放2个料
C%=1 '1=无旋转中转,2=有旋转中转
'GOTO *LIAOHAO7 '去料号7程序
ELSEIF SI10()=0 THEN '待增加获取PLC料号
SO10()=0 '回复PLC料号
ENDIF
WAIT 100
GOTO *MAIN
'
'************************料号1程序***********************************(相机检残留)
'************************料号1程序***********************************(相机检残留)
'************************料号1程序***********************************(相机检残留)
*LIAOHAO1B:
ASPEED SI14() '自动速度(已改为PLC控制)
SO3(3)=0 '1穴料为空标志=0(开始前清除已确认空信号)
SO3(4)=0 '2穴料为空标志=0(开始前清除已确认空信号)
WAIT SI2(0)=1 '允许取料1
IF SO3(3)=0 THEN '如果1料为空标志=0
'第一模先拍照检测,后取料(取料完成后再检测,直到拍照等于3才放行)
*PICK1B:
WAIT SI2(0)=1 '允许取料
MOVE P,P2,Z=Z!,CONT,S=HIGH% '到取料过渡点
MOVE P,P102,Z=Z!,S=HIGH% '到1料拍照位
SEND "EXW,1" TO GP0 '相机工具1(拍1穴,1=全有OK,2=不全NG,3=全无OK)
SEND GP0 TO EXW$ '接收相机反馈字符
WAIT ARM
DELAY 200
CCD_OUT$="T1" '给发送到相机的字符赋值
MO20(0)=1 '通知相机拍照并且进行字符处理
WAIT MO20(0)=0 '等待相机拍照完成
IF CCD_1!=1.000 THEN '如果拍照结果为(1=全有OK,2=不全NG,3=全无OK)
SO3(3)=0 '1穴料为空标志=0
SGI2=0 '裁切物料连续异常计数器清零
IF SO4(4)<>1 THEN '如果夹爪不是打开的
GOSUB *NG1B '调用NG扔料程序1B
SGI2=SGI2+1 '相机连续拍照错误数+1
IF SGI2>3 THEN '如果NG计数大于3
SO7(2)=1 '输出连续报警
WAIT SI7(2)=1 '等待人工复位
SO7(2)=0 '连续报警复位
SGI2=0 '裁切物料连续异常计数器清零
ENDIF
ENDIF
GOSUB *QULIAO1 '调用取料1
GOTO *PICK1B '跳回第一模取重新拍照
ELSEIF CCD_1!=2.000 THEN '如果拍照结果为(1=全有OK,2=不全NG,3=全无OK)
SO3(3)=0 '1穴料为空标志=0
IF SO4(4)<>1 THEN '如果夹爪不是打开的
GOSUB *NG1B '调用NG扔料程序1B
SGI2=SGI2+1 '相机连续拍照错误数+1
IF SGI2>3 THEN '如果NG计数大于3
SO7(2)=1 '输出连续报警
WAIT SI7(2)=1 '等待人工复位
SO7(2)=0 '连续报警复位
SGI2=0 '裁切物料连续异常计数器清零
ENDIF
ENDIF
GOSUB *QULIAO1B '调用取料1
GOSUB *NG1B '调用NG扔料程序1B
SGI2=SGI2+1 '相机连续拍照错误数+1
IF SGI2>3 THEN '如果NG计数大于3
SO7(2)=1 '输出连续报警
WAIT SI7(2)=1 '等待人工复位
SO7(2)=0 '连续报警复位
SGI2=0 '裁切物料连续异常计数器清零
ENDIF
GOTO *PICK1B '跳回第一模取前拍照
ELSEIF CCD_1!=3.000 THEN '如果拍照结果为(1=全有OK,2=不全NG,3=全无OK)
SO3(3)=1 '1穴料为空标志=1 ,只有拍照等于3了才向下走
ELSE
GOTO *PICK1B '跳回第一模取前拍照
ENDIF
ENDIF
'
'第一模拍照取料完成后,判断是否夹住;夹住时放料,未夹时为胎膜空
IF SO4(5)=1 THEN '如果夹爪是夹住的
GOSUB *PUT_1B '调用放料1程序
GOSUB *WANCHENG1 '调用放料完成
ENDIF
'第二穴
'第二穴
'第二穴
IF SO3(4)=0 THEN '如果2料为空标志=0
'第一模先拍照检测,后取料(取料完成后再检测,直到拍照等于3才放行)
*PICK2B:
WAIT SI2(0)=1 '允许取料
MOVE P,P2,Z=Z!,CONT,S=HIGH% '到取料过渡点
MOVE P,P103,Z=Z!,S=HIGH% '到2料拍照位
SEND "EXW,2" TO GP0 '相机工具2(拍2穴,1=全有OK,2=不全NG,3=全无OK)
SEND GP0 TO EXW$ '接收相机反馈字符
WAIT ARM
DELAY 200
CCD_OUT$="T1" '给发送到相机的字符赋值
MO20(0)=1 '通知相机拍照并且进行字符处理
WAIT MO20(0)=0 '等待相机拍照完成
IF CCD_1!=1.000 THEN '如果拍照结果为(1=全有OK,2=不全NG,3=全无OK)
SO3(4)=0 '1穴料为空标志=0
SGI2=0 '裁切物料连续异常计数器清零
IF SO4(4)<>1 THEN '如果夹爪不是打开的
GOSUB *NG1B '调用NG扔料程序1B
SGI2=SGI2+1 '相机连续拍照错误数+1
IF SGI2>3 THEN '如果NG计数大于3
SO7(2)=1 '输出连续报警
WAIT SI7(2)=1 '等待人工复位
SO7(2)=0 '连续报警复位
SGI2=0 '裁切物料连续异常计数器清零
ENDIF
ENDIF
GOSUB *QULIAO2B '调用取料1
GOTO *PICK2B '跳回第一模取重新拍照
ELSEIF CCD_1!=2.000 THEN '如果拍照结果为(1=全有OK,2=不全NG,3=全无OK)
SO3(4)=0 '1穴料为空标志=0
IF SO4(4)<>1 THEN '如果夹爪不是打开的
GOSUB *NG1B '调用NG扔料程序1B
SGI2=SGI2+1 '相机连续拍照错误数+1
IF SGI2>3 THEN '如果NG计数大于3
SO7(2)=1 '输出连续报警
WAIT SI7(2)=1 '等待人工复位
SO7(2)=0 '连续报警复位
SGI2=0 '裁切物料连续异常计数器清零
ENDIF
ENDIF
GOSUB *QULIAO2B '调用取料1
GOSUB *NG1B '调用NG扔料程序1B
SGI2=SGI2+1 '相机连续拍照错误数+1
IF SGI2>3 THEN '如果NG计数大于3
SO7(2)=1 '输出连续报警
WAIT SI7(2)=1 '等待人工复位
SO7(2)=0 '连续报警复位
SGI2=0 '裁切物料连续异常计数器清零
ENDIF
GOTO *PICK2B '跳回第一模取前拍照
ELSEIF CCD_1!=3.000 THEN '如果拍照结果为(1=全有OK,2=不全NG,3=全无OK)
SO3(4)=1 '1穴料为空标志=1 ,只有拍照等于3了才向下走
ELSE
GOTO *PICK2B '跳回第一模取前拍照
ENDIF
ENDIF
'两穴都完成时触发取料完成(程序可以执行至此说明胎膜上已无残留,但夹爪不一定有产品)
MOVE P,P2,Z=Z!,CONT,S=HIGH% '到取料过渡点
SO2(0)=1 '取料完成
WAIT SI2(0)=0 '等待允许取料关
SO2(0)=0 '取料完成
'
'第一模拍照取料完成后,判断是否夹住;夹住时放料,未夹时为胎膜空
IF SO4(5)=1 THEN '如果夹爪是夹住的
GOSUB *PUT_1B '调用放料1程序
GOSUB *WANCHENG1 '调用放料完成
ENDIF
GOTO *LIAOHAO1B '返回取料主程序
'
'以下子程序
'************************取料1(第一模)
*QULIAO1B: '托盘取料
MOVE P,P2,Z=Z!,CONT,S=HIGH% '到取料过渡点
SO4(7,6)=&B01 '变距气缸到基本位
WAIT SI4(6)=1 '等待变距气缸基本位到位
P9=P100 '取料1位
P8=P100 '取料1位
LOC3(P9)=Z! '第三轴的值改为Z!
MOVE P,P9,Z=Z!,S=HIGH% '到取料1上方
MOVE L,P8,S=LOW% '到取料1位
WAIT ARM
SO4(5,4)=&B10 '取料1阀到工作位
WAIT SI4(5)=1 '等待到位
DELAY 200
DRIVE(3,Z!),S=MIN% '第三轴移动到Z!
MOVE P,P2,Z=Z!,CONT,S=HIGH% '到取料过渡点
RETURN
'************************取料11(第二模)
*QULIAO2B: '托盘取料
MOVE P,P2,Z=Z!,CONT,S=HIGH% '到取料过渡点
SO4(7,6)=&B01 '变距气缸到基本位
WAIT SI4(6)=1 '等待变距气缸基本位到位
P9=P101 '取料1位
P8=P101 '取料1位
LOC3(P9)=Z! '第三轴的值改为Z!
MOVE P,P9,Z=Z!,S=HIGH% '到取料1上方
MOVE L,P8,S=LOW% '到取料1位
WAIT ARM
SO4(5,4)=&B10 '取料1阀到工作位
WAIT SI4(5)=1 '等待到位
DELAY 200
DRIVE(3,Z!),S=MIN% '第三轴移动到Z!
MOVE P,P2,Z=Z!,CONT,S=HIGH% '到取料过渡点
RETURN
'************************NG排除1
*NG1B:
MOVE P,P30,Z=Z!,S=HIGH% '到NG3排料位
WAIT ARM
SO4(5,4)=&B01 '取料1阀到基本位
DELAY 300
SO4(5,4)=&B10 '取料1阀到工作位
DELAY 300
SO4(5,4)=&B01 '取料1阀到基本位
WAIT SI4(4)=1 '等待取料夹爪基本位到位
MOVE P,P2,Z=Z!,CONT,S=HIGH% '到取料过渡点
RETURN
'************************放料1B
*PUT_1B:
DRIVE(3,Z!),S=MIN% '第三轴移动到Z!
MOVE L,P3,S=HIGH% '到放料过渡点
WAIT SI2(4)=1 '流线允许放1
SO4(7,6)=&B10 '变距气缸到工作位
WAIT SI4(7)=1 '等待变距气缸工作位到位
P9=P112 '放流线1位
P8=P112 '放流线1位
LOC3(P9)=Z! '第三轴的值改为Z!
MOVE P,P9,Z=Z!,S=HIGH% '到放中转点上方
MOVE L,P8,S=MIN% '到放流线
WAIT ARM
SO4(5,4)=&B01 '取料1阀到基本位
WAIT SI4(4)=1 '等待取料夹爪基本位到位
DRIVE(3,Z!) '第三轴移动到Z!
RETURN
'************************料号1程序********************(无相机,用传感器检残留)
'************************料号1程序********************(无相机,用传感器检残留)
'************************料号1程序********************(无相机,用传感器检残留)
*LIAOHAO1:
ASPEED SI14() '自动速度(已改为PLC控制)
*PICK1: '第一模取放
WAIT SI2(0)=1 '允许取料
SGI1=0 '消除计数归零
GOSUB *QULIAO1 '调用取料
GOSUB *PUT_1 '到放叶片段
SGI2=1 '置位第一模已入载具状态(不一定是OK的)
'第一次取料无法判断是否有残留,第二次取料可以判断是否残留
*PICK11: '第二模取料
WAIT SI2(0)=1 '允许取料
SGI1=0 '消除计数归零
GOSUB *QULIAO11 '调用第二模取料
IF SI3(2)=1 THEN '检测到有残留
C%=1 'C%=0=取料无异常,1=取料已异常
GOSUB *NG1 '调用NG排料
ELSE
C%=0 '0=取料无异常,1=取料已异常
GOSUB *WANCHENG1 '第二模取出后判断无残留即发送任务完成
SGI2=0 '复位第一模已放入载具状态
ENDIF
'如果OK就正常放料,如果已NG则执行NG处理程序
IF C%=0 THEN '如果取料没有NG
SO2(0)=1 '取料完成
WAIT SI2(0)=0 '等待允许取料关
SO2(0)=0 '取料完成
GOSUB *PUT_1 '到放叶片段
GOSUB *WANCHENG1 '第二模放完后发送任务完成
GOTO *LIAOHAO1 '正常放完料返回
ELSE
GOTO *NGCHULI1 '跳转至NG处理3程序
ENDIF
'以下NG处理流程
*NGCHULI1:
WAIT SI2(0)=1 '允许取料
IF SGI2=1 THEN '如果第一模已经放入流线载具,则夹回扔掉
GOSUB *QULIAO21 '调用取已放入载具的夹取扔掉
GOSUB *NG1 '调用NG排料
SGI2=0 '复位第一模已入载具状态
ENDIF
GOSUB *QULIAO1 '调用取料1模
GOSUB *NG1 '调用NG排料
GOSUB *QULIAO11 '调用取料2模
GOSUB *NG1 '调用NG排料
IF SI3(2)=1 THEN '再次检测到有残留
SGI1=SGI1+1 '连续NG计数
IF SGI1>1 THEN
SO3(7)=1 '连续取料报警等待PLC复位
WAIT SI3(2)=0 AND SI3(7)=1 '等待对射感应器检测到无残留**************必须取出后才可复位
SO3(7)=0 '收到PLC复位后消除报警
SGI1=0 '连续NG数清零
SO2(0)=1 '取料完成
WAIT SI2(0)=0 '等待允许取料关
SO2(0)=0 '取料完成
GOTO *LIAOHAO1 '连续多次未取出来报警复位后返回至主程序
ELSE
GOTO *NGCHULI1 '单次NG排料并未达到次数时继续执行NG处理程序
ENDIF
ENDIF
SO4(5,4)=&B01 '取料夹爪1关
WAIT SI4(4)=1 '等待取料夹爪基本位到位
SO2(0)=1 '取料完成
WAIT SI2(0)=0 '等待允许取料关
SO2(0)=0 '取料完成
GOTO *LIAOHAO1 '单次NG排料并未达到次数时继续执行NG处理程序
'
'************************取料1(第一模)
*QULIAO1: '托盘取料
MOVE P,P2,Z=Z!,CONT,S=HIGH% '到取料过渡点
SO4(7,6)=&B01 '变距气缸到基本位
WAIT SI4(6)=1 '等待变距气缸基本位到位
P9=P100 '取料1位
P8=P100 '取料1位
LOC3(P9)=Z! '第三轴的值改为Z!
MOVE P,P9,Z=Z!,S=HIGH% '到取料1上方
MOVE L,P8,S=LOW% '到取料1位
WAIT ARM
SO4(5,4)=&B10 '取料1阀到工作位
WAIT SI4(5)=1 '等待到位
DELAY 200
DRIVE(3,Z!),S=MIN% '第三轴移动到Z!
MOVE P,P2,Z=Z!,CONT,S=HIGH% '到取料过渡点
RETURN
'************************取料11(第二模)
*QULIAO11: '托盘取料
MOVE P,P2,Z=Z!,CONT,S=HIGH% '到取料过渡点
SO4(7,6)=&B01 '变距气缸到基本位
WAIT SI4(6)=1 '等待变距气缸基本位到位
P9=P101 '取料1位
P8=P101 '取料1位
LOC3(P9)=Z! '第三轴的值改为Z!
MOVE P,P9,Z=Z!,S=HIGH% '到取料1上方
MOVE L,P8,S=LOW% '到取料1位
WAIT ARM
SO4(5,4)=&B10 '取料1阀到工作位
WAIT SI4(5)=1 '等待到位
DELAY 200
DRIVE(3,Z!),S=MIN% '第三轴移动到Z!
MOVE P,P2,Z=Z!,CONT,S=HIGH% '到取料过渡点
RETURN
'************************NG时取料21(把已放入载具的叶片夹起扔掉)
*QULIAO21: '托盘取料
SO4(7,6)=&B10 '变距气缸到工作位
WAIT SI4(7)=1 '等待变距气缸工作位到位
P9=P112 '放料1位
P8=P112 '放料1位
LOC3(P9)=Z! '第三轴的值改为Z!
MOVE P,P9,Z=Z!,S=HIGH% '到取料1上方
MOVE L,P8,S=LOW% '到取料1位
WAIT ARM
SO4(5,4)=&B10 '取料1阀到工作位
WAIT SI4(5)=1 '等待到位
DELAY 200
DRIVE(3,Z!),S=MIN% '第三轴移动到Z!
MOVE P,P2,Z=Z!,CONT,S=HIGH% '到取料过渡点
RETURN
'************************NG排除1
*NG1:
MOVE P,P30,Z=Z!,S=HIGH% '到NG3排料位
WAIT ARM
SO4(5,4)=&B01 '取料1阀到基本位
DELAY 300
SO4(5,4)=&B10 '取料1阀到工作位
DELAY 300
SO4(5,4)=&B01 '取料1阀到基本位
WAIT SI4(4)=1 '等待取料夹爪基本位到位
MOVE P,P2,Z=Z!,CONT,S=HIGH% '到取料过渡点
RETURN
'************************放料1(无中转、1--2个料时用)
*PUT_1:
DRIVE(3,Z!),S=MIN% '第三轴移动到Z!
MOVE L,P3,S=HIGH% '到放料过渡点
WAIT SI2(4)=1 '流线允许放1
SO4(7,6)=&B10 '变距气缸到工作位
WAIT SI4(7)=1 '等待变距气缸工作位到位
P9=P112 '放流线1位
P8=P112 '放流线1位
LOC3(P9)=Z! '第三轴的值改为Z!
MOVE P,P9,Z=Z!,S=HIGH% '到放中转点上方
MOVE L,P8,S=MIN% '到放流线
WAIT ARM
SO4(5,4)=&B01 '取料1阀到基本位
WAIT SI4(4)=1 '等待取料夹爪基本位到位
DRIVE(3,Z!) '第三轴移动到Z!
RETURN
'************************放料1(任务完成)
*WANCHENG1:
DRIVE(3,Z!) '第三轴移动到Z!
SO2(4)=1 '任务完成1开
WAIT SI2(4)=0 '等待流线允许放1关
SO2(4)=0 '任务完成1关
MOVE P,P3,Z=Z!,CONT,S=HIGH% '到放料过渡点
MOVE P,P2,Z=Z!,CONT,S=HIGH% '到HOME点
RETURN
'
'
'
'
|
|