GitHub链接:https://github.com/zcongfly/Plant_Simulation_Case
蓝奏云链接:https://wwu.lanzoub.com/b032kpy3i
密码:awnr
友情提示:plant笔记由于文件过大上传不到蓝奏云,需要的伙伴请前往GitHub获取
我学习的plant视频课程网址:https://www.51zxw.net/List.aspx?cid=846
想要免费试学的小伙伴,关注“拾烩”公众号,后台留言“plant”获取账号和密码。
解释一下不放源模型的原因:
一方面,这是我们的结课大作业,而且该课程的任课老师每一届布置的大作业万年不变,我不想给某些人投机取巧的机会;另一方面,平心而论,这并不是一个很复杂的模型,但毕竟是我从零开始一点一点搭建出来的模型(我拿到手的资料就只有那个CAD图和那个不明所以的BOM表,花了两三个礼拜恶补基础知识,又花了两个礼拜做这个大作业),我也不想把整个过程最后的成果随随便便共享出来。
如果确实需要源模型,公众号后台私信给我一个非要不可的理由。
1.问题描述
考虑一个生产车间,该车间简化后的平面布局图如下(完整布局图见附件)。车间共分为生产区、预装配区、原材料库、AGV充电站、产品上线区共5个区域,生产开始前,AGV从车间的右上角发车,需前往原材料库将生产所需原材料运送至生产区进行生产,生产完成后的成品需经检查站检验后,再由AGV其运送至产品上线区进行上线。
车间中,有部分原材料无法直接参与成品加工,需进行预装配,此时需由AGV将原材料先运至预装配区进行加工,待加工成预装配件之后,再将该预装配件从预装配区运送至生产区的相应工位进行生产。车间还设有AGV自助充电桩,当小车电量低于设定的保留电量值时,小车可自行前往AGV充电桩进行充电。
本报告拟对该车间整体的作业流程进行仿真,以确定所需AGV小车的最佳数量,并进一步改进生产流程。
图 1车间平面布局简图
2.实体对象与参数设计
该生产车间及其相关作业需要用到的实体设备均可在plant simulation的实体库中找到对应的仿真对象,主要设备的相关对应关系如下表:
表 1 实体设备及其对应的对象
实体设备 | plant simulation实体库对象 |
AGV | Transporter |
AGV行驶轨道 | Track、TwoLaneTrack |
生产线 | Converter |
立体货架 | Store |
充电桩、检查站 | Station |
装配工位 | AssemblyStation |
大、小料箱 | Container |
相关参数设计:
除下文提到的参数外,本报告涉及的其余参数均为系统默认值。
(1). AGV电量。AGV的初始电量设置为2~50mA之间服从均匀分布的随机值(z_uniform(2,50)),保留电量设置为10,即当小车电量低于10mA时,小车需前往充电桩进行充电。
(2). 生产区加工作业时间。该车间所有类种类间均设置为180s,预装配区的装配工位加工时间维持默认值。
(3). 各装配工位加工所需的各类原材料的数目根据所给的excel表格设定,表格中未给出具体数值的零件均设置为1。
(4). 大、小料箱中装有的原材料类型和数目根据所给的excel表格设定,表格中缺失具体数目的零件一律设置为1,预装配件单独装了一个料箱,数目设置为每种280件。
(5). 车间现有布局一共有3个预装配工位、6个充电桩,2条相同的生产线,每条生产线上有6个不同的加工工位,用于生产不同类型的产品。实际生产时,可自行设定实际使用多少个充电桩、生产线等。
3.仿真模块设计
3.1整体模块设计
根据所给的车间平面布局图,搭建出本次仿真模型的2D布局图如下:
图 2仿真模型布局图
在该模型中,小车从右上角的source中产生,同时设置其目的地为预装配区与原材料区中间的轨道Track9,Track9的合适位置设有已传感器,当小车触发传感器时,首先判断成品暂存区有无待上线的成品,若有,先将成品上线;接着判断预装配区有无待取的预装配件,若有,则将待取零件运至对应的装配工位,若无,预装配区向小车发出供货指令;最后,判断生产区装配工位有无可供装配的原材料,若无,生产区向小车发出供货指令。小车接收指令后,前往原材料库中取货,运往预装配区或生产区进行生产加工若小车暂无任务可供指派,则设置其目的地仍为Track9,让其绕着轨道空跑。
图 3 Track9传感器控件方法(部分)
Track9之前的Track8也设有一个传感器,当小车触发该传感器时,会判断小车的剩余电量是否低于保留电量,若低于,小车前往充电站充电。当经过一段时间,成品暂存区出现待上线的成品时,暂存区向小车发出指令,小车接收指令后,将成品运至上线区。
图 4 Track8传感器控件方法
模型设计了取货和供货两个任务表,当任意区域的暂存区需要AGV前来取货或者供货时,该暂存区将会在对应的任务表中写入取货或供货需求,当小车行驶至Track9并触发传感器时,传感器控件方法会挨个扫描任务表,并根据任务表给小车指派对应的任务,当某一任务指派给小车后,会删除任务表中对应的任务。
在模型生产区附近,每一个靠近装配工位的Track均设置有一个传感器,用于控制触发该传感器的AGV小车将料箱卸入各个工位。除D工位处的Track外,其余Track均调用m_in方法,TrackD001则调用其内部创建的OnSensor1方法。
图 5 m_in方法
同理,在靠近成品上线区的Track56,以及靠近成品暂存区的Track561处,也设有传感器,分别用于控制成品的上线和装车。
3.2初始化和重置模块设计
模型中插入的reset方法可以对模型进行初始化,当点击重置按钮时,该方法执行一次。本模型中,reset方法的目的是初始化任务表并往表中写入初始任务。
图 6 reset方法(部分)
模型将启用的充电桩数目、预装配工位数目、生产线数目、装配工位数目以及各装配工位配备的大、小料箱数目均定义为全局变量,通过修改这些全局变量,可以模拟该车间启用不同数量的物流资源时车间可能发生的各类情况,更方便地方便进行瓶颈分析和优化。
表 2 全局变量及其含义说明
全局变量名 | 含义 |
n_chargestation | 启用的充电桩数目 |
n_preassemble | 启用的预装配工位数目 |
n_produce | 启用的生产线数目 |
n_part | 生产线上启用的装配工位数目 |
n_bigbox(A/B/C/D/E/F) | 装配工位配备的大料箱数目 |
n_smallbox(A/B/C/D/E/F) | 装配工位配备的小料箱数目 |
n_afterbox(A/B/C/D/E/F) | 装配工位配备的预装配件料箱数目 |
综合上述整体模块及初始化和重置模块的设计,结合该车间生产作业的全流程分析,模型整体框架已初步搭建完成,可绘制出具体的仿真逻辑流程图如下:
图 7 车间仿真模型逻辑流程图
3.3原材料区模块设计
现实中的原材料库的所有原材料零件均以箱为单位装载,有大料箱和小料箱两种。AGV取货时将整个箱子一并取走,送至目的地再将所需的具体零件取出进行加工。对于需要进行预装配才能参与正式生产加工的零件,需将其按比例统一装入一个料箱中,由AGV一并送至预装配区。
为更好的区分大小料箱,本报告将原材料库拆成两个store,分别存储大料箱、小料箱,大小料箱中的零件种类和数目根据excel表格设定。另外再设置一个store,用于存储存放需要进行预装配的零件的料箱,每一个料箱中存储每种预装配件各280个。
图 8 原材料库模型布局
仿真开始时,执行设定的creatParts方法,利用create方法将每个store装满料箱,然后在每个料箱上根据设置好的DataTable装载零件。由于creatParts方法只在仿真开始时执行一次,在模型中加入了Generator,每隔1小时调用一次creatParts方法,以持续地生成原材料零件,保证原材料库能够及时供应。
图 9 createParts方法(部分)
3.3预装配区模块设计
同原材料库一样,该车间的预装配区通过TwoLaneTrack与Track相连,该预装配区共有3个完全相同的预装配工位,可通过修改全局变量n_preassemble的值设定启用预装配工位的数目。预装配区的模型布局图如下所示。
图 10预装配区模型布局图
预装配工位被设置成一个frame框架,3个预装配工位完全相同,其布局图如上图所示。预装配工位前的TwoLaneTrack的A、B两个方向均设有传感器控件,当小车行驶至相应位置时,触发传感器的控制方法,完成供货(A侧传感器)和取货(B侧传感器)操作。
装有预装配件的料箱从原材料库被运送至预装配区后,先由一个dismantleStation工位对送来的料箱进行拆箱,将拆下来的原材料零件送至AssemblyStation工位进行预装配。装配完成后,对预装配件进行装箱,装箱完成后,在“任务表-取货”中写入一条取货指令,让AGV前来将预装配件送入生产区对应的装配工位。
图 11预装配工位模型布局图
3.4生产区模块设计
该车间共有2条完全相同的生产线,每条生产吸纳上有6个不同的工位,负责装配和加工不同种类的产品。每个工位配备的大、小料箱数目根据所给的excel表格设定,并以全局变量的形式在模型中进行定义,如n_bigboxA、n_smallboxA分别表示A工位配备的大、小料箱数目,其余工位的料箱数依据该命名形式类推。
图 12生产区模型平面布局图
对大部分工位,仅需配备一定数目的大、小料箱即可,而根据excel表,D工位装配加工所需的零件由一部分来自于预装配区,即需要预装配区先对原材料进行一个预装配,才能送至D工位备用。因此,D工位额外设置了一个全局变量n_afterboxD,表示D工位需要配置的装有预装配件的料箱数目。
对于A、E、F工位,除大、小料箱中的原材料零件外,还需要部分工位常备件参与装配加工,工位常备件默认数量无限,现取现用。故在模型中,对E、F工位额外增加了一个source,source生成的MU直接送至AssemblyStation,代表工位常备件的使用与消耗。
图 13 A工位框架平面布局图
以A工位为例,本模型中各个工位的frame所包含的对象元素及其布局大致如上图所示。A工位中的两个DismantleStation模拟从料箱中取出所需零件的过程。如A工位装配需要大料箱中的600个脚轮和50个内饰皮革,DismantleStation则分别将600和50个part拆至后续的两个暂存区参与后续AssemblyStation的装配和加工,而大料箱中的其余零件连同箱子均被Drain接收,表示这些零件未在A工位使用。
A工位中Buffer和Buffer1分别代表大、小料箱的暂存区,当其上边的料箱向后续节点移动时,触发暂存区定义的OnExit方法,开始扫描暂存区剩余的料箱数,若料箱少于规定数目,则向“任务表-供货”中写入一条指令,呼叫AGV小车前来供货。
3.5AGV充电站模块设计
根据该车间的平面布局图,AGV充电站设有6个并联的充电桩,可同时容纳最多6辆AGV小车充电,可通过修改全局变量n_chargestation的值设定投入使用的chargestation数目。DataTable记录了充电桩的占用情况,以及给小车充电的开始、结束以及持续时间。
图 14充电站记录表
小车经由Track8进入Track39时,会触发Track39的OnEntrance控件,判断小车是否需要充电,若需要充电,则为小车寻找空闲的充电桩,小车行驶至对应的充电桩进行充电。小车进入和离开充电桩时,每一个充电桩均会触发一次OnEntrance和OnExit控件,分别记录小车进入和离开的时间,以计算小车的充电时间。
4.仿真结果与分析
启用1个预装配区、1条生产线、6个工位,分别设置AGV小车数目为4、6、8辆,根据前文设定的参数进行仿真,每次仿真时长设置为10小时,统计并分析仿真结果如下:
(1).当AGV数量为6辆时,E、F工位迟迟未开始生产,只有当其余工位结束一轮生产,重新要求供货时,E、F工位才得到原材料并开始运作。分析AGV的调度逻辑,由于原材料的供应和成品的取货共用的是同一套调度系统,即并未设置某辆小车只能提供供货或者取货的专线服务,且取货较之供货有更高的优先权,当取货列表中有取货指令时,小车必须暂停对未完成供货的工位供货,先执行取货指令,导致E、F工位缺少原材料而无法启动生产。增加AGV小车数量或适当减少A~D工位所要求配备的大、小料箱数可一定程度上解决该问题。
(2).当AGV数量为4、6、8时,AGV的工作率均达到99%,说明AGV几乎一直处于满负荷工作的状态。分析原因,每个工位都配备至少1个以上的大、小料箱,每个料箱里边有成百上千可供生产加工的零件,当工位启动生产时,成品几乎是不间断地被生产出来,其生产的速度远大于AGV小车将成品运输至上线区的速度,造成对工位供货暂停。当一轮生产暂停时,AGV又得立即对生产区工位进行供货,几乎没有空闲时间。
(3).部分工位的大、小料箱数目配备不合理。以A工位为例,A工位配备了2个大料箱和1个小料箱,而在BOM表中,A工位装配所需的原材料零件“内饰皮革喷胶”仅在小料箱中存有8个,当这8个材料使用完成后,A工位则需要再次发出小料箱的补货需求并等待补货,小料箱的其余原材料零件则没有被使用。换句话说,A工位小料箱中的零件只取用了其中的8个。解决这一问题需要重新调整料箱中装在的零件的种类和数目,或调整A工位配备的小料箱数目。
5.存在问题与不足
本模型在最终运行时取得了较为合理的结果,但仍存在逻辑上的一些问题和不足,具体阐述如下:
(1).未设置当待充电的AGV数目大于充电桩数目时,AGV排队等待充电的区域。针对此问题,可在进入每个充电桩前与主干道的分支处添加传感器,设置AGV的充电等待区,以避免对主干道造成堵塞。
(2).仿真后期取货指令超出供货指令时,可能出现所有AGV均忙着取成品上线而不向装配工位供货,导致某个工位由于缺少原材料而暂停生产。针对此问题可以考虑三个解决方式。一是可以考虑专线运输,一部分AGV只负责供货,另一部分只负责取货,分别对应供货和取货两个任务表;二是将成品在上线前进行装箱,以“料箱”作为最小单元,以减少AGV来回取货的次数;三是根据每个工位所需的零件,合理配备各个工位的所需料箱数,尽量使各个工位生产一个成品所需的时间大致相等,并在生产作业开始前的一段时间内设置只允许AGV进行供货而不进行取货,以保证生产线上各个工位的原材料供应充足。