Robotstudio软件:机床上下料工作站机器人主逻辑编写与仿真运行

news/2024/10/17 20:35:02/

本文已经首发在个人微信公众号:工业机器人仿真与编程(微信号:IndRobSim),欢迎关注!

前一期介绍了机器人数控机床上下料例行程序的编写,但是,也只是编写了机器人的运动程序,并没有进行信号逻辑控制程序的编写。本期,就来为大家介绍一下工作站信号控制逻辑的编写。

概述

机器人例行程序的控制逻辑主要是在Main主程序中完成的,同时在每一个子例行程序中也要对各自的控制信号进行逻辑控制,比如机器人自动给料装置抓取工件例行程序中需要控制抓手工具抓取工件、输送带放料例行程序中需要控制抓手放下工件等。当然,在主程序中还包括前台与后台运行程序的信号逻辑交互。

数控机床后台运行程序

数控机床后台运行程序没有改动,这里不再过多介绍。

完整程序代码如下:

MODULE MainModulePROC main()WHILE TRUE DOIF RM_C=1 THEN!循环扫描数控机床加工控制信号是否为1,若为1,则向下执行;若不为1,则继续扫描Set VM_D_C;!置位数控机床防护门控制信号为1WaitUntil VM_D_R=1;!等待数控机床防护门反馈信号为1Set VM_F_C;!置位数控机床法兰旋转控制信号为1Set VM_FD_C;!置位数控机床进给机构控制信号为1WaitTime 5;!等待5s,用以模拟数控机床加工时间Reset VM_FD_C;!复位数控机床进给机构控制信号为0WaitUntil VM_FD_R=1;!等待数控机床进给机构反馈信号为1Reset VM_F_C;!复位数控机床法兰旋转控制信号为0Reset VM_D_C;!复位数控机床防护门控制信号为0WaitUntil VM_D_R=0;!等待数控机床防护门反馈信号为0Reset RM_C;!复位数控机床加工控制信号为0ENDIFENDWHILEENDPROC
ENDMODULE

自动给料装置后台运行程序

自动给料装置后台运行程序做了一些修改,增加了自动给料装置A、B交替运行参考标志可变量reg10的声明,并对自动给料装置A、B交替运行标志flag4、flag5的赋值运算重新定义,同时修改了信号控制逻辑。

完整程序代码如下:

MODULE MainModulePERS num reg10:=0;!声明整型可变量reg10,初始化值为0,作为自动给料装置A、B交替运行参考标志,并与前台程序进行数据交互VAR bool flag4:=FALSE;!声明布尔变量flag4,初始状态为FALSEVAR bool flag5:=FALSE;!声明布尔变量flag5,初始状态为FALSEPROC main()WHILE TRUE DOflag4:=RWA_C=1 AND RWB_C=0 AND reg10>=0 AND reg10<=2;!对自动给料装置A工件生成控制信号、自动给料装置B工件生成控制信号、自动给料装置A、B交替运行参考标志做逻辑“与”运算,若RWA_C为1且RWB_C为0且0≤reg10≤2,则flag4为1;否则为0flag5:=RWA_C=0 AND RWB_C=1 AND reg10>=3 AND reg10<=5;!对自动给料装置A工件生成控制信号、自动给料装置B工件生成控制信号、自动给料装置A、B交替运行参考标志做逻辑“与”运算,若RWA_C为0且RWB_C为1且3≤reg10≤5,则flag4为1;否则为0IF flag4=TRUE THEN!循环扫描flag4,若为TRUE则向下执行;若不为TRUE则继续扫描Reset VM_FYB_C;!循环扫描flag4,若为TRUE则向下执行;若不为TRUE则继续扫描WaitUntil VM_FYB_R=0;!等待给料机构B进给反馈信号为0WaitUntil RWA_R=0;!等待自动给料装置A工件生成反馈信号为0Set VM_FYA_C;!置位给料机构A进给控制信号为1WaitUntil VM_FYA_R=1;!等待给料机构A进给反馈信号为1Set VM_FAW_C;!置位自动给料装置A工件生成控制信号为1WaitUntil VM_FWA_R=1;!等待自动给料装置A工件生成反馈信号为1Reset VM_FAW_C;!复位自动给料装置A工件生成控制信号为0Reset RWA_C;!复位自动给料装置A工件生成控制信号为0ELSEIF flag5=TRUE THEN!循环扫描flag5,若为TRUE则向下执行;若不为TRUE则继续扫描Reset VM_FYA_C;!复位给料机构A进给控制信号为1WaitUntil VM_FYA_R=0;!等待给料机构A进给反馈信号为0WaitUntil RWB_R=0;!等待自动给料装置B工件生成反馈信号为0Set VM_FYB_C;!置位给料机构B进给控制信号为1WaitUntil VM_FYB_R=1;!等待给料机构B进给反馈信号为1Set VM_FBW_C;!置位自动给料装置B工件生成控制信号为1WaitUntil VM_FWB_R=1;!等待自动给料装置B工件生成反馈信号为1Reset VM_FBW_C;!复位自动给料装置B工件生成控制信号为0Reset RWB_C;!复位自动给料装置B工件生成控制信号为0ENDIFENDWHILEENDPROC
ENDMODULE

