关键词不能为空

当前您在: 主页 > 英语 >

ABB左右码垛详细解说

作者:高考题库网
来源:https://www.bjmy2z.cn/gaokao
2021-02-09 08:44
tags:

-

2021年2月9日发(作者:剧照英文)



MODULE MainMoudle



PERS


wobjdata


Wob jPallet_L:=[FALSE,TRUE,


1,0,0,0]]]


!定义左侧码盘工件坐标系


WobjPallet_L



PERS


wobjdata


WobjPallet_R:=[FALSE,TRUE,


,0,0 ,0]]];



!定义右侧码盘工件坐标系


WobjPallet_R



PERS


tooldata


tGripper:=[TRUE,[[0,0,527],[1,0,0,0]],[20 ,[0,0,150],[1,0,0,0],0,0,0]];


!定义工具坐标系数据


tGripper



PERS loaddata LoadFull:=[20,[0,0,300],[1,0,0,0],0,0,0.1];




!定义有效载荷数据


LoadFull



PERS wobjdata CurWobj;




!定义工件坐标系数据

< p>
CurWobj


,此工件坐标系作为当前使用坐标系。即当在左侧码垛时,


将左侧码盘坐标系


WobjPllaet_L

< br>赋值给该数据;当在右侧码垛时,则将


WobjPllaet_R


赋值


给该数据




PERS


jointtarget


jposHome:=[[0,0,0,0,0,0],[9E+09,9E+09,9E+09,9E+09, 9E+09,9E+09]];


!定义关节目标点数据,各关节轴数值为


0


,用于手动将机器人运动至各关节轴机械零位




CONST


robtarget


pPlaceBase0_L:=[[296.473529255,212.2106 4316,3.210904169],[0,0.70711295,-0.707100

612,0],[-2,0,-3,0],[9E9,9E9,9E9,9E9,9E9,9E9]];


!左侧不旋转放置基准位置




CONST


robtarget


p PlaceBase90_L:=[[218.407102669,695.953395421,3.210 997808],[0,-0.000001669,1,0],


[-2,0,-2,0 ],[9E9,9E9,9E9,9E9,9E9,9E9]];


!左侧旋转


90


°放置基准位置




CONST


robtarget


p PlaceBase0_R:=[[296.473529255,212.21064316,3.21090 4169],[0,0.707221603,-0.70699


194,0],[1, 0,0,0],[9E9,9E9,9E9,9E9,9E9,9E9]];


!右侧旋转不旋转放置基准位置




CONST


robtarget


p PlaceBase90_R:=[[218.407102669,695.953395421,3.210 997808],[0,-0.00038594,0.9999


99926,0],[ 1,0,1,0],[9E9,9E9,9E9,9E9,9E9,9E9]];


!右 侧旋转


90


°放置基准位置




CONST


robtarget


pPick_L:=[[1627.550991372,-426.97466135 2,-26.736921885],[0,0.707109873,-0.707103

689,0],[-1,0,-2,0],[9E9,9E9,9E9,9E9,9E9,9E9]];


!左侧抓取位置




CONST


robtarget


p Pick_R:=[[1611.055992534,442.364097921,-26.7365840 68],[0,0.707220363,-0.7069931


81,0],[0,0 ,-1,0],[9E9,9E9,9E9,9E9,9E9,9E9]];



!右侧抓取位置





CONST


robtarget


pHome:=[[1505.00,-0.00,878.55],[1.28548 E-06,0.707107,-0.707107,-1.26441E-06],[0,

0,-2,0],[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]];


!程序起始点,即


Home





PERS robtarget pPlaceBase0;


PERS robtarget pPlaceBase90;


PERS robtarget pPick;



PERS robtarget pPlace;



!定义目标点数据,这些数据是机器人当前 使用的目标点。当在左侧、右侧码垛时,将对应


的左侧、右侧基准点赋值给这些数据




PERS robtarget pPickSafe;




!机器人 将产品抓取后需提升至一定的安全高度,才能向码垛位置移动,随着摆放位置逐层


加高, 此数据在程序中会被赋予不同的数值,以防止机器人与码放号的产品发生碰撞




PERS num nCycleTime:=3.803;


!定义数字型数据,用于存储单次节拍时间



PERS num nCount_L:=1;




PERS num nCount_R:=1;





!定义 数字型数据,分别用于左侧、右侧码垛计数,在计算位置子程序中根据该计数计


算出相应 的放置位置





