使用 ResourceTaskStart .startTask(Agent) 以编程方式触发停机时间

Trigger Downtime programmatically using ResourceTaskStart .startTask(Agent)

在我的模型中,我有一个代表设备的资源池,该设备具有由停机时间块定义的停机时间。停机时间由触发器定义并将其任务发送到流程图。

除了标准的停机时间程序外,我还想以编程方式触发停机时间,使用:

`cleaning_and_conditioning_mld_617_411.startTask(Eq_MLD_617_411);`

我收到以下错误:

Eq_MLD_617_411 cannot be resolved to a variable

我该如何解决这个问题?

编辑:将代码更改为

cleaning_and_conditioning_mld_617_411.startTask(new Eq_MLD_617_411());

现在我得到一个 NullPointerException(见图 6)。

请查找模型的附件图片。 [1]: https://i.stack.imgur.com/xho4L.png [2]: https://i.stack.imgur.com/C8Ybx.png [3]: https://i.stack.imgur.com/pyPGH.png [4]: https://i.stack.imgur.com/3WX8f.png [5]: https://i.stack.imgur.com/5M2lc.png [6]: https://i.stack.imgur.com/xGB1W.png

Eq_MLD_617_411 是您的 ResourceUnit 类型的名称。您将需要为停机时间提供一个实际的资源单位。

不幸的是,您不能简单地调用 cleaning_and_conditioning_mld_617_411.startTask(new Eq_MLD_617_411()); 因为 new Eq_MLD_617_411() 将创建一个新代理但与引擎没有任何连接。 (因此你在 ...engine.Utilities.time

上得到了空指针异常

相反,您需要始终使用 add_myPopulation() 提供的 AnyLogic 创建代理,只要您在 canvas.

上创建任何代理类型的群体,它就可用。

现在在你的情况下,因为你有一个资源池,我们需要访问属于该池的资源单元......但是没有 resourcePool.getUnit() 可用的功能......现在怎么办?

一个选项是将资源池的资源单位添加到您创建的人口中

然后您可以调用该种群中的资源单元开始停机

我对其进行了测试,在 运行 时间内按下按钮会减少可用资源。