plant simulation 常用的代码

清空控制台

1
clearConsole

统计故障时间

1
2
if ?.failed 修复时间统计[1,修复时间统计.ydim+1]:=?.getDisruptionendtime-eventController.simTime	
end

查找表格的内容

1
2
3
4
5
6
var m,n :integer
if 数据表.find("wwd")
n := 数据表.cursorx
m := 数据表.cursory
print n,m
end

打印受限制的元素个数

新建Method,写入如下代码:

1
print numOfLimitedObjects

定义一维数组并打印

案例一

1
2
3
4
5
6
7
8
9
10
clearconsole			--清空控制台
var arry : integer[3] --定义数组为整形,3个元素
var i : integer --定义循环变量
i := 1
arry[1] := 10 --对数组进行赋值
arry[2] := 101
arry[3] := 103
for i := 1 to 3 --循环打印数组元素
print arry [i]
next

案例二

1
2
3
4
5
6
7
8
clearconsole			--清空控制台
var i : integer --定义循环变量
var arry : integer[] --定义数组为整形,元素数留空
--定义一维数组元素
arry := makearray(1,2,3,1,3,13)
for i := 1 to 6 --打印数组元素
print arry [i]
next

定义二维数组

1
2
3
4
5
6
7
8
clearconsole			--清空控制台
var arry :integer[2,2] --定义4个整数元素的数组
--给元素赋值
arry[1,1] := 3
arry[1,2] := 4
arry[2,1] := 5
arry[2,2] := 6
print arry[2,1] --打印数组

使用嵌套循环打印二维数组所有元素

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
clearconsole				--清空控制台
var arry :integer[2,2] --定义4个整数元素的数组
--给元素赋值
arry[1,1] := 3
arry[1,2] := 4
arry[2,1] := 5
arry[2,2] := 6
--定义内外层的循环变量,遍历打印数组所有元素
var j: integer := 1
var i: integer := 1
for j := 1 to 2
for i := 1 to 2
print arry[i,j]
next
print "-"
next

switch case的用法

注意:simtalk 2.0 已经弃用了inspect .. when ..的句法,
旧的用法如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
is
num:integer;
do
num:=2;
inspect num
when 1 then print "Num is 1.";
when 2 then print "Num is 2.";
when 3 then print "Num is 3.";
-- and so on
else
print "Not 1, not 2, not 3 !";
end;
end;

新的用法

1
2
3
4
5
6
7
8
9
10
11
var n : integer := 1
switch n
case 1
print "num is 1"
case 2
print "num is 2"
case 3
print "num is 3"
else
print "no num"
end

while循环

1
2
3
4
5
6
var i : integer := 1
while i < 10
i := i +1
end

print i

repeat循环

类似于c语言的 do..while..循环

1
2
3
4
5
6
7
8
var i : integer
i:= 10
repeat
i := i +1
print i
until i > 20

print i

For循环

1
2
3
4
5
var i : integer
i := 1
for i := 1 to 100
print i
next

Plant Simulation里输入数据

使用prompt功能

The function prompt asks the user to enter data.

1
2
3
4
5
6
-- method for querying the number of pallets in a model 
-> integer
var s: string
-- gets the number of pallets
s := prompt("Enter number", "of pallets")
return str_to_num(s)

举例:使用用户输入的值来计算圆的周长

用户输入半径

1
2
3
4
->integer		--定义需要的返回值是整形
var s :string --输入值是一个字符串类型,所以需要定义一个字符串型的变量
s:= prompt("请输入圆的半径")--用户输入
return str_to_num(s) --将输入的值返回,并且转换为数字类型

计算面积的方法
–定义一个计算园面积的方法

1
2
3
4
5
var r :integer
var L :integer
r := 数据输入
L := r * pi
print L

以上需要两个方法来实现计算。以下可以在一个方法内实现:

1
2
3
4
5
6
7
8
9
10
11
12
var l : real
var m : real
var s : real
var s1 :string
var s2 :string

s1 := prompt("请输入长方形的长:")
l := str_to_num(s1)
s2 := prompt("请输入长方形的宽:")
m := str_to_num(s2)
s := l*m
print s

传递两个参数

传递的方法:

1
2
3
4
5
6
param m , n :integer -> integer
if m > n
return m
else
return n
end

返回原程序

1
2
3
var s : integer
s := 比较大小(10,20)
print s

传递1个参数

程序1

1
2
3
var L : integer
L := 周长函数(125)
print L

程序2

1
2
3
param n : integer -> real
result := 2 * pi * n
return

waituntil 和 stopuntil

1
2
waituntil condition [prio number] [wait timespan:time]
stopuntil condition [prio number] [wait timespan:time]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
prio number 中的number越大,优先度越高
三个方法分别写入以下方法:

waituntil 缓冲区.empty prio 1
@.move(缓冲区)

waituntil 缓冲区.empty prio 2
@.move(缓冲区)

waituntil 缓冲区.empty prio 3
@.move(缓冲区)

其中prio 3的级别是最高的。一直等到缓冲区空,才会移动,所以每次缓冲区只有1个零件。

stopuntil 缓冲区.empty prio 1
@.move(缓冲区)

stopuntil 缓冲区.empty prio 2
@.move(缓冲区)

stopuntil 缓冲区.empty prio 3
@.move(缓冲区)

  其中prio 3的级别是最高的。一直停止到缓冲区空,所以缓冲区会有

#设定设备或者工位的定期保养策略

打开工位或者机器人,在故障里新增Failure,填写如下,
如果故障持续时间duration为0,则表示没有故障。如果不填写间隔,则表示只出现一次故障。

  1. 开始start:即仿真开始多久后开始故障。
  2. 间隔duration:每间隔多久发生故障。
  3. 持续时间interval:故障的持续时间,即维护时间。
  4. 下图即为每1000h的工作时间,保养3h。


故障时间选择:

  1. 仿真时间simulation time:与系统的仿真时间有关,而与其他,如工作站的作业时间无关。
  2. 操作时间operating time:For this setting,Plant Simulation consumes the time you have entered as the interval, if the object is not paused (working or waiting).
  3. 处理时间processing time:For this setting, Plant Simulation consumes the time you have entered as the interval while the object is working (not paused, waiting, or unplanned).

还可以通过设置多个Failure的参数来使模型更加的贴近生产。

  1. 设置TMP(Total Productive Maintenance的缩略语,中文译名叫全员生产维护,又译为全员生产保全)为每周保养1次,1次2H.
  2. 工装更换时间,每3H,更换一次工装,耗时20min。
  3. 随机故障,按照RO,95%,故障修复时间10min.

如何设置缓冲区的大小?需要学习

重置数据表的命令

移动零件至传送带指定位置

1
@.move(传送器11,3)

删除表中的主数据

  此命令为删除表中的数据,而非删除表

1
table.delete

transfer station的用法