目录

一、设计背景

二、课程设计任务要求

三、设备导入并布局

四、传送带的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 DOIF bReady THENrPick;rPlace;ENDIFrCycleCheck;ENDWHILEENDPROC

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) THENbReady:=TRUE;ELSEbReady:=FALSE;WaitTime 0.1;ENDIFENDPROC

9.6返回位置程序

PROC rCalPosition()bGetPosition:=FALSE;WHILE bGetPosition=FALSE DOTEST nPalletCASE 1:IF bPalletFull_L=FALSE AND di02_PalletInPos_L=1 AND di00_BoxInPos_L=1 THENpPick:=pPick_L;pPlaceBase0:=pPlaceBase0_L;pPlaceBase90:=pPlaceBase90_L;CurWobj:=WobjPallet_L;pPlace:=pPattern(nCount_L);bGetPosition:=TRUE;nPalletNo:=1;ELSEbGetPosition:=FALSE;ENDIFnPallet:=2;CASE 2:IF bPalletFull_R=FALSE AND di03_PalletInPos_R=1 AND di01_BoxInPos_R=1 THENpPick:=pPick_R;pPlaceBase0:=pPlaceBase0_R;pPlaceBase90:=pPlaceBase90_R;CurWobj:=WobjPallet_R;pPlace:=pPattern(nCount_R);bGetPosition:=TRUE;nPalletNo:=2;ELSEbGetPosition:=FALSE;ENDIFnPallet:=1;DEFAULT:TPERASE;TPWRITE "The data 'nPallet' is error,please check it!";Stop;ENDTESTENDWHILEENDPROC

9.7点位控制

FUNC robtarget pPattern(num nCount)VAR robtarget pTarget;IF nCount>=1 AND nCount<=5 THENpPickSafe:=Offs(pPick,0,0,400);ELSEIF nCount>=6 AND nCount<=10 THENpPickSafe:=Offs(pPick,0,0,600);ELSEIF nCount>=11 AND nCount<=15 THENpPickSafe:=Offs(pPick,0,0,800);ENDIFTEST nCountCASE 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;ENDTESTReturn 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.

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

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

  1. 饲料码垛机器人技术方案_机器人码垛系统的技术要求.doc

    PAGE \* MERGEFORMAT 2 PAGE \* MERGEFORMAT 1 机器人码垛系统的技术要求(参考) 在设备进行招投标过程中,由于没有统一的技术要求,往往导致评标中缺乏基准,造成招 ...

  2. abb机器人码垛编程详解_ABB机器人码垛编程方法与技巧

    机器人码垛应用非常常见,那我们先来认识认识码垛是什么吧? 码垛机是将已装入容器的纸箱,按一定排列码放在托盘.栈板(木质.塑胶)上,进行自动堆码,可堆码多层. 在一些的工程师中,拿到了码垛项目时,匆忙下 ...

  3. abb机器人码垛编程详解_ABB机器人码垛程序

    ABB 机器人码垛程序 MODULE MainModule PROC Main() TPErase; TPReadNum nCount1, "Qing Shu Ru Yi Ma Bao Sh ...

  4. 机器人码垛手持式编程_FANUC工业机器人码垛编程详解!

    1. 码垛功能的定义 对几个具有代表性的点进行示教,即可以从下层到上层按照顺序堆叠工件. 2. 码垛的种类 码垛 B:包括码垛B(单路径模式)和码垛BX(多路径模式) 适用于工件姿势恒定,堆叠时的底面 ...

  5. 机器人码垛手持式编程_三分钟告诉你企业为什么要使用全自动码垛机械手!

    近年来,随着我国人口红利的逐渐消失,劳动力市场结构也迎来重大改变,一些从事简单.重复.劳累工作的行业日渐出现用工荒.招工难等现象,昂贵的人力成本给工业.制造业.仓储业.建筑业等多个行业带来了沉重压力, ...

  6. 机器人码垛手持式编程_FANUC机器人码垛编程讲解

    先来一个码垛的视频 1. 码垛功能的定义 对几个具有代表性的点进行示教,即可以从下层到上层按照顺序堆叠工件. 2. 码垛的种类 码垛 B:包括码垛B(单路径模式)和码垛BX(多路径模式) 适用于工件姿 ...

  7. python机器人编程与操作_机器人Python极客编程入门与实战 PDF 完整目录版

    给大家带来的一篇关于Python编程相关的电子书资源,介绍了关于机器人.Python.极客编程.入门.实战方面的内容,本书是由电子工业出版社出版,格式为PDF,资源大小25.8MB,Python极客团 ...

  8. fanuc机器人码垛编程实例_FANUC 机器人码垛编程详细讲解!

    最近大家貌似对发那科机器人感兴趣,很多人在微信,QQ私聊我关于发那科机器人的技术干货.昨天给大家找了一个<Roboguide安装教程>,今天再给大家讲讲发那科机器人码垛工艺编程吧.首先,我 ...

  9. 工业机器人码垛教学实施_ABB工业机器人码垛教学编程案例分析

    ABB 工业机器人码垛教学编程案例分析 吴应桦 [摘 要] 摘要:工业机器人,是通过计算机编程控制来进行行动完成各种工作 的自动化的设备,在当今社会的大环境趋势下,工业机器人的应用越来越广泛, 增长迅 ...

最新文章

  1. 宏基因组文章目录(9月1日更新)
  2. C#编程利器系列文章
  3. ASP.NET那点不为人知的事(四)
  4. SecureCRT通过密钥进行SSH登录
  5. QT的QDialogButtonBox类的使用
  6. share-jquery
  7. 把自定义url配置到SAP Fiori Launchpad上打开
  8. 数据结构与算法--利用栈实现队列
  9. python面试题总结(2)--编码规范
  10. extern 结构体_选三物质结构高中化学知识模块音频
  11. IDEA+Maven+多个Module模块(创建多模块SpringBoot整合项目)
  12. 【基于MATLAB的数字图像处理】第六章·形态学图像处理
  13. 恩智浦智能车电机驱动程序_恩智浦智能车电机驱动-HIP4082+LR7843
  14. Android TimePicker
  15. 猿编程 python_猿编程客户端下载_猿编程(小学阶段编程课程学习专用) 1.5.2 官方版_极速下载站...
  16. 中国游戏企业扬帆出海,应该选择怎样的云平台?
  17. 让devcpp支持c++11
  18. 【Pandas】一文入门Pandas处理csv文件数据集(神经网络/机器学习算法数据预处理)
  19. 源程序,目标程序,可执行程序
  20. 我在百度大脑用数据看《你好,李焕英》

热门文章

  1. IntelliJ IDEA 目录结构
  2. unity 自定义天空球模型防止被裁剪
  3. lass翻译_lass
  4. 嫁给北京人就能获得北京户口了
  5. 程序员,还是公务员?是时候考虑了。
  6. 【PTA】读入一个正整数 n,计算其各位数字之和,用汉语拼音写出和的每一位数字。C语言
  7. FISCO BCOS搭建多机区块链网络
  8. 【来一杯word】微信小程序项目需求分析及设计初稿
  9. CSS九宫格的4种实现
  10. linux正则表达式验证合法ip地址,Shell正则表达式验证IP地址