自动给料装置A取料例行程序

自动给料装置A取料例行程序中,增加了自动给料装置A、B工件生成控制信号逻辑程序,以及机器人工具抓取工件信号控制逻辑。

完整程序代码如下:

	PROC Pick_FA()MoveJ Target_10,v500,z100,TCP1\WObj:=wobj0;Reset RWB_C;!复位自动给料装置B工件生成控制信号为0Set RWA_C;!置位自动给料装置A工件生成控制信号为1MoveJ Target_20,v500,z100,TCP1\WObj:=wobj0;WaitUntil RWA_R=1;!等待自动给料装置A工件生成反馈信号为1MoveL Target_30,v500,fine,TCP1\WObj:=wobj0;Set VC_Hand_C1;!置位机器人工具控制信号1为1WaitUntil VC_Hand_R1=1;!等待机器人工具反馈信号1为1MoveL Target_20,v500,z100,TCP1\WObj:=wobj0;MoveJ Target_10,v500,z100,TCP1\WObj:=wobj0;ENDPROC

自动给料装置B取料例行程序

自动给料装置B取料例行程序与自动给料装置A取料例行程序类似,不再过多介绍,程序如下所示。

完整程序代码如下:

	PROC Pick_FB()MoveJ Target_10,v500,z100,TCP1\WObj:=wobj0;Reset RWA_C;!复位自动给料装置A工件生成控制信号为0Set RWB_C;!置位自动给料装置B工件生成控制信号为1MoveJ Target_40,v500,fine,TCP1\WObj:=wobj0;WaitUntil RWB_R=1;!等待自动给料装置B工件生成反馈信号为1MoveL Target_50,v500,fine,TCP1\WObj:=wobj0;Set VC_Hand_C1;!置位机器人工具控制信号1为1WaitUntil VC_Hand_R1=1;!等待机器人工具反馈信号1为1MoveL Target_40,v500,fine,TCP1\WObj:=wobj0;MoveJ Target_10,v500,z100,TCP1\WObj:=wobj0;ENDPROC

输送带放料例行程序

输送带放料例行程序中,添加了输送带运行控制信号逻辑程序,以及机器人工具放料程序逻辑。

完整程序代码如下:

	PROC Conveyor_Drop()MoveJ Target_140,v500,fine,TCP2\WObj:=wobj0;WaitUntil VC_CNY_R=1;!等待输送带运行反馈信号为1MoveJ Target_150,v500,fine,TCP2\WObj:=wobj0;MoveL Target_160,v500,fine,TCP2\WObj:=wobj0;Reset VC_Hand_C2;!复位机器人工具控制信号2为0WaitUntil VC_Hand_R2=0;!等待机器人工具反馈信号2为0MoveL Target_150,v500,fine,TCP2\WObj:=wobj0;Set VC_CNY_C;!置位输送带运行控制信号为1MoveJ Target_140,v500,fine,TCP2\WObj:=wobj0;ENDPROC

初始化例行程序

