16

封闭的一个多月,老菜鸟的 机械手和AGV 自动搬运小项目总结 - 贺臣

 3 years ago
source link: https://www.cnblogs.com/qingyuan/p/16188343.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

封闭的一个多月,老菜鸟的 机械手和AGV 自动搬运小项目总结

2022-04-25 10:20  贺臣  阅读(276)  评论(0)  编辑  收藏  举报

    最近上海疫情严重,闲赋在家无事可做,手机里不断的推送一些无脑的谩骂声音,索性找点事情做,将3月份实施的一个自动搬运小项目做一个简单的汇总,便于今后项目实施中积累一些经验。项目需求非常简单,因为能力有限也做不了大项目,弄点小项目赚点零花钱。

    一.  自动搬运需求

(1)车间有多条生产线,要实现在生产线上实现料架的自动搬运,以其中两条生产线未例。(此应用场景在生产车间应该是属于比较常见的场景,布局示意图如下图)

        (2)   A-1,A-2,B-2,B-1 属于一条生产线,C-1,C-2,D-2,D-1 属于一条生产线,其中A-1,A-2,C-1,C-2 是码垛处(将物料将机械手装载到料架上) ,B-2,B-1,D-2,D-1 工台(消耗物料处)

        (3)   A-1,A-2 共用一个机械手用于左右两边码垛,B-2,B-1 共用一个机械手用于左右两边码垛

        (4)   两条生产线共用一台AGV,用于搬运料架往返码垛区和工台区

        (5)   B-2,B-1,D-2,D-1 工作台处各有一个实体按钮,用于呼叫AGV搬运

        (6)   如果人工按 实体按钮 则将指令发给AGV将对应的工台位的空料架搬运到码垛区 进行码垛, 机械手码垛完成之后将满料架自动搬运到工台处进行作业

        (7)   AGV 使用海康的潜伏式AGV,机械手使用汇川机械手

        (8)  A-1,A-2 ,C-1,C-2   AGV 进入都有光栅控制,进入料架底部时需要控制光栅亮,离开时光栅关闭

  二. 需求分析

  潜伏式AGV:海康,数量1台,RCS控系统下发基本调度,一台主控服务器, B-2,B-1,D-2,D-1  处各有一个实体按钮,用于下发指令给AGV搬运

  A-1,A-2 中间机械手: 汇川,数量1台,汇川PLC控制,Modbus 协议 , TCP/IP

       C-1,C-2 中间机械手: 汇川,数量1台,汇川PLC控制,Modbus 协议 , TCP/IP

     料架:两条线各有两个料架 (设计是每条线有三个料架,最终只使用了两个),料架底部有固定二维码

  搬运通道:搬运通道只允许单台AGV 行走

  光栅:A-1,A-2 , C-1,C-2  与通道交接之处有光栅,其开启/关闭状态由对应的机械手PLC控制,进出信号由AGV给到PLC

  现实问题:

  (1)  实体按钮只能发起对AGV的移动指令,只能执行明确的移动指令,比如 P1点 到 P2点, 或者P1点,P2点,P3点,假设由B-1 发起搬运空料架到码垛区 A-1,A-2 , AGV是无法知道哪个地方是空的,所以实体按钮无法明确最终目标点。注:实体按钮只能配置固定的搬运点

  (2)  机械手在码垛状态(工作状态) AGV是不能进入的,需要机械手和AGV有一个比较完善的交互机制

    (3)  海康AGV公开的接口中,只有配置的运行模板关键位置点才有回传,并非所有的坐标点都可以回传数据(可能有其他的方式可以获取,打算个人没有找到)。

  (4)  机械手码垛完成之后,AGV自动将码垛完成的料架搬回到工台的空位,同样面料的(1)问题,需要管理位置的空满状态

  (5)  AGV 控制运动模板中有几个回传参数可以自定义: 开始任务,结束任务,走出储位,继续任务   四个重要的回传信息,也可以通过一些其他的参数来交互,目前还没有理解的很深

  (6)  海康AGV中要明确的区分任务号和请求号,这个给了我不少的困扰

  AGV运行轨迹分析:

  (1)  未解决空料架,满料架,空库位,满库位的问题,则需要一套统一的控制系统来协调机械手与AGV,假设系统名为 C系统(为了后续文章中的统一称呼)

  (2)  在地图上设定了三个重要的交互点,P1,P2,P3 

  (3)  B-2,B-1,D-2,D-1  实体按钮 按下,AGV统一搬运对应的空料架统一到 P1 (算完成一个搬运任务),到了P1之后然后由C系统判断 A-1,A-2 ,C-1,C-2  哪个点有空位,然后在P1点重新发起一个新的搬运任务

  (4)  以 P1,P2, A-2 为例: P1 开始搬运任务,然后经过P2(通知光栅亮),最终到达A-2 , 在A-2 放下空料架之后回到 P2(通知光栅关闭),同时告知机械手开始码垛。 当此任务完成之后,判断A-1,C-1,C-2 哪个地方有已经满了的货架,则自动开启下一个满料架的搬运任务, 否则会一直在P2等待。以此类推其他四个位置的搬运也是如此。

  (5)   判断满料架,仍然接着上面一个示例,假设A-1 区码垛完成,则行走的路径是: P2,P3,A-1,P3,B-2(或B-1)  ,  说明一下料架只能同线搬运,不能混线搬运。在这里我们需要将这个任务拆解为两个任务: P2,P3,A-1 以及 P3,B-2 

  (6)  总之增加P1,P2,P3三个点,P1 是为了判断码垛区哪个地方是空位,P2,P3是为了控制光栅的关闭。 但是要注意一点,当A-1,B-2 回程过程中 P2 交互点是必须经过的,但是此时P2点是不能有信号触发的。

    根据搬运的轨迹循环在此基础上设计了10个搬运模型模板:

    路线一:B-1(B-2) 到P1 ,使用T01模板,由按钮发起搬运动作   回传参数配置:btnStartOne,btnEndOne

    路线二:D-1(D-2) 到P1 ,使用T02模板,由按钮发起搬运动作 回传参数配置:btnStartTwo,btnEndTwo

    路线三:P1,P2,A-2 (自动回到P2) ,使用模板T03模板,由C系统自动发起 回传参数配置:btnStartThree, btnContinueThree, btnEndThree

    路线四:P1,P3,A-1(自动回到P3) ,使用模板T04模板,由C系统自动发起 回传参数配置:btnStartFour, btnContinueFour, btnEndFour

    路线五:P1,P2,C-2(自动回到P2)  ,使用模板T05模板,由C系统自动发起 回传参数配置:btnStartFive, btnContinueFive, btnEndFive

    路线六:P1,P3,C-1(自动回到P3)  ,使用模板T06模板,由C系统自动发起 回传参数配置:btnStartSix, btnContinueSix, btnEndSix

    路线七:A-2[省略],P2,P3,A-1 (或者A-1[省略],P3,P2,A-2) ,使用模板S01, 由C系统自动发起  回传参数配置:btnStartSeven, btnContinueSeven, btnEndSeven

    路线八:C-2[省略],P2,P3,C-1 (或者C-1[省略],P3,P2,C-2) ,使用模板S02, 由C系统自动发起  回传参数配置:btnStartEight, btnContinueEight, btnEndEight

    路线九:A-2,P2,B-2(B-1) 【或者A-1,P3,B-2(B-1)】,使用模板S03, 由C系统自动发起 回传参数配置:btnStartNine, btnContinueNine, btnEndNine

    路线十:C-2,P2,D-2(D-1) 【或者C-1,P3,D-2(D-1)】,使用模板S04, 由C系统自动发起 回传参数配置:btnStartTen, btnContinueTen, btnEndTen

