[Plant Simulation]使用TableFile和Method进行仓库仿真(Byref函数)

本文介绍了一种使用TableFile和Byref函数实现的仓库仿真系统。该系统通过寻找空闲货位来完成入库操作,并记录零件信息;通过查找零件位置完成出库操作,并更新清单。此外还介绍了初始化过程及具体的入库、出库策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

下载链接

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值