工业机器人编程与操作-搬运机器人码垛系统编程与仿真

这篇具有很好参考价值的文章主要介绍了工业机器人编程与操作-搬运机器人码垛系统编程与仿真。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

一、设计背景 

二、课程设计任务要求

三、设备导入并布局

四、传送带的smart组件

五、传送带整体思路

六、夹爪的smart组件6.1 LineSensor被测是否有任何对象与两点之间

七、夹爪整体思路

八、程序配置

九、各程序

参考文献


一、设计背景 

在科技和经济飞速发展的背景下,人力成本不断上升,给许多行业带来压力。为了解决这个问题,许多行业开始使用机器人代替传统的人力劳动,这已成为趋势。码垛机器人是一种结合高新技术与工业生产的产物,具有诸多优势,可以更好地服务于工业生产。

首先,码垛机器人弥补了人力生产的不足之处。机器人能够精确执行重复、高强度和危险的任务,在速度、准确性和耐久性方面都表现出色。码垛机器人的应用提高了工业经济效益。机器人能够在短时间内完成大量工作,提高生产效率,并且不会受到疲劳、休息或其他因素的影响。这不仅增加了产品产量,还缩短了生产周期,提高了整体工业经济效益。

此外,码垛机器人的应用还减少了成本投入。虽然购买和维护机器人的成本一开始可能较高,但机器人的使用寿命长,运行成本相对较低。与雇佣和培训大量人力相比,使用码垛机器人可以显著降低生产成本,并提高企业的竞争力。

最重要的是,码垛机器人的应用保障了工人的安全。许多工业生产过程存在危险因素,使用机器人可以避免工人接触到潜在的危险环境和物品,降低工伤事故的发生率,确保工人的健康和安全。

总之,码垛机器人的应用标志着我国工业生产向智能化、自动化发展,在向智能制造的转型中具有重要意义。

二、课程设计任务要求

1.熟悉ABB机器人系统集成需求分析方案的撰写;

2.掌握ABB机器人的基本操作,理解系统参数配置;学会手动操纵;

3.掌握ABB机器人的硬件与方案集成配置方法,能够使用相关仿真软件对集成要求进行硬件配置;

4.掌握ABB机器人的各种程序数据类型,熟悉工具数据、工件坐标、有效载荷数据的设定;

5.掌握常用机器人系统程序及指令,并能使用仿真软件对ABB机器人进行编程和调试;

6.熟悉ABB机器人的常用系统集成流程与技巧;

7.能够使用常用的三维软件进行基本建模并完成实体导入与系统集成。

三、设备导入并布局

3.1 .新建工作站

选择工作站和机器人控制器解决方案,选择机器人型号为IRB_460_110kg_2.40m。

工业机器人码垛编程,机器人

图3.1.1 建立工作站

工业机器人码垛编程,机器人

图3.1.2 IRB_460_110kg_2.40m型号机器人

3.2 创建底座

一个底座尺寸为800*800*500的方块,将机器人放在方块上。

工业机器人码垛编程,机器人

图3.2.1 创建方体指令

工业机器人码垛编程,机器人

图3.2.2 方体摆放效果

3.3 设计夹爪

使其可以分别抓起三个方块并控制间距为400mm左右,建模结束后,将图保存为sat文件方便进行导入。

工业机器人码垛编程,机器人

图3.3.1 夹爪零件1

工业机器人码垛编程,机器人

图3.3.2 夹爪零件2

工业机器人码垛编程,机器人

图3.3.3 夹爪零件3

工业机器人码垛编程,机器人

图3.3.4 夹爪零件4

工业机器人码垛编程,机器人

图3.3.5 夹爪零件5

工业机器人码垛编程,机器人

图3.3.6 夹爪零件6

3.4 夹爪模型导入工作站

将自己画的夹爪文件导入并将其安装到机器人上(注意:若夹爪的方向并不对,则要进行变向,使用本地参考系进行调整);

工业机器人码垛编程,机器人

图3.4.1 夹爪模型导入

工业机器人码垛编程,机器人

图3.4.1导入安装效果

3.5 其他模型导入工作站

将使用sw和catia绘制传送带以及托盘并导入工作站中,其中传送带应对齐于机器人中心放置。(注意:若高度不对等应绘制对应方块进行垫高处理)

工业机器人码垛编程,机器人图3.5.1 传送带三维模型

工业机器人码垛编程,机器人图3.5.2托盘三维模型

工业机器人码垛编程,机器人

