AnyLogic Fluid 动态分配储罐(可视化表示)

AnyLogic Fluid dynamically assign storage tank (visual representation)

我有一个自定义的 FuelTank object,任意逻辑坦克,但有一些额外的逻辑。它有一个类型为 "storageTank" 的参数 SimTank。 anylogic "tank" 块(在 FuelTank object 内)将其 "StorageTank" 设置为此参数。

我现在有一个 TankFarm object,其中包含许多这样的 FuelTank object .还有一个 Collection - FuelTanks 来引用每个坦克。它有一个参数 SimTanks,这是一个 one-dimensional 类型的 Other 数组,storageTank[].

所以现在。 如果我配置 TankFarm object,select object 中的每个坦克,并逐一设置每个坦克的 SimTank 参数添加到 "SimTanks[0]"、"SimTanks[1]" 等,然后用我想在视觉表示中使用的 storageTanks 列表填充 SimTanks,一切正常。除非我的 SimTanks 阵列中的 "storageTanks" 少于我的 TankFarm object 中的坦克。 (这是可以理解的。如果我只有 4 个 storageTanks,但我的油罐区有 5 个罐,那么罐 5 的 "SimTank" 参数将设置为 "SimTanks[4]",这当然不存在于"SimTanks" array 并相应给出错误)

为了解决这个问题,我使用了一个函数,并在模拟开始时 运行 它:

for (int s=0; s<=(TankFarm.SimTanks.length-1); s++) 
  TankFarm.FuelTanks.get(s).SimTank = SimTanks[s];

所以现在如果用户只添加 4 个 "storageTank objects" 到他的视觉模拟中,只有 "TankFarm" 中的前四个坦克被分配一个 storageTank,最后一个是 "null"。

代码有效(不给出错误),但是当您 运行 模型存在零模拟时,none,视觉中的 StorageTank objects 没有任何反应表示,他们不显示任何东西;好像 AnyLogic 储罐(在单独的 FuelTank objects 内)没有与 StorageTanks 链接?

我该如何解决这个问题”?如何动态分配 StorageTank object 放在主 window 上并添加到 SimTanks阵列到我的 FuelTank object?

中的坦克

(澄清一下,如果我手动操作,一个接一个,它会起作用 - 但是如果我的 storageTanks 比我农场中的 Tanks 少,它就会出错。如果我做的完全一样动态的,通过代码,不报错,但是模拟不行,storageTanks什么都不显示??)

此问题已解决,谢谢。我在库对象中创建了一个函数 returns a StorageTank。然后添加一个参数,用户配置该参数以使用对象的动画或添加“他自己的”动画。库中的每个 tank 对象然后调用 returns StorageTank 对象的函数 - 内置对象(内置到库对象中)或用户手动添加的对象。该方法非常有效——用户可以删除库对象(包括它自己的动画),然后将其配置为不使用该动画,在这种情况下,用户必须构建并分配他自己的动画。