AnyLogic中如何通过物料搬运库Store块按数据库指定位置存储产品
AnyLogic物料搬运库Store块按预设SKU-货位规则定点存储实现方法
第一步:导入Excel映射数据并预加载
- 将整理好SKU与货位对应关系的Excel文件拖拽至AnyLogic工程画布,命名为
skuLocationExcel,配置文件读取规则:指定对应工作表、设置第一行为表头、加载时机选择「模型启动时自动加载」。 - 在Main代理内定义全局HashMap变量
skuTargetLocation,类型为HashMap<String, StorageLocation>,用于内存中快速匹配SKU对应的货位对象。 - 在Main的
On startup(模型启动)回调中编写代码,读取Excel数据填充映射表,参考代码如下:
skuTargetLocation.clear(); // 遍历Excel所有数据行,注意列索引从0开始计数,根据你的Excel列顺序调整下标 for (int row = 1; row <= skuLocationExcel.getLastRowNum(); row++) { String sku = skuLocationExcel.getCellStringValue(row, 0); // 第1列存SKU String rackMark = skuLocationExcel.getCellStringValue(row, 1); // 第2列存货架标识 int bay = skuLocationExcel.getCellNumericValue(row, 2).intValue(); // 第3列存货位列号 int level = skuLocationExcel.getCellNumericValue(row, 3).intValue(); // 第4列存货位层号 // 假设你的存储系统对象命名为warehouseStorage,匹配到对应货位对象 StorageLocation loc = warehouseStorage.getLocation(rackMark, bay, level); skuTargetLocation.put(sku, loc); }
第二步:配置Store块的自定义货位选择逻辑
- 为待存储的货品/托盘Agent添加字符串类型参数
sku,在货品生成(Source块)环节为该参数赋值实际SKU值。 - 拖入物料搬运库的Store块,将块属性中的货位选择模式从默认的「自动选择空闲位置」修改为「自定义位置」。
- 在Store块的
Location choice(位置选择)代码编辑区,编写匹配逻辑返回对应货位即可,参考代码:
// 优先取预设货位,做异常兜底避免报错 StorageLocation presetLoc = skuTargetLocation.get(agent.sku); if (presetLoc != null && presetLoc.isAvailable()) { return presetLoc; } // 预设货位不存在/被占用时,自动寻找空闲货位兜底,同时打印日志提示 traceln("SKU【" + agent.sku + "】预设货位不可用,已自动分配空闲货位"); return warehouseStorage.findFreeLocation();
配置参考界面

注意事项
- 如果你的Excel中直接存储货位唯一ID而非货架/排/层信息,可以遍历
warehouseStorage.locations()集合匹配ID,再存入映射表即可,核心逻辑一致。 - 如果单个SKU对应多个可选预设货位,可以将HashMap的值类型改为
ArrayList<StorageLocation>,每次返回列表中第一个可用货位即可。 - 确保存储系统(Storage块)的初始化时机早于映射表加载时机,避免启动时找不到货位对象报错。
内容的提问来源于stack exchange,提问作者Ritika Saini
相关产品推荐
相关产品推荐