图3.5.2 托盘、传送带放置效果图

3.6 建立方块

方块置于传送带上(模拟被搬运的货物),并将其设置为可被传感器检测。

工业机器人码垛编程,机器人图3.6.1 方块位置

工业机器人码垛编程,机器人图3.6.2 方块设为可被传感器检测

四、传送带的smart组件

4.1 Source创建一个图形组件的拷贝

Source (GraphicComponent):要复制的对象;

Copy (GraphicComponent):包含复制的对象;

Parent (IHasGraphicComponents) :增加拷贝的位置,如有同样的父对象为源则无效;

Position (Vector3) :拷贝的位置与父对象相对应;

Orientation (Vector3) :拷贝的方向与父对象相对应;

Transient (Boolean):在临时仿真过程中,对已创建的复制对象进行标记,以防止内存错误的情况发生;

输入:Execute (Digital) - 设定为high (1)去创建一个拷贝;

输出:Executed (Digital) - 变成high (1) 当此操作完成。

工业机器人码垛编程,机器人

图4.1.1 Source参数

这一步的目的是使小方块形成复制,为后续形成队列做准备,并在其属性中选择复制小方块。

工业机器人码垛编程,机器人

图4.1.2 方块参数设置

4.2 Queue表示为对象的队列,可作为组进

属性:

Back (ProjectObject) - 对象进入队列

Front (ProjectObject) - 第一个对象在队列

Queue (String)

NumberOfObjects (Int32) - 队列中对象的数量

输入:

Enqueue (Digital) - 添加后面的对象到队列中

Dequeue (Digital) - 删除队列中前面的对象

Clear (Digital) - 清空队列

Delete (Digital) - 在工作站和队列中移除Front对象

DeleteAll (Digital) - 清除队列和删除所有工作站的对象

工业机器人码垛编程,机器人

图4.1.3 Queue参数

这一步是使小方块形成队列,让其一个接着一个输出。这一步可以让小方块形成组并组进,使其形成有多个方块。当一个方块离开时,会进入另一个方块。

4.3 PlaneSensor监测对象与平面相交

属性:

Origin (Vector3) - 原始平面

Axis1 (Vector3) - 平面

Axis2 (Vector3)

SensedPart (Part) - 监测部件

输入:Active (Digital) - 设定为high (1)激活传感器

输出:SensorOut (Digital) - 变成high (1)当对象与平面相交。

工业机器人码垛编程,机器人

图4.1.4 PlaneSensor参数

这一步目的是在传送带末端创建一个传感器,使其能检测其是否已运行到末尾。(注意:传送带设为不可被传感器检测且传送的位置要选在合适高度)

工业机器人码垛编程,机器人

图4.1.5 传感器设置

4.4 LinearMover移动一个对象到一条线上

属性:

Object (IHasTransform) - 移动对象

Direction (Vector3) - 对象移动方向

Speed (Double) - 速度

Reference (String) - 已指定坐标系统的值

ReferenceObject (IHasTransform) - 参考对象

输入:Execute (Digital) - 设定为high (1)去开始移动对象。

工业机器人码垛编程,机器人

图4.1.6 LineMover参数

这一步目的是进行传送带的设置(注意:根据所选的坐标系确定方向,并为其设置传送带速度)。

图4.1.7 传送带设置

4.5 LG NewBox[NOT]进行数学信号的逻辑运算

属性:

Operator (String) - 逻辑操作符

Delay (Double) - 输出变化延迟时间

输入:

InputA (Digital) - 第一个输入

InputB (Digital) - 第二个输入

输出:Output (Digital) - 逻辑操作结果

工业机器人码垛编程,机器人

图4.1.7 LG NewBox[NOT]参数

这一步的作用是创建一个与非门,让传送带将小块传送带末端被传感器检测到时,不再进行复制和传送。(注意:其属性要选择成NOT)

工业机器人码垛编程,机器人

图4.1.7创建与非门

此时还需要进行输入信号和输出信号创建。(注意:这里的命名要和程序中的命名一样,否则无法运行)

工业机器人码垛编程,机器人

图4.1.8 创建输入信号

工业机器人码垛编程,机器人

图4.1.9 创建输出信号

五、传送带整体思路

5.1 输入信号

输入信号给Source,使其进行复制。这时Source接收到信号会将小块复制并传入组Queue中,并将一个添加后面的对象到队列中的指令传送其中。

工业机器人码垛编程,机器人

图5.1.1 传送带调试1