初始化例行程序是在机器人运行之前对机器人关键的信号、变量、可变量恢复初始状态的程序,这里对机床上下料逻辑判断标志位flag6、自动给料装置A、B交替运行参考标志reg10分别进行了初始化赋值。对机床上下料逻辑判断标志位flag6赋值为TRUE,是告诉机器人这是第一次运行,使得后续机器人机床上下料程序执行时,可以执行第一次放料逻辑。

完整程序代码如下:

    PROC Init()flag6:=TRUE;!初始化机床上下料逻辑判断标志位flag6为TRUEreg10:=0;!初始化自动给料装置A、B交替运行参考标志reg10为0ENDPROC

机器人主程序

编写机器人主程序就是实现整个机器人子例行程序的调用逻辑关系,也就是把机器人工作站的控制逻辑关系转换为机器人运行程序的过程。机器人工作站的整体运行逻辑关系如下图所示。

把上述机器人工作站控制逻辑关系转换为机器人程序,如下所示。

完整程序代码如下:

	PROC Main()Home;!调用机器人Home点例行程序Init;!调用机器人初始化例行程序WHILE TRUE DOLabel1:!程序跳转标签Label1flag1:=reg10>=0 AND reg10<=2;!对自动给料装置A、B交替运行参考标志reg10进行判断,若0≤reg10≤2,则flag1为1;否则为0flag2:=reg10>=3 AND reg10<=5;!对自动给料装置A、B交替运行参考标志reg10进行判断,若3≤reg10≤5,则flag1为1;否则为0flag3:=reg10>=6;!对自动给料装置A、B交替运行参考标志reg10进行判断,若reg10≥6,则flag1为1;否则为0IF flag1=TRUE THEN!循环扫描flag1,若为TRUE则向下执行;若不为TRUE则继续扫描Reset RWB_C;!复位自动给料装置B工件生成控制信号为0WaitUntil RWB_R=0;!等待自动给料装置B工件生成反馈信号为0Pick_FA;!调用自动给料装置A取料例行程序reg10:=reg10+1;!自动给料装置A、B交替运行参考标志reg10加1运算ELSEIF flag2=TRUE THEN!循环扫描flag2,若为TRUE则向下执行;若不为TRUE则继续扫描Reset RWA_C;!复位自动给料装置A工件生成控制信号为0WaitUntil RWA_R=0;!等待自动给料装置A工件生成反馈信号为0Pick_FB;!调用自动给料装置B取料例行程序reg10:=reg10+1;!自动给料装置A、B交替运行参考标志reg10加1运算ELSEIF flag3=TRUE THEN!循环扫描flag2,若为TRUE则向下执行;若不为TRUE则继续扫描reg10:=0;!自动给料装置A、B交替运行参考标志reg10赋值为0GOTO Label1;!跳转到标签Label1ENDIFMachine_Pick_Drop;!调用数控机床上下料例行程序IF VC_Hand_R2=1 THEN!循环扫描机器人工具反馈信号2,若为1则向下执行;若不为1则继续扫描Conveyor_Drop;!调用输送带放料例行程序ENDIFENDWHILEENDPROC

机器人Home点例行程序

机器人Home点例行程序保持不变。

完整程序代码如下:

	PROC Home()MoveAbsJ JointTarget_1,v500,fine,tool0\WObj:=wobj0;ENDPROC

数控机床上下料例行程序

数控机床上下料例行程序主要是对机床上下料逻辑判断标志位flag6进行判断,如果flag6为TRUE,也就是机器人第一次运行,那么就只执行机器人数控机床上料程序;如果flag6为FALSE,机器人就不是第一次运行,那么机器人就要先把数控机床上加工完成的工件取下来,然后再把新工件安装到数控机床上。

注:程序中第117118行代码重复复位、置位数控机床工件安装与拆除控制信号VM_W_C,是经过反复测试后添加的,如果不添加这两行代码,机器人无法向下运行。按照正常运行逻辑,这里只需要复位数控机床工件安装与拆除控制信号VM_W_C即可。之所以要反复置位、复位这个信号,个人猜测可能是因为机器人在机床上安装、拆除工件时使用了不同的TCP,导致机器人内部运行逻辑的不一致,因此,这里需要再次置位、复位这个信号,使得逻辑保持一致;另一种可能性是仿真软件的BUG,这里不再过多讨论。

