获取车辆上零件名称---多产品多路径运输模型设计


一、 案例说明
在仿真模型中,如果车辆----Vehicle可以装载多种产品,这时我们可能需要针对车辆上装载的产品类别来进行车辆路由规则设定、卸载作业设定,这时在模型中必须知道车辆上装载的是哪种类别的产品,或者哪几种类别的产品,产品的数量是多少。
在witness模型中如何来实现这个功能呢?
在该运输模型中,需要运输两种产品A,B,这两种产品随机到达仓库,运输的优先级为A高于B,即如果车辆过来运输发现仓库中还有A产品没有运输完,则装载A产品,如果A产品运输完了,再运输B产品。车辆的容量为4,车辆需要将A产品运输到另一仓库X,需要将B产品运输到另一仓库Y。模型最终界面如图1所示,Witness仿真模型下载



图1 模型最终界面


其中运行逻辑为:
 车辆首先在T1上,当SourceStock中的产品数量不小于4个时,车辆从T1上行驶到T6上进行装载;
 装载之后,只要车辆上有产品A,不论是否有产品B,则行驶上T2,否则行驶上T3;
 车辆在T2末端将A产品卸载入X仓库,然后车辆行驶至T4;
 在T4末端,如果车辆上还有产品(只能是B产品),则行驶上T7,否则驶至T1;
 车辆在T7和T3末端都会将产品B卸载到仓库Y中,然后空车行驶至T5;
 车辆在T5末端行驶至T1;
 如此循环…..
该模型的建立主要有以下目的:
 掌握Vehicle函数的用法
 掌握track元素的功能和用法

   获取车辆上零件名称的方法
 熟悉witness建模环境和建模步骤

二、 模型设计
2.1 模型元素说明
模型中所用到的元素以及元素的作用如表1所示。


表1 元素说明



2.2 模型可视化设计
(1)part类型元素可视化设计
Part类型元素A、B主要对其name属性、style属性进行设计。A、B产品分别选择颜色为红色和绿色的圆圈图标表示动态显示图标。
(2)buffer类型元素可视化设计
Buffer类型元素sourcestock、X、Y主要对其name属性以及part queue属性进行设置。在该模型中,这三种buffer元素的part queue属性均选择queue选项下的right方向。
(3)track类型元素可视化设计
Track类型元素T1,T2……T7主要对其name属性以及path属性进行设置。Path属性按照图1中模型最终界面安排各个元素可视化路线。
(4)Avariable类型元素可视化设计
Avariable类型元素partinvehicle主要统计每趟运输小车中四个零件的种类。在该模型中主要对其name属性、value属性进行设计。
2.3 模型详细设计
(1)part类型元素详细设计
在该模型中,产品A、B分别是主动到达系统的,A产品到达系统服从(10,30)的整数均匀分布,A产品的到达批量为1,B产品到达服从(8,16)的整数均匀分布,到达批量为2。主动到达系统后两种产品均被放到sourcestock缓冲区中存放等待运输小车的装载。这里以产品A为例,介绍详细设计步骤。如图2所示。



图2 A产品的详细设计


其中,点击“To…“按钮,输入“push to sourcestock”。B产品的设置与A产品类似,只需将必要的数据更换即可。
(2)track类型元素详细设计
 T1元素详细设计
小车在T1上等待装载,首先计算sourcestock中的库存数量是否大于4,否则,小车原地等待直到库存中的数量大于4。该元素的详细设计如图3所示。



图3 T1详细设计


其中,点击“output to”按钮,输入
    IF NPARTS (SourceStock) > 3
        PUSH to T6
    ELSE
        Wait
    ENDIF
!判断初始库存数量是否满足要求。


 T6元素详细设计
T6主要任务是:对初始库存sourcestock中的零件进行装载,装载时如果有A产品必须先装A产品;如果小车上有A产品,则小车将沿T2轨道运输,如果小车上没有A产品,则小车沿T3轨道运输。实现第一种功能则需要对T6的loading选项进行设置,实现第二种功能需要用到Vehicle函数和Npart2函数以及element系统变量。简单介绍这三 个元素。