其中 路线一,路线二 属于同一个类型,任务的发起是由实体按钮发起; 路线三,路线四,路线五,路线六 属于同一种类型,用于搬运空料架到码垛区;  路线七,路线八属于同一种类型,用于AGV到码垛区区满料架; 路线九 ,路线十 是属于同一种类型,用于将满料架搬运到工台

    机械手控制点说明(点位明细不详细讲解,能够理解大致的意思就行)

    机械手控制逻辑:A-1(C-1) 左边光栅 ,A-2(C-2) 右边光栅

    (1)    如果空料架搬入A-1(C-1) 判断A-2(C-2)码垛是否完成, 如果码垛完成下发指令机械手开始左边的码垛,否则机械手不做任何改变;

       如果 [D1309]=[ D1310] ,则写入PLC [D1291]=1

       如果 [D1309]!=[ D1310] ,则不做任何动作

    (2)    如果空料架搬入A-2(C-2) 判断A-1(C-1)码垛是否完成, 如果码垛完成下发指令机械手开始右边的码垛,否则机械手不做任何改变;

       如果 [D1307]=[ D1308] ,则写入PLC [D1291]=2

       如果 [D1307]!=[ D1308] ,则不做任何动作

     (3)    AGV进入左边A-1(C-1) 搬运满料架,判断机械手的状态,如果机械手的码垛不在左边工作且码垛数量完成即可进行搬运,否则不能进行搬运;

       如果 [D1307]=[ D1308] && [D1307]>0 && [D1306]!=1 , 则AGV则进入搬运

      AGV搬运开启之后,则需要将PLC中的[D1307]值设置为0

     (4)    AGV进入左边A-2(C-2) 搬运满料架,判断机械手的状态,如果机械手的码垛不在右边工作且码垛数量完成即可进行搬运,否则不能进行搬运;

       如果 [D1309]=[ D1310] && [D1309]>0 && [D1306]!=2 , 则AGV则进入搬运

      AGV搬运开启之后,则需要将PLC中的[D1309]值设置为0

       (5)    如果机械手A-1(C-1) 码垛完成, PLC寄存值:[D1307]=[ D1308] && [D1307]>0 ,且[D1306]!=1

    (6)    如果机械手A-2(C-2) 码垛完成, PLC寄存值:[D1309]=[ D1310] && [D1309]>0 ,且[D1306]!=2

    三. 技术问题

