机器人程式是不是每次都要回原点运行的原因

2024年09月29日 阅读 (53)

机器人工业应用

"中断停止"是任何工业自动化系统中的一个重要功能,它可以确保在发生异常情况时及时停止机器人,从而保护操作员和设备。但是,中断停止可能会导致机器人停在生产线上的任意位置,这会导致生产线的停滞和生产效率的下降。

为了解决这个问题,我开发了一种新自动返回原点功能。

当机器人被中断停止时,通过自动记录点位的功能块保证机器人返回原点的路径与去往目标点的路径完全吻合,保证机器人不会在回原点的过程中碰撞。

机器人程式是不是每次都要回原点运行的原因(1)

简单运动的机器人回原点很简单

过度点比较多的情况下,大部分情况不能直接回原点,而是选择几个中间的过度点作为节点,回原点程序先回过度节点,再从过度节点返回原点,即回原点的程序中分几层嵌套程序,第一层是从节点回原点,第二层是从停止点回节点,节点越多,程序层的嵌套就越多!

怎么保证回节点的轨迹和去往目标点时候的轨迹完全吻合呢?

去和回的轨迹要高度吻合,这样能避免碰撞,能去就能回!

要实现这个功能就要实时记录运行轨迹,轨迹怎么记录,要用到插补的思维,一段轨迹是由无数个点组成的,从P1到P2点看似是两个点,其实你要把它分成无数个小线段,无数个小线段最后形成这条轨迹!

去和回轨迹一样,比方,就是去的轨迹从P1到P2点的过程中实时记录200个点,那么返回P1点就只要反方向走这200个点!

机器人程式是不是每次都要回原点运行的原因(2)

复杂运动实现自动回原点也复杂

技术关键就是记录轨迹上的点,并计算返回轨迹,就展示这部分;

1、记录点位的功能块程序:

这段功能块最好单独运行,用机器人的扫描周期当计时器,机器人运行时,想记录哪段轨迹的点位,即在开始点把bStartR置TRUE,结束点再变成FALSE;既记录了这段轨迹细分成200个点的点位!

//记录200个点位

bStartR=false

xbProOut=false

delay(0.01)

do

//当startR为TRUE就开始记录轨迹上的点

if bStartR

bCloseSpace=false

Pn=0

//计算步长

nHomeCycTime1=(10*nHomeCycTime)/nl_MonitorSpd

//#

delay(0.01)

do

//隔步长设定的时间就记录一次当前位置,直接记录关节坐标,避免笛卡尔坐标系有奇异点

jC01[Pn]=herej()

Pn=Pn+1

delay(nHomeCycTime1)

until Pn==200 or bStartR==false or !bQ_RemoteAuto

bStartR=false

elseIf !bQ_RemoteAuto

bCloseSpace=true

endIf

until xbProOut

2、计算返回轨迹:

//初始化参数

xl_nStep=0

l_bOut=false

l_nEndStep=999

Pp=0

Pc=0

Pw=0

Ph=0

//延时20ms用于PLC刷新状态信息

delay(0.02)

do

//开始记录点位信号开关

bStartR=false

//开始运行记录运行轨迹的步序

switch xl_nStep

case 0

if !bCloseSpace

//计算停止点位置

call s2_Fb_CalcaulatePSpace()

xl_nStep=5

else

xl_nStep=l_nEndStep

endIf

break

case 5

if !bCloseSpace

//确定停止点位置

call s3_Fb_FindSpace()

xl_nStep=10

else

xl_nStep=l_nEndStep

endIf

break

case 10

if !bCloseSpace

//给原路返回的点赋值

call s4_Fb_CalcaulateHomePos()

if bMSpace[Pp]

xl_nStep=20

else

xl_nStep=l_nEndStep

endIf

else

xl_nStep=l_nEndStep

endIf

break

case 20

//原路返回的轨迹

movej(jH[0],tTCP,mHomeSpeed)

movej(jH[1],tTCP,mHomeSpeed)

movej(jH[2],tTCP,mHomeSpeed)

movej(jH[3],tTCP,mHomeSpeed)

movej(jH[4],tTCP,mHomeSpeed)

movej(jH[5],tTCP,mHomeSpeed)

movej(jH[6],tTCP,mHomeSpeed)

movej(jH[7],tTCP,mHomeSpeed)

movej(jH[8],tTCP,mHomeSpeed)

movej(jH[9],tTCP,mHomeSpeed)

movej(jH[10],tTCP,mHomeSpeed)

movej(jH[11],tTCP,mHomeSpeed)

movej(jH[12],tTCP,mHomeSpeed)

movej(jH[13],tTCP,mHomeSpeed)

movej(jH[14],tTCP,mHomeSpeed)

movej(jH[15],tTCP,mHomeSpeed)

movej(jH[16],tTCP,mHomeSpeed)

movej(jH[17],tTCP,mHomeSpeed)

movej(jH[18],tTCP,mHomeSpeed)

movej(jH[19],tTCP,mHomeSpeed)

movej(jH[20],tTCP,mHomeSpeed)

movej(jH[21],tTCP,mHomeSpeed)

movej(jH[22],tTCP,mHomeSpeed)

movej(jH[23],tTCP,mHomeSpeed)

movej(jH[24],tTCP,mHomeSpeed)

movej(jH[25],tTCP,mHomeSpeed)

movej(jH[26],tTCP,mHomeSpeed)

movej(jH[27],tTCP,mHomeSpeed)

movej(jH[28],tTCP,mHomeSpeed)

movej(jH[29],tTCP,mHomeSpeed)

movej(jH[30],tTCP,mHomeSpeed)

waitEndMove()

xl_nStep=30

break

case 30

xl_nStep=999

break

case l_nEndStep

郑重声明:玄微运势的内容来自于对中国传统文化的解读,对于未来的预测仅供参考。