网上有很多关于pos机料主,ABB机器人压铸或CNC上下料的知识,也有很多人为大家解答关于pos机料主的问题,今天pos机之家(www.poszjia.com)为大家整理了关于这方面的知识,让我们一起来看下吧!
本文目录一览:
1、pos机料主
pos机料主
项目要求产生这样的效果:本工作站以机器人压铸取件为例,工业机器人从压铸机将压铸完成的工件取出进行工件完好性检查,然后放到冷却台上进行冷却,冷却后放到输出传送带上或放置到废件箱中。
程序详解:
MODULE DATA
数据模块
PERS num nPickOff_X:=0;
PERS num nPickOff_Y:=0;
PERS num nPickOff_Z:=200;
定义抓手抓取产品前的偏移值
PERS num nErrPickPartNo:=0;
定义产品错误变量,值为0时表示抓取的产品是OK的,1为抓取的产品是NG的或没抓取到产品
PERS num nCTime:=28.768;
定义数字变量,用来计时
VAR num nRelPartNo:=1;
定义数字变量用来计算产品放到冷却台的数量
PERS num nCoolOffs_Z:=200;
定义冷却台Z方向偏移数字变量
VAR bool bDieOpenKO:=FALSE;
VAR bool bPartOK:=FALSE;
定义开模逻辑量和产品检测OK逻辑量
VAR bool bEjectKo:=FALSE;
定义模具顶针是否顶出的逻辑量
VAR bool bFullOfCool:=FALSE;
PERS bool bCool1PosEmpty:=FALSE;
PERS bool bCool2PosEmpty:=FALSE;
PERS bool bCool3PosEmpty:=FALSE;
PERS bool bCool4PosEmpty:=FALSE;
定义冷却台产品是否放满的逻辑量以及各冷却位置是否有产品的逻辑量
PERS pos PosExtRobSafe1:=[-600,-1300,1450];
PERS pos PosExtRobSafe2:=[580,-2700,7];
定义两个位置数据,作为设定安全区域的两个对角点
VAR shapedata shExtRobSafe;
定义安全区域形状参数
PERS wzstationary wzExtRobSafe:=[1];
VAR bool bErrorPickPart:=FALSE;
定义错误工件逻辑量
CONST speeddata vFast:=[1800,200,5000,1000];
CONST speeddata vLow:=[8000,100,5000,1000];
定义机器人运行速度参数
TASK PERS loaddata LoadPart:=[5,[50,0,150],[1,0,0,0],0,0,0];
定义产品有效载荷参数
PERS tooldata tGripper:=[TRUE,[[179.120678011,-62.809528063,676],[1,0,0,0]],[15,[0,0,400],[1,0,0,0],0,0,0]];
定义抓手工具坐标系数据
TASK PERS wobjdata wobjDCM:=[FALSE,TRUE,"",[[0,0,0],[1,0,0,0]],[[-308.662234013,-1631.501618476,1017.285148616],[0.707106781,0,0.707106781,0]]];
定义压铸机工件坐标系
TASK PERS wobjdata wobjCool:=[FALSE,TRUE,"",[[1352.299998099,1342.748724261,1000],[1,0,0,0]],[[0,0,0],[1,0,0,0]]];
定义冷却台工件坐标系
PERS robtarget pPosOK:=[[250.269,-114.084,90.8913],[0.512234,0.497181,0.473399,-0.516063],[-2,-1,-1,1],[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]];定义机器人目标点变量
定义机器人目标点:
CONST robtarget pWaitDCM:=[[363.271843642,775.682976655,131.654771915],[0.692753734,0.135233089,0.688267859,-0.167605577],[-2,-2,0,1],[9E9,9E9,9E9,9E9,9E9,9E9]];
等待取料点
CONST robtarget pPickDCM:=[[250.269312959,-114.083887662,90.891092311],[0.512233847,0.497181122,0.473399181,-0.516062625],[-2,-1,-1,1],[9E9,9E9,9E9,9E9,9E9,9E9]];
取料点
CONST robtarget pHome:=[[309.255608104,1511.670917954,1165.257460666],[0.592214035,-0.440078101,0.376552635,-0.560198104],[-1,-2,0,1],[9E9,9E9,9E9,9E9,9E9,9E9]];
安全点pHome
CONST robtarget pPartCheck:=[[-171.652051037,-737.574027743,468.168521378],[0.701868271,-0.020784671,0.712000437,0.002075084],[0,-1,0,0],[9E9,9E9,9E9,9E9,9E9,9E9]];
产品视觉检测点
CONST robtarget pRelPart1:=[[-249.936787289,-35.537358372,115.066954193],[0.506064708,-0.506729912,0.482576145,0.504225716],[0,-1,0,1],[9E9,9E9,9E9,9E9,9E9,9E9]];
冷却台产品放置点1
CONST robtarget pRelPart2:=[[-1069.116434473,-29.765794459,124.564800542],[0.503010468,-0.50990052,0.485758769,0.501019309],[0,-1,0,1],[9E9,9E9,9E9,9E9,9E9,9E9]];
冷却台产品放置点2
CONST robtarget pRelPart3:=[[-896.806913336,-511.146776415,-286.764492689],[0.505651488,-0.507161439,0.483008924,0.503791849],[0,-1,0,1],[9E9,9E9,9E9,9E9,9E9,9E9]];
冷却台产品放置点3
CONST robtarget pRelPart4:=[[-236.714507131,-536.90763484,-282.088774622],[0.504522446,-0.508336069,0.484188144,0.50260659],[-1,-2,0,1],[9E9,9E9,9E9,9E9,9E9,9E9]];
冷却台产品放置点4
CONST robtarget pRelCNV:=[[-1635.680769575,-264.873338752,-110.176859052],[0.010165395,0.701881937,-0.00702991,-0.712186065],[0,-2,0,1],[9E9,9E9,9E9,9E9,9E9,9E9]];
输送链产品放置点
CONST robtarget pPickDCM10:=[[1174.58,-6.95,1557.78],[0.638375,-0.0820886,0.762059,-0.070745],[-1,0,-1,0],[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]];
压铸机产品拾取等待点
CONST robtarget pWaitDCM10:=[[1174.58,-6.95,1557.78],[0.638375,-0.0820886,0.762059,-0.070745],[-1,0,-1,0],[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]];
压铸机外等待点
CONST robtarget pMoveOutDie:=[[337.109921171,746.132828813,128.173761254],[0.683704858,0.165160382,0.683234825,-0.196111929],[-2,-2,0,1],[9E9,9E9,9E9,9E9,9E9,9E9]];
错误处理等待点
CONST robtarget pRelDaPart:=[[337.109921171,746.132828813,128.173761254],[0.683704858,0.165160382,0.683234825,-0.196111929],[-2,-2,0,1],[9E9,9E9,9E9,9E9,9E9,9E9]];
不良产品放置点
ENDMODULE
MODULE ExtMain
程序运行模块
PROC rTeachPath()
示教目标点程序
MoveJ pWaitDCM,v10,fine,tGripper\\WObj:=wobjDCM;压铸机外过渡点
MoveJ pPickDCM,v10,fine,tGripper\\WObj:=wobjDCM;压铸机取料点
MoveJ pHome,v10,fine,tGripper\\WObj:=wobjDCM;安全点
MoveJ pMoveOutDie,v10,fine,tGripper\\WObj:=wobjDCM;压铸机外等待点
MoveJ pRelDaPart,v10,fine,tGripper\\WObj:=wobjDCM;不良品放置点
MoveJ pPartCheck,v10,fine,tGripper\\WObj:=wobjCool;产品视觉检测点
MoveJ pRelPart1,v10,fine,tGripper\\WObj:=wobjCool;冷却台产品放置点1
MoveJ pRelPart2,v10,fine,tGripper\\WObj:=wobjCool;冷却台产品放置点2
MoveJ pRelPart3,v10,fine,tGripper\\WObj:=wobjCool;冷却台产品放置点3
MoveJ pRelPart4,v10,fine,tGripper\\WObj:=wobjCool;冷却台产品放置点4
MoveJ pRelCNV,v10,fine,tGripper\\WObj:=wobjCool;输送链产品放置点
ENDPROC
PROC rPowerON()
安全区域例行程序
PosExtRobSafe1:=[-600,-1300,1450];
长方体安全区对角点1
PosExtRobSafe2:=[580,-2700,7];
长方体安全区对角点2
WZBoxDef\\Inside,shExtRobSafe,PosExtRobSafe1,PosExtRobSafe2;
由对角点1,、2,定义一个方形安全区域,方形安全区域内部有效
WZDOSet\\Stat,wzExtRobSafe\\Inside,shExtRobSafe,do05RobInDCM,1;
进入方形安全区域输出信号设置
ENDPROC
PROC main()
主程序
rIninAll;调用初始化例行程序
WHILE TRUE DO
调用WHILE循环指令,并且用绝对真实条件Ture形成死循环,将初始化程序隔离
IF di01DCMAuto=1 THEN
IF条件判断指令,di01DCMAuto为压铸机处于自动状态信号,即当压铸机处于自动联机状态
才开始执行取件程序
rExtracting;调用取件例行程序
rCheckPart;调用产品检测例行程序
IF bFullOfCool=TRUE THEN
条件判断指令,判断冷却台上的产品是否放满
rRelGoodPart;
调用放置OK产品程序
ELSE
rReturnDCM;
调用返回压铸机位置程序
ENDIF
ENDIF
rCycleTime;调用计时例行程序
WaitTime 0.2;等待时间
ENDWHILE
ENDPROC
PROC rIninAll()
初始化程序,用来复位IO,初始化程序数据及返回Home点等
AccSet 100,100;
加速度控制指令
VelSet 100,3000;
速度控制指令
ConfJ\\Off;
ConfL\\Off;
机器人运动控制指令
rReset_Out;
调用输出信号复位例行程序
rHome;调用回Home点程序
Set do04StartDCM;
压铸机输出给机器人可以取件信号
ENDPROC
PROC rExtracting()
机器人从压铸机取件工作程序
MoveJ pWaitDCM,vFast,z20,tGripper\\WObj:=wobjDCM;
机器人运行到等待位
WaitDI di02DoorOpen,1;
等待压铸机安全门打开
WaitDI di03DieOpen,1\\MaxTime:=6\\TimeFlag:=bDieOpenKO;
等待开模信号,最长等待时间6s,得到信号后将逻辑量置位为Flase,如果没有得到信号则将逻辑量值为TRUE
IF bDieOpenKO=TRUE THEN
当逻辑量为TRUE时表示机器人没有在合理的时间内得到开模信号,此时取件失败
nErrPickPartNo:=1;
将取件失败的数字量置为1
GOTO lErrPick;
调转到错误取件标签lErrPick处
ELSE
nErrPickPartNo:=0;
如取件成功,则将取件失败的数字量置为0
ENDIF
Reset do04StartDCM;
复位机器人开始取件信号
MoveJ Offs(pPickDCM,nPickOff_X,nPickOff_Y,nPickOff_Z),vLow,z10,tGripper\\WObj:=wobjDCM;
MoveJ pPickDCM,vLow,fine,tGripper\\WObj:=wobjDCM;
机器人运行到取件目标点
rGripperClose;调用关闭夹爪例行程序
rSoftActive;调用软伺服激活例行程序
Set do07EjectFWD;置为模具顶针顶出信号
WaitDI di06LsEjectFWD,1\\MaxTime:=4\\TimeFlag:=bEjectKo;
等待模具顶针顶出到位信号,时间4s,在该时间内得到信号则将逻辑量置为False
pPosOK:=CRobT(\\Tool:=tGripper\\WObj:=wobjDCM);
记录机器人当前位置,并赋值给pPosOK
IF bEjectKo=TRUE THEN
当逻辑量为TRUE时,表示顶针顶出失败,则此次取件失败,机器人开始取件失败处理
rSoftDeactive;
调用软伺服失效例行程序
rGripperOpen;
调用夹爪打开例行程序
MoveL Offs(pPosOK,0,0,100),vLow,z10,tGripper\\WObj:=wobjDCM;
以之前记录的目标点偏移
ELSE
当逻辑量为False时,取件成功,机器人开始取件成功处理
WaitTime 0.5;
rSoftDeactive;
调用软伺服失效例行程序
WaitTime 0.5;
等待时间,让软伺服失效完成
MoveL Offs(pPosOK,0,0,200),v300,z10,tGripper\\WObj:=wobjDCM;
以之前记录的目标点偏移
GripLoad LoadPart;
加载产品有效载荷
ENDIF
lErrPick:
错误处理
MoveJ pMoveOutDie,vLow,z10,tGripper\\WObj:=wobjDCM;
压铸机外等待点
Reset do07EjectFWD;
复位模具顶针顶出信号
ENDPROC
PROC rCheckPart()
机器人产品检测工作程序
IF nErrPickPartNo=1 THEN
如果取件失败,则回到Home点,输出取件失败脉冲信号
MoveJ pHome,vFast,fine,tGripper\\WObj:=wobjDCM;
PulseDO\\PLength:=0.2,do12Error;
RETURN ;
ENDIF
MoveJ pHome,vLow,z200,tGripper\\WObj:=wobjDCM;
Set do04StartDCM;
置位机器人开始取件信号
MoveJ pPartCheck,vLow,fine,tGripper\\WObj:=wobjCool;
产品检测点
Set do06AtPartCheck;
置位相机可以检测信号
WaitTime 3;
等待时间
WaitDI di04PartOK,1\\MaxTime:=5\\TimeFlag:=bPartOK;
等待产品检测OK为1,最大等待时间5s,在该时间内得到信号则将逻辑量置为False,反之
ReSet do06AtPartCheck;
复位相机可以检测信号
IF bPartOK=TRUE THEN
若产品检测失败
rRelDamagePart;调用机器人放置不良品例行程序
ELSE
若产品检测成功
rCooling;调用机器人产品冷却程序
ENDIF
ENDPROC
PROC rCooling()
机器人产品冷却程序
TEST nRelPartNo
检测产品放到冷却台的数量
CASE 1:
冷却台产品摆放位置1
MoveJ Offs(pRelPart1,0,0,nCoolOffs_Z),vLow,z50,tGripper\\WObj:=wobjCool;
运动到产品摆放位置1的Z方向偏移200mm的位置
MoveJ pRelPart1,vLow,fine,tGripper\\WObj:=wobjCool;
运动到产品摆放位置1
rGripperOpen;调用松开夹爪例行程序
MoveJ Offs(pRelPart1,0,0,nCoolOffs_Z),vLow,z50,tGripper\\WObj:=wobjCool;
运动到产品摆放位置1的Z方向偏移200mm的位置
CASE 2:
冷却台产品摆放位置2
MoveJ Offs(pRelPart2,0,0,nCoolOffs_Z),vLow,z50,tGripper\\WObj:=wobjCool;
MoveJ pRelPart2,vLow,fine,tGripper\\WObj:=wobjCool;
rGripperOpen;
Movej Offs(pRelPart2,0,0,nCoolOffs_Z),vLow,z50,tGripper\\WObj:=wobjCool;
CASE 3:
冷却台产品摆放位置2
MoveJ Offs(pRelPart3,0,0,nCoolOffs_Z),vLow,z50,tGripper\\WObj:=wobjCool;
MoveJ pRelPart3,vLow,fine,tGripper\\WObj:=wobjCool;
rGripperOpen;
MoveJ Offs(pRelPart3,0,0,nCoolOffs_Z),vLow,z50,tGripper\\WObj:=wobjCool;
CASE 4:
冷却台产品摆放位置2
MoveJ Offs(pRelPart4,0,0,nCoolOffs_Z),vLow,z50,tGripper\\WObj:=wobjCool;
MoveJ pRelPart4,vLow,fine,tGripper\\WObj:=wobjCool;
rGripperOpen;
MoveJ Offs(pRelPart4,0,0,nCoolOffs_Z),vLow,z50,tGripper\\WObj:=wobjCool;
ENDTEST
nRelPartNo:=nRelPartNo+1;
产品放到冷却台的数量加1
IF nRelPartNo>4 THEN
若产品放到冷却台的数量超过4个
bFullOfCool:=TRUE;
将冷却台产品放满布尔量赋值为TRUE
nRelPartNo:=1;
产品放到冷却台的位置号赋值为1
ENDIF
ENDPROC
PROC rRelGoodPart()
机器人放置良品例行程序
WaitDI di05CNVEmpty,1;
等待输送链上无产品为1
IF bFullOfCool=TRUE THEN
若冷却台产品放满逻辑量为真
IF nRelPartNo=1 THEN
若产品放到冷却台的位置为1号位,运动到产品摆放位置1,夹取冷却好的产品
MoveJ Offs(pRelPart1,0,0,nCoolOffs_Z),vLow,z20,tGripper\\WObj:=wobjCool;
MoveJ pRelPart1,vLow,fine,tGripper\\WObj:=wobjCool;
rGripperClose;
MoveJ Offs(pRelPart1,0,0,nCoolOffs_Z),vLow,z20,tGripper\\WObj:=wobjCool;
ELSEIF nRelPartNo=2 THEN
若产品放到冷却台的位置为2号位,运动到产品摆放位置1,夹取冷却好的产品
MoveJ Offs(pRelPart2,0,0,nCoolOffs_Z),vLow,z20,tGripper\\WObj:=wobjCool;
MoveJ pRelPart2,vLow,fine,tGripper\\WObj:=wobjCool;
rGripperClose;
MoveJ Offs(pRelPart2,0,0,nCoolOffs_Z),vLow,z20,tGripper\\WObj:=wobjCool;
ELSEIF nRelPartNo=3 THEN
若产品放到冷却台的位置为3号位,运动到产品摆放位置1,夹取冷却好的产品
MoveJ Offs(pRelPart3,0,0,nCoolOffs_Z),vLow,z20,tGripper\\WObj:=wobjCool;
MoveJ pRelPart3,vLow,fine,tGripper\\WObj:=wobjCool;
rGripperClose;
MoveJ Offs(pRelPart3,0,0,nCoolOffs_Z),vLow,z20,tGripper\\WObj:=wobjCool;
ELSEIF nRelPartNo=4 THEN
若产品放到冷却台的位置为4号位,运动到产品摆放位置1,夹取冷却好的产品
MoveJ Offs(pRelPart4,0,0,nCoolOffs_Z),vLow,z20,tGripper\\WObj:=wobjCool;
MoveJ pRelPart4,vLow,fine,tGripper\\WObj:=wobjCool;
rGripperClose;
MoveJ Offs(pRelPart4,0,0,nCoolOffs_Z),vLow,z20,tGripper\\WObj:=wobjCool;
ENDIF
WaitTime 0.2;等待0.2秒,防止CPU过载
ENDIF
MoveJ Offs(pRelCNV,0,0,nCoolOffs_Z),vLow,z20,tGripper\\WObj:=wobjCool;
运动到输送链产品放置点上方
MoveL pRelCNV,vLow,fine,tGripper\\WObj:=wobjCool;
运动到输送链产品放置点
rGripperOpen;
调用松开夹爪例行程序
MoveL Offs(pRelCNV,0,0,nCoolOffs_Z),vLow,z20,tGripper\\WObj:=wobjCool;
运动到输送链产品放置点上方200mm
MoveL Offs(pRelCNV,0,0,300),vLow,z50,tGripper\\WObj:=wobjCool;
运动到输送链产品放置点上方300mm
MoveJ Offs(pRelPart2,0,0,nCoolOffs_Z),vFast,z50,tGripper\\WObj:=wobjCool;
运动到产品摆放位置2上方200mm处
MoveJ pPartCheck,vFast,z100,tGripper\\WObj:=wobjCool;
运动到产品检测位
MoveJ pHome,vFast,z100,tGripper\\WObj:=wobjDCM;
运动到安全点
ENDPROC
PROC rRelDamagePart()
机器人放置不良品例行程序
ConfJ\\off;关节轴配置功能关闭
MoveJ pHome,vLow,z20,tGripper\\WObj:=wobjCool;
运动至安全点
MoveJ pMoveOutDie,vLow,z20,tGripper\\WObj:=wobjCool;
运动到压铸机外过渡等待点
MoveJ pRelDaPart,vLow,fine,tGripper\\WObj:=wobjCool;
运动不良品放置点
rGripperOpen;调用松开夹爪例行程序
MoveL pMoveOutDie,vLow,z20,tGripper\\WObj:=wobjCool;
运动到压铸机外过渡等待点
ConfJ\\on;
关节轴配置功能打开
ENDPROC
FUNC bool bCurrentPos(robtarget ComparePos,INOUT tooldata TCP)
安全点位置检测功能程序
VAR num Counter:=0;
VAR robtarget ActualPos;
ActualPos:=CRobT(\\Tool:=TCP\\WObj:=wobjDCM);
IF ActualPos.trans.x>ComparePos.trans.x-25 AND ActualPos.trans.x<ComparePos.trans.x+25 Counter:=Counter+1;
IF ActualPos.trans.y>ComparePos.trans.y-25 AND ActualPos.trans.y<ComparePos.trans.y+25 Counter:=Counter+1;
IF ActualPos.trans.z>ComparePos.trans.z-25 AND ActualPos.trans.z<ComparePos.trans.z+25 Counter:=Counter+1;
IF ActualPos.rot.q1>ComparePos.rot.q1-0.1 AND ActualPos.rot.q1<ComparePos.rot.q1+0.1 Counter:=Counter+1;
IF ActualPos.rot.q2>ComparePos.rot.q2-0.1 AND ActualPos.rot.q2<ComparePos.rot.q2+0.1 Counter:=Counter+1;
IF ActualPos.rot.q3>ComparePos.rot.q3-0.1 AND ActualPos.rot.q3<ComparePos.rot.q3+0.1 Counter:=Counter+1;
IF ActualPos.rot.q4>ComparePos.rot.q4-0.1 AND ActualPos.rot.q4<ComparePos.rot.q4+0.1 Counter:=Counter+1;
RETURN Counter=7;
ENDFUNC
PROC rCheckHomePos()
检测机器人是否在Home点程序
VAR robtarget pActualPos1;
IF NOT bCurrentPos(pHome,tGripper) THEN
pActualpos1.trans.z:=pHome.trans.z;
MoveL pActualpos1,v100,z10,tGripper;
MoveL pHome,v100,fine,tGripper;
ENDIF
ENDPROC
PROC rReset_Out()
机器人复位输出信号例行程序,在初始化程序中调用
Reset do04StartDCM;
Reset do06AtPartCheck;
Reset do07EjectFWD;
Reset do09E_Stop;
Reset do12Error;
Reset do03GripperOFF;
Reset do01RobInHome;
ENDPROC
PROC rCycleTime()
机器人计时例行程序
ClkStop clock1;
nCTime:=ClkRead(clock1);
TPWrite "the cycletime is "\\Num:=nCTime;
ClkReset clock1;
ClkStart clock1;
ENDPROC
PROC rSoftActive()
软伺服激活例行程序
SoftAct 1,99;
机器人关节轴1,软化度99%
SoftAct 2,100;
SoftAct 3,100;
SoftAct 4,95;
SoftAct 5,95;
SoftAct 6,95;
WaitTime 0.3;
ENDPROC
PROC rSoftDeactive()
软同服失效例行程序
SoftDeact;
WaitTime 0.3;
ENDPROC
PROC rHome()
回Home点程序
MoveJ pHome,vFast,fine,tGripper\\WObj:=wobjDCM;
ENDPROC
PROC rGripperOpen()
夹爪松开例行程序
Reset do03GripperOFF;
Set do02GripperON;
WaitTime 0.3;
ENDPROC
PROC rGripperClose()
夹爪闭合例行程序
Set do03GripperOFF;
Reset do02GripperON;
WaitTime 0.3;
ENDPROC
PROC rReturnDCM()
机器人返回到取件安全位置程序
MoveJ pPartCheck,vFast,z100,tGripper\\WObj:=wobjCool;
MoveJ pHome,vFast,z100,tGripper\\WObj:=wobjDCM;
ENDPROC
ENDMODULE
以上就是关于pos机料主,ABB机器人压铸或CNC上下料的知识,后面我们会继续为大家整理关于pos机料主的知识,希望能够帮助到大家!