(1) 海康提供了RCS控制系统,对外协议是HTTP协议,所以这个对接就比较方便了。其中几个重要的接口: 下发搬运任务指令,继续任务指令,获取了解与坐标之间的对应关系,同时关于回传的参数设定, 此处对接是比较简单的,一般做web开发的基本不会有问题

    (2) 汇川机械手对接,使用Modbus协议,TCP/IP  ,在没有使用真机操作之间可以使用Modbus模拟器 (Modbus Poll,Modbus Slave 软件),网上可以下载。 模拟器上成功了到设备上十有八九就成功了。(关于Modbus以及这个软件的使用可以网上搜索资料,还比较多)。 目前我使用Modbus的通讯组件是HSL(付费,相对较便宜,也就几千块钱),也可以网上找其他的组件。 当然也可以使用KepServer 这个软件,这个是我们在PLC通讯交互中使用最多的软件,有点不必说,缺点就是 贵 

    (3) 因为做硬件的对接所以用的CS程序,但是海康AGV回传又是HTTp协议,所以使用了 Microsoft.Owin 组件做了一个 Web容器的管理,使得CS程序也可以使用浏览器访问其内部。

ContractedBlock.gifExpandedBlockStart.gif

CS托管API服务

    (4) 技术问题汇总

      1. 当前市面出现的智能设备越来越多,很多人都说搞硬件对接,其实当前情况下硬件对接很多都是转化为了HTTP协议对接,还有一些MQTT,MQ等 ,所以对于大部分程序员来说已经完全没有难度,所以对于初学者来说上手也非常快,比如海康的RCS系统对接

      2. 在PLC对接过程中,少不了的 OPC协议 以及 Modbus协议, 这两种协议在PLC对接过程中用的非常多,一般纯软件开发人员接触的相对较少

      3. 协议的转换的重要性,在硬件对接过程中我们一般使用CS端程序,天然的特性决定了其优势,但是当前万物互联的时代,HTTP协议才是最普遍的,所以要想将更多的终端串联在一起,将OPC协议,Modbus 协议的数据转换为HTTP 协议也是非常重要的,极大降低对接难度

      4. 另外市面上就是MQTT协议使用“泛滥”,这个也是在做硬件集成过程中必不可少的,当然还有很多其他的协议,要学习的东西不少

    四. 实施总结

      (1)  因为疫情才有了时间记录一下这次项目,项目开发大概花了10天左右的时间,1次/天 实体机模拟测试(主要是信号的模拟),然后4天现场施工调试(没法出门远程支持),然后其他时间就是在协调各种资源推进项目,协调资源施工计划的时间是远大于开发时间的。

      (2)  前期的模式非常重要,如果前期不模拟各种信号,真正到真机测试的时候问题会比较多。

      (3)  跳出自己的技能圈,虽然都是开发,但是和单纯的软件开发还是有点不一样,这几年主持施工过30多个工厂,跨领域的知识懂的越多,越有助于你在现场工作。

      (4)  关于控制部分的心得就是一定要分解各种动作,越精细越好,在施工之前一定要分解动作然后再组合,否则你会感激这样也对那样也对,真正工作起来这也不对那也不对,最关键你还没法改,因为改动的代价太大了。

      (5)  心中一定要有一张图,是一张整体的布局图,设备运转流程图,想办法画出你心中的图。如果你不能描绘出这张图,你会感觉非常的掣肘,软件开发技术和设备控制技术都要懂一点才好。

      (6) 现场放低你的姿态,你只有和施工人员处在同一个级别他们才会给你说真正的问题,不要以为自己是什么高级技术人员,否则一个焊桩,一个螺丝就搞死你,一顿饭一瓶水可以解决你很多你解决不了的问题,尊重是顺利实施的一个重要手段。

      (7)  总结经验,整体来说这个项目非常简单,但是感觉又很复杂,各种情况都有,比如简单的库存管理,光栅卷帘门的控制,按钮的呼叫,自动搬运调度,机械受PLC的对接,Web技术和CS程序的融合,多种通讯协议,难者不会会者不难,所以积累的经验很重要。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK