Qt5编写的电梯控制模拟程序 附源码
用c++和qt5编写的单电梯模拟程序
简介:这是一个在Qt5中构建的小型电梯模拟程序。包括门控和电梯升降控制。因为我在其中使用win32 api, MSVC应该是构建的选择。目前,它仍然存在一个小bug,它总是由最近的呼叫面板信号引起的。还有一件事,当系统准备好启动时,必须首先单击启动按钮,否则将发生意外的错误。
图
开机图:
启动图:
源代码链接地址:
GitHub源代码链接:Elevator-Simulation
Elevator-Simulation
This is an small elevator-simulation program builded in Qt5. Contains door control and elevator up-down control. Since I’m using win32 api in it, the MSVC should be choice for build. For now, a small bug is still exists in it which is always caused by nearest out-call panel signal. One more thing, you must click the Starting up button at first when system is ready for starting, otherwise a unexpected error will be happen.
构建说明
第一步:新建你的Qt项目
第二步:删除项目所有.cpp和.h和.ui文件
第三步:将.h添加进你项目中的Headers(注:头文件),将.cpp添加进你的Sources(源文件),将.ui文件添加进你的Forms(界面)中。
第四步:构建你的项目并运行
第五步:点击开机按钮,开始体验模拟电梯吧
系统架构
采用前后分离
电梯的状态机和控制系统分离
qt界面和电梯逻辑分离
逻辑实现
编写步骤:
第一步,在vs上编写纯逻辑实现核心代码:elevaotr.cpp和elevator.h
第二部,编写Qt5适配器,做可视化和接受控制信号:QtAdapter.h
状态机组成:
状态机由门和电梯两部分组成,实时扫描外界面板控制信号和内派信号。
具体画的状态机转换图纸在家放着,有时间补上
核心代码1:
elevator.h
#ifndef ELEVATOR_H
#define ELEVATOR_H
#include <QMainWindow>
#include<QObject>
/*
系统 电梯控制系统V2.1
编写时间 2021/1/29
编译环境 VS2017 X86 Debug模式 SDK:10.0.17763.0
作者 李照月
说明: 对比1.0系统,加入了门
收获: 按阶段编程,省时省力,一步到位
*/
#include<Windows.h>
#include<stdio.h>
#include<string.h>
#define LEVEL 6//楼层
//门的状态
enum eDoorState
{
OPEN=1, //已打开
CLOSE, //门关闭
LOCK, //门上锁
OPENING, //开门中
CLOSING, //关门中
};
//电梯的状态
enum eElevatorState
{
STOP=1,
UP,
DOWN
};
//门控状态
enum eDoorButton
{
NONE=0,
OPENDOOR,
CLOSEDOOR
};
enum eElevatorDirection
{
LIFT=1,
DROP,
SUSPEND
};
//电梯高度
struct ElevatorHight
{
ElevatorHight():nowHight(0), levelHigh(1000) ,fullLevel(LEVEL) , moveSpeed(5){
}
int nowHight; //当前高度
const int levelHigh; //每层楼高度
const int fullLevel; //总楼层
const int moveSpeed;
};
//电梯宽度
struct DoorWidth
{
DoorWidth() :nowWidth(0), fullWidth(1000),openSpeed(5),waitTime(100){
}
int nowWidth;
const int fullWidth ;
const int openSpeed ;
const int waitTime;
};
//电梯类编写
class Elevator : public QObject
{
public: //属性
char floorDownList[LEVEL]; //楼层下行按钮
char floorUpList[LEVEL]; //楼层上行按钮
char panelButtonList[LEVEL]; //电梯内面板楼层按钮
enum eDoorState doorState; //门的状态
enum eElevatorState elevatorState; //电梯状态
enum eDoorButton doorButton; //门控按钮
enum eElevatorDirection liftDirection; //电梯的运行方向
struct ElevatorHight elevatorHight; //电梯高度
struct DoorWidth doorWidth; //门的宽度
Elevator();
private://行为
void doorClose(); //门关闭
void doorLock(); //门上锁
void doorOpening(); //门开机
void doorClosing(); //门关闭
void doorOpen(); //门打开
void liftStop