目录
一、设计背景
二、课程设计任务要求
三、设备导入并布局
四、传送带的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
工业机器人编程与操作-搬运机器人码垛系统编程与仿真文章来源地址https://www.toymoban.com/news/detail-728031.html
到了这里,关于工业机器人编程与操作-搬运机器人码垛系统编程与仿真的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!