5.2 传感器设置

当传感器检测到信号时,输出一个信号给与非门让与非门进行复制。并输出一个信号给组让其删除队列中前面的对象。还需要输出一个信号给输出信号,让其有一个指令运行到夹爪中。这一步是让夹爪跟小块连接上的关键。

工业机器人码垛编程,机器人

图5.1.2 传送带调试2

5.3 传送带运作过程

小方块运行到传送带顶端时,那时夹爪会接收到信号并抓取;当传送带上的方块被取走后,传送带传感器检测到此时没有方块,则与非门发挥作用,传送带会重新运动将信号传送给Source,让再传送一个新的方块进入队列,并由传送带进行运送,以此循环。

工业机器人码垛编程,机器人

图5.1.3 方块到达夹爪上方

工业机器人码垛编程,机器人

图5.1.3 夹爪夹起方块

周而复始最后一个小块被拿走的时候,托盘中默认数值已达到上限时,此时夹爪则就不会进行抓取。

工业机器人码垛编程,机器人

图5.1.4 完成一码垛搬运

至此,为完成一整个工作周期。

六、夹爪的smart组件 6.1 LineSensor被测是否有任何对象与两点之间

属性:

Start (Vector3) - 起点

End (Vector3) - 结束点

Radius (Double) - 感应半径

SensedPart (Part) - 已有的部件已靠近开始点

SensedPoint (Vector3) - 包含的点是线段与接近的部件相交

输入:Active (Digital) - 设定为1去激活传感器

输出:SensorOut (Digital) - 变成high (1)当对象与线段相交时

工业机器人码垛编程,机器人

图6.1.1 夹爪LineSensor参数

这一部分是传感器检测到夹爪触碰到方块时给予一个信号,使得夹爪与方块贴合,进行夹取动作。

工业机器人码垛编程,机器人

图6.1.2 夹取动作

6.2 Attacher安装一个对象

属性:

Parent (ProjectObject) - 安装的父对象

Flange (Int32) - 机械装置或工具数据安装到

Child (IAttachableChild) - 安装对象

Mount (Boolean) - 移动对象到其父对象

Offset (Vector3) - 当进行安装时位置与安装的父对象相对应

Orientation (Vector3) - 当进行安装时,方向与安装的父对象相对应

输入:Execute (Digital) - 设定为high (1)去安装

输出:Executed (Digital) - 变成high (1) 当此操作完成

工业机器人码垛编程,机器人

图6.2.1 夹爪Attacher参数

当传感器检测到信号时,夹爪会与方块安装,使得方块跟夹爪一起运动。工业机器人码垛编程,机器人

图6.2.2 夹爪与方块的设置

6.3 Detacher拆除一个已安装的对象

属性:

Child (IAttachableChild) - 已安装的对象

KeepPosition (Boolean) - 如果是false, 已安装对象回到原始的位置

输入: Execute (Digital) - 设定为high (1)去取消安装

输出:Executed (Digital) - 变成high (1) 当此操作完成

工业机器人码垛编程,机器人

图6.3.1 夹爪Detacher参数

运行到点位之后需要夹爪跟方块脱离这个指令,就是使得夹爪脱离方块。

工业机器人码垛编程,机器人

图6.3.2 夹爪脱离方块

6.4 LG_Clamp[NOT]进行数学信号的逻辑运算

属性:

Operator (String) - 逻辑操作符

Delay (Double) - 输出变化延迟时间

输入:

InputA (Digital) - 第一个输入

InputB (Digital) - 第二输入

输出:

Output (Digital) - 逻辑操作结果

工业机器人码垛编程,机器人

图6.4.1 夹爪LG_Clamp[NOT]参数

这个与与非门的目的是控制,夹爪开关当传感器检测到有小块的时候,就不进行拆卸,使其连接在一起运动。

工业机器人码垛编程,机器人

图6.4.2 夹爪调试1

6.5 LG_Hook[NOT]进行数学信号的逻辑运算

属性:

Operator (String) - 逻辑操作符

Delay (Double) - 输出变化延迟时间

输入:

InputA (Digital) - 第一个输入

InputB (Digital) - 第二输入

输出:Output (Digital) - 逻辑操作结果

工业机器人码垛编程,机器人

图6.5.1 夹爪LG_Hook[NOT]参数

这个与非门控制的是加装下端的钩子,当接收到从上端传入的结合指令,钩子就闭合。当提供拆卸指令的时候,钩子就释放。

