【问题标题】:How to stop source blocks when rackSystem if full如果机架系统已满,如何停止源块
【发布时间】:2019-07-06 02:03:58
【问题描述】:

我看到了一个与我的问题类似的问题,但我无法按照答案中的建议使其工作。

我有 5 个源生成 5 个不同的代理,这些代理通过 rackSystem 中的 rackStore 块存储;资源池中的资源将它们拾取(rackPick 块)并将它们提供给组装者。在某些时候,我会占用相同的资源来执行其他任务,但是当机架已满时模拟会中断。我试图以这种方式使机架满时停止源:

if(rackSystem.isFree(1, 1, 1) == false) self.set_rate(0);

我在每个源的“退出”栏中输入了此代码,但它不起作用;我错过了什么?

机架系统由 5 个不同的托盘机架块组成,每个块具有 1 行/位置/级别。

感谢您的建议。

【问题讨论】:

    标签: anylogic


    【解决方案1】:

    您只是检查位置 (0,0,0) 是否空闲。相反,将您的条件修改为:

    if( rackSystem.hasSpace() == false) self.set_rate(0);
    

    【讨论】:

    • 谢谢,我明白你的意思,不幸的是它似乎不起作用;我的猜测是我在错误的地方输入了条件;我尝试在每个源块“退出时”或“到达前”输入,但我不断收到相同的错误消息:“离散事件执行期间出现异常 root.rackStoreX 存储托盘RackX 中没有空单元格”其中“X”是1、2、3、4 或 5,具体取决于占用的托盘架
    • 那是结构性问题。您必须确保设置了流程图,以便在没有空间时没有代理试图存储。您可以在源之后有一个队列(并从源中删除上面的代码)并为其提供无限容量。然后,在它旁边有一个保持块,只有在 RackSystem 有空闲位置时才允许代理通过。此外,一旦代理离开机架系统,它会告诉保持块让另一个代理通过。但是您需要考虑到保留块和机架系统之间的任何代理,在您的情况下,所有这些代理当前正在存储。
    • 好吧,我按照你的建议创建了一个条件保持块,输入“rackSystem.hasSpace() == false;”作为阻塞条件;一切正常,直到它必须让新代理进入,此时它无法让他们进入。我认为发生这种情况是因为我没有发出任何信号以开始让代理返回。我怎样才能发出这样的信号?我尝试使用“unblock()”函数(如 AnyLogicHelp 中所述),但是当我在阻塞条件栏中输入该函数时,我在控制台中收到错误。
    • 你能不能把它变成一个新问题并从头开始描述它(最好用截图),这样其他人也可以从中受益?
    猜你喜欢
    • 2011-08-15
    • 1970-01-01
    • 1970-01-01
    • 2010-09-08
    • 1970-01-01
    • 1970-01-01
    • 2014-12-15
    • 1970-01-01
    • 2012-05-12
    相关资源
    最近更新 更多