电梯模拟程序

这是一个使用Qt5构建的小型电梯模拟程序,包含门控和电梯上下控制。程序使用MSVC编译,存在一个关于最近外呼面板信号的小bug。需要先点击开机按钮启动。系统架构采用前后端分离,状态机由门和电梯两部分组成。


用c++和qt5编写的单电梯模拟程序
简介:这是一个在Qt5中构建的小型电梯模拟程序。包括门控和电梯升降控制。因为我在其中使用win32 api, MSVC应该是构建的选择。目前,它仍然存在一个小bug,它总是由最近的呼叫面板信号引起的。还有一件事,当系统准备好启动时,必须首先单击启动按钮,否则将发生意外的错误。

开机图:
你好! 这是你第一次使用 **Markdown编辑器** 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。
启动图:

在这里插入图片描述

源代码链接地址:

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();
    
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值