【问题标题】:Get agent at the head of conveyor - correct use of ConveyorPath.getAgent()?在传送带头部获取代理 - 正确使用 ConveyorPath.getAgent()?
【发布时间】:2022-01-06 15:14:51
【问题描述】:

在我的模型中,有一个码垛区,码垛机代理移动到靠近堆积传送带的位置,拿起传送带上的最后一个箱子,然后将其转移到托盘上。

我正在尝试找到引用传送带上最后一个框并将其存储在变量中的最佳方法。

我知道ConveyorPath.getAgent(),记录了here,但它似乎无法正常运行,引发以下错误:

Code : v_box = v_conveyorPath.getAgent(0);    
Error : Description: Type mismatch: cannot convert from Agent to Box.

我已经进入我的传送带标记并将“材料项目类型”字段更改为“盒子”,但无济于事。

我在这里做错了什么?如何让 ConveyorPath 返回 Box 类型而不是 Agent 类型?

谢谢。

编辑:运行测试后,我可以确认出现在我的传送带上的代理属于 Box 类。

traceln(conveyor.getAgent(0).getClass());
Output : class modelname.Box

但我仍然无法在变量中存储对该 Box 的引用。

【问题讨论】:

    标签: simulation anylogic


    【解决方案1】:

    您可以简单地将您获得的代理作为一个盒子进行投射

    Box myBox = (Box)conveyor.getAgent(0)

    请记住,如果传送带上有任何不是盒子的东西,这种类型的铸造会导致错误

    在这里阅读更多 https://www.w3schools.com/java/java_type_casting.asp

    但如果您在传送带对象中指定您拥有的对象是盒子,或者在下面的纸箱示例中,

    然后 get 函数将返回指定类型的代理,因此不需要强制转换。

    在大多数模型中,后一种选择是最安全且可能更正确的方法

    【讨论】:

    • 感谢 Jaco-Ben 关于类型转换的提示。我也想过第二种解决方案,但是即使在我的模型中的每一个传送带都经过并切换到将“盒子”作为材料项目类型之后,它仍然没有工作。
    • 它只适用于传送块而不是动画。
    • 我不确定我理解你的意思。我的模型的传送带设置看起来与您的相同,从我所见,这显然是您选择的传送带空间标记形状,而不是“传送带”流程图块。
    • 对不起,我不知道为什么你的不工作。
    猜你喜欢
    • 2015-07-19
    • 1970-01-01
    • 1970-01-01
    • 2019-03-01
    • 2010-09-29
    • 2017-12-20
    • 2015-09-25
    • 2011-10-26
    • 1970-01-01
    相关资源
    最近更新 更多