工业机器人码垛编程,机器人图6.5.2 夹爪调试2

6.6 Logic SRLatch设定-去复位、锁定

输入:

Set (Digital) - 设置

Reset (Digital) - 重置

输出:

Output (Digital) - 输出

InvOutput (Digital) - 输出置反

工业机器人码垛编程,机器人

图6.6.1 Logic SRLatch参数

当接收到连接指令提出的信号后,会进入到一个运动逻辑周期,然后接收到拆卸指令后会跳出这个周期,给予一个输出信号。

工业机器人码垛编程,机器人

图6.6.2 夹爪调试3

6.7 PoseMover运动机械装置关节到一个已定义的姿态

PoseMoverClanp [ClampAct]、PoseMoverHook [HookAct]、PoseMoverOri [OriAct]

属性:

Mechanism (Mechanism) - 移动机械装置

Pose (Int32) - 姿态运动成

Duration (Double) - 运行时间

输入:

Execute (Digital) - 设定为high (1)去开始或返回到移动

Pause (Digital) - 设定为high (1)去暂停移动

Cancel (Digital) - 设定为high (1) 取消移动

输出:

Executed (Digital) - 变成high (1)当移动完成后

Executing (Digital) - 变成high (1)当移动的时候

Paused (Digital) - 变为high (1)当移动被暂停

工业机器人码垛编程,机器人

图6.7.1 PoseMoverClanp [ClampAct]参数

工业机器人码垛编程,机器人

图6.7.2 PoseMoverHook [HookAct]参数 

工业机器人码垛编程,机器人

图6.7.3 PoseMoverOri [OriAct]参数

这三个指令控制的是夹爪钩子机械臂,当有接收到结合信号之后夹爪,钩子,机械臂接收到指令。然后整个机械臂会按程序运行到定义的姿态。

6.8 信号创建

此时还需要进行输入信号和输出信号创建,有两个输入信号一个输出信号。(注意:这里的命名,要和程序中的命名相同,否则无法运行)

工业机器人码垛编程,机器人

图6.8.1 信号创建1

工业机器人码垛编程,机器人

图6.8.2 信号创建2

工业机器人码垛编程,机器人

图6.8.3 信号创建3

七、夹爪整体思路

当传送带将滑块运送到地点位置后,会给予一个输出信号doBoxInPos_L,当输出信号激活的时候,当传感器检测到已经到位后,程序中指令会提供一个结合指令结合指令激活,小块与夹爪相结合,并使夹爪和钩子缩紧。

工业机器人码垛编程,机器人

图7.1 夹爪工作逻辑1

当夹爪和钩子缩紧之后根据程序所提供的点位,机械臂运行到指定点位。工业机器人码垛编程,机器人

图7.2 夹爪工作逻辑2

这时会进行拆卸,当拆卸拆卸指令进入时,钩子会松开,夹爪会张开。小块和夹爪脱离,夹爪回到固定位置。一个小周期就完成,这是会输出一个信号,告诉程序进行下一次搬运。

工业机器人码垛编程,机器人

图7.3 夹爪工作逻辑3

工业机器人码垛编程,机器人

图7.4 整个工作站逻辑

八、程序配置

8.1 配置io信号

工业机器人码垛编程,机器人

图8.1.1 配置Box io信号

工业机器人码垛编程,机器人

图8.1.2 配置Pallet io信号

8.2 配置坐标系

工业机器人码垛编程,机器人

图8.2.1 配置坐标系

工业机器人码垛编程,机器人

图8.2.1 工作站状态栏

九、各程序

9.1主程序

PROC main()

    rInitAll;

    WHILE TRUE DO

    IF bReady THEN

      rPick;

  rPlace;

ENDIF

rCycleCheck;

ENDWHILE

ENDPROC

9.2放置程序

PROC rPlace()

MoveJ Offs(pPlace,0,0,nPlaceH),vMaxLoad,z50,tGripper\WObj:=CurWobj;

TriggL pPlace,vMinLoad,HookOff,fine,tGripper\WObj:=CurWobj;

Reset do00_ClampAct;

Waittime 0.3;

GripLoad Load0;

MoveL Offs(pPlace,0,0,nPlaceH),vMinEmpty,z50,tGripper\WObj:=CurWobj;

rPlaceRD;

MoveJ pPickSafe,vMaxEmpty,z50,tGripper\WObj:=wobj0;

ClkStop Timer1;

nCycleTime:=ClkRead(Timer1);

ENDPROC