完整程序代码如下:

    PROC Machine_Pick_Drop()IF flag6=TRUE THEN!循环扫描flag6,若为TRUE则向下执行;若不为TRUE则继续扫描MoveJ Target_100,v500,fine,TCP2\WObj:=wobj0;WaitUntil RM_R=1;!等待数控机床加工反馈信号为1MoveJ Target_110,v500,fine,TCP2\WObj:=wobj0;MoveL Target_80,v500,fine,TCP1\WObj:=wobj0;MoveL Target_90,v500,fine,TCP1\WObj:=wobj0;Set VM_W_C;!置位数控机床工件安装与拆除控制信号为1WaitUntil VM_W_R=1;!等待数控机床工件安装与拆除反馈信号为1WaitTime 1;!等待1s,信号发送、接收时间Reset VC_Hand_C1;!复位机器人工具控制信号1为0WaitUntil VC_Hand_R1=0;!等待机器人工具反馈信号1为0MoveL Target_80,v500,fine,TCP1\WObj:=wobj0;MoveJ Target_110,v500,fine,TCP2\WObj:=wobj0;Set RM_C;!置位数控机床加工控制信号为1flag6:=FALSE;!机床上下料逻辑判断标志位flag6赋值为FALSEMoveJ Target_100,v500,fine,TCP2\WObj:=wobj0;ELSEIF flag6=FALSE THEN!循环扫描flag6,若为FALSE则向下执行;若不为FALSE则继续扫描MoveJ Target_100,v500,fine,TCP2\WObj:=wobj0;WaitUntil RM_R=1;!等待数控机床加工反馈信号为1MoveJ Target_110,v500,fine,TCP2\WObj:=wobj0;MoveL Target_120,v500,fine,TCP2\WObj:=wobj0;MoveL Target_130,v500,fine,TCP2\WObj:=wobj0;Reset VM_W_C;!复位数控机床工件安装与拆除控制信号为0Set VM_W_C;!置位数控机床工件安装与拆除控制信号为1Reset VM_W_C;!复位数控机床工件安装与拆除控制信号为0WaitUntil VM_W_R=0;!等待数控机床工件安装与拆除反馈信号为0WaitTime 1;!等待1s,信号发送、接收时间Set VC_Hand_C2;!置位机器人工具控制信号2为1WaitUntil VC_Hand_R2=1;!等待机器人工具反馈信号2为1MoveL Target_120,v500,fine,TCP2\WObj:=wobj0;MoveL Target_80,v500,fine,TCP1\WObj:=wobj0;MoveL Target_90,v500,fine,TCP1\WObj:=wobj0;Set VM_W_C;!置位数控机床工件安装与拆除控制信号为1WaitUntil VM_W_R=1;!等待数控机床工件安装与拆除反馈信号为1WaitTime 1;!等待1s,信号发送、接收时间Reset VC_Hand_C1;!复位机器人工具控制信号1为0WaitUntil VC_Hand_R1=0;!等待机器人工具反馈信号1为0MoveL Target_80,v500,fine,TCP1\WObj:=wobj0;MoveJ Target_110,v500,fine,TCP2\WObj:=wobj0;Set RM_C;!置位数控机床加工控制信号为1MoveJ Target_100,v500,fine,TCP2\WObj:=wobj0;ENDIFENDPROC

完整的机器人前台运行程序

完整的机器人前台运行程序如下所示。

完整程序代码如下:

MODULE Module1CONST robtarget Target_10:=[[-105.49,579.988623383,906.377272022],[0,-0.707106781,0.707106781,0],[1,0,-1,0],[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]];CONST robtarget Target_20:=[[-154.272430575,1040.197944831,408.821804466],[-0.000000009,0.707106789,-0.707106773,-0.000000022],[1,0,0,0],[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]];CONST robtarget Target_30:=[[-154.272430474,1040.1979427,340.199725865],[-0.000000009,0.707106789,-0.707106773,-0.000000022],[1,0,0,0],[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]];CONST robtarget Target_40:=[[68.727608491,1041.197987768,413.90280281],[-0.000000037,-0.707106781,0.707106781,0.000000036],[0,0,-1,0],[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]];CONST robtarget Target_50:=[[68.72761347,1041.198017452,340.201142462],[-0.000000037,-0.707106777,0.707106785,0.000000036],[0,0,-1,0],[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]];CONST robtarget Target_100:=[[573.250617984,-94.193044203,897.368388848],[-0.000000016,0.00000011,1,0],[-1,-1,0,0],[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]];CONST robtarget Target_110:=[[573.250603139,130.078196979,1021.465973332],[0.000000041,-0.000000062,0.707106786,0.707106777],[-1,0,-1,0],[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]];CONST robtarget Target_120:=[[952.004763071,100.358697881,596.952671985],[0.073912769,-0.073912713,-0.703233188,-0.703233174],[-1,0,-1,0],[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]];CONST robtarget Target_130:=[[952.004775953,145.252003711,596.95269566],[0.073912767,-0.073912722,-0.70323316,-0.703233201],[-1,0,-1,0],[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]];CONST robtarget Target_80:=[[952.004663029,100.639099969,596.952707868],[0.499999999,-0.499999887,-0.500000132,-0.499999983],[-1,0,0,0],[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]];CONST robtarget Target_90:=[[952.004756918,145.252003986,596.952682829],[0.500000014,-0.499999894,-0.500000109,-0.499999983],[-1,0,0,0],[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]];CONST robtarget Target_60:=[[579.988643459,105.489956009,906.377338138],[-0.000000049,0.00000005,1,0],[0,0,0,0],[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]];CONST robtarget Target_70:=[[579.988574388,121.069199606,1221.148973472],[0.000000042,-0.000000062,0.707106786,0.707106777],[-1,0,-1,0],[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]];CONST robtarget Target_140:=[[-94.193044877,-573.250644206,897.368454324],[-0.000000013,0.707106901,0.707106661,-0.000000013],[-2,-1,0,0],[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]];CONST robtarget Target_150:=[[-11.250024226,-579.819937457,198.905207331],[-0.000000013,0.707106922,0.70710664,0.000000004],[-1,0,0,0],[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]];CONST robtarget Target_160:=[[-11.250022761,-579.819990471,150.999928945],[0.000000008,0.707106945,0.707106618,0.000000001],[-1,-1,0,0],[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]];CONST jointtarget JointTarget_1:=[[0,-29.8,0,0,90,0],[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]];PERS num reg10:=0;!声明整型可变量reg10,初始化值为0,作为自动给料装置A、B交替运行参考标志,并与后台程序进行数据交互VAR bool flag1:=FALSE;!声明布尔变量flag1,初始状态为FALSE,作为主程序逻辑判断标志位VAR bool flag2:=FALSE;!声明布尔变量flag2,初始状态为FALSE,作为主程序逻辑判断标志位VAR bool flag3:=FALSE;!声明布尔变量flag3,初始状态为FALSE,作为主程序逻辑判断标志位VAR bool flag6:=FALSE;!声明布尔变量flag6,初始状态为FALSE,作为机床上下料逻辑判断标志位PROC Pick_FA()MoveJ Target_10,v500,z100,TCP1\WObj:=wobj0;Reset RWB_C;!复位自动给料装置B工件生成控制信号为0Set RWA_C;!置位自动给料装置A工件生成控制信号为1MoveJ Target_20,v500,z100,TCP1\WObj:=wobj0;WaitUntil RWA_R=1;!等待自动给料装置A工件生成反馈信号为1MoveL Target_30,v500,fine,TCP1\WObj:=wobj0;Set VC_Hand_C1;!置位机器人工具控制信号1为1WaitUntil VC_Hand_R1=1;!等待机器人工具反馈信号1为1MoveL Target_20,v500,z100,TCP1\WObj:=wobj0;MoveJ Target_10,v500,z100,TCP1\WObj:=wobj0;ENDPROCPROC Pick_FB()MoveJ Target_10,v500,z100,TCP1\WObj:=wobj0;Reset RWA_C;!复位自动给料装置A工件生成控制信号为0Set RWB_C;!置位自动给料装置B工件生成控制信号为1MoveJ Target_40,v500,fine,TCP1\WObj:=wobj0;WaitUntil RWB_R=1;!等待自动给料装置B工件生成反馈信号为1MoveL Target_50,v500,fine,TCP1\WObj:=wobj0;Set VC_Hand_C1;!置位机器人工具控制信号1为1WaitUntil VC_Hand_R1=1;!等待机器人工具反馈信号1为1MoveL Target_40,v500,fine,TCP1\WObj:=wobj0;MoveJ Target_10,v500,z100,TCP1\WObj:=wobj0;ENDPROCPROC Conveyor_Drop()MoveJ Target_140,v500,fine,TCP2\WObj:=wobj0;WaitUntil VC_CNY_R=1;!等待输送带运行反馈信号为1MoveJ Target_150,v500,fine,TCP2\WObj:=wobj0;MoveL Target_160,v500,fine,TCP2\WObj:=wobj0;Reset VC_Hand_C2;!复位机器人工具控制信号2为0WaitUntil VC_Hand_R2=0;!等待机器人工具反馈信号2为0MoveL Target_150,v500,fine,TCP2\WObj:=wobj0;Set VC_CNY_C;!置位输送带运行控制信号为1MoveJ Target_140,v500,fine,TCP2\WObj:=wobj0;ENDPROCPROC Init()flag6:=TRUE;!初始化机床上下料逻辑判断标志位flag6为TRUEreg10:=0;!初始化自动给料装置A、B交替运行参考标志reg10为0ENDPROCPROC Main()Home;!调用机器人Home点例行程序Init;!调用机器人初始化例行程序WHILE TRUE DOLabel1:!程序跳转标签Label1flag1:=reg10>=0 AND reg10<=2;!对自动给料装置A、B交替运行参考标志reg10进行判断,若0≤reg10≤2,则flag1为1;否则为0flag2:=reg10>=3 AND reg10<=5;!对自动给料装置A、B交替运行参考标志reg10进行判断,若3≤reg10≤5,则flag1为1;否则为0flag3:=reg10>=6;!对自动给料装置A、B交替运行参考标志reg10进行判断,若reg10≥6,则flag1为1;否则为0IF flag1=TRUE THEN!循环扫描flag1,若为TRUE则向下执行;若不为TRUE则继续扫描Reset RWB_C;!复位自动给料装置B工件生成控制信号为0WaitUntil RWB_R=0;!等待自动给料装置B工件生成反馈信号为0Pick_FA;!调用自动给料装置A取料例行程序reg10:=reg10+1;!自动给料装置A、B交替运行参考标志reg10加1运算ELSEIF flag2=TRUE THEN!循环扫描flag2,若为TRUE则向下执行;若不为TRUE则继续扫描Reset RWA_C;!复位自动给料装置A工件生成控制信号为0WaitUntil RWA_R=0;!等待自动给料装置A工件生成反馈信号为0Pick_FB;!调用自动给料装置B取料例行程序reg10:=reg10+1;!自动给料装置A、B交替运行参考标志reg10加1运算ELSEIF flag3=TRUE THEN!循环扫描flag2,若为TRUE则向下执行;若不为TRUE则继续扫描reg10:=0;!自动给料装置A、B交替运行参考标志reg10赋值为0GOTO Label1;!跳转到标签Label1ENDIFMachine_Pick_Drop;!调用数控机床上下料例行程序IF VC_Hand_R2=1 THEN!循环扫描机器人工具反馈信号2,若为1则向下执行;若不为1则继续扫描Conveyor_Drop;!调用输送带放料例行程序ENDIFENDWHILEENDPROCPROC Home()MoveAbsJ JointTarget_1,v500,fine,tool0\WObj:=wobj0;ENDPROCPROC Machine_Pick_Drop()IF flag6=TRUE THEN!循环扫描flag6,若为TRUE则向下执行;若不为TRUE则继续扫描MoveJ Target_100,v500,fine,TCP2\WObj:=wobj0;WaitUntil RM_R=1;!等待数控机床加工反馈信号为1MoveJ Target_110,v500,fine,TCP2\WObj:=wobj0;MoveL Target_80,v500,fine,TCP1\WObj:=wobj0;MoveL Target_90,v500,fine,TCP1\WObj:=wobj0;Set VM_W_C;!置位数控机床工件安装与拆除控制信号为1WaitUntil VM_W_R=1;!等待数控机床工件安装与拆除反馈信号为1WaitTime 1;!等待1s,信号发送、接收时间Reset VC_Hand_C1;!复位机器人工具控制信号1为0WaitUntil VC_Hand_R1=0;!等待机器人工具反馈信号1为0MoveL Target_80,v500,fine,TCP1\WObj:=wobj0;MoveJ Target_110,v500,fine,TCP2\WObj:=wobj0;Set RM_C;!置位数控机床加工控制信号为1flag6:=FALSE;!机床上下料逻辑判断标志位flag6赋值为FALSEMoveJ Target_100,v500,fine,TCP2\WObj:=wobj0;ELSEIF flag6=FALSE THEN!循环扫描flag6,若为FALSE则向下执行;若不为FALSE则继续扫描MoveJ Target_100,v500,fine,TCP2\WObj:=wobj0;WaitUntil RM_R=1;!等待数控机床加工反馈信号为1MoveJ Target_110,v500,fine,TCP2\WObj:=wobj0;MoveL Target_120,v500,fine,TCP2\WObj:=wobj0;MoveL Target_130,v500,fine,TCP2\WObj:=wobj0;Reset VM_W_C;!复位数控机床工件安装与拆除控制信号为0Set VM_W_C;!置位数控机床工件安装与拆除控制信号为1Reset VM_W_C;!复位数控机床工件安装与拆除控制信号为0WaitUntil VM_W_R=0;!等待数控机床工件安装与拆除反馈信号为0WaitTime 1;!等待1s,信号发送、接收时间Set VC_Hand_C2;!置位机器人工具控制信号2为1WaitUntil VC_Hand_R2=1;!等待机器人工具反馈信号2为1MoveL Target_120,v500,fine,TCP2\WObj:=wobj0;MoveL Target_80,v500,fine,TCP1\WObj:=wobj0;MoveL Target_90,v500,fine,TCP1\WObj:=wobj0;Set VM_W_C;!置位数控机床工件安装与拆除控制信号为1WaitUntil VM_W_R=1;!等待数控机床工件安装与拆除反馈信号为1WaitTime 1;!等待1s,信号发送、接收时间Reset VC_Hand_C1;!复位机器人工具控制信号1为0WaitUntil VC_Hand_R1=0;!等待机器人工具反馈信号1为0MoveL Target_80,v500,fine,TCP1\WObj:=wobj0;MoveJ Target_110,v500,fine,TCP2\WObj:=wobj0;Set RM_C;!置位数控机床加工控制信号为1MoveJ Target_100,v500,fine,TCP2\WObj:=wobj0;ENDIFENDPROC
ENDMODULE

