其他分享
首页 > 其他分享> > 课程设计- GMC1025 Robotique industrielle (工业机器人) – Projet Cellule fiexible

课程设计- GMC1025 Robotique industrielle (工业机器人) – Projet Cellule fiexible

作者:互联网

该projet是对一个工作站进行编程,完成托盘的装配。该项目涉及四个部分的编程:ABB机器人,气动抓取机器人,柔性传输带,操作面板。项目中运用了FIFO来解决多个订单的配置问题。

这个项目是去年秋季课的两个项目之一。大体来说,项目有些难,但它不难在编程上,而是难在如何利用现有的软硬件完成整套装配流程。至于编程方面,本人几乎独揽SFC部分的编程,甚至还有富余去解决控制面板和ABB部分的编程。

Cahier de charge

Cahier de charge 的中文翻译就是规格表,也就是指需求报告一样的东西。简单的说明下装配流程。

装配流程:

  1. ABB机器人抓取棋盘上的销钉(piges),将其安装在托盘(palettes)上。
  2. ABB机器人将托盘运输至传输带入口(Entrée convoyeur)
  3. 传输带运输托盘到达气动抓取机器人处(Robot chargeur)
  4. 气动机器人根据操作面板指令将托盘送到指定站点进行处理(Poste#1-4)
  5. 处理完毕后气动机器人将托盘送至结束位置
  6. 传输带运输托盘到达传输带出口(Entrée convoyeur)
  7. ABB机器人将处理好的托盘送出工作站(Résevoir#3)

其它要求:

  1. 操作面板可以一次性输入多个托盘指令,且每个托盘可以分别自定义其经过的站点(Poste)
  2. ABB机器人存在操作优先级,始终首先将传输带出口处的托盘送出工作站。
  3. 控制面板,传输带与其余站点要求分别编程,使用I/O信号交换信息。

 

下图为工作站的模型,上文中的法语与图中法语对应。

 

 

 

总体解决方案

编写语言:

ABB机器人:RAPID

其余部分:SFC

相对于仅使用LADDER编程,SFC的加入大大增加了程序的易读性(也从而减少了bug)

 

各站点间通信结构:

 

控制面板 与 传输带 (PanelView&Convoyeur)为主体程序,将会使用FIFO语句FFL储存订单在N_pigeN_poste列表中。

N_pigeN_poste两个list用于储存每个订单中要求拿取的销钉序列号与站点序号

ABB机器人:读取列表N_pige的第一个值(1-6号,有6个销钉),从而抓取指定销钉。

气动抓取机器人:读取列表 N_poste的第一个值(1-5,有四个站点,5号代表结束)。

FIFO语句FFU会确保每个值只被读取一次。

各个工作站之间的一般通信使用I/O信号即可。(signal I/O)

 

下图为演示时所画的示意图:

 

 

 

装配流程解决方案说明

Partie ABB robot

这玩意儿暑期回国实习的时候摸过,不过仅仅是摸了摸,勉强掌握了控制器的基本操作。(单轴运动,线性运动和重定位运动)至于编程部分,看了不少,但是基本没实际操作过。这个项目的ABB编程和暑期HYVA实习时见到的直接在控制器上进行编程不同,是在robotstudio上编程的。课程提供robotstudio上的工作站模型,精确复制了实际工作站ABB机器人部分的全部内容。(其实我觉得是怕我们把机器人玩坏,毕竟就这学期夹具就断了挺多次的…)

 

更换夹具

至于夹具是怎么断的,那就得说说我们遇到的第一个问题了——更换夹具。

由于机器人有两套夹具,分别用于夹销钉(piges)托盘(palettes),因此需要频繁的更换夹具。可以看到图中摆放夹具的支架。正确的卸下夹具的方式为:机器人到达1号位置,将夹具卡入支架,随后向上提起机械臂分离夹具。安装夹具的放式与之相反。光这学期夹具坏了几次,看管实验室那个佬用万能胶修夹具的样子熟练的让人心疼!

 

总的来说ABB机器人的操作部分的难度相对较低,因为可以在robotstudio进行编程,且提供了用于学习的Tutorial。 RAPID编程我是首次接触,但该项目RAPID用的并不多,因为可以robotstudio上通过位置与轨迹点进行编程,仿真成功后再转译成RAPID语句。我们所需要做的只是在后期微调机器人的轨迹,以及码几行代码从而实现与仪表盘的信号交流(例如N_pige)这部分真正的难点在于与工作站的其它成员的信息交流的处理。

 

 

我们暂时离开ABB机器人,看看传输带:

 

 

 1.      传输带入口处的信息交流

 

传输带的入口处只有个气动钳子…所以如何让ABB机器人正确放置托盘呢?

  1. 当ABB机器人将托盘送达气动钳子后,发送信号。(ABB_IRB140 :I.Data[2]=1)
  2. 传输带收到信号,关闭气动钳子,发送完成信号,延时2s。(timer1)
  3. ABB机器人收到信号后在两秒内松开夹具并且离开。
  4. 随后气动钳子松开,托盘进入传输带。Nice job!

SFC图如下:

 

 

阻止器部分

 

托盘继续前进,去往气动抓取机器人处。为了防止多个托盘同时到达抓取机器人下方(阻止器att3前)。苦逼的学生需要妥善利用可怜的两个阻止器(气动阻止杆,Att)和仅仅一个光学传感器(位于第一个阻止器前)来解决托盘的堆积问题。

以下是解决方案,我们甚至只用了两个阻止器就完成了需求:

杆#3处并没有传感器,因此需要与气动机器配合以确定托盘存在与否。

Palette_att1 传输带程序(convoyeur)内的变量,气动抓取机器人程序可以读取它。

Palette_att0 气动抓取机器人内的变量,传输带程序(convoyeur)程序可以读取它。

两个程序互相读取,从而实现了托盘是否存在这个信息的传递。

  1. 初始化,杆#1升起,杆#2恒定放下,杆#3恒定升起。
  2. 若not(absence_b1) 杆#1前有托盘 且 Palette_att1=0 杆#3前无托盘, 降下杆#1 2秒
  3. 将Palette_att1值转换成1
  4. 若Palette_att0=1(此为气动抓取机器人取走托盘后发送的信号)将Palette_att1值置0

SFC图如下:

 

气动抓取机器人部分

 

这部分的编程体验非常好,完成之后甚至没有出现bug。当然,编程中有一些需要注意的地方:

 

1.      与输送带部分的信号传递。

上文已经提到了,在机器人取走托盘后,palette_att0置1,让输送带获得信号,允许下一个托盘前进。

Palette_att1 传输带程序(convoyeur)内的变量,气动抓取机器人程序可以读取它。

Palette_att0 气动抓取机器人内的变量,传输带程序(convoyeur)程序可以读取它。

两个程序互相读取,从而实现了托盘是否存在这个信息的传递。

使用word表格简单做一个流程图来重复下信号传递过程:

每行表示相同的时间段两个程序所处的状态。这玩意儿的原理我的队友们到期末结束都没看懂,笑。

传输带

机器人

杆#3处无托盘

Palette_att1=0

Palette_att0=0

杆#三处有托盘

Palette_att1=1

Palette_att0=0

Palette_att1=1

读取到Palette_att1=1

开始取走托盘动作

Palette_att1=1

完成取走托盘动作

Palette_att0=1

读取到Palette_att0=1

更改值为Palette_att1=0

进行处理托盘程序

Palette_att0=1

杆#3处无托盘

Palette_att1=0

进行处理托盘程序

Palette_att0=1

杆#3处无托盘

Palette_att1=0

进行处理托盘程序

Palette_att0=1

杆#3处无托盘

Palette_att1=0

完成处理托盘程序(准备好再取一个新的托盘了)

Palette_att0=0

 

2.      站点位置的确定

   各个站点处并没有传感器,我们需要使用一个计数器来确定机器人的位置。

如下图,站点1为计数器360的位置:

程序开始:

  1. 机器人转向面对站点。
  2. 比较器比较机器人所处位置在360之前还是在之后。
  3. 若计数器小于360,机器人前进,计数器增加,到达360位置。

若计数器大于360,机器人后退,计数器减小,到达360位置。

固定位置,计数器不归零,进行后续操作。

SFC图如下:

 

 

3.     气动抓取机器人整体程序

 

气动机器人部分的程序简单来说就是一个多分支的loop,在完成一项任务后,系统将会使用FFU提取N_poste列表内的下一个值并且执行其对应操作(该值将被放入寄存器Poste_I中)。其中1,2,3,4分别对应四个工作站,5为结束信号,机器人将会将托盘带至结束位置。

机器人操作部分的编程没有任何特别之处,真正值得关注的是系统间的通信。

为了确保机器人可以正确的接受指令,从而执行正确的操作,系统需要在正确的时间从列表N_poste中提取值。

一开始,我们尝试在Step007步骤进行提取,然而机器人只能正确的接受第一个指令,随后便会不停的重复它。分析原因后我们发现,由于这个步骤内的操作仅仅是判断值(1-5),因此其花费的时间非常小。当程序第一次运行至这个步骤时,由于寄存器Poste_I的初始值为0,而有效值为1-5,因此程序会停在这里,直到FFU操作将指令放入寄存器Poste_I为止。随后进行对应的操作。但是,一旦程序第二次运行到Step007位置时,因为寄存器Poste_I内已经有一个1-5范围内的值,程序会立刻进行选择,所以在这种情况下没有足够的时间进行FFU操作。

使用word表格简单做一个流程图来重现下过程:

步骤

寄存器值

FFU操作

Step007

Poste_I=0

开始

Step007

Poste_I=0

进行中

Step007

Poste_I=0

进行中

Step007

Poste_I=0

完成

Step007

Poste_I=1-5

已完成

结束Step007

Poste_I=1-5

已完成

第二次循环

Step007

Poste_I=1-5

开始

结束Step007

Poste_I=1-5

进行中

 

 

被打断

经过改进后我们增加了Ready_I.0 与Valide_O.0变量用于FFU操作:

Ready_I.0用于确认FFU操作开始的时机。

Valide_O.0连接计时器timer6用于提供2s的延时以保证FFU操作完成。

当程序到达Step_006(位于step007前)与Step_0066(结束poste操作后)这两个步骤时,Ready_I.0会变为1,FFU操作开始。与此同时,开始一个时间为2s的计时器TON timer6,当timer6.DN被触发时,Valide_O.0置1. 只有在Valide_O.0为1的情况下,程序才可以结束Step007步骤。

使用word表格简单做一个流程图来重现下过程:

步骤

寄存器值

FFU操作

第一次循环

Step005

Ready_I.0=0

Valide_O.0=0

Poste_I=0

 

Step006

Ready_I.0=1

Valide_O.0=0

Poste_I=0

开始

Step006

Ready_I.0=1

Valide_O.0=0

Poste_I=0

进行中

Step006

Ready_I.0=1

Valide_O.0=0

Poste_I=1-5

已完成

Step006

Ready_I.0=1

Valide_O.0=1

Poste_I=1-5

已完成

结束Step006

 

 

Step007选择

 

 

第二次循环

Step0066

Ready_I.0=0

Valide_O.0=0

Poste_I=1-5

开始

Step0066

Ready_I.0=1

Valide_O.0=0

Poste_I=0

进行中

Step0066

Ready_I.0=1

Valide_O.0=0

Poste_I=1-5new

已完成

Step0066

Ready_I.0=1

Valide_O.0=1

Poste_I=1-5new

已完成

结束Step006

 

 

Step007选择

 

 

LADDER图

 

 

4.      传输带出口处的信息交流

 

根据要求ABB机器人将会在结束位置(Poste sortie)取回托盘,然而该位置不存在传感器,因此需要利用阻止器Att#4位置的传感器验证托盘是否到达。

当托盘到达Att#4后,放下阻止器,延时3s后向ABB机器人传输托盘到达结束位置信号(ABB_IRB140 :I.Data[3]=1)

 

以上就是projet内值得注意的部分。

 

标签:课程设计,GMC1025,机器人,Palette,Projet,托盘,BB机,气动,Poste
来源: https://www.cnblogs.com/fishnevercry/p/15860246.html