9.3物料拾取程序

PROC rPick()

    ClkReset Timer1;

    ClkStart Timer1;

rCalPosition;

MoveJ Offs(pPick,0,0,nPickH),vMaxEmpty,z50,tGripper\WObj:=wobj0;

MoveL pPick,vMinLoad,fine,tGripper\WObj:=wobj0;

Set do00_ClampAct;

Waittime 0.3;

GripLoad LoadFull;

TriggL Offs(pPick,0,0,nPickH),vMinLoad,HookAct,z50,tGripper\WObj:=wobj0;

MoveL pPickSafe,vMaxLoad,z100,tGripper\WObj:=wobj0;

ENDPROC

9.4初始化程序

PROC rInitAll()

    rCheckHomePos;

    ConfL\OFF;

ConfJ\OFF;

nCount_L:=1;

    nCount_R:=1;

nPallet:=1;

nPalletNo:=1;

bPalletFull_L:=FALSE;

bPalletFull_R:=FALSE;

bGetPosition:=FALSE;

Reset do00_ClampAct;

Reset do01_HookAct;

ClkStop Timer1;

ClkReset Timer1;

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

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

IDelete iPallet_L;

    CONNECT iPallet_L WITH tEjectPallet_L;

    ISignalDI di02_PalletInPos_L,0,iPallet_L;

    IDelete iPallet_R;

    CONNECT iPallet_R WITH tEjectPallet_R;

    ISignalDI di03_PalletInPos_R,0,iPallet_R;

ENDPROC

9.5循环检测程序

PROC rCycleCheck()

    TPErase;

TPWrite "The Robot is running!";

TPWrite "Last cycle time  is  : "\Num:=nCycleTime;

TPWrite "The number of the Boxes in the Left pallet is:"\Num:=nCount_L-1;

TPWrite "The number of the Boxes in the Right pallet is:"\Num:=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;

    WaitTime 0.1;

ENDIF

ENDPROC

9.6返回位置程序

PROC rCalPosition()

    bGetPosition:=FALSE;

    WHILE bGetPosition=FALSE DO

    TEST nPallet

CASE 1:

            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;

nPalletNo:=1;

        ELSE

bGetPosition:=FALSE;

        ENDIF

        nPallet:=2;

CASE 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);

bGetPosition:=TRUE;

nPalletNo:=2;

        ELSE

bGetPosition:=FALSE;

        ENDIF

        nPallet:=1;

DEFAULT:

    TPERASE;

TPWRITE "The data 'nPallet' is error,please check it!";

    Stop;

ENDTEST

ENDWHILE

ENDPROC







9.7点位控制

FUNC robtarget pPattern(num nCount)

    VAR robtarget pTarget;

IF nCount>=1 AND nCount<=5 THEN

    pPickSafe:=Offs(pPick,0,0,400);

ELSEIF nCount>=6 AND nCount<=10 THEN

    pPickSafe:=Offs(pPick,0,0,600);

ELSEIF nCount>=11 AND nCount<=15 THEN

    pPickSafe:=Offs(pPick,0,0,800);

ENDIF

    TEST nCount

    CASE 1:

       pTarget.trans.x:=pPlaceBase0.trans.x;

    pTarget.trans.y:=pPlaceBase0.trans.y;

    pTarget.trans.z:=pPlaceBase0.trans.z;

pTarget.rot:=pPlaceBase0.rot;

pTarget.robconf:=pPlaceBase0.robconf;

       pTarget:=Offs(pTarget,Compensation{nCount,1},Compensation{nCount,2},Compensation{nCount,3});

    CASE 2:

       pTarget.trans.x:=pPlaceBase0.trans.x+nBoxL;

    pTarget.trans.y:=pPlaceBase0.trans.y;

    pTarget.trans.z:=pPlaceBase0.trans.z;

pTarget.rot:=pPlaceBase0.rot;

pTarget.robconf:=pPlaceBase0.robconf;

pTarget:=Offs(pTarget,Compensation{nCount,1},Compensation{nCount,2},Compensation{nCount,3});

    CASE 3:

       pTarget.trans.x:=pPlaceBase90.trans.x;

    pTarget.trans.y:=pPlaceBase90.trans.y;

    pTarget.trans.z:=pPlaceBase90.trans.z;

pTarget.rot:=pPlaceBase90.rot;

pTarget.robconf:=pPlaceBase90.robconf;