逻辑设定

在软件的“仿真”菜单栏下的“工作站逻辑”中,配置机器人工作站逻辑信号,也就是把仿真工作站中的所有Smart组件控制信号与机器人的I/O信号按照下图映射关系进行连接。

仿真运行

在“控制器”菜单栏下,将数控机床后台运行程序、自动给料装置后台运行程序的“Type”修改为“Semistatic”,也就是设定后台运行程序为自动运行模式。

在“RAPID”菜单栏下,机器人前台运行程序执行“将程序指针设为所有任务中的主例行程序”,即初始化机器人程序运行指针。

在“仿真”菜单栏下,进行仿真设定,全部勾选仿真工作站中的Smart组件对象与机器人对象,并把机器人进入点设置为“主程序Main”。同时手动置位输送带运行反馈信号VC_CNY_R,以便于机器人能够在第一次运行时执行输送带放料任务。

全部设置完成后,点击“播放”按钮,机器人工作站开始仿真运行。点击“停止”按钮,机器人工作站停止仿真运行。

停止运行后要立即点击“重置”按钮,把仿真工作站恢复原始状态。下一次仿真运行之前,首先要执行机器人控制器的重启,然后再执行“将程序指针设为所有任务中的主例行程序”,最后才能再次运行机器人工作站的仿真;否则会带来一些不必要的麻烦,切记!

