Anylogic 如何使用“进入”和“退出”模块绕行;准备;流程图(生成资源行为流程图时不支持执行错误“0”)

Anylogic 如何使用“进入”和“退出”模块绕行;准备;流程图(生成资源行为流程图时不支持执行错误“0”),anylogic,Anylogic,我在两个区域之间有一个气闸(称为AL_2216的小房间)。气闸有许多不同类型的代理通过(推车、产品、操作员等)。气闸两侧都有排队区 因为空间很小,我构建了一个简短的流程图,其中有一个队列和限制区域块,所有代理在通过这个空间时都必须通过这些块。如果限制区域的容量已满,代理将根据其前进方向在InsidequeueEarea或OutsideQueueArea等待 我通过Exit和Enter块将代理发送到此流程图,它在流程图的顶部非常有效 但如果我尝试在准备流程图中使用Enter或Exit块,则会

我在两个区域之间有一个气闸(称为AL_2216的小房间)。气闸有许多不同类型的代理通过(推车、产品、操作员等)。气闸两侧都有排队区

因为空间很小,我构建了一个简短的流程图,其中有一个队列和限制区域块,所有代理在通过这个空间时都必须通过这些块。如果限制区域的容量已满,代理将根据其前进方向在InsidequeueEarea或OutsideQueueArea等待

我通过Exit和Enter块将代理发送到此流程图,它在流程图的顶部非常有效

但如果我尝试在准备流程图中使用Enter或Exit块,则会出现以下错误:

我尝试使用一个自定义块而不是Enter和Exit块,但是每次都会创建一个新的代码实例,并且这些限制在多个自定义块之间无法协同工作

这个气闸只是我模型中许多气闸中的一个。如果不引用相同的代码,我将有多个副本需要引用彼此的限制区域,流程图将变得庞大而复杂。有没有办法绕过这个问题

编辑:

我不知道如何处理这些端口。它们没有做任何事情的属性:

编辑2:

这里有一个文件来查看行为-
准备好的流程图部分被设置为“忽略”,因此代码将运行。您可以看到操作员和手推车通过AL_2216,一次只允许两个。如果取消选中“准备流程图”中的“忽略”,则会触发错误。

我认为您应该使用简单的
端口
对象(从代理调色板)替换导致获取Cart获取块底部输入的输入和退出块

根据:


因此,它需要一个到
ResourceTaskStart
流的直接链接,您的输入/输出组合可能是。。。不够直接。。。试试看。

正如其他人所说,在准备和总结流程图时,您可以使用哪些块有限制(没有真正的文档记录),这意味着您所尝试的将不起作用

正如您所说,保持气闸流量的单个“实例”非常重要,这样当它表示相同的物理气闸时,限制(队列和限制区域)是“全局的”。(否则,对于每个不同的物理气闸,您应该使用重复的自定义块。)

您最好的选择(假设您需要将购物车资源附加到产品)可能是

  • 将虚拟代理(通过源代码块
    inject
    调用)添加到表示资源准备需求(但现在未附加到捕获块)的单独迷你流程中

  • 将主流程中的卡扣更换为卡扣-等待-释放-卡扣组合:

    • 查封块正常查封购物车(不移动或连接购物车;无“发送查封资源”或“连接查封资源”选项),然后将代理注入迷你流程(可以使用退出和进入块使用气闸子流程)。此代理表示已捕获的资源代理(Cart),因此应该从它开始的位置开始,并设置动画使其看起来像它。(在此迷你过程中,您可以使实际购物车暂时不可见。)

    • 当代理到达小流程结束时(在接收块),立即将相关购物车移动到您的节点(使用
      jumpTo
      ),使其再次可见,并
      从等待块释放产品代理

    • 释放抓取的购物车,然后立即重新抓取,但现在将其连接(因此动画看起来正确)。如果您使用资源选择“离代理最近”选项,则应保证您能够抓住正确的购物车。(您还可以使用带有一些代码的“自定义资源选择”选项,以确保您始终选择相同的购物车。)

(如果您不关心是否有正确的动画,则比上述方法更简单,并且可以使用自定义块使此块组合可重用,因此不会太笨重。)


编辑:一个非常类似的替代方案(也是您自己答案的基础)是在子流中有一个代表您的产品的虚拟代理,该代理捕获(并附加)实际的购物车代理,将其保留在产品的位置,以便按上述方式立即捕获。这稍微好一点,因为您不必担心真实资源代理的可见性和“跳跃”,而且您可以将捕获和释放从主流(现在只有等待捕获)移动到子流(从而“将它们隐藏起来”)。

因此我最后做的就是这样。这是我能想到的最好的方法,可以很容易地复制到许多气闸

在抓取购物车之前,我已经在我的产品流程图中添加了一个等待块(Dummythrual2216)。此等待块向cartHome节点的sourceDummy中注入一个新代理。然后,假人抓住一辆手推车,穿过气闸及其限制。退出限制后,我检查代理的类型,并将代理指向正确的退出块。虚拟代理和购物车移动到虚拟代理释放购物车并下沉的产品。水槽释放等待块,产品抓住紧挨着它的购物车,继续它的旅程


添加更多气闸是一种简单的复制/粘贴方法。没有我原来的好,但是你打算怎么做。。。感谢大家的帮助和建议。

AnyLogic发送了正确的答案

所以我问了Anylogic一个不同的问题,他们从这篇文章中认出了我的名字!他们给我发了一封电子邮件