pTarget:=Offs(pTarget,Compensation{nCount,1},Compensation{nCount,2},Compensation{nCount,3});

    CASE 4:

       pTarget.trans.x:=pPlaceBase90.trans.x+nBoxW;

    pTarget.trans.y:=pPlaceBase90.trans.y;

    pTarget.trans.z:=pPlaceBase90.trans.z;

pTarget.rot:=pPlaceBase90.rot;

pTarget.robconf:=pPlaceBase90.robconf;

pTarget:=Offs(pTarget,Compensation{nCount,1},Compensation{nCount,2},Compensation{nCount,3});

    CASE 5:

       pTarget.trans.x:=pPlaceBase90.trans.x+2*nBoxW;

    pTarget.trans.y:=pPlaceBase90.trans.y;

    pTarget.trans.z:=pPlaceBase90.trans.z;

pTarget.rot:=pPlaceBase90.rot;

pTarget.robconf:=pPlaceBase90.robconf;

pTarget:=Offs(pTarget,Compensation{nCount,1},Compensation{nCount,2},Compensation{nCount,3});

    CASE 6:

       pTarget.trans.x:=pPlaceBase0.trans.x;

    pTarget.trans.y:=pPlaceBase0.trans.y+nBoxL;

    pTarget.trans.z:=pPlaceBase0.trans.z+nBoxH;

pTarget.rot:=pPlaceBase0.rot;

pTarget.robconf:=pPlaceBase0.robconf;

pTarget:=Offs(pTarget,Compensation{nCount,1},Compensation{nCount,2},Compensation{nCount,3});

    CASE 7:

       pTarget.trans.x:=pPlaceBase0.trans.x+nBoxL;

    pTarget.trans.y:=pPlaceBase0.trans.y+nBoxL;

    pTarget.trans.z:=pPlaceBase0.trans.z+nBoxH;

pTarget.rot:=pPlaceBase0.rot;

pTarget.robconf:=pPlaceBase0.robconf;

pTarget:=Offs(pTarget,Compensation{nCount,1},Compensation{nCount,2},Compensation{nCount,3});

    CASE 8:

       pTarget.trans.x:=pPlaceBase90.trans.x;

    pTarget.trans.y:=pPlaceBase90.trans.y-nBoxW;

    pTarget.trans.z:=pPlaceBase90.trans.z+nBoxH;

pTarget.rot:=pPlaceBase90.rot;

pTarget.robconf:=pPlaceBase90.robconf;

pTarget:=Offs(pTarget,Compensation{nCount,1},Compensation{nCount,2},Compensation{nCount,3});

    CASE 9:

       pTarget.trans.x:=pPlaceBase90.trans.x+nBoxW;

    pTarget.trans.y:=pPlaceBase90.trans.y-nBoxW;

    pTarget.trans.z:=pPlaceBase90.trans.z+nBoxH;

pTarget.rot:=pPlaceBase90.rot;

pTarget.robconf:=pPlaceBase90.robconf;

pTarget:=Offs(pTarget,Compensation{nCount,1},Compensation{nCount,2},Compensation{nCount,3});

    CASE 10:

       pTarget.trans.x:=pPlaceBase90.trans.x+2*nBoxW;

    pTarget.trans.y:=pPlaceBase90.trans.y-nBoxW;

    pTarget.trans.z:=pPlaceBase90.trans.z+nBoxH;

pTarget.rot:=pPlaceBase90.rot;

pTarget.robconf:=pPlaceBase90.robconf;

pTarget:=Offs(pTarget,Compensation{nCount,1},Compensation{nCount,2},Compensation{nCount,3});

    CASE 11:

       pTarget.trans.x:=pPlaceBase0.trans.x;

    pTarget.trans.y:=pPlaceBase0.trans.y;

    pTarget.trans.z:=pPlaceBase0.trans.z+2*nBoxH;

pTarget.rot:=pPlaceBase0.rot;

pTarget.robconf:=pPlaceBase0.robconf;

pTarget:=Offs(pTarget,Compensation{nCount,1},Compensation{nCount,2},Compensation{nCount,3});

    CASE 12:

       pTarget.trans.x:=pPlaceBase0.trans.x+nBoxL;

    pTarget.trans.y:=pPlaceBase0.trans.y;

    pTarget.trans.z:=pPlaceBase0.trans.z+2*nBoxH;

pTarget.rot:=pPlaceBase0.rot;

pTarget.robconf:=pPlaceBase0.robconf;