断断续续写了差不多有一年的时间才把这个机器人数控机床上下料仿真写完,Word文案写了100多页,一共25000字左右,快赶上一篇中短篇小说了。拖得时间太久了,也是因为实在太忙,没有太多时间来写,希望小伙伴们能够见谅。当然,这个工作站到目前为止,只是完成了仿真,工艺节拍还有待进一步优化,这些就留给感兴趣的小伙伴自己去摸索完成吧。

The End


上一篇:Robotstudio软件:机床上下料工作站机器人示教编程


http://www.ppmy.cn/news/394857.html

相关文章

腾讯云推出首款自研H265硬件编码器瑶池,助力云游戏降低15%带宽

10月29日&#xff0c;腾讯云宣布正式推出H265硬件编码器瑶池V500。据了解&#xff0c;作为腾讯云首款自研H265硬件编码器&#xff0c;瑶池V500能充分满足云游戏低时延高吞吐的需求&#xff0c;在同等画质情况下&#xff0c;可以实现带宽占用降低15%&#xff0c;如果是在同等带宽…

ABB机器人RobotStudio仿真之随机物料抓取

概述 如上图所示&#xff0c;利用RobotStudio仿真软件&#xff0c;在工作台上产生随机物料&#xff0c;用机器人夹取物料至环形码盘中。需要建立两个Smart组件来实现该动画的仿真效果&#xff0c;实现思路&#xff1a;1、机器人夹具的夹紧与松开&#xff0c;以及工件安装与拆除…

