Store配合TableFile处理仓库必要信息(Byref函数)
- 当有一个入库任务,需要先寻找空闲的货位(也可以按照策略来)
- 当一个零件存储,要用一个清单记录零件名称,所存储的货位位置
- 当有一个出库任务,需要先寻找对应零件的位置(也可以按照策略来)
- 当一个零件出库,还要从仓库清单上清除该零件,以免重复查询
初始化
stock.delete
寻找空闲货位
param byref x,y:integer->boolean
var i:integer
var k:integer
if self.~.full
return false
else
for i:=1 to self.~.XDim
for k:=1 to self.~.YDim
if self.~.pe(i,k).empty
x:=i
y:=k
return true
end
next
next
end
寻找空闲货位的函数必须返回两个值,即空闲货位的X,Y,但是一个函数只能返回一个值作为结果,因此可以用如下方法解决:
- 返回X,Y坐标作为一个引用(Byref)- -以上采用该方法
- 返回X,Y坐标作为一个表
- 将坐标存储在store的用户属性中
byref函数
可以使用byref将参数作为引用传递,可以向调用方法返回多个结果,只能输入本地变量
param byref a,b : real -- declares method1
a := a + 1
b := b + 1
-- declares method2
var x, y : real
print x, " ", y -- 0 0
method1(x, y)
print x, " ", y -- 1 1
method1(x, x)
print x, " ", y -- 3 1
入库策略
var x:integer
var y:integer
var partName:string
waituntil warehouse.full=false prio 1
warehouse.getFreePlace(x,y)
partName:=@.name
@.move(warehouse.pe(x,y))
stock.writerow(1,stock.YDim+1,partName,x,y)
出库策略
var x:integer
var y:integer
var part:string
var found:boolean
part:=cycletable[1,cycletable.position]
if cycletable.position>=cycletable.YDim
cycletable.position:=1
else
cycletable.position:=cycletable.position+1
end
stock.setcursor(1,1)
found:=stock.find(part)
if found
x:=stock["x",stock.cursorY]
y:=stock["y",stock.cursorY]
stock.cutrow(stock.cursorY)
warehouse.pe(x,y).cont.move(station)
else
messageBox("Can't find this part in the warehouse!", 1, 0)
eventController.stop
end