pTarget:=Offs(pTarget,Compensation{nCount,1},Compensation{nCount,2},Compensation{nCount,3});

    CASE 13:

       pTarget.trans.x:=pPlaceBase90.trans.x;

    pTarget.trans.y:=pPlaceBase90.trans.y;

    pTarget.trans.z:=pPlaceBase90.trans.z+2*nBoxH;

pTarget.rot:=pPlaceBase90.rot;

pTarget.robconf:=pPlaceBase90.robconf;

pTarget:=Offs(pTarget,Compensation{nCount,1},Compensation{nCount,2},Compensation{nCount,3});

    CASE 14:

       pTarget.trans.x:=pPlaceBase90.trans.x+nBoxW;

    pTarget.trans.y:=pPlaceBase90.trans.y;

    pTarget.trans.z:=pPlaceBase90.trans.z+2*nBoxH;

pTarget.rot:=pPlaceBase90.rot;

pTarget.robconf:=pPlaceBase90.robconf;

pTarget:=Offs(pTarget,Compensation{nCount,1},Compensation{nCount,2},Compensation{nCount,3});

    CASE 15:

       pTarget.trans.x:=pPlaceBase90.trans.x+2*nBoxW;

    pTarget.trans.y:=pPlaceBase90.trans.y;

    pTarget.trans.z:=pPlaceBase90.trans.z+2*nBoxH;

pTarget.rot:=pPlaceBase90.rot;

pTarget.robconf:=pPlaceBase90.robconf;

pTarget:=Offs(pTarget,Compensation{nCount,1},Compensation{nCount,2},Compensation{nCount,3});

DEFAULT:

    TPErase;

    TPWrite "The data 'nCount' is error,please check it !";

    stop;

ENDTEST

Return pTarget;

ENDFUNC

9.8绝对位置程序

PROC rMoveAbsj()

    MoveAbsJ jposHome\NoEOffs, v100, fine, tGripper\WObj:=wobj0;

ENDPROC

⑨示教目标点程序

PROC rModPos()

    MoveL pHome,v100,fine,tGripper\WObj:=Wobj0;

    MoveL pPick_L,v100,fine,tGripper\WObj:=Wobj0;

    MoveL pPick_R,v100,fine,tGripper\WObj:=Wobj0;

    MoveL pPlaceBase0_L,v100,fine,tGripper\WObj:=WobjPallet_L;

    MoveL pPlaceBase90_L,v100,fine,tGripper\WObj:=WobjPallet_L;

    MoveL pPlaceBase0_R,v100,fine,tGripper\WObj:=WobjPallet_R;

    MoveL pPlaceBase90_R,v100,fine,tGripper\WObj:=WobjPallet_R;

ENDPRO

参考文献

[1] 刘春雷, 侯强, 李海玲. 基于RobotStudio的工业机器人仿真系统研究[J]. 控制工程, 2018, 25(3): 493-497.

[2] 王晓燕, 张静. 基于RobotStudio的机器人编程与仿真技术研究[J]. 现代制造工程, 2019, 38(3): 92-96.

[3] 张志敏, 杨丽, 高中博, 等. 基于RobotStudio的工业机器人编程与仿真系统设计与实现[J]. 自动化仪表, 2019, 40(4): 114-118.

[4] 张明霞, 钟炳, 刘元华. 基于RobotStudio的工业机器人编程与仿真技术[J]. 自动化仪表, 2019, 40(2): 132-134+137.

[5] 杨杨, 魏莎莎, 宋宏伟. 基于RobotStudio的工业机器人编程与仿真研究[J]. 控制工程, 2020, 27(1): 38-42.

工业机器人编程与操作-搬运机器人码垛系统编程与仿真文章来源地址https://www.toymoban.com/news/detail-728031.html

