生产系统仿真:Plant Simulation应用教程
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

1.2 开始一个新项目

启动Plant Simulation(V8.2或者V9.0),新建一个模型,初始状态如图1.2所示。

图1.2 新建Plant Simulation模型

1.2.1 初始准备工作

1)如图1.3(a)所示,选择“文件→加入对象→遗传算法”,可以发现Explorer下方的对象类库(Class Library)中弹出了一个GA文件夹,Toolbox工具栏增加一项Genetic Algorithms(遗传算法)标签页。

2)右击Basis,在弹出菜单中选择“保存/载入→增加对象→遗传算法”,在弹出的对话框中找到Plant Simulation的安装目录的Tools,首先加载GAWizard.obj遗传算法向导对象,如图1.3(b)所示。

图1.3 加载Plant Simulation外部应用模块

3)重复上一步加载GanttWizard.obj甘特图对象(ExperimentManager实验管理器对象是默认载入的),加载完成后观察Toolbox和Class Library有什么变化,后续教程中加载其他外部对象的步骤与此一致。

4)如图1.2所示,Class Library中的Models文件夹改名为DOE_Sim(或者新建一个文件夹再改名),Frame模型层改名为SingleLine。

1.2.2 建立基本生产线模型

在SingleLine模型层中插入如图1.4所示的对象(所有对象的参数均先不设置),将各对象如图1.4(a)所示用Connector对象连接起来。要显示各个对象标签名称,选择模型层SingleLine的主菜单“View→Option→Show Object labels”。

图1.4 新建两条Flow-Shop生产线

1)EventController按图1.4(b)所示设置,仿真时间为连续的100h,即4d4h。

2)方法Reset是系统初始化对象,属于系统方法,一般做法是插入一个Method后改名为Reset,然后图标就变为系统图标了。

3)方法Set_Vars属于用户自定义的方法,一般采用蓝色图标的Method(方法)表示不直接运行的方法;而显示为绿色的Method则表示可以直接运行。注意,这不是强制性规定,只是一种建议和习惯而已。右击Set_Vars,在弹出菜单中选择Show Attributes and Methods(或者单击Set_Vars图标再按F8键)。在对象的属性对话框中找到CurrIcon项,单击该栏任意位置打开,在弹出的对话框中将Standard改为User,关闭属性对话框,返回模型层,如图1.5所示,Set_Vars变为绿色的图标了。

图1.5 用户自定义方法的设置

1.2.3 设置模型的全局变量

在Plant Simulation中,一般使用Information Flow(信息流对象)中的Variable对象来定义变量,这些变量放置在模型层内。当全局变量比较多时,可能导致模型层内的布局显示比较混乱,或者不太美观。如果将全局变量进行分类就会发现可以将其分为两类:需要显示信息的和可以不用显示信息的。一般情况下,推荐将不用显示信息的全局变量采用下面的方式来定义。

1)单击模型层主菜单Tools,在下拉菜单中选择Custom Attribute,如图1.6(a)所示。

2)在弹出的对话框中单击New按钮,弹出如图1.6(c)所示的变量定义对话框,按图1.6(b)(或表1.1)所示的变量及数据类型分别定义这5个全局变量(或称为属性)。如果定义完成后要进行修改、删除等操作,则可分别选择“Edit→Delete”来执行。

图1.6 模型层中的全局变量的定义

表1.1 模型层中的全局变量的含义

1.2.4 Method编程

Method编程有两条流水线,上面一条称为Line1,用变量Output_Line1来统计Line1的产出;下面一条称为Line2,用变量Output_Line2来统计Line2的产出,用Output_Line2和Output_Line1的比值作为两条线产出比,用OutRate_Line2表示。统计使用了方法CalOutput,因为后面其他流水线也要统计产出,所以,将CalOutput写成通用型程序。假设Line1为理想状态生产线(无故障、加工时间为常值及无其他波动),因此,也可以认为OutRate_Line2就是生产线2的产出率。

1)双击CalOutPut,输入如下SimTalk语句(后面还要对它继续扩充):

              is
                  m,n:integer;                                      -- 整数变量
                  Name:string;                                      -- 字符串变量
                  Obj:Object;                                       -- 对象类型变量
              do
                  m := str_to_num(omit(?.Name,1,5));                -- 先取Drain*后面的数字,
                                                                       再转换为整数类型
                  Name := sprint("Output_Line", m);                 -- 生产线名称
                  Obj := str_to_obj(Name);                          -- 转换为对象变量
                  Obj.val := ?.StatNumIn;
                  if m>1 then                                       -- 第二条线要计算产出率
                      Name := sprint("OutRate_Line", m);            -- 产出率
                      Obj := str_to_obj(Name);                      -- 转换为对象变量
                      Obj.val := n*100/OutPut_Line1;               -- 计算产出率
                  end;
              end;

2)双击Drain1,弹出如图1.7(a)所示的对话框,在Entrance后面的文本框中输入CalOutput后单击OK按钮退出,Drain2的设置操作相同。或者双击Drain1打开,单击Entrance后面的按钮,在弹出的Select Object选择对象的对话框中选择CalOutput对象,如图1.7 (b)所示,双击OK按钮返回。

图1.7 Drain1/Drain2的入口控制方法

3)双击Set_vars,输入如下SimTalk语句:

              is
                  m, i : integer;           -- 整数变量
                  Name : string;            -- 字符串变量
                  Obj : Object;             -- 对象类型变量
              do
                  for i:=1 to 2 loop
                      for m:=1 to 5 loop
                          Name := sprint("M", i, m);
                          Obj := str_to_obj(Name);        -- 转换为对象变量
                          Obj.proctime := ProcTimes;      -- 设置加工时间为ProcTimes的常量
                          if i=2 then
                              Obj.FailureActive := True; -- 激活设备的故障生成
                              Obj.MTTR := MTTR;
                              Obj.Availability := Availability;
                          end;
                      next;
                  next;
              end;

4)双击Reset打开,在do和end之间插入“Set_Vars;”。

5)双击Set_Vars运行,就可以对模型中的对象进行参数设置了。

模型中的Source1、M11等物流对象,Set_Vars方法及Output_Line1变量等信息流对象如何添加到Single Line模型层中的相关操作,请参考文献[7]相关的基本介绍。