PERS num nPallet:=2;





!定义数字型数据,利用


TEST


指令判断此数值,从而决定执行哪侧的码垛任务,


1


为左


侧,


2


为右侧





PERS num nPalletNo:=1;






定义数 字型数据,


利用


TEST


指令判断此数 值,


从而决定执行哪垛计数累计,


1


为 左侧,


2


为右侧



PERS num nPickH:=300;




PERS num nPlaceH:=400;





!定义 数字型数据,分别对应的是抓取、放置时的一个高度。例如


nPickH:=300,< /p>


则表示


机器人快速移动至抓取位置上放


3 00mm


处,然后慢速移动至抓取位置,接着慢速将产品提升


至 抓取位置上放


300mm


处,最后再快速移动至其他位置



PERS num nBoxL:=605;


PERS num nBoxW:=405;




PERS num nBoxH:=300;




!定义三个数字型数据,分别对应 的是产品长、宽、高。在计算位置程序中,通过在放


置基准点上面叠加长、宽、高数值计 算处放置位置





VAR clock Timer1;






!定义时钟数据,用于计时





PERS bool bReady:=TRUE;






定义布尔量数据,


作为主程序逻辑判断条件,


当左右两侧有任何一侧满足码垛条件时,


此布尔量均为


TRU E,


即机器人会执行码垛任务,


否则该布尔量为


FLASE



机器人会等待直至条

件满足



PERS bool bPalletFull_L:=FALSE;




PERS bool bPalletFull_R:=FALSE;





定义两 个布尔数据,


当机器人在左侧码垛时,



bPallet_L



TURE


,< /p>


bPallet_R



FALSE,


当机器人在右侧时,则相反





PERS bool bGetPosition:=FALSE;




!定义两个布尔量数据,判断是否已计算出当前取放位置




VAR triggdata HookAct;




VAR triggdata HookOff;




!定义两 个触发数据,分别对应的是夹具上面钩爪收紧及松开动作




VAR intnum iPallet_L;




VAR intnum iPallet_R;





!定义 两个中断符,对应左侧、右侧码盘更换时所需触发的相应复位操作,如满载信号


复位等< /p>



PERS speeddata vMinEmpty:=[2000,400,6000,1000];


PERS speeddata vMidEmpty:=[3000,400,6000,1000];


PERS speeddata vMaxEmpty:=[5000,500,6000,1000];


PERS speeddata vMinLoad:=[1000,200,6000,1000];


PERS speeddata vMidLoad:=[2500,500,6000,1000];




PERS speeddata vMaxLoad:=[4000,500,6000,1000];




!定义多种速度数据,分别对应空载时高、中、低速,以及满 载时的高、中、低速,便


于对机器人的各个动作进行速度控制




PERS


num


Compensation{15,3}:=[[0,0,0],[0,0,0],[0,0,0],[ 0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,


0,0], [0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0 ,0,0]];


!定义二维数组,用于各摆放位置的偏差调整;


15


组数据,对应


15


个摆放位置, 每组数据


3


个数值,对应


X

< p>


Y



Z


的偏差值





PROC main()


!主程序





rInitAll;




!调用初始化程序,包括复位信号 、复位程序数据、初始化中断等





WHILE TRUE DO



< /p>


!利用


WHILE


循环,将初始化程序隔 离开,即只在第一次运行时需要执行一次初始化程


序,之后循环执行拾取放置动作




IF bReady THEN




!利用


I F


条件判断,当左右两侧至少有一侧满足码垛条件时,判断条件


bReady



TRUE,



器人则执行码垛任务




rPick;


!调用抓取程序





rPlace;


!调用放置程序





ENDIF





rCycleCheck;


!调用循环检测程序,里面包含写屏显示循环时间、码垛个数、判断当前左右两侧状况等




Wait Time 0.05


!循环等待时间,防止不满足机器人动作条件的情况下程序执行进入无限循环状态,造成机< /p>


器人控制


CPU


过负荷

< br>


ENDWHILE


ENDPROC



PROC rInitAll()


!初始化程序





rCheckHomePos;




!调用检测


Home


点程序,若机器人在


Home


点,则直接执行后面的指 令,否则机器人先


安全返回


Home


点 ,然后再执行后面的指令



ConfLOFF;



ConfJOFF;



!关闭轴配置监控




nCount_L:=1;




nCount_R:=1;




!初始化左右两侧码垛计数数据




nPallet:=1;


!初始化两侧码垛任务标识,


