0

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

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

`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

4

1 回答 1

0

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

相反,您需要始终使用提供的 AnyLogic 创建代理add_myPopulation(),一旦您在画布上创建任何代理类型的群体,该代理就会变得可用。

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

一种选择是将池的资源单位添加到您创建的总体中

在此处输入图像描述

然后您可以从该群体中调用一个资源单元来开始停机

在此处输入图像描述

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

于 2021-07-20T10:40:54.177 回答