条件事件触发Anylogic

时间:2018-04-04 20:13:30

标签: events anylogic parking

是否有其他方法可以使用条件事件来监控停车位?最终目标是在事件输出日志中查看汽车停放时的位置。我做了一个事件,它调用一个函数,它在每个停车位上运行一个循环并在一个点上返回true。我想在汽车停放时触发此事件,但循环导致模拟冻结。

Function(){
for(int i = 0; i<29; i++) //29 = number of parking spaces
    {
        if(parkingLot2.getCarOnSpace(i) != null) //if spot i taken
        {
            return true; 
            //true sent back to event, is then triggered
        }       
    }
return false;
}

Event
condition: Function();
Action: event.restart();

1 个答案:

答案 0 :(得分:1)

所以首先event.restart()函数仅在事件具有触发类型时才适用:timeout和mode:user control,否则你的event.restart()函数什么都不做......

其次,你需要在有条件的事件上调用你的函数,但是在停车的那一刻......你可以在&#34;退出&#34; carMoveTo块的动作。

使用nSpaces而不是29:

可以更好地完成您的功能
for(int i = 0; i<parkingLot2.nSpaces(); i++)
    {
        if(parkingLot2.getCarOnSpace(i) != null)
        {
            return true; 
        }       
    }
return false;

您可以使用类似的功能来了解停放的空间,但是您需要有一个单独的阵列收集有关哪些空间是否空闲的信息,因为parkingLot对象没有该功能。 想象一下,你有一个大小为parkingLot2.nSpaces()和布尔元素的数组都以false开头,因为所有的停车位都是免费的。每当您的汽车进入停车位时,您使用相同的功能,而不是&#34;返回true&#34;在该特定索引中将数组设置为true。当汽车退出时你必须将数组设置为假。