1


为左侧,


2


为右侧




nPalletNo:=1; < /p>


!初始化两侧码垛计数累计标识,


1


为左 侧,


2


为右侧




bPalletFull_L:=FALSE;



bPalletFull_R:=FALSE;


!初始化左右两侧码垛满载布尔量




bGetPosition:=FALSE;


!初始化计算位 置标识,


FALSE


为未完成计算,


T RUE


为已完成计算




Reset do00_ClampAct;



Reset do01_HookAct;


!初始化夹具,夹板张开和钩爪松开




ClkStop Timer1;


!停止时钟计时




ClkReset Timer1;



!复位时钟




TriggEquip HookAct,100,0.1DOp:=do01_HookAct,1;


!定 义触发事件:钩爪收紧。朝向指定目标点运动时提前


100mm


收紧钩爪,即将产品钩住,


提前动作时间为


0.1





TriggEquip HookOff,100Start,0.1DOp:=do01_HookAct,0;




!定义触发事件:钩爪松开。距离 之后加上可选参变量


Start


,则表示在离开起点

< p>
100mm



松开钩爪,提前动作时间为


0.1





IDelete iPallet_L;


CONNECT iPallet_L WITH tEjectPallet_L;




ISignalDI di02_PalletInPos_L,0,iPallet_L;





!中断初始化,当左侧满载码盘到 位信号为


0


时,即表示满载码盘被取走,则触发中断

< p>
程序


iPallet_L,


复位左侧满载信号、满 载布尔量



IDelete iPallet_R;


CONNECT iPallet_R WITH tEjectPallet_R;




ISignalDI di03_PalletInPos_R,0,iPallet_R;






!中断 初始化,当右侧满载码盘单位信号变为


0


时,即表示满载码盘被 取走,则触发中


断程序


iPallet_R

,复位右侧满载信号、满载布尔量等



ENDPROC



PROC rPick()


!抓取程序





ClkReset Timer1;




!复位时钟





ClkStart Timer1;





!开始计时





rCalPosition;




!计算位置,包括抓取位置、抓取安全位置、放置位置等




MoveJ Offs(pPick,0,0,nPickH ),vMaxEmpty,z50,tGripperWObj:=wobj0;


< /p>


!利用


MoveJ


移动至抓取位置正上方




MoveL pPick,vMinLoad,fine,tGripperWObj:=wobj0;

< br>!利用


MoveL


移动至抓取位置




Set do00_ClampAct;



!置位夹板信号,将夹板收紧,夹取产品




Waittime 0.3;


< /p>


!预留夹具动作时间,以保证夹具已将产品收紧,等待时间根据实际情况来调整其大小;若


有夹紧反馈信号,则可利用


WaitDI


指令等待反馈信号变为


1


,从而替代固定的等待时间




GripLoad LoadFull;



!加载载荷数据




TriggL Offs(pPick,0,0,nPick H),vMinLoad,HookAct,z50,tGripperWObj:=wobj0;



!利用


TriggL


移动至抓取正上方,并调用触发事件


HookAct


, 即在距离到达点


100mm


处将钩


爪收 紧,防止产品在快速移动中掉落




MoveL pPickSafe,vMaxLoad,z100,tGripperWObj:=wobj0;



!利用


MoveL

< br>移动至抓取位置



ENDPROC



PROC rPlace()


!放置程序




MoveJ Offs(pPlace,0,0,nPlaceH),vMaxLoad ,z50,tGripperWObj:=CurWobj;


!利用


MoveJ


移动至放置位置正上方




TriggL pPlace,vMinLoad,Hook Off,fine,tGripperWObj:=CurWobj;



利用


TriggL


移动至放置位置,


并调用触发事件


HookOff,


即在离开放置位置正 上方点为


100mm


后将钩爪放开





Reset do00_ClampAct;



!复位夹板信号,夹板松开,放下产品




Waittime 0.3;


< /p>


!预留夹具动作时间,以保证夹具已将产品完全放下,等待时间根据实际情况调整其大小< /p>




GripLoad Load0;


!加载载荷数据


Load0




MoveL Offs(pPlace,0,0,nPlac eH),vMinEmpty,z50,tGripperWObj:=CurWobj;



!


利用


Mo veL


移动至放置位置正上方




rPlaceRD;


!调用放置计数程序,其中会执行计数加


1


操作,并判断当前码盘是否已满载





MoveJ pPickSafe,vMaxEmpty,z50,tGripperWObj:=wobj0;


