电梯仿真-Matlab



我正在做一个关于电梯模拟的项目,遇到了这个问题。我有一个listbox供用户选择他们想去的楼层,但我不知道如何使电梯门按正确的顺序打开。

例如,第一个人想去1楼,第二个人想去3楼。他们会先选择1,然后选择3,但当我这样做时,Matlab总是先打开3层,然后打开1层。

我正在考虑将列表框的值存储在矩阵中,然后使用for循环根据楼层以正确的顺序打开电梯门。

这是我项目的GUI。GUI

listbox1_Callback。我尝试过这样做,但是我的数组只有一个元素。

A = [];
listValue = get(handles.listbox1,'Value');
A = [A,listValue];

我希望A保存一系列值,这样我就可以将foor循环应用于A并逐元素执行。

谢谢你的帮助。

例如,假设您有一个名为open的函数,它接受一个参数,即楼层编号,并打开该楼层的电梯门。要在每个选定的楼层上循环,请执行:

handles.listbox1 = uicontrol('Style', 'listbox', ...
   'String', [1 2 3 4], ...
   'Position', [10 10 40 100], ...
   'Max', 2);
selectedFloor = get(handles.listbox1, 'Value');
for ii = 1:length(selectedFloor)
    open(selectedFloor(ii));
end

您的项目可能已经结束,但我仍然会贡献一些东西。不是关于编程代码本身,而是关于电梯原理,这可能有助于你和其他人下次正确构思系统。

当驾驶室位于或非常靠近(典型地<8cm)特定楼层时,电梯门仅在该楼层打开。原因很简单:打开车门的电机和机构在驾驶室上。层门实际上是由驾驶室门移动的,使用带有溜冰鞋和捡拾滚轮的离合器。因此,在您的程序中,您必须关注的是驾驶室的位置,这是一个从一个楼层到另一个楼层依次移动的简单对象。

所以,当电话被登记时,你必须将它们与出租车的位置进行比较。然后你决定走哪条路,向上还是向下(或者如果位置已经合适,就把门打开)。你保持一个首选方向,直到你接到最远的电话,然后你改变方向或等待新的电话。只需在实际位置上加1或减1(每次操作之间间隔几秒钟,使其看起来真实),将位置与调用数组的相应索引进行比较,然后决定停止并打开门(如果存在调用)或继续(如果不存在调用)。别忘了在四肢停下来,即使出于某种原因没有电话。

如果你想在组合中引入落地呼叫,你必须考虑它们是上行呼叫还是下行呼叫。上行时只停靠上行呼叫,下行时只停靠下行呼叫。

最新更新