0:静止状态
1:上行状态
2:下行状态
电梯最大速度:2m/s
电梯最大加速度:0.8m/s
电梯由静止到最大速度用时:2.5s
电梯由静止到最大速度位移:2.5m
动作1:电梯前方的顺电梯方向/无方向的满足速度要求的指令沿电梯方向搜索指令。
动作2:所有楼层的逆电梯方向/无方向的满足速度要求的(执行至此时电梯速度一定为0)指令沿电梯方向的反方向搜索指令。
动作3:电梯后方的顺电梯方向/无方向的满足速度要求的指令沿电梯方向搜索指令。
步骤1:若电梯为静止状态,则将电梯状态暂时改为上行状态,执行步骤2。
步骤2:按照动作1寻找目标指令,一旦找到则执行步骤5,若无满足要求指令则执行步骤3。
步骤3:按照动作2寻找目标指令,一旦找到则执行步骤5,若无满足要求指令则执行步骤4。
步骤4:按照动作3寻找指令,一旦找到则执行步骤5,若无满足要求指令则执行步骤6。
步骤5:根据找到的指令和当前高度更新电梯方向。
步骤6:没找到指令,电梯状态变为静止状态。
- 命令用字符i+97表示,5层共计13个命令,为方便控制板处理数据,补全为15个命令。
- 除静止状态的电梯外,指令不需要考虑先后。
故电梯板在有指令时,状态每100ms更新一次(与控制板通信);无指令时状态实时更新。
难题:电梯状态复杂,难以通过串口发送
解决:发送指令串到电梯板
难题:sendorder挨个发送,如何保证全部接受
解决:规范发送格式
难题:由于100ms更新一次,并不能保证在匀减速的情况下,精准停在某一层,计算安全距离也不能实时运算
解决:计算安全距离时打100ms提前量,在减速最后100ms直接将电梯速度降为零,并精准停靠
难题:可打断的开关门计时 解决:
难题:串口并联
- 命令计先后(误差在1ms左右)
- 无漏接收(误差在1ms左右)
- 在中间层的各个时间有下一层的指令发出(即时性)
分析:加入速度系统 - 在电梯当前楼层之上某一层有向下的指令,电梯到达该层后,高楼层向上/下的指令和电梯内到向楼层的指令同时发出(其他层无待处理指令)(可预测性)
分析:2中的情况取决于(有方向的)指令的方向是否起作用,若不起作用,则有可能出现将一名向下的客人拉到很高的位置再送下来的情况,应该在到达该楼层后按照指令方向(顺电梯方向指令优先)更新电梯方向,若指令无方向,则继承之前电梯方向。 - 在电梯当前楼层之上某一层有向下的指令,电梯到达该层后,在电梯内向低楼层指令发出之前,高楼层有上/下的指令发出(其他层无待处理指令)
分析:若3电梯判断为向上而2判断为向下,仍然有可能出现将一名向下的客人拉到很高的位置再送下来的情况,应等待电梯关门之后再寻找目标指令。 - 静止状态的电梯,同时接到当前楼层向上和向下指令,应该先处理向上指令。
开关门的加入
- 相关逻辑判断
-
在电梯当前楼层之上某一层有向下的指令,电梯到达该层后,高楼层向上/下的指令和电梯内到向楼层的指令同时发出(其他层无待处理指令)
上述情况取决于(有方向的)指令的方向是否起作用,若不起作用,则有可能出现将一名向下的客人拉到很高的位置再送下来的情况,应该在到达该楼层后按照指令方向(顺电梯方向指令优先)更新电梯方向。
-
在电梯当前楼层之上某一层有向下的指令,电梯到达该层后,在电梯内向低楼层指令发出之前,高楼层有上/下的指令发出(其他层无待处理指令)
若2电梯判断为向上而1判断为向下,仍然有可能出现将一名向下的客人拉到很高的位置再送下来的情况,应等待电梯关门之后再寻找目标指令(仍接收)。
-
若电梯在开门期间为静止方向,则应该根据接收的第一个指令改变方向。
-
当前楼层的无方向/顺电梯方向指令和开关按键都可以打断计时器
- 开关门指令
-
新加入了开门和关门两种指令。开门指令负责把门打开,并在一定时间后(若不被打断)触发关门指令;关门指令负责关门。
-
电梯在电梯门未完全关闭时停止运动,接收命令,但不查找目标。
-
若电梯门打开,同时电梯方向未静止,则应该根据第一个接收的指令改变方向。
-
停靠时控制板自动向电梯发出开门指令。
-
电梯内部有开门和关门按钮,向电梯发出开门和关门指令。
-
开门按键和当前楼层的无方向/顺电梯方向指令都可触发开门指令,关门按键可触发关门指令。
-
开关门按钮只在电梯停靠时有效。
自动返回一层
- 相关逻辑判断
- 到达一层后电梯不需要开门
- 回到一层过程中若接到指令,停止返回一层,执行目标指令,若目标指令在电梯后方,就近停靠后(不开门)再执行新指令。
- 回到一层过程中电梯状态为下行,即搜索指令按下行规则搜索。
- 进入静止状态超过60s且没有开关门等动作则自动返回一层。
- 归位指令
- 新加入归位指令,电梯接到归位指令返回一层,电梯状态改为下行。
- 归位指令达成后判断为不开门。
- 电梯一旦进入静止状态(指令串为空),即触发中断计时器,若不被打断则一定时间后向指令串中添加归位指令。
- 电梯一旦脱离静止状态(有指令加入),则中断计时,并清除指令串中的归位指令;同时根据目标指令所在位置决定电梯运行。
- 更好的开关门显示
- 手动报警
- 自动警报
- 更好的楼层显示
- 解决lcd屏胡乱显示
- 静止方向的电梯在开门期间要不停接收命令,并根据第一条命令调整方向
- 返回一层不开门
- 更符合现实的开关门逻辑
- 外部中断和millis是否存在冲突
- Check timer here to alert users that they are holding the door open to long
- 更智能的返回一层策略