!利用


MoveJ


移动至抓取安全位置,以等待 执行下一次循环





ClkStop Timer1;


停止计时





nCycleTime:=ClkRead(Timer1);


读取时钟数值,并赋值给


nCycletime



ENDPROC



PROC rCycleCheck()


!周期循环检查



TPErase;



TPWrite



!示教器清屏,并显示当前机器人运行状态




TPWrite



!显示上次循环运行时间




TPWrite




TPWrite



!显示当前左右码 盘上面已摆放产品个数。由于


nCount_L



nCount_R


表示的是下轮循环将


要摆放的第多 少个产品,此处显示的是码盘上已摆放的产品数,所以在当前计数数值上面减



1


IF


(bPalletFull_L=FALSE


AND


di02_PalletInPos_L=1


AND


di00_BoxInPos_L=1)


OR


(bPalletFull_R=FALSE AND di03_PalletInPos_R=1 AND di01_BoxInPos_R=1) THEN





bReady:=TRUE;


ELSE



bReady:=FALSE;


< br>判断当前工作站状况,


只要左右两侧有任何一侧满足码垛条件,

< br>则布尔量


bReady



TRU E



机器人继续执行码垛任务;否则布尔量

bReady



FALSE


,机器 人则等待码垛条件的满足




WaitTime 0.1;





ENDIF




ENDPROC



PROC rCalPosition()


!计算位置程序





bGetPosition:=FALSE;




!复位完成计算位置标识





WHILE bGetPosition=FALSE DO




!若未完成计算位置,则重复执行


WHILE


循 环




TEST nPallet


!利用


TEST


判断 执行码垛检测标识的数值,


1


为左侧,


2


为右侧





CASE 1:


!若为


1

< p>
,则执行左侧检测



IF bPalletFull_L=FALSE AND di02_PalletInPos_L=1 AND di00_BoxInPos_L=1


THEN





!判断左侧是否满足码垛条件,若 条件满足则将左侧的基准位置数值赋值给当前执行位置数





pPick:=pPick_L;






!将左侧抓取目标点数据赋值给当前抓取目标点



pPlaceBase0:=pPlaceBase0_L;



pPlaceBase90:=pPlaceBase90_L;




!将左侧放置位置基准目标点数据赋值给当前放置位置基准点




CurWobj:=WobjPallet_L;




!将左侧码盘工件坐标系数据赋值给当前工件坐标系




pPlace:=pPattern(nCount_L);






!调用 计算放置位置功能程序,同时写入左侧计数参数,从而计算出当前需要摆放的位置数


据, 并赋值给当前放置目标点







bGetPosition:=TRUE;


!已完成计算位置,则将完成计算位置标识为


TURE






nPalletNo:=1;


!将码垛计数标识置为


1


,则后续会执行左侧码垛计算累计




ELSE






bGetPosition:=FALSE;


!若左侧不满足 码垛任务,则完成计算位置位置标识置为


FLASE


,则程序会 再次执行


WHILE


循环




ENDIF



nPallet:=2;


!将码垛检测标识 置为


2


,则下次执行


WHILE


循环时检测右侧是否满足码垛条件





CASE 2:


!若为

< p>
2


,则执行右侧检测




IF bPalletFull_R=FALSE AND di03_PalletInPos_R=1 AND di01_BoxInPos_R=1


THEN


!判断右侧是否满足码垛条件,若条件满足,则将右 侧的基准位置数值赋值给当前执行位置


数据




pPick:=pPick_R;




!将右侧抓取目标点数据赋值给当前抓取目标点



pPlaceBase0:=pPlaceBase0_R;


pPlaceBase90:=pPlaceBase90_R;


!将右侧放置位置基准目标点数据赋值给当前放置位置基准点




CurWobj:=WobjPallet_R;




!将右侧码盘工件坐标系数据赋值给当前工件坐标系




pPlace:=pPattern(nCount_R);





!调用计算放置位置功能程序,同 时写入右侧计数参数,从而计算出当前需要摆放的位置数


据,并赋值给当前放置目标点< /p>







bGetPosition:=TRUE;


!已完成计算位置,则将完成计算位置标识为


TRUE

-


-


-


-


-


-


-


-



本文更新与2021-02-09 08:44,由作者提供,不代表本网站立场,转载请注明出处:https://www.bjmy2z.cn/gaokao/620106.html

ABB左右码垛详细解说的相关文章