到了这里,关于工业机器人编程与操作-搬运机器人码垛系统编程与仿真的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Kuka机器人设计通用码垛程序

    假设需要一个码垛程序, 从输送线抓到托盘, 托盘每层4个, 需要码5层, 可以用以下程序架构设计: 在config中定义层数cengshu , 每层码垛的个数(码垛的次数)cishu , 每层的高度levelHeight , 码垛放置点的集合putPoint[,] ,预放点1集合prePut1[,], 预放点2集合prePut2[,] 码垛放件程序 注意, 1, if

    2024年02月10日
    浏览(45)
  • 汇川机器人+五点法标定常规托盘码垛

            个人观点,码垛和拆垛本质上是一样,把流水线上的产品按规律整齐堆叠到托盘里叫码垛,从整齐排列有物料的托盘取料然后放到流水线上叫拆垛。取放料操作一般由机器人完成,我习惯按物料流向将设备分为码盘机(码垛)和上料机(拆垛),以下程序实例中的机器人为

    2024年03月27日
    浏览(77)
  • 应用案例|基于三维机器视觉的机器人纸箱拆码垛应用解决方案

      Part.1   项目背景 在现代物流和制造行业中,纸箱的拆码垛操作是一项重要且频繁的任务。传统的纸箱拆码垛工作通常由人工完成,这种方式存在劳动强度大、生产效率低以及人为操作容易导致错误等问题,严重影响物料的安全运输和质量。为了满足物流行业大规模生产和

    2024年02月13日
    浏览(49)
  • 基于单片机的搬运机器人设计

    目录 摘 要 1 ABSTRACT 2 第1章 绪论 4 1.1 机器人概述 4 1.2 机器人的历史、现状 6 1.3 机器人发展趋势 7 第2章 实验平台介绍及搬运机器人的设计 9 2.1自由度及关节 9 2.2基座及连杆 9 2.2.1 基座 9 2.2.2 大臂 10 2.2.3 小臂 10 2.3搬运机器人的设计 10 2.4驱动方式 13 2.5传动方式 15 2.6制动器 1

    2024年03月24日
    浏览(45)
  • 机器人制作开源方案 | 智能循迹搬运车

    作者:范永晨 杨丽鹏 张东生 单位:唐山学院 指导老师:袁娜       都说21世纪为物流的天下,物流行业牵扯到各个领域。目前,劳动人口数量下降、老龄化现象加速、工资上涨,土地成本提升,随着市场不断发展,物流企业的压力也逐渐增大,这样的背景下,“机器人”成

    2024年02月03日
    浏览(47)
  • 关于发那科机器人抓手及物料搬运阀配置

    1:首先机器人按 机器人控制模式启动 ​2:MENU—应用选择,将搬运置为有效,剩余其他项根据机器人实际用途进行选择 3:设置搬运有效,抓手是否带点焊可以自行选择,要设置应用选择,物料搬用工具数量,工具上阀岛的数量,夹钳存在数量,工具存在数量,以及真空吸盘

    2024年02月16日
    浏览(180)
  • 工业机器人控制系统的设计——张晓辉,学习笔记

    视频链接: https://www.aiimooc.com/mall/show-htm-itemid-228-chapterNo-1-segmentNo-1.html   涉及知识   加工过程的控制技术:将机器人作为加工过程的一个节点,让其与其他的节点进行高效智能的交互。   机器人控制技术:机器人作为独立的个体如何提高其自身功能。   机器人电气

    2023年04月18日
    浏览(108)
  • 78、基于STM32单片机学习型搬运机器人四自由度机械臂机械手遥感控制设计

    毕设帮助、开题指导、技术解答(有偿)见文末。 目录 摘要 一、硬件方案 二、设计功能 三、实物图 四、原理图 五、PCB图  六、程序源码 七、资料包括  在当今大规模制造业中,企业为提高生产效率,保障产品质量,普遍重视生产过程的自动化程度,工业机器人作为自动

    2024年02月09日
    浏览(53)
  • 搬运机器人RFID传感器CNS-RFID-01|1S的RS485(MODBUS|HS协议)通讯连接方法

    搬运机器人RFID传感器CNS-RFID-01|1S支持RS485通信,可支持RS485(MODBUS RTU)协议、RS485-HS协议,广泛应用于物流仓储,立库 AGV|无人叉车|搬送机器人等领域,常用定位、驻车等,本篇重点介绍CNS-RFID-01|1S RFID传感器的RS485通信连接方法。 CNS-RFID-01|1S RFID传感器 1、RS485连接方法 用线缆

    2024年02月04日
    浏览(55)
  • 工业4.0 - Industrial 4.0领域的研究已经形成了一个完整体系,涉及机器人技术、生物技术、信息技术、工业控制系统、计算机视觉、大数据、人工智能、机器学习、人工神经网络等众多领域。

    作者:禅与计算机程序设计艺术 5月30日,由德国汉堡消费品有限公司发布了2020年度“汉堡行业报告”,预测,2020 年“汉堡市场规模将达到 2000亿美元”。这种估算引起轰动,而作为全球食品巨头,汉堡行业的估值也已超过了5000亿美元。与此同时,全球的“工业4.0”领域也走

    2024年02月10日
    浏览(63)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包