海思Hi3516DV300 SDK首次安装以及编译问题的解决

摘要 首先应阅读“Hi3516CV500/Hi3516DV300/Hi3516AV300 开发环境 用户指南”完成开发环境的搭建&#xff0c;这样会少走不少弯路。那么下面将给出这个文档给出的软件包安装步骤 步骤 1 配置默认使用 bash 执行 sudo dpkg-reconfigure dash 选择 no 步骤 2 安装软件包 执行&am…

ABB机器人编程示例

【一】&#xff1a;系统介绍 中文手册&#xff1a;http://samwangpan01.club:8081/externalLinksController/chain/ABB%E6%9C%BA%E5%99%A8%E4%BA%BA%E4%B8%AD%E6%96%87%E6%89%8B%E5%86%8C.pdf?ckey7GLNrf1%2BOQSWcq5sVS%2FgnB8vkb7KlFdiqF%2BhMQLd6YxkLw7tWFYKqFXOj3TRqlE5 R…

RobotStudio软件:ABB机器人弧焊焊接虚拟仿真实现方法

目录 概述 机器人弧焊焊接简易工作站布局 弧焊焊接机器人虚拟系统创建 弧焊焊接机器人I/O信号配置 机器人弧焊焊接系统配置 常用机器人弧焊焊接指令介绍 机器人弧焊焊接示教编程 机器人弧焊焊接仿真运行 本文已经首发在个人微信公众号&#xff1a;工业机器人仿真与编程…

Robotstudio软件:机床上下料工作站机器人示教编程

本文已经首发在个人微信公众号&#xff1a;工业机器人仿真与编程&#xff08;微信号&#xff1a;IndRobSim&#xff09;&#xff0c;欢迎关注&#xff01; 工业机器人机床上下料工作站示教编程相对来讲还是比较简单的&#xff0c;本质上就是机器人搬运的一个具体应用&#xff0…

RobotStudio软件:ABB机器人弧焊焊接起始点接触寻位虚拟仿真方法

目录 概述 机器人接触传感器添加与配置 机器人接触传感器I/O信号连接 机器人起始点接触寻位常用指令介绍 机器人起始点接触寻位程序编写 机器人仿真运行 本文已经首发在个人微信公众号&#xff1a;工业机器人仿真与编程&#xff08;微信号&#xff1a;IndRobSim&#xff…

RobotStudio码垛机器人创建过程

一、安装夹具 导入一个IRB2600机器人 移动夹具的本地坐标原点&#xff0c;使原点位置为顶面中心&#xff08;与法兰盘连接的部位&#xff09; 对齐夹爪Smart组件的本地坐标和机器人末端法兰盘的坐标&#xff0c;使夹具的本地坐标与法兰盘的本地坐标重合&#xff0c;为下一步安…