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]相关的基本介绍。