【问题标题】:Initializing pallet racks with parameters in AnyLogic在 AnyLogic 中使用参数初始化托盘架
【发布时间】:2019-10-03 17:12:28
【问题描述】:

尊敬的堆栈溢出社区,

我正在尝试在 AnyLogic(版本 7.1.2 大学)中创建一个托盘架,其中单元数、层数和一些其他属性是从参数设置的。在从模拟页面执行模型之前设置参数。有没有人这样做过?

在我看来,问题从不允许将参数设置为值但需要数字(“单元数:10”而不是“单元数:myParameter”)的托盘机架属性开始。但是有一些预定义的函数,比如“setNumberOfPositions(int nPositions),所以我想我可以通过在模拟开始时(在零时间)调用这些函数来避免这个问题。我为此使用了事件的动作字段.

这导致了一个异常,说“root:palletRack:标记元素已经初始化,不能修改。请使用不带参数的构造函数,执行设置,最后调用initialize()函数。”。

Exception during discrete event execution: Markup element is already initialized and cannot be modified. Please use constructor without arguments, perform setup and finally call initialize() function

由于无法在 Java 编辑器中修改任何内容,我尝试在事件操作字段中构建托盘架:

PalletRack palletRack = new PalletRack();
palletRack.setOwner(this); 
[...]
palletRack.setNumberOfPositions(p_CellsInX);
palletRack.setNumberOfLevels(p_CellsInY);
palletRack.setCellWidth(p_WidthOfCell);
palletRack.setLevelHeight(p_HeightOfCell);

palletRack.initialize();

这没有抛出任何错误,但也没有构建机架。

另外,我尝试在我的函数前添加“@Override”。

有没有人知道如何使用参数初始化托盘架或覆盖初始值?

显然,我是 AnyLogic 的初学者。我将非常感谢任何建议。提前谢谢!

【问题讨论】:

    标签: anylogic


    【解决方案1】:

    这是可能的,但不是直截了当的。您需要以编程方式完成所有操作,即创建托盘架以及通过它的线路,将它们添加到(新的或现有的)网络,然后将其全部初始化。一些虚拟代码可以让您在下面开始。

    请注意,myNetwork 是我在此处设计时手动绘制的现有网络。

    另外,一个提示:首先手动绘制托盘架并穿过它,以便轻松获取所有坐标并确保其正常工作。然后,删除它们并以编程方式创建它们,但使用正确的设置...

    PS:这可能在 AL7 中不起作用,但在 AL8 中起作用。您可能需要稍微不同的函数来添加到presentation

    myRack = new PalletRack(this, // Agent owner
                            SHAPE_DRAW_2D3D,  // ShapeDrawMode
                            true, // isPublic
                            ground, // ground
                            false, // isObstacle
                            -2480,  // x pos
                            1980,  // y pos
                            0.0, // z pos
                            35.2*numCellsPerRackPerLevel,  // length (keep constant cell width and vary rack length accordingly)
                            20.0,  // depth
                            20.0,  // depthR (depth of the right riack (only if type is 2 racks and 1 aisle)
                            50.0, // levelHeight
                            0., // rotation
                            PALLET_RACK_TWO_PALLET_RACKS, // PalletRackType
                            PALLET_RACK_NO_DIRECTION, // PalletRackDirection
                            40.0,  // aisleDepth = width
                            40.0,  // aisleRDepth (width of right aisle, only if 1 rack 2 aisles)
                            35.2,  // cellWidth
                            numCellsPerRackPerLevel,  // nPositions
                            numLevelsPerRack,  // nLevels
                            1, // nDeep
                            lavender,  // fillColor
                            dodgerBlue, // lineColor
                            2); // cellsBetweenLegs
    
    presentation.add(myRack);
    
    // this must cut through both rack's aisles
    MarkupSegmentLine segment = new MarkupSegmentLine(myRack.getX()-10, myRack.getY()+30, 0.0, myRack.getX()+myRack.getLength()+10, v_IMS_Rack1.getY()+30, 0.0);
    
    Path path = new Path(this, SHAPE_DRAW_2D3D, true,
                         true, true, 1.0, false, 10,
                         PATH_LINE, dodgerBlue, 1.0,
                         segment);
    presentation.add(myRack);
    myNetwork.add( myRack);
    myNetwork.add(path);
    myNetwork.initialize();
    

    【讨论】:

    • 非常感谢您快速详细的回答!你能告诉我你在 v_IMS_Rack1 中存储了什么吗?
    • 抱歉,忘记将其重命名为“myRack”
    猜你喜欢
    • 2021-07-17
    • 2020-08-16
    • 2013-08-03
    • 2016-10-19
    • 2021-10-13
    • 1970-01-01
    • 2021-10-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多