新时达机器人码垛示教编程
项目六 码垛工业机器人编程与操作
(1)同一程序内的所有其他标记。 (2)同一程序内的所有数据名称。
任务二 纵横交错式码垛应用编程
三、设计纵横交错式码垛流程
能力目标
能够根据工作任务设计
掌握表达式的基本编辑
能够正确使用计时指令
码垛程序。(1)底座:底座是整个工业机方器人法的。支持部分,具有一定的刚度和稳定计性算,有程固序定时式长和。
移动式两种。
(2)传动机构:包含各种驱动电机、减速器、齿轮、轴承、传送带等部件。 (3)大臂:用来带动小臂,可在较大的运动范围内活动。
1.纵横交错式码垛程序流程 使用跳转结构实现循环,以码放的工件数作 为循环次数,基于工件计数计算每个工件的取放 位置。纵横交错式码垛程序流程如图6-16所示。
任务二 纵横交错式码垛应用编程
2.拾取位置计算 令1、2、3、4号工件为第1行,5、6、7、8号工件为第2行,如图6-9所示。假设Pick 位置为拾取1号工件的位置即基准位置,其XY方向的偏移值为PickOffsX和PickOffsY。令 工件计数为N(从0开始),各工件对应拾取的偏移值的计算方式如下。
任务一 重叠式码垛应用编程
知识链接
一、码垛的定义及垛型
1.码垛的定义 码垛是工业机器人的典型应用,通常分为堆垛和拆垛两种。堆垛是指工业机器人从指定的 位置将相同工件按照特定的垛型进行码垛堆放的过程;拆垛是指工业机器人将按照特定的垛型 进行存放的工件依次取下,搬运至指定位置的过程。如图6-2所示,工业机器人使用吸盘工具吸 持输送带末端的箱子,并将箱子按照2行3列4层的方式堆放到栈板上,即为堆垛;若工业机器人 将栈板上按2行3列4层的方式堆放的箱子一个一个地搬运到输送带上,即为拆垛。
工业机器人码垛模式分析与编程实现
一、系统默认的码垛功能模式 FoxBot 工业机器人的 Remote Console 4.1 操作系统提 供自带的码垛专用指令和码垛数组,针对点位规则排列且动 作重复的应用,系统自带的码垛功能界面可提供更快速便捷 的点位示教和程序编写方式。 系统一共提供了 4 种码垛排列模式,分别为一维阵列、 三角形平面阵列、矩形平面阵列以及长方体三维立体阵列。 每种码垛模式都有不同的边界控制点,由其决定最终的码垛 排列模式,如图 1 所示。码垛执行顺序按照图中箭头方向所 示执行。
修改放置点的 y 坐标分量
修改放置点的 z 坐标分量
n3+1
延时后回归原点
结束
图 2 三重循环修改放置点坐标的码垛程序流程图
靠与平稳流畅。程序流程图如图 2 所示: 该码垛程序编写如下: Sub Main Dim n1,n2,n3 As Integer n3=0 S3:n2=0 S2:n1=0 S1:If n1<3 Then
二、利用基本指令编写的通过三重循环修改放置点坐标 的码垛程序
主要利用坐标动作完成后,依次修改码垛 放置点位的 x、y、z 坐标,从而完成三维立体的码垛模式。
下面我们简单举例说明这种实现方法。 假定:目标货品为棱长 100mm 的正方体包装盒,我们
需要将目标货品码垛成一个 3×2×2 长方体三维立体阵列, x 方向为 3 个目标货品,y 方向为 2 个目标货品,z 方向为 2 个目标货品。码垛初始点坐标 P(0)=(x,y,z,rx,ry,rz) =(200,200,0,0,0,0)。为简明展现编程过程,下面的编 程未设置出发点位与码垛放置点位之间的过渡点和码垛放置 点位上方的减速点,但在实际的码垛轨迹规划过程中,这两 种类型的点位则是必不可少的,可以保证运行轨迹的安全可
23机器人码垛现场编程
工业机器人码垛现场编程主讲:王晓勇学习目标学会码垛目标点示教学会常用码垛程序编写目录》0102码垛指令编程码垛现场程序案例1码垛指令编程当关闭轴配置监控后,机器人在运动过程中采取最接近当前轴配置数据的配置到达指定目标点。
一、码垛指令编程运动控制指令-ConfL应用:对机器人运行姿态进行限制与调整,程序运行时,使机器人运行姿态得到控制。
系统默认值为ConfL \on。
实例:ConfL\on; ConfL\off;限制:机器人冷启动,新程序载入与程序重置后,系统自动设置为默认值。
备注一、码垛指令编程运动控制指令-ClkReset实例ClkReset clock;Clock:时钟名称。
(Clock )应用:将机器人相应的时钟复位,常用于记录循环时间或机器人跟踪输送链。
ClkReset clock1; ClkStart Clock1; RunCycle; ClkStop Clock1;nCycleTime:=ClkRead(clock1);TPWrite “Last Cycle Time:“\Num:=nCycleTime一、码垛指令编程运动触发指令-TriggIOTriggIO TriggData,Distance[\Start]|[\Time][\Dop]|[\Gop]|[\Aop]|[\ProcID],SetValue[\DODelay];[TriggData]: 触发变量名称。
(triggdata)Distance: 触发距离mm。
(unm)[\Start]: 触发起始开关。
(switch)[\Time]: 时间触发开关。
(switch)[\Dop]: 时间数字输出。
(signaldo)一、码垛指令编程运动触发指令-TriggIOTriggIO TriggData,Distance[\Start]|[\Time][\Dop]|[\Gop]|[\Aop]|[\ProcID],SetValue[\DODelay];[\Gop] : 触发组合输出。
新时达STEP机器人程序编程PPT课件
码垛机器人程序代码
码垛机器人程序代码MODULE Module_stackingVAR num DN250:=0;VAR num DN300:=0;VAR num DN350:=0;VAR num DN400:=0;VAR num DN450:=0;VAR num DN500:=0;VAR num DN600:=0;VAR num DN700:=0;VAR num DN750:=0;VAR num DN800:=0;VAR num DN900:=0;VAR num DN1000:=0;VAR num singlelaxxxxyer_250:=4; VAR num singlelaxxxxyer_300:=4; VAR num singlelaxxxxyer_350:=3; VAR num singlelaxxxxyer_400:=3; VAR num singlelaxxxxyer_450:=3; VAR num singlelaxxxxyer_500:=4; VAR num singlelaxxxxyer_600:=2; VAR num singlelaxxxxyer_700:=2; VAR num singlelaxxxxyer_750:=1; VAR num singlelaxxxxyer_800:=1; VAR num singlelaxxxxyer_900:=1; VAR num singlelaxxxxyer_1000:=1; !..............................VAR num Totallaxxxxyer_L_250:=5; VAR num Totallaxxxxyer_L_300:=5; VAR num Totallaxxxxyer_L_350:=5;VAR num Totallaxxxxyer_L_400:=5; VAR num Totallaxxxxyer_L_450:=4; VAR num Totallaxxxxyer_L_500:=4; VAR num Totallaxxxxyer_L_600:=4; VAR num Totallaxxxxyer_L_700:=4; VAR num Totallaxxxxyer_L_750:=4; VAR num Totallaxxxxyer_L_800:=4; VAR num Totallaxxxxyer_L_900:=4; VAR num Totallaxxxxyer_L_1000:=4; !..............................VAR num Totallaxxxxyer_R_250:=5; VAR num Totallaxxxxyer_R_300:=5; VAR num Totallaxxxxyer_R_350:=5; VAR num Totallaxxxxyer_R_400:=5; VAR num Totallaxxxxyer_R_450:=4; VAR num Totallaxxxxyer_R_500:=4; VAR num Totallaxxxxyer_R_600:=4; VAR num Totallaxxxxyer_R_700:=4; VAR num Totallaxxxxyer_R_750:=4; VAR num Totallaxxxxyer_R_800:=4; VAR num Totallaxxxxyer_R_900:=4; VAR num Totallaxxxxyer_R_1000:=4;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!VAR bool One_number:=true; VAR bool two_number:=true;VAR num products_num:=0;VAR num One_num:=1;VAR num two_num:=1;PERS num nCouny_L:=0;PERS num nCouny_R:=0;PERS num nPickH:=500;PERS num nPlaceh:=500;PERS bool bPallet_L:=FALSE; PERS intnum INTN1;VAR intnum intno1:=0;VAR intnum intno2:=0;!!!!!!!!!!!!!!!VAR bool flag1:=FALSE;VAR bool flag2:=FALSE;VAR bool flag3:=FALSE;VAR bool flag4:=FALSE;VAR bool flag5:=FALSE;VAR bool flag6:=FALSE;VAR bool flag7:=FALSE;VAR bool flag8:=FALSE;VAR bool flag9:=FALSE;VAR bool lock1:=true;VAR bool DI7_2UP_Down1:=FALSE; VAR bool DI4_1UP_Down1:=FALSE; !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! CHAN PIN ZHONG XIN JU!var num Line_1_array:=0;var num Line_2_array:=0;var num Line_Distance250 :=430;var num Line_Distance300 :=550;var num Line_Distance350 :=430;var num Line_Distance400 :=0;var num Line_Distance450 :=600;var num Line_Distance500 :=430;var num Line_Distance600 :=430;var num Line_Distance700 :=430;var num Line_Distance750 :=430;var num Line_Distance800 :=430;var num Line_Distance900 :=430;var num Line_Distance1000 :=430;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!FANG ZHI DIAN WEI!!!!!!!!!!!!!!!!!!!!!!!!!!CONST speeddata speed1:=[1000];CONST speeddata speed2:=[000];CONST speeddata speed3:=[000];PROC main()rInitAll;MoveJ HOMEspeed1z100GripperTool1\WObj:=wobj0; WHILE TRUE DODI7_DI4_INTERRUPT;option_program;stacking_program;ENDWHILEENDPROCPROC option_program()IF DI10_3num=1 AND DI11_7num=1 AND DI12_5num=1 AND DI13_6num=1 THEN DN600:=21;flag1:=TRUE;flag4:=TRUE;TPWrite "DN600";ELSEDN600:=0;flag1:=False;flag4:=False;endifIF DI10_3num=1 AND DI11_7num=1 AND DI12_5num=1 and flag1=FALSE THEN DN500:=15;flag2:=TRUE;flag4:=TRUE;TPWrite "DN500";ELSEflag2:=False;flag4:=False;DN500:=0;endif!....................IF DI11_7num=1 AND DI12_5num=1 AND flag1=FALSE AND flag2=FALSE THEN DN1000:=12;flag9:=TRUE;TPWrite "DN1000";ELSEDN1000:=0;flag9:=False;endif!....................IF DI12_5num=1 AND DI13_6num=1 AND flag1=FALSE THENDN900:=11;flag4:=TRUE;flag8:=TRUE;TPWrite "DN900";ELSEDN900:=0;flag4:=False;endif!..............IF DI11_7num=1 AND DI13_6num=1 and flag1=False THENDN800:=13;flag4:=TRUE;flag7:=TRUE;TPWrite "DN800";ELSEDN800:=0;flag4:=False;flag7:=False;endifIF DI10_3num=1 AND DI13_6num=1 AND flag1=false THENDN750:=9;flag6:=TRUE;flag4:=TRUE;TPWrite "DN750";ELSEDN750:=0;flag6:=False;flag4:=False;endifIF DI10_3num=1 AND DI12_5num=1 AND flag1=false AND flag2=false THEN DN700:=8;flag5:=TRUE;TPWrite "DN700";ELSEDN700:=0;flag5:=False;flag4:=False;endifIF DI10_3num=1 AND DI11_7num=1 and flag1=FALSE AND flag2=FALSE THEN DN450:=10;flag4:=TRUE;TPWrite "DN450";ELSEDN450:=0;flag4:=False;endifIF DI13_6num=1 AND flag4=FALSE AND flag2=FALSE and flag1=FALSE AND flag6=False AND flag7=False AND flag8=False THENDN400:=6;TPWrite "DN400";ELSEDN400:=0;endifIF DI12_5num=1 AND flag4=FALSE AND flag2=FALSE and flag1=FALSE AND flag5=FALSE AND flag8=False AND flag9=False THENDN350:=5;TPWrite "DN350";ELSEDN350:=0;endiFIF DI11_7num=1 AND flag4=FALSE AND flag2=FALSE and flag1=FALSE AND flag7=False AND flag9=False THENDN300:=7;TPWrite "DN300";ELSEDN300:=0;endifIF DI10_3num=1 AND flag4=FALSE AND flag2=FALSE and flag1=FALSE AND flag5=FALSE AND flag6=False THENDN250:=3;TPWrite "DN250";ELSEDN250:=0;endifENDPROCPROC stacking_program()!!!DN250!!!WHILE DN250=3 DOrDN250;AccSet 1010;VelSet 1003000;IF DI1_Prepare=1 AND DI3_conveyor_STOP=1 AND DI15_start=1 AND lock1=true THENPick_Materials;lock1:=FALSE;ENDIFIF DI4_1UP_Down1=TRUE AND nCouny_L< Totallaxxxxyer_L_250 ANDOne_number=TRUE AND DI15_start=0 and lock1=false THENtwo_number:=FALSE;place_1_250;lock1:=true;ENDIFIF DI1_Prepare=1 AND DI3_conveyor_STOP=1 AND DI15_start=1 AND lock1=true THENPick_Materials;lock1:=FALSE;ENDIFIF DI7_2UP_Down1=TRUE AND nCouny_R< Totallaxxxxyer_R_250 ANDtwo_number=TRUE AND DI15_start=0 and lock1=false THENOne_number:=FALSE;place_2_250;lock1:=TRUE;ENDIFENDWHILE!!!DN300!!!WHILE DN300=7 DOrDN300;AccSet 1010;VelSet 1003000;IF DI1_Prepare=1 AND DI3_conveyor_STOP=1 AND DI15_start=1 AND lock1=true THENPick_Materials;lock1:=FALSE;ENDIFIF DI4_1UP_Down1=TRUE AND nCouny_L< Totallaxxxxyer_L_300 ANDOne_number=TRUE AND DI15_start=0 and lock1=false THENtwo_number:=FALSE;place_1_300;lock1:=TRUE;ENDIFIF DI1_Prepare=1 AND DI3_conveyor_STOP=1 AND DI15_start=1 AND lock1=true THENPick_Materials;lock1:=FALSE;ENDIFIF DI7_2UP_Down1=TRUE AND nCouny_R< Totallaxxxxyer_R_300 ANDtwo_number=TRUE AND DI15_start=0 and lock1=false THENOne_number:=FALSE;place_2_300;lock1:=TRUE;ENDIFENDWHILE!!!DN350!!!WHILE DN350=5 DOrDN350;AccSet 1010;VelSet 1003000;IF DI1_Prepare=1 AND DI3_conveyor_STOP=1 AND DI15_start=1 AND lock1=true THENPick_Materials;lock1:=FALSE;ENDIFIF DI4_1UP_Down1=TRUE AND nCouny_L< Totallaxxxxyer_L_350 ANDOne_number=TRUE AND DI15_start=0 and lock1=false THENtwo_number:=FALSE;place_1_350;lock1:=TRUE;ENDIFIF DI1_Prepare=1 AND DI3_conveyor_STOP=1 AND DI15_start=1 AND lock1=true THENPick_Materials;lock1:=FALSE;ENDIFIF DI7_2UP_Down1=TRUE AND nCouny_R< Totallaxxxxyer_R_350 ANDtwo_number=TRUE AND DI15_start=0 and lock1=false THENOne_number:=FALSE;place_2_350;lock1:=TRUE;ENDIFENDWHILE!!!DN400!!!WHILE DN400=6 DOrDN400;AccSet 1010;VelSet 1003000;IF DI1_Prepare=1 AND DI3_conveyor_STOP=1 AND DI15_start=1 AND lock1=true THENPick_Materials;lock1:=FALSE;ENDIFIF DI4_1UP_Down1=TRUE AND nCouny_L< Totallaxxxxyer_L_400 ANDOne_number=TRUE AND DI15_start=0 and lock1=false THENtwo_number:=FALSE;place_1_400;lock1:=TRUE;ENDIFIF DI1_Prepare=1 AND DI3_conveyor_STOP=1 AND DI15_start=1 AND lock1=true THENPick_Materials;lock1:=FALSE;ENDIFIF DI7_2UP_Down1=TRUE AND nCouny_R<Totallaxxxxyer_R_400 ANDtwo_number=TRUE AND DI15_start=0 and lock1=false THENOne_number:=FALSE;place_2_400;lock1:=TRUE;ENDIFENDWHILE!!!DN450!!!WHILE DN450=10 DOrDN450;AccSet 1010;VelSet 1003000;IF DI1_Prepare=1 AND DI3_conveyor_STOP=1 AND DI15_start=1 AND lock1=true THENPick_Materials;lock1:=FALSE;ENDIFIF DI4_1UP_Down1=TRUE AND nCouny_L< Totallaxxxxyer_L_450 ANDOne_number=TRUE AND DI15_start=0 and lock1=false THENtwo_number:=FALSE;place_1_450;lock1:=TRUE;ENDIFIF DI1_Prepare=1 AND DI3_conveyor_STOP=1 AND DI15_start=1 AND lock1=true THENPick_Materials;lock1:=FALSE;ENDIFIF DI7_2UP_Down1=TRUE AND nCouny_R<Totallaxxxxyer_R_450 ANDtwo_number=TRUE AND DI15_start=0 and lock1=false THENOne_number:=FALSE;place_2_450;lock1:=TRUE;ENDIFENDWHILE!!!DN500!!!WHILE DN500=15 DOrDN500;AccSet 1010;VelSet 1003000;IF DI1_Prepare=1 AND DI3_conveyor_STOP=1 AND DI15_start=1 AND lock1=true THENPick_Materials;lock1:=FALSE;ENDIFIF DI4_1UP_Down1=TRUE AND nCouny_L< Totallaxxxxyer_L_500 ANDOne_number=TRUE AND DI15_start=0 and lock1=false THENtwo_number:=FALSE;place_1_500;lock1:=TRUE;ENDIFIF DI1_Prepare=1 AND DI3_conveyor_STOP=1 AND DI15_start=1 AND lock1=true THENPick_Materials;lock1:=FALSE;ENDIFIF DI7_2UP_Down1=TRUE AND nCouny_R< Totallaxxxxyer_R_500 ANDtwo_number=TRUE AND DI15_start=0 and lock1=false THENOne_number:=FALSE;place_2_500;lock1:=TRUE;ENDIFENDWHILE!!!DN600!!!WHILE DN600=21 DOrDN600;AccSet 1010;VelSet 1003000;IF DI1_Prepare=1 AND DI3_conveyor_STOP=1 AND DI15_start=1 AND lock1=true THENPick_Materials;lock1:=FALSE;ENDIFIF DI4_1UP_Down1=TRUE AND nCouny_L< Totallaxxxxyer_L_600 ANDOne_number=TRUE AND DI15_start=0 and lock1=false THENtwo_number:=FALSE;place_1_600;lock1:=TRUE;ENDIFIF DI1_Prepare=1 AND DI3_conveyor_STOP=1 AND DI15_start=1 AND lock1=true THENPick_Materials;lock1:=FALSE;ENDIFIF DI7_2UP_Down1=TRUE AND nCouny_R< Totallaxxxxyer_R_600 ANDtwo_number=TRUE AND DI15_start=0 and lock1=false THENOne_number:=FALSE;place_2_600;lock1:=TRUE;ENDIFENDWHILE!!!DN700!!!WHILE DN700=8 DOrDN700;AccSet 1010;VelSet 80 3000;IF DI1_Prepare=1 AND DI3_conveyor_STOP=1 AND DI15_start=1 ANDlock1=true THENPick_Materials;lock1:=FALSE;ENDIFIF DI4_1UP_Down1=TRUE AND nCouny_L< Totallaxxxxyer_L_700 ANDOne_number=TRUE AND DI15_start=0 and lock1=false THENtwo_number:=FALSE;place_1_700;lock1:=TRUE;ENDIFIF DI1_Prepare=1 AND DI3_conveyor_STOP=1 AND DI15_start=1 AND lock1=true THENPick_Materials;lock1:=FALSE;ENDIFIF DI7_2UP_Down1=TRUE AND nCouny_R< Totallaxxxxyer_R_700 ANDtwo_number=TRUE AND DI15_start=0 and lock1=false THENOne_number:=FALSE;place_2_700;lock1:=TRUE;ENDIFENDWHILE!!!DN750!!!WHILE DN750=9 DOrDN750;AccSet 1010;VelSet 80 3000;IF DI1_Prepare=1 AND DI3_conveyor_STOP=1 AND DI15_start=1 AND lock1=true THENPick_Materials;lock1:=FALSE;ENDIFIF DI4_1UP_Down1=TRUE AND nCouny_L< Totallaxxxxyer_L_750 ANDOne_number=TRUE AND DI15_start=0 and lock1=false THENtwo_number:=FALSE;place_1_750;lock1:=TRUE;ENDIFIF DI1_Prepare=1 AND DI3_conveyor_STOP=1 AND DI15_start=1 AND lock1=true THENPick_Materials;lock1:=FALSE;ENDIFIF DI7_2UP_Down1=TRUE AND nCouny_R< Totallaxxxxyer_R_750 ANDtwo_number=TRUE AND DI15_start=0 and lock1=false THENOne_number:=FALSE;place_2_750;lock1:=TRUE;ENDIFENDWHILE!!!DN800!!!WHILE DN800=13 DOrDN800;AccSet 1010;VelSet 503000;IF DI1_Prepare=1 AND DI3_conveyor_STOP=1 AND DI15_start=1 AND lock1=true THENPick_Materials;lock1:=FALSE;ENDIFIF DI4_1UP_Down1=TRUE AND nCouny_L< Totallaxxxxyer_L_800 ANDOne_number=TRUE AND DI15_start=0 and lock1=false THENtwo_number:=FALSE;place_1_800;lock1:=TRUE;ENDIFIF DI1_Prepare=1 AND DI3_conveyor_STOP=1 AND DI15_start=1 AND lock1=true THENPick_Materials;lock1:=FALSE;ENDIFIF DI7_2UP_Down1=TRUE AND nCouny_R< Totallaxxxxyer_R_800 ANDtwo_number=TRUE AND DI15_start=0 and lock1=false THENOne_number:=FALSE;place_2_800;lock1:=TRUE;ENDIFENDWHILE!!!DN900!!!WHILE DN900=11 DOrDN900;AccSet 1010;VelSet 503000;IF DI1_Prepare=1 AND DI3_conveyor_STOP=1 AND DI15_start=1 AND lock1=true THENPick_Materials;lock1:=FALSE;ENDIFIF DI4_1UP_Down1=TRUE AND nCouny_L< Totallaxxxxyer_L_900 ANDOne_number=TRUE AND DI15_start=0 and lock1=false THENtwo_number:=FALSE;place_1_900;lock1:=TRUE;ENDIFIF DI1_Prepare=1 AND DI3_conveyor_STOP=1 AND DI15_start=1 AND lock1=true THENPick_Materials;lock1:=FALSE;ENDIFIF DI7_2UP_Down1=TRUE AND nCouny_R< Totallaxxxxyer_R_900 ANDtwo_number=TRUE AND DI15_start=0 and lock1=false THENOne_number:=FALSE;place_2_900;lock1:=TRUE;ENDIFENDWHILE!!!DN1000!!!WHILE DN1000=12 DOrDN1000;AccSet 1010;VelSet 503000;IF DI1_Prepare=1 AND DI3_conveyor_STOP=1 AND DI15_start=1 AND lock1=true THENPick_Materials;lock1:=FALSE;ENDIFIF DI4_1UP_Down1=TRUE AND nCouny_L< Totallaxxxxyer_L_1000 ANDOne_number=TRUE AND DI15_start=0 and lock1=false THENtwo_number:=FALSE;place_1_1000;lock1:=TRUE;ENDIFIF DI1_Prepare=1 AND DI3_conveyor_STOP=1 AND DI15_start=1 AND lock1=true THENPick_Materials;lock1:=FALSE;ENDIFIF DI7_2UP_Down1=TRUE AND nCouny_R< Totallaxxxxyer_R_1000 ANDtwo_number=TRUE AND DI15_start=0 and lock1=false THENOne_number:=FALSE;place_2_1000;lock1:=TRUE;ENDIFENDWHILEENDPROCPROC place_1_250()rPosition1_250;MoveL Offs(Place100nPlaceh) speed2 z100 GripperTool1\WObj:=wobj0;MoveL Place1 speed3 fine GripperTool1\WObj:=wobj0;ReSet DO2_safety;WaitTime 2;MoveL Offs(Place100nPlaceh) speed3 z100 GripperTool1\WObj:=wobj0; MoveJ put22 speed1 z100 GripperTool1;MoveJ HOME speed1 z100 GripperTool1;rPlaceRD1_250;ENDPROCPROC place_1_300()rPosition1_300;MoveL Place1 speed3 fine GripperTool1\WObj:=wobj0;ReSet DO2_safety;WaitTime 2;MoveL Offs(Place100nPlaceh) speed3 z100 GripperTool1\WObj:=wobj0; MoveJ put22 speed1 z100 GripperTool1;MoveJ HOME speed1 z100 GripperTool1;rPlaceRD1_300;ENDPROCPROC place_1_350()rPosition1_350;MoveL Offs(Place100nPlaceh) speed2 z100 GripperTool1\WObj:=wobj0; MoveL Place1 speed3 fine GripperTool1\WObj:=wobj0;ReSet DO2_safety;WaitTime 2;MoveL Offs(Place100nPlaceh) speed3 z100 GripperTool1\WObj:=wobj0; MoveJ put22 speed1 z100 GripperTool1;MoveJ HOME speed1 z100 GripperTool1;rPlaceRD1_350;ENDPROCPROC place_1_400()rPosition1_400;MoveL Offs(Place100nPlaceh) speed2 z100 GripperTool1\WObj:=wobj0; MoveL Place1 speed3 fine GripperTool1\WObj:=wobj0;ReSet DO2_safety;WaitTime 2;MoveJ put22 speed1 z100 GripperTool1;MoveJ HOME speed1 z100 GripperTool1;rPlaceRD1_400;ENDPROCPROC place_1_450()rPosition1_450;MoveL Offs(Place100nPlaceh) speed2 z100 GripperTool1\WObj:=wobj0; MoveL Place1 speed3 fine GripperTool1\WObj:=wobj0;ReSet DO2_safety;WaitTime 2;MoveL Offs(Place100nPlaceh) speed3 z100 GripperTool1\WObj:=wobj0; MoveJ put22 speed1 z100 GripperTool1;MoveJ HOME speed1 z100 GripperTool1;rPlaceRD1_450;ENDPROCPROC place_1_500()rPosition1_500;MoveJ Place_a_1 speed2 z100 GripperTool1;MoveL Offs(Place100nPlaceh) speed2 z100 GripperTool1\WObj:=wobj0; MoveL Place1 speed3 fine GripperTool1\WObj:=wobj0;ReSet DO2_safety;WaitTime 2;MoveL Offs(Place100nPlaceh) speed3 z100 GripperTool1\WObj:=wobj0; MoveJ put22 speed1 z100 GripperTool1;MoveJ HOME speed1 z100 GripperTool1;rPlaceRD1_500;ENDPROCPROC place_1_600()rPosition1_600;MoveL Offs(Place100nPlaceh) speed2 z100 GripperTool1\WObj:=wobj0; MoveL Place1 speed3 fine GripperTool1\WObj:=wobj0;ReSet DO2_safety;WaitTime 2;MoveL Offs(Place100nPlaceh) speed3 z100 GripperTool1\WObj:=wobj0; MoveJ put22 speed1 z100 GripperTool1;MoveJ HOME speed1 z100 GripperTool1;rPlaceRD1_600;ENDPROCPROC place_1_700()rPosition1_700;MoveL Offs(Place100nPlaceh) speed2 z100 GripperTool1\WObj:=wobj0; MoveL Place1 speed3 fine GripperTool1\WObj:=wobj0;ReSet DO2_safety;WaitTime 2;MoveL Offs(Place100nPlaceh) speed3 z100 GripperTool1\WObj:=wobj0; MoveJ put22 speed1 z100 GripperTool1;MoveJ HOME speed1 z100 GripperTool1;rPlaceRD1_700;ENDPROCPROC place_1_750()rPosition1_750;MoveJ Offs(Place100nPlaceh) speed2 z100 GripperTool1\WObj:=wobj0; MoveL Place1 speed3 fine GripperTool1\WObj:=wobj0;ReSet DO2_safety;WaitTime 2;MoveJ Offs(Place100nPlaceh) speed3 z100 GripperTool1\WObj:=wobj0; MoveJ put22 speed1 z100 GripperTool1;MoveJ HOME speed1 z100 GripperTool1;rPlaceRD1_750;ENDPROCPROC place_1_800()rPosition1_800;MoveJ Offs(Place100nPlaceh) speed2 z100 GripperTool1\WObj:=wobj0; MoveL Place1 speed3 fine GripperTool1\WObj:=wobj0;ReSet DO2_safety;WaitTime 2;MoveJ Offs(Place100nPlaceh) speed3 z100 GripperTool1\WObj:=wobj0; MoveJ put22 speed1 z100 GripperTool1;MoveJ HOME speed1 z100 GripperTool1;rPlaceRD1_800;ENDPROCPROC place_1_900()rPosition1_900;MoveL Offs(Place100nPlaceh) speed2 z100 GripperTool1\WObj:=wobj0; MoveL Place1 speed3 fine GripperTool1\WObj:=wobj0;ReSet DO2_safety;WaitTime 2;MoveL Offs(Place100nPlaceh) speed3 z100 GripperTool1\WObj:=wobj0; MoveJ put22 speed1 z100 GripperTool1;MoveJ HOME speed1 z100 GripperTool1;rPlaceRD1_900;ENDPROCPROC place_1_1000()rPosition1_1000;MoveL Offs(Place100nPlaceh) speed2 z100 GripperTool1\WObj:=wobj0; MoveL Place1 speed3 fine GripperTool1\WObj:=wobj0;ReSet DO2_safety;WaitTime 2;MoveL Offs(Place100nPlaceh) speed3 z100 GripperTool1\WObj:=wobj0; MoveJ put22 speed1 z100 GripperTool1;MoveJ HOME speed1 z100 GripperTool1;rPlaceRD1_1000;ENDPROCPROC place_2_250()rPosition2_250;MoveJ put2 speed2 z50 GripperTool1;MoveL Offs(Place200nPlaceh) speed2 z50 GripperTool1\WObj:=wobj0;MoveL Place2 speed3 fine GripperTool1\WObj:=wobj0;Reset DO2_safety;WaitTime 2;MoveL Offs(Place200nPlaceh) speed3 z50 GripperTool1\WObj:=wobj0; MoveJ put12 speed1 z50 GripperTool1;MoveJ put32 speed1 z50 GripperTool1;MoveJ HOME speed1 z50 GripperTool1;rPlaceRD2_250;ENDPROCPROC place_2_300()rPosition2_300;MoveJ put2 speed2 z50 GripperTool1;MoveL Offs(Place200nPlaceh) speed2 z50 GripperTool1\WObj:=wobj0; MoveL Place2 speed3 fine GripperTool1\WObj:=wobj0;Reset DO2_safety;WaitTime 2;MoveL Offs(Place200nPlaceh) speed3 z50 GripperTool1\WObj:=wobj0; MoveJ put12 speed1 z50 GripperTool1;MoveJ put32 speed1 z50 GripperTool1;MoveJ HOME speed1 z50 GripperTool1;rPlaceRD2_300;ENDPROCPROC place_2_350()rPosition2_350;MoveJ put2 speed2 z50 GripperTool1;MoveL Offs(Place200nPlaceh) speed2 z50 GripperTool1\WObj:=wobj0; MoveL Place2 speed3 fine GripperTool1\WObj:=wobj0;Reset DO2_safety;WaitTime 2;MoveL Offs(Place200nPlaceh) speed3 z50 GripperTool1\WObj:=wobj0; MoveJ put12 speed1 z50 GripperTool1;MoveJ put32 speed1 z50 GripperTool1;rPlaceRD2_350;ENDPROCPROC place_2_400()rPosition2_400;MoveJ put2 speed2 z50 GripperTool1;MoveL Offs(Place200nPlaceh) speed2 z50 GripperTool1\WObj:=wobj0; MoveL Place2 speed3 fine GripperTool1\WObj:=wobj0;Reset DO2_safety;WaitTime 2;MoveL Offs(Place200nPlaceh) speed3 z50 GripperTool1\WObj:=wobj0; MoveJ put12 speed1 z50 GripperTool1;MoveJ put32 speed1 z50 GripperTool1;MoveJ HOME speed1 z50 GripperTool1;rPlaceRD2_400;ENDPROCPROC place_2_450()rPosition2_450;MoveJ put2 speed2 z50 GripperTool1;MoveL Offs(Place200nPlaceh) speed2 z50 GripperTool1\WObj:=wobj0; MoveL Place2 speed3 fine GripperTool1\WObj:=wobj0;Reset DO2_safety;WaitTime 2;MoveL Offs(Place200nPlaceh) speed3 z50 GripperTool1\WObj:=wobj0; MoveJ put12 speed1 z50 GripperTool1;MoveJ put32 speed1 z50 GripperTool1;rPlaceRD2_450;ENDPROCPROC place_2_500()rPosition2_500;MoveJ put2 speed2 z50 GripperTool1;MoveL Offs(Place200nPlaceh) speed2 z50 GripperTool1\WObj:=wobj0; MoveL Place2 speed3 fine GripperTool1\WObj:=wobj0;Reset DO2_safety;WaitTime 2;MoveL Offs(Place200nPlaceh) speed3 z50 GripperTool1\WObj:=wobj0; MoveJ put12 speed1 z50 GripperTool1;MoveJ put32 speed1 z50 GripperTool1;MoveJ HOME speed1 z50 GripperTool1;rPlaceRD2_500;ENDPROCPROC place_2_600()rPosition2_600;MoveJ put2 speed2 z50 GripperTool1;MoveL Offs(Place200nPlaceh) speed2 z50 GripperTool1\WObj:=wobj0; MoveL Place2 speed3 fine GripperTool1\WObj:=wobj0;Reset DO2_safety;WaitTime 2;MoveL Offs(Place200nPlaceh) speed3 z50 GripperTool1\WObj:=wobj0;MoveJ put32 speed1 z50 GripperTool1;MoveJ HOME speed1 z50 GripperTool1;rPlaceRD2_600;ENDPROCPROC place_2_700()rPosition2_700;MoveJ put2 speed2 z50 GripperTool1;MoveL Offs(Place200nPlaceh) speed2 z50 GripperTool1\WObj:=wobj0; MoveL Place2 speed3 fine GripperTool1\WObj:=wobj0;Reset DO2_safety;WaitTime 2;MoveL Offs(Place200nPlaceh) speed3 z50 GripperTool1\WObj:=wobj0; MoveJ put12 speed1 z50 GripperTool1;MoveJ put32 speed1 z50 GripperTool1;MoveJ HOME speed1 z50 GripperTool1;rPlaceRD2_700;ENDPROCPROC place_2_750()rPosition2_750;MoveJ put2 speed2 z50 GripperTool1;MoveJ Offs(Place200nPlaceh) speed2 z50 GripperTool1\WObj:=wobj0; MoveL Place2 speed3 fine GripperTool1\WObj:=wobj0;Reset DO2_safety;WaitTime 2;MoveJ Offs(Place200nPlaceh) speed3 z50 GripperTool1\WObj:=wobj0; MoveJ put12 speed1 z50 GripperTool1;MoveJ put32 speed1 z50 GripperTool1;MoveJ HOME speed1 z50 GripperTool1;rPlaceRD2_750;ENDPROCPROC place_2_800()rPosition2_800;MoveJ put2 speed2 z50 GripperTool1;MoveJ Offs(Place200nPlaceh) speed2 z50 GripperTool1\WObj:=wobj0; MoveL Place2 speed3 fine GripperTool1\WObj:=wobj0;Reset DO2_safety;WaitTime 2;MoveJ Offs(Place200nPlaceh) speed3 z50 GripperTool1\WObj:=wobj0; MoveJ put12 speed1 z50 GripperTool1;MoveJ put32 speed1 z50 GripperTool1;MoveJ HOME speed1 z50 GripperTool1;rPlaceRD2_800;ENDPROCPROC place_2_900()rPosition2_900;MoveJ put2 speed2 z50 GripperTool1;!MoveJ put42 speed2 z50 GripperTool1;!MoveJ put52 speed2 z50 GripperTool1;!MoveJ put82 speed2 z50 GripperTool1;MoveJ Offs(Place200nPlaceh) speed2 z50 GripperTool1\WObj:=wobj0; MoveL Place2 speed3 fine GripperTool1\WObj:=wobj0;Reset DO2_safety;WaitTime 2;MoveJ Offs(Place200nPlaceh) speed3 z50 GripperTool1\WObj:=wobj0; MoveJ put12 speed1 z50 GripperTool1;MoveJ put32 speed1 z50 GripperTool1;MoveJ HOME speed1 z50 GripperTool1;rPlaceRD2_900;ENDPROCPROC place_2_1000()rPosition2_1000;MoveJ put2 speed2 z50 GripperTool1;MoveL Offs(Place200nPlaceh) speed2 z50 GripperTool1\WObj:=wobj0; MoveL Place2 speed3 fine GripperTool1\WObj:=wobj0;Reset DO2_safety;WaitTime 2;MoveL Offs(Place200nPlaceh) speed3 z50 GripperTool1\WObj:=wobj0; MoveJ put12 speed1 z50 GripperTool1;MoveJ put32 speed1 z50 GripperTool1;MoveJ HOME speed1 z50 GripperTool1;rPlaceRD2_1000;ENDPROCPROC Pick_Materials()Set DO1_coring;pick_products;MoveJ Target_40speed1z100GripperTool1\WObj:=wobj0;MoveL offs(Pick_product00nPickH)speed1z100GripperTool1\WObj:=wobj0; Reset DO1_coring;MoveL Pick_product speed3 fine GripperTool1\WObj:=wobj0;Set DO2_safety;WaitTime 2;MoveL offs(Pick_product00nPickH) speed3 z100 GripperTool1\WObj:=wobj0; MoveJ Target_40speed2z100GripperTool1\WObj:=wobj0;Set DO1_coring;ENDPROCPROC rModpos()MoveJ HOME speed1 z100 GripperTool1\WObj:=wobj0; !.............MoveL Pick_250 speed1 fine GripperTool1\WObj:=wobj0;MoveL Pick_300 speed1 fine GripperTool1\WObj:=wobj0;MoveL Pick_350 speed1 fine GripperTool1\WObj:=wobj0;MoveL Pick_400 speed1 fine GripperTool1\WObj:=wobj0;MoveL Pick_450 speed1 fine GripperTool1\WObj:=wobj0;MoveL Pick_500 speed1 fine GripperTool1\WObj:=wobj0;MoveL Pick_600 speed1 fine GripperTool1\WObj:=wobj0;MoveL Pick_700 speed1 fine GripperTool1\WObj:=wobj0;MoveL Pick_750 speed1 fine GripperTool1\WObj:=wobj0;MoveL Pick_800 speed1 fine GripperTool1\WObj:=wobj0;MoveL Pick_900 speed1 fine GripperTool1\WObj:=wobj0; MoveL Pick_1000 speed1 fine GripperTool1\WObj:=wobj0; !............MoveJ Place_250_1 speed1 z50 GripperTool1;MoveJ Place_250_2 speed1 z50 GripperTool1;MoveJ Place_300_1 speed1 z50 GripperTool1;MoveJ Place_300_2 speed1 z50 GripperTool1;MoveJ Place_350_1 speed1 z50 GripperTool1;MoveJ Place_350_2 speed1 z50 GripperTool1;MoveJ Place_400_1 speed1 z50 GripperTool1;MoveJ Place_400_2 speed1 z50 GripperTool1;MoveJ Place_450_1 speed1 z50 GripperTool1;MoveJ Place_450_2 speed1 z50 GripperTool1;MoveJ Place_500_1 speed1 z50 GripperTool1;MoveJ Place_500_2 speed1 z50 GripperTool1;MoveJ Place_600_1 speed1 z50 GripperTool1;MoveJ Place_600_2 speed1 z50 GripperTool1;MoveJ Place_700_1 speed1 z50 GripperTool1;MoveJ Place_700_2 speed1 z50 GripperTool1;MoveJ Place_750_1 speed1 z50 GripperTool1;MoveJ Place_750_2 speed1 z50 GripperTool1;MoveJ Place_800_1 speed1 z50 GripperTool1;MoveJ Place_800_2 speed1 z50 GripperTool1;MoveJ Place_900_1 speed1 z50 GripperTool1;MoveJ Place_900_2 speed1 z50 GripperTool1;MoveJ Place_1000_1 speed1 z50 GripperTool1;MoveJ Place_1000_2 speed1 z50 GripperTool1; !..........MoveJ Place_300_1_90 speed1 z50 GripperTool1;!MoveJ Place_300_2_90 speed1 z50 GripperTool1;PROC rPosition1_250 ()Place1 := Place_250_1;Place1.rot := Place_250_1.rot;Place1.robconf := Place_250_1.robconf;Place1. trans.y:= Place_250_1. trans.y+Line_Distance250*Line_1_array; ENDPROCPROC rPosition1_300()TEST One_numCASE 1:Place1 := Place_300_1;Place1.rot := Place_300_1.rot;Place1.robconf := Place_300_1.robconf;CASE 2:Place1.trans.y := Place_300_1.trans.y+550;Place1.rot := Place_300_1.rot;Place1.robconf := Place_300_1.robconf;CASE 3:Place1.trans.y := Place_300_1.trans.y+1100;Place1.rot := Place_300_1.rot;Place1.robconf := Place_300_1.robconf;CASE 4:Place1 := Place_300_1_90;Place1.rot := Place_300_1_90.rot;Place1.robconf := Place_300_1_90.robconf;DEFAULT:Stop;ENDTESTPROC rPosition1_350()TEST One_numCASE 1:Place1 := Place_350_1;Place1.rot := Place_350_1.rot;Place1.robconf :=Place_350_1.robconf; CASE 2:Place1.trans.y := Place_350_1.trans.y+600; Place1.rot := Place_350_1.rot;Place1.robconf :=Place_350_1.robconf; CASE 3:Place1.trans.y := Place_350_1.trans.y+1200; Place1.rot := Place_350_1.rot;Place1.robconf :=Place_350_1.robconf; DEFAULT:Stop;ENDTESTENDPROCPROC rPosition1_400()TEST One_numCASE 1:Place1 := Place_400_1;Place1.rot := Place_400_1.rot;Place1.robconf :=Place_400_1.robconf; CASE 2:Place1.trans.y := Place_400_1.trans.y+600; Place1.rot := Place_400_1.rot;Place1.robconf :=Place_400_1.robconf; CASE 3:Place1.trans.y := Place_400_1.trans.y+1200; Place1.rot := Place_400_1.rot;。
新时达STEP机器人附加轴配置、操作与编程ppt课件
上海新时达电气股份有限公司
图:附加轴系统配置界面
在
中选择附加轴系统的
个数,下拉菜单中可选择。如果附加轴系统中有导轨,则将使
用导轨复选框选中。
8
上海新时达电气股份有限公司 以两个附加轴系统,并且使用导轨为例,配置说明如下: 将“附加轴系统个数”中选择“2”,勾选复选框“使用导轨”,界面中将显示 如下图:
11
上海新时达电气股份有限公司
附加轴系统配置说明
注:X Y Z A B C 参数计算规则为:连杆坐标系i先沿x方向移动,再沿 y方向移动,再沿z方向移动,移动到i+1坐标系原点后,将坐标系i绕x 轴方向转动了一个角度,得到i’ 后,再绕i’的y轴方向转动一个角度 得到i’’,再绕i’’的z轴方向旋转一个角度后,与i+1重合。那么 Y Z A B C就是从坐标系i经过上面所述规则变换到与i+1重合所移动和 旋转的量。其中z方向为轴的轴线方向。
5
上海新时达电气股份有限公司
附加轴系统的耦合与非耦合
表 在不同坐标系下,导轨运动与机器人运动关系
参考的坐标系
导轨运动,机器人是否运动 变位机运动,机器人是否运动
关节坐标系Joint
否
否
世界坐标系World
是
否
基坐标系Base
否
否
工具坐标系Tool
是
否
变位机坐标系ExSys
是
是
用户自定义坐标系UserSys 是
12
上海新时达电气股份有限公司
机器人附加轴配置示例
方法不唯一,如何最好的确定附加轴坐标系? 附加轴坐标系的配置从何下手?
13
上海新时达电气股份有限公司
附加轴系统举例——杰宝变位机系统配置
新时达机器人系统说明书.
6接上连接线缆,将机器人控制系统连接到电源上
7确认电源参数、接通机器人控制系统
8检查风扇的是否旋转及出风方向
9检查安全装置
10配置机器人控制系统与外围设备之间的输入/输出端
外部环境
表1. 3外部环境
步骤说明
1已采用安全防护措施
2周边的环境符合规定(如照明、噪声等级、湿度、温度、大气污染等
图2. 1 SRM1000正面示意图
上述是运动控制器的所有接口描述,机器人控制系统中使用的接口有:电源接口(X101、Ethernet网口(X102, X106, X107、CAN接口(X104。其中,Ethernet网口的作用如下:
X102:LAN0用于EtherCat总线通讯。
X106:LAN1是调试网口,也可用于一些外接网络通讯。
吊运:使用吊车进行吊装的示意图。注意在大臂上添加覆盖物(图示A和B处,预防吊绳对机器人本体的损坏。
搬运:本体搬运时,原则上需调整至下图搬运姿态后,使用搬夹具进行搬运。
A专工装
B固定螺钉8-M8X25
图1. 19机器人的吊运方式
图1. 20机器人的搬运方式
控制柜SRC2设计有两种搬运方式:吊运和搬运,如图1.21所示。
7 SCD -安全转矩关断检测输出-
8 STO1安全转矩关断1
9 ALM+报警信号输出+
10 SS伺服急停输入
11 ALM-报警信号输出- X2-- Ethernet interface In总线输入接口X3-- Ethernet interface Out总线输出接口
X4
12341 PE保护接地
2 R主电源R
2.编码器总线/6*3P*0.2/5m
工业机器人操作与编程 项目五 工业机器人码垛操作与编程
能够根据工艺流程调整要求及程序运行结果,对搬运、装配、码 垛、涂胶等工业机器人应用程序进行调整
项目五
学习指导
根据1+X工业机器人应用编程职业技能等级证书的技能要求,分解工作任务为 :
工作过程
工作任务
学习方法
2.技能点:
(1)观看课程网站实操视频 ; (2)查看操作指南、PPT、交 互式动画等辅导材料; (3)小组讨论完成课程设置的 任务; (4)完成练习、作业和测验等 。
任务1
工业机器人码垛认知
任务1
码垛单元的组成
子任务一 工业机器人码垛认知
工业机器人码垛单元由工业机器人模 块、码垛模块、吸盘工具等组成。码垛模 块放置在多功能工作台上,模块主要由不 同尺寸和不同颜色的工件组成,通过编程 使机器人将工件完成旋转交错的形式,完 成机器人码垛基本操作及编程,码垛单元 组成如图所示。
常用编程指令介绍
1.WHILE循环指令
(1)指令结构 WHILE循环指令执行时当判断条件为真(TRUE)时,循环 体内指令内容将会一直执行,当条件判断表达式为假( FALSE)时,整个循环体停止执行并跳出。如果工作任务 中重复数量可以确定,此指令和前序课程中的FOR指令作 用相同。WHILE循环指令的指令结构如图所示。
任务1
子任务二 设置码垛任务相关参数
(3)指令应用 举例2:如图5-5,此例中WHILE循环指令的判定条
件是真(TRUE),判定条件一直成立,所以程序就会一 直执行,程序指针不会跳出WHILE循环体,此例中 WHILE是一个死循环,即无限循环。通常情况下自动运 行部分可仿照此例进行编写,使机器人正常工作时处于 连续执行状态。
机器人现场编程AS语言示教码垛编程(改)课件
AS语言语法
01
AS语言采用类似于C语言的语法结构,包括变量声 明、条件语句、循环语句等。
02
AS语言支持自定义函数和模块,方便程序员封装和 复用代码。
03
AS语言对代码格式和缩进要求严格,以提高代码的 可读性和可维护性。
AS语言数据类型
01
AS语言支持多种数据类型,包括整型、浮点型、布尔型、字符 串型等。
02
此外,AS语言还支持数组、结构体等复合数据类型,方便程序
员处理复杂的数据结构。
AS语言支持类型转换,允许程序员在必要时将不同类型的数据
03
进行转换。
AS语言控制结构
01
AS语言支持条件语句(if-else )、循环语句(for、while) 等控制结构,方便程序员实现 复杂的逻辑控制。
02
AS语言还支持多线程编程,允 许程序员同时控制多个机器人 或执行多个任务,提高生产效 率。
03
AS语言提供异常处理机制,帮 助程序员处理程序运行过程中 可能出现的错误和异常情况。
03 机器人示教编程
机器人示教编程概念
机器人示教编程是指通过手动操作机 器人,记录下机器人的运动轨迹和姿 态,并将这些信息转换为机器人的程 序代码,从而实现自动化生产的过程 。
优化程序
根据调试结果,对程序进行优化和调整,提高机器人的工作效率和安 全性。
机器人现场编程优化
程序性能优化
针对机器人的运动轨迹和搬运逻辑进行优化,提高机器人的运行 速度和稳定性。
系统集成优化
将机器人与其他自动化设备进行集成,实现更高效的生产线作业, 提高整体生产效率。
机器人现场编程-AS语言示教-立体码垛编程课件
分别表示绝对位置、相对位置和
03
圆弧插补。
控制指令示例
04 WaitDI、WaitTime、WaitGate 等,分别表示等待数字输入信号、 等待时间、等待门信号。
03
立体码垛应用场景与工艺流程
立体码垛概述
立体码垛的概念
立体码垛是指将平面的垛 料进行三维的堆积,形成 高密度的垛型,以满足物 流、仓储等环节的需求。
案例二:某食品厂码垛应用
背景介 绍
某食品厂需要对各种形状和 尺寸的食品进行码垛,以方 便后续的运输和存储。该食 品厂采用了Adept机器人进 行码垛作业,并采用了基于 ROS的机器人操作系统进行 控制。
任务分析
由于食品的形状和尺寸各异, 需要对机器人的运动轨迹进 行精确控制,以确保码垛的 稳定性和安全性。此外,由 于食品的保质期较短,需要 机器人能够快速地完成码垛 作业。
物料特性和应用场景进行设计。
方案设计原则
在进行立体码垛方案设计时,需要 考虑以下原则:安全性、高效性、 可靠性、适应性等。
方案设计步骤
立体码垛方案设计一般包括需求分 析、方案制定、详细设计等步骤。
码垛机器人选型与配置
码垛机器人类型
根据不同的应用场景和工艺要求, 码垛机器人可以分为多种类型, 如直角坐标型、关节型、SCARA 型等。
对学员的寄语和建议
希望学员们能够认真学习和掌 握立体码垛编程技术,为未来 的职业发展打下坚实的基础。
建议学员们多进行实践和探索, 不断提高自己的技能和能力, 以适应未来社会的发展需求。
鼓励学员们积极参与到机器人 技术的研发和应用中来,为推 动机器人技术的发展做出贡献。
谢谢您的聆听
THANKS
06
课程总结与展望
新时达step机器人程序编程
物流自动化
在物流领域,该机器人可以 实现货物的快速分拣、搬运 和码垛,提高了物流运作的 效率和准确性。
医疗设备
新时达Step机器人在医疗设 备领域也有广泛应用,如自 动药物分发、医疗器械的自 动检测等。
服务行业
动态调整
根据机器人实际运行情况动态调整算法参数,以实现 最优性能。
多机器人协同编程
01
02
03
通信协议
建立统一的通信协议,实 现多机器人之间的信息交 互和协同作业。
任务分配
根据机器人性能和任务需 求,合理分配任务人协同作业过程进 行实时监控,根据实际情 况调整机器人行为,确保 任务顺利完成。
自定义库与模块化编程
01
自定义库
根据实际需求,创建自定义库, 封装常用功能和算法,方便程序 调用。
02
03
模块化编程
模块复用
将程序拆分成多个模块,每个模 块负责特定功能,提高代码可读 性和可维护性。
确保模块之间接口规范一致,实 现模块复用,减少重复开发工作 量。
05
案例分析
自动化生产线控制
自动化生产线控制是新时达step机器人程序编程的重要应用 之一。通过编程,机器人可以实现自动化生产线的物料搬运 、装配、检测等任务,提高生产效率,降低人工成本。
在此添加您的文本16字
实现复杂的运动轨迹,如曲线、圆弧和多段线等。
在此添加您的文本16字
考虑机器人的动力学特性和关节限制,确保运动的可行性 和安全性。
传感器应用编程
总结词:利用传感器获取环境信息,实现机器 人与环境的交互和感知。
01
电子教案与课件:《工业机器人现场编程》9.1机器人码垛项目的编程
I/O信号注释
di01_MotorOn
Digital Input
di02_Start
Digital Input
di03_Stop
Digital Input
di04_StartAtMai n di05_EstopReset
Digital Input Digital Input
do01_AutoOn
Digital Output
28m/s2,加速时间 0.07s(0~1m),工作范围580mm。 电气连接: 电源电压: 220V ,50/HZ。 额定功率: 变压器额定功率 3.0KV*A 功耗:0.25KW。 机器人物理特性: 机器人底座尺寸: 180mm*180mm。 机器人高度: 700mm。 质量: 25KG。
表9.5工具坐标Tool1数据
参数名称
参数数值
robothold
TRUE
trans
X
O
Y
O
Z
300
rot
q1
1
Q2
0
Q3
0
Q4
0
mass
2
cog
X0YFra bibliotek0Z
80
其余参数均为默认值
数组、循环指令的应用
在定义程序数据时,可以将同种类型、同种用途的数据存放在同一个数据中,当调 用该数据是需要写明索引号来指定调用的是该数据中的哪一个数据,这就是所谓的 数组。在RAPID中,可以定义一维数组、二维数组以及三维数组。
气源部分主要由一个油水分离器,三个电 磁阀,两个气缸及机器人吸盘夹具组成。 通过油水分离器给整个气路部分的气压进 行调节和供气,同时过滤空气中的水分使 供气干燥避免损坏气动元件。通过若干气 管对气路导通,连接到电磁阀的汇流板。 再通过电磁阀,分别控制气动执行元件动 作(机器人吸盘夹具)。
新时达机器人示教器编程规范
新时达机器人编程规范1 客户所有工件程序统一建立在一个文件夹下面2 程序名可以英语或者拼音等让人容易识别的字符命名,字符后面根据工件型号进行1 2等命名或者以规格型号命名:1600*1200等,文件夹及文件命名如下:Test//文件夹名Product1//文件名Product2//文件名Product3//文件名或者Test//文件夹名Product_1600*1200//文件名Product_1000*800//文件名Product3_800*600文件名3 若程序为焊接应用,程序第一行必须加载tool(tool可以通过3点法,6点法进行示教或者直接填写xyzabc)4 程序中针对不同坐标系,在tool后进行refsys(rf0)的设定5 对IO变量进行初始化6 变量命名:英语或者拼音,后缀根据需要添加数字。
尽量不要直接使用ap0,ap1等,建议用关键字标注,比如ArcPrePos1,ARCEndPOS1等//以上内容为示教器程序注意事项//以下为程序编写完成后,修改配置1 配置开机速度,默认是40%,根据需要修改2修改pause反应,0位马上停,100为完成当前运动语句再停止3 若默认直线速度只有1000mm/s,根据需要修改,根据下图参考焊接规范例程:焊接点使用cp点(笛卡尔坐标点,这样若工具撞了,只要重新试教工具即可,所有点不需要重新试教)此程序为按一下start,程序循环运行,通过Table1或者Table2信号来判断某个工位,若无信号程序一直等待;若希望焊接一遍完成后机器人停止,程序中while(1)不使用While(1)Tool(tool0);//根据需要加载工具Ref(rf0);//根据需要加载坐标系DOSet(Valve1,false);//DO置零初始化Num:=0//变量初始化Table1:=DIRead(DI0);//读取工作台DI信号Table2:=DIRead(DI1); 读取工作台DI信号Dyn(FastSpeed)//设置全局速度Ovl(Ovl90)//设置全局圆滑率,建议90%Ptp(HomePosition);//回原点If (Table1) then//工作台2程序Ptp(ArcPre1)//走到焊接准备点Lin(ArcPos1,ArcPreSpeed,ArcOvl)//直线走到焊接起弧点,速度使用较慢速度走到准备点,圆滑率建议设为0Arcset(Arcdata)//设置电流电压Wlin(ArcPos2,ArcSpeed,ArcOvl)//直线焊接到ArcPos点收弧,使用焊接速度ArcSpeed,圆滑率建议使用0Lin(ArcPos3)//离开收弧点…//完成其他焊接及过度语句End_ifIf (Table2) then//工作台2程序Ptp(ArcPre1)//走到焊接准备点Lin(ArcPos1,ArcPreSpeed,ArcOvl)//直线走到焊接起弧点,速度使用较慢速度走到准备点,圆滑率建议设为0Arcset(Arcdata)//设置电流电压,电压一般为电流1/10左右Wlin(ArcPos2,ArcSpeed,ArcOvl)//直线焊接到ArcPos点收弧,使用焊接速度ArcSpeed,圆滑率建议使用0Lin(ArcPos3)//离开收弧点…//完成其他焊接及过度语句End_ifEnd_while码垛规范例程(使用码垛包)//目前新时达机器人没有ptp和lin之间的圆滑,若ptp和lin之间有卡顿,请全部使用lin 语句,并同时注意ftp中的configurationfile里的机器人配置,直线速度限制,出厂较小,可设置到1800mm/sWhile(1)Dyn(FastSpeed)//设置全局速度Ovl(Ovl90)//设置全局圆滑率,建议90%PalletReset(Pallet1,zero),//对码垛程序清零Bool0:=1;While(bool0)//此标志位若码垛完成变0PTP(HomePos)//回到准备点Ptp(Catch)//走到固定取料点DiWait(LineSignal)//等取料信号DoSet(Valve,True)//夹紧气缸DiWait(ValveOK,True)//等气缸夹紧到位信号Toput(pallet1)//去码垛DoSet(Valve,FALSE)//松开气缸Fromput(pallet1)从码垛处回来End_whileEnd_while搬运规范例程//不使用码垛包,举例4个,while(1)num:=0;//计数清零while(num<4)ptp(HomePos);Lin(PutPos);Posreset(PutPos,offset100,PutPos);Num:=num+1;End_whileend_while多工件程序(伪子程序)假设工件种类通过4路DI输入,构成8421码,在codesys里面做如下编程:Number:dint;SetDint: Step_Robot_SetDINTToHMI;Number:=bool_to_dint(di0)+ 2*bool_to_dint(di1) +4*bool_to_dint(di2)+ 8*bool_to_dint(di3) SetDint(Enable:=1,PortNumber:=0,Data:=Number);//此处端口和示教器的读取数据端口一致以下为示教器程序Num:=DINTEXTRead(DINTEXT)//从plc处读取值,dintext的端口填0If num=1…End_ifIf num=2…End_ifIf num=3…End_ifIf num=4…End_ifCycleStop规范程序//按下停止后,机器人执行完一个cycle再停止While(1)Ptp(a1)Ptp(a2)Ptp(a3)Ptp(a4)Bool0:=DiRead(CycleStop);If bool0=1 thenGoto EndProEnd_ifEnd_whileLP:EndPro自动回原点(倒着走)程序例程DOSET(HomingSig,false)If homing=1 then//如果机器人异常停止,后台获得标志位,程序卸载后重加载,homing 标志位为1Goto HomingProLP:StartProLinNum:=0;//初始化DINTSet(DintExt,LinNum);Ptp(a1)LinNum:=1;DINTSet(DintExt,LinNum);Ptp(a2)LinNum:=2;DINTSet(DintExt,LinNum);Ptp(a3)LinNum:=3;DINTSet(DintExt,LinNum);Ptp(a4)LinNum:=4;DINTSet(DintExt,LinNum);Goto(StartPro)LP: HomingProif LinNum=3 thengoto LIN3end_ifif LinNum=2 thengoto LIN2end_ifif LinNum=1 thengoto LIN1end_ifif LinNum=0 thengoto LIN0end_ifLP:LIN3Ptp(ap3);LP:LIN2Ptp(ap2);LP:LIN1Ptp(ap3);LP:LIN0Ptp(ap0);DOSET(HomingSig,true)//告诉codesys,对homing标志位置0。
新时达机器人示教器编程规范.docx
新时达机器人编程规范1 客户所有工件程序统一建立在一个文件夹下面2 程序名可以英语或者拼音等让人容易识别的字符命名,字符后面根据工件型号进行1 2 等命名或者以规格型号命名:1600*1200 等,文件夹及文件命名如下:Test//文件夹名Product1// 文件名Product2// 文件名Product3// 文件名或者Test//文件夹名Product_1600*1200// 文件名Product_1000*800// 文件名Product3_800*600 文件名3 若程序为焊接应用,程序第一行必须加载tool (tool 可以通过3点法,6点法进行示教或者直接填写xyzabc)4 程序中针对不同坐标系,在tool 后进行refsys(rf0 )的设定5 对IO 变量进行初始化6 变量命名:英语或者拼音,后缀根据需要添加数字。
尽量不要直接使用ap0,ap1 等,建议用关键字标注,比如ArcPrePosI, ARCEndPOSI等// 以上内容为示教器程序注意事项// 以下为程序编写完成后,修改配置1 配置开机速度,默认是40%,根据需要修改2 修改pause 反应,0 位马上停,100 为完成当前运动语句再停止3 若默认直线速度只有1000mm/s, 根据需要修改,根据下图参考5leramp|玳即旳斯的丫使.Cartesian TOverlapping 艇I 呻EOvFifip raiius ckstanoemmern 匿sc^ 魁Wtor:^09iHedixed speed匚irt pEith vetocVt单:'引1 血mim蒔OrienEatlon ^seedk 1 加血\AutDffflatic- Manual Repwhonin毎ftlocity・ 0 —Axit:iom Cart path: 1BOC mrn” Cart orieinlatlan! »J0Acceemcm■U UW1 _Avi5-tOOH Cart path : rrrnFsT cart orteinialliin; 4150.0JerkJ —如iH(xm c«rr patn: 亦/門亦on:IMMJ.O焊接规范例程:焊接点使用cp点(笛卡尔坐标点,这样若工具撞了,只要重新试教工具即可,所有点不需要重新试教)此程序为按一下start,程序循环运行,通过Tablel或者Table2信号来判断某个工位,若无信号程序一直等待;若希望焊接一遍完成后机器人停止,程序中while( 1)不使用While( 1)Tool(toolO);//根据需要加载工具Ref(rfO);〃根据需要加载坐标系DOSet(Valve1,false);//DO 置零初始化Num:=0〃变量初始化Table1:=DIRead(DI0);〃读取工作台DI 信号Table2:=DIRead(DI1);读取工作台DI 信号Dyn (FastSpeed)//设置全局速度Ovl(Ovl90)〃设置全局圆滑率,建议90%Ptp(HomePosition);〃回原点If (Table1) then〃工作台2 程序Ptp(ArcPre1)//走到焊接准备点Lin(ArcPos1, ArcPreSpeed, ArcOvl)//直线走到焊接起弧点,速度使用较慢速度走到准备点,圆滑率建议设为0Arcset(Arcdata)//设置电流电压Wlin( ArcPos2,ArcSpeed,ArcOv)// 直线焊接到ArcPos 点收弧,使用焊接速度ArcSpeed,圆滑率建议使用0Lin (ArcPos3) II离开收弧点••〃完成其他焊接及过度语句En d_ifIf (Table2) the nil工作台2 程序Ptp(ArcPrel)//走到焊接准备点Lin(ArcPos1, ArcPreSpeed, ArcOvI)//直线走到焊接起弧点,速度使用较慢速度走到准备点,圆滑率建议设为0Arcset(Arcdata)//设置电流电压,电压一般为电流1/10左右Wlin( ArcPos2,ArcSpeed,ArcOv)// 直线焊接到ArcPos 点收弧,使用焊接速度ArcSpeed,圆滑率建议使用0Lin( ArcPos3) //离开收弧点••//完成其他焊接及过度语句En d_ifEn d_while码垛规范例程(使用码垛包)//目前新时达机器人没有ptp和lin之间的圆滑,若ptp和lin之间有卡顿,请全部使用lin 语句,并同时注意ftp中的con figurati on file里的机器人配置,直线速度限制,出厂较小,可设置到1800mm/sWhile(1)Dyn (FastSpeed)//设置全局速度Ovl(Ovl90)〃设置全局圆滑率,建议90%PalletReset ( Palletl, zero), // 对码垛程序清零Bool0: =1;While (bool0) //此标志位若码垛完成变0PTP ( HomePos) //回到准备点Ptp (Catch) //走到固定取料点DiWait ( LineSignal) // 等取料信号DoSet ( Valve, True) // 夹紧气缸DiWait(ValveOK,True)〃等气缸夹紧到位信号Toput (palletl ) // 去码垛DoSet ( Valve, FALSE 〃松开气缸Fromput (palletl )从码垛处回来En d_whileEn d_while搬运规范例程〃不使用码垛包,举例4个,while(1)num:=0;〃计数清零while( num<4)ptp(HomePos);Lin( PutPos);Posreset (PutPos, offset100 , PutPos);Num : =num+1 ;End_whileend_while多工件程序(伪子程序)假设工件种类通过4路DI输入,构成8421码,在codesys 里面做如下编程:Number:dint;SetDint: Step_Robot_SetDINTToHMI;Number:=bool_to_dint(di0)+ 2*bool_to_dint(di1) +4*bool_to_dint(di2)+ 8*bool_to_dint(di3)SetDint(Enable:=1,PortNumber:=0,Data:=Number);// 此处端口和示教器的读取数据端口一致以下为示教器程序Num : =DINTEXTRead( DINTEXT 〃从pic 处读取值,dintext 的端口填0If num=1End_ifIf num=2End_ifIf num=3End_ifIf num=4End_ifCycleStop规范程序/按下停止后,机器人执行完一个cycle再停止Whiie(1)Ptp( a1)Ptp( a2)Ptp( a3)Ptp ( a4)Booi0:=DiRead(CycieStop);If booi0=1 thenGoto EndProEnd_ifEnd_whiieLP:EndPro自动回原点(倒着走)程序例程DOSET(HomingSig,false)If homing=1 then// 如果机器人异常停止,后台获得标志位,程序卸载后重加载,标志位homing 为1Goto HomingProLP:StartProLinNum :=0;// 初始化DINTSet(DintExt,LinNum);Ptp ( a1)LinNum :=1;DINTSet(DintExt,LinNum);Ptp ( a2)LinNum :=2;DINTSet(DintExt,LinNum);Ptp ( a3)LinNum :=3;DINTSet(DintExt,LinNum);Ptp( a4)LinNum :=4;DINTSet(DintExt,LinNum);Goto(StartPro)LP: HomingProif LinNum=3 thengoto LIN3end_ifif LinNum=2 thengoto LIN2end_ifif LinNum=1 thengoto LIN1end_ifif LinNum=0 thengoto LIN0end_ifLP:LIN3Ptp(ap3);LP:LIN2Ptp(ap2);LP:LIN1Ptp(ap3);LP:LIN0Ptp(ap0);DOSET(HomingSig true)// 告诉codesys,对homing 标志位置0。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
上海新时达电气股份有限公司
码垛语句(ToPut)
ToPut ( pallet, dynamic, overlap ); ToPut语句运动过程说明如下: 1. 走直线(Lin)到进入点(可选) 2. 走直线(Lin)到前置点(可选) 3. 走直线(Lin)到目标点(必选)
13
上海新时达电气股份有限公司
码垛语句(FromPut)
FromPut ( pallet, dynamic, overlap, isFull ); FromPut语句运动过程说明如下: 1. 走直线(Lin)到后置点(可选) 2. 走直线(Lin)到进入点(可选)
14
上海新时达电气股份有限公司
码垛语句(ToGet)
ToGet ( pallet, dynamic, overlap ); ToGet语句运动过程说明如下: 1. 走直线(Lin)到进入点(可选) 2. 走直线(Lin)到前置点(可选) 3. 走直线(Lin)到目标点(必选)
重复、可标准化的劳动很适合机器人!
上海新时达电气股份有限公司
解码垛变量
• 码垛变量属于 全局变量,只 能在global文 件夹下新建;
• 码垛变量只能 在码垛配置界 面设置参数;
• 配置好码垛变 量的参数后, 码盘上的每个 物件的位置就 确定了;
4
上海新时达电气股份有限公司
解码垛变量
• 解码垛起始点 • 进入点信息 • 在X、Y、Z方向上物件的个数 • 物件与物件之间的距离信息(X、Y、Z方向上) • 解码垛顺序 • 物件的放置方向 • 前置点和后置点信息 • 解码垛参考坐标系
• 新建码垛变量,并配置码盘。----只能在全局变量里新建 • 新建程序,添加解码垛语句。
上海新时达电气股份有限公司
单一码盘解码垛程序示例
19
上海新时达电气股份有限公司
多码盘解码垛程序示例——方法一
uint_WaiCeng:=2;//完成整个流程需要2遍,最外层需要 循环设置成2 LOOP(uint_WaiCeng)DO PalletizingReset(pallet,uint7); PalletizingReset(pallet1,uint8); PalletizingReset(pallet0,uint9);//设置各个码盘初始工件 个数为0 uint10:=3;//根据要求第一次需要横着放3个,所以值为3。 LOOP(uint10)DO ToPut(pallet); FromPut(pallet,NULL,NULL,bool3); END_LOOP//完成第一个码垛的第一轮操作 uint7:=uint7+3;//记录已经放置的物品个数,为第二次 循环时PalletReset语句使用。
上海新时达电气股份有限公司
机器人码垛功能包
上海新时达电气股份有限公司
目录
1 解码垛应用背景 2 解码垛变量 3 解码垛语句
4 解码垛程序示例
2
上海新时达电气股份有限公司
解码垛应用背景
• 解码垛:重复执行搬运、 堆垛操作。
• 特点:重复循环执行。堆 垛过程和垛的距离可标准 化。
• 应用行业:物流、食品加 工等。
PalletizingReset ( pallet, newCount ); 重置码垛变量中当前物件个数。 配置界面和palletizingreset语句均可重置码盘上的物件 个数,但是PalletizingReset语句的等级更高。
上海新时达电气股份有限公司
解码垛使用
现在可以实现单个码盘的解码垛,也可以实现多个码盘的解 码垛,实现过程如下:
3. 在界面中配置好了解码垛参数后,执行参数测试,当参数不合适时,会 返回测试失败,用户需根据界面显示的提示信息修改码垛参数。
4. 码垛的前置点和后置点需根据情况使用,也可不使用。 5. 码垛中如果循环的判断条件是fromget或fromput中最后一位bool变量,需
要先将bool变量设为True,那么当码垛完成以后bool变量值被改成False。如 果在码垛语句运行完毕,但是还未执行EOF时,需要再次进入码垛循环, 需要手动填一句赋值语句,把bool变量变为True。
5
上海新时达电气股份有限公司
解码垛变量配置
6
上海新时达电气股份有限公司
解码垛变量配置
7
上海新时达电气股份有限公司
解码垛变量配置
8
上海新时达电气股份有限公司
解码垛变量配置
9
上海新时达电气股份有限公司
解码垛变量配置
10
上海新时达电气股份有限公司
解码垛变量配置
上海新时达电气股份有限公司
解码垛编程语句
15
上海新时达电气股份有限公司
码垛语句(FromGet)
FromGet ( pallet, dynamic, overlap ,isEmpty); FromGet语句运动过程说明如下: 1. 走直线(Lin)到后置点(可选) 2. 走直线(Lin)到进入点(可选)
16
上海新时达电气股份有限公司
码垛语句(PalletizingReset)
23
上海新时达电气股份有限公司
解码垛使用注意点
1. 在解码垛语句执行时,FromGet()等语句包含了两个语句,坐标系设置语 句和 运动语句。坐系设置语句将坐标系设置为垛盘参考的坐标系。在 单步执行时,需要连续两次Start键光标移动到下一行。
2. 在配置界面修改码垛的配置参数后,使用该码垛变量的程序需要重新加 载,否则仍旧使用的是修改之前的码垛变量参数。
21
上海新时达电气股份有限公司
多码盘解码垛程序示例——方法二
WHILE(bool_isFull_0)DO //使用第一个码盘的FromPut语句的最后一个参数,来标志循环是否结束; 该bool变量初始值为TRUE, 当码垛完成后会自动置为FALSE,从而跳出循环。 PalletizingReset(pallet,uint7); PalletizingReset(pallet1,uint8); PalletizingReset(pallet0,uint9); //设置各个码盘初始工件个数为0。 uint10:=3;//根据要求需要横着放3个,所以值为3 LOOP(uint10)DO ToPut(pallet); FromPut(pallet,NULL,NULL,bool_isFull_0); END_LOOP uint7:=uint7+3;//记录已经放置的物品个数 uint11:=2;//根据要求需要竖着放2个,所以值为2
22
上海新时达电气股份有限公司
多码盘解码垛程序示例——方法二
LOOP(uint11)DO ToPut(pallet1); FromPut(pallet1,NULL,NULL,bool_isFull_1); END_LOOP uint8:=uint8+2;//记录已经放置的物品个数 uint12:=3; //根据要求需要横着放3个,所以值为3 LOOP(uint12)DO ToPut(pallet0); FromPut(pallet0,NULL,NULL,bool_isFull_2); END_LOOP uint9:=uint9+3;//记录已经放置的物品个数 END_WHILE//当bool_isFull为1时,结束循环
上海新时达电气股份有限公司
Thank you 25
20
上海新时达电气股份有限公司
多码盘解码垛程序示例——方法一
uint11:=2;// 根据要求需要竖着放2个,所以值为2。 LOOP(uint11)DO ToPut(pallet1); FromPut(pallet1,NULL,NULL,bool4); END_LOOP uint8:=uint8+2;//记录已经放置的物品个数 uint12:=3;//根据要求需要横着放3个,所以值为3 LOOP(uint12)DO ToPut(pallet0); FromPut(pallet0,NULL,NULL,bool5); END_LOOP uint9:=uint9+3; //记录已经放置的物品个数 END_LOOP //循环结束,返回LOOP行,开始下一次循环。