Vehicle函数用法:
语法:Vehicle(track-name,order-name)
功能: 返回name型变量,表示在特定的轨道(track)上规定序列号的小车的名称,如果order-name为1,表示返回轨道上从头至尾按顺序数第一个小车的名称,order-number为2,表示返回轨道上从头至尾按顺序数第二个小车的名称;依次类推;如果轨道上没有小车则返回none。
Nparts2函数用法:
语法:NPARTS2(element_name, part_name, mode)
功能: 返回整数型变量,表示在特定的Element-name中含有Part-name元素的数量。Mode可取0,1,2,3四种值,取0时表示返回的数值包含该element-name中所用的该特定零件的数量,包括输入输出专用缓冲区内的零件;1表示只返回element-name本身含有的零件数量;2表示返回输入专用缓冲区中该零件的数量;3表示返回输出专用缓冲区内该零件的数量。
Element系统元素:
Element返回的是系统运行状态下,当前发生事件的元素的名称。例如,如果machine元素被定义的数量为3,如果当前是第三台机器发生了某一事件,则element将被赋值为“machine(3)”。如果元素没有对数量进行限定,则该函数只返回名称。


对T6元素进行详细设置如图4和图5所示。



图4 T6元素general详细设计


其中,点击“output to”按钮,输入
    IF NPARTS2 (VEHICLE (ELEMENT,1),A,0) > 0
        PUSH to T2
    ELSE
        PUSH to T3
    ENDIF
!判断小车中是否有A产品,如果有,将沿T2轨道运输,没有则沿T3轨道运输。



图5 T6元素loading详细设计


其中,点击“input loading rule”按钮,输入
PULL from A out of SourceStock,B out of SourceStock !先装sourcestock中的A产品,接着装B产品。


 T2、T3元素详细设计
车辆在行驶至T2或T3上时,都会将车辆上各个位置上装载的产品类别通过变量PartInVehicle显示出来。在T2、T3的尾部卸载小车上的零件。然后沿着T4、T5轨道继续运行。由于T2和T3详细设计类似,在这里以T2为例。如图6、图7所示。



图6 T2元素general详细设计


其中,点击“actions on”按钮,输入
    PartInVehicle (1) = VEHICLE (ELEMENT,1):TYPE
    PartInVehicle (2) = VEHICLE (ELEMENT,1) AT 2:TYPE
    PartInVehicle (3) = VEHICLE (ELEMENT,1) AT 3:TYPE
    PartInVehicle (4) = VEHICLE (ELEMENT,1) AT 4:TYPE
!获取当前Track上的车辆上的不同位置的part的名称。
点击“output to…”按钮,输入
    Push to T4 ! 表示小车经过T2后转移到T4轨道上运输。对应的,T3转移到T5上。



图7 T2元素unloading详细设计


其中,点击“output unloading rule”按钮,输入:PUSH A to X !将零件卸载到X库存中,对应的,T3卸载到Y中。
T3的详细设计与T2类似这里不再赘述。


 T4、T5元素详细设计
T4、T5元素不需装载、卸载零件,因此只需对general进行详细设计即可。如图8、图9所示。



图8 T4详细设计


其中,点击“output to”按钮,输入
    IF NPARTS (VEHICLE (ELEMENT,1)) > 0
        PUSH to T7
    ELSE
        PUSH to T1
    ENDIF !小车经过T4后要判断小车内是否还有零件(只能是B零件)如果还有零件,要转移到T7轨道上运输,如果没有零件,转移到T1上等待下一次装载指令。



图9 T5详细设计


其中,点击“output to”按钮,输入:PUSH to T1(1) !将小车转移到T1等待下一次装载指令。
 T7元素详细设计
T7元素是当小车中既有A产品,又有B产品时对A产品卸载之后,卸载B产品之前的必经路线。所以T7也涉及到卸载B产品的详细设计。具体如图10和图11所示。



图10 T7元素general详细设计


其中,点击“output to”按钮,输入:“Push to T5



图11 T7元素unloading详细设计


其中,点击“output unloading rule”按钮,输入:“Push to Y
三、 运行模型
运行模型100min,所得数据如图12,图13所示。



图12 buffer类型元素运行数据


从图12可以看出,系统运行100min后,A产品送往X目的地的数量为6,B产品送往Y目的地的数量为14。



图13 part类型元素运行数据


从图13可以看出,B产品进入系统的数量要比A产品多,这是由于A、B产品进入系统的不同的间隔期所造成的。与图12相比较,产品A进入系统的数量为6,而X目的地中A产品数量也是6,说明sourcestock中和小车中当前没有A产品,B产品进入系统数量为18,但Y目的地中数量仅为14,可以说明还有4个B产品或者在sourcestock中或者在小车中。可以从运行界面和图12中sourcestock的now in数据中看出,这4个B产品在sourcestock中等待小车装载。