Skip to content

Mokovi/PlcAlarmDisplay

Repository files navigation

PLC报警显示系统

项目需求分析

1. 功能需求

  1. 数据获取

    • 从MySQL数据库的plc_alarm_log表中读取报警数据
    • 支持定时自动刷新数据
  2. 数据展示

    • 以表格形式展示报警日志
    • 支持按时间、报警代码等字段排序
    • 支持按报警状态、报警类型等条件筛选
    • 支持分页显示
  3. 报警状态显示

    • 不同报警级别使用不同颜色标识
    • 支持报警确认功能
    • 支持报警历史记录查询
  4. 系统配置

    • 数据库连接配置
    • 刷新间隔配置
    • 显示列配置

2. 非功能需求

  1. 性能要求

    • 数据加载时间不超过1秒
    • 支持大量数据(>10000条)的流畅显示
    • 内存占用合理
  2. 可靠性要求

    • 数据库连接异常处理
    • 数据加载失败处理
    • 系统崩溃恢复
  3. 可维护性要求

    • 代码结构清晰
    • 模块化设计
    • 完善的注释和文档

项目结构规划

1. 目录结构

PlcAlarmDisplay/
├── model         # 模型层
├── view          # 视图层
├── control       # 控制器层
├── utils         # 工具类
├── main.cpp
├── readme.md
└── config.ini

2. 具体类设计

模型层 (Model)

  1. AlarmLogEntry 类 (alarmlogentry.h/cpp)

    class AlarmLogEntry {
    public:
        QDateTime timestamp;      // 报警时间
        int alarmCode;           // 报警代码
        QString description;      // 报警描述
        bool isFinished;     // 是否结束
        QString area;        // 区域
    };
  2. DBManager 类 (dbmanager.h/cpp)

    class DBManager : public QObject {
    public:
        bool connect(const QString &host, const QString &dbName, 
                    const QString &user, const QString &password);
        QList<AlarmLogEntry> fetchAlarmLogs(int limit = 1000, int offset = 0);
        bool acknowledgeAlarm(int alarmId);
        bool isConnected() const;
    private:
        QSqlDatabase m_db;
    };
  3. AlarmLogModel 类 (alarmlogmodel.h/cpp)

    class AlarmLogModel : public QAbstractTableModel {
    public:
        int rowCount(const QModelIndex &parent = QModelIndex()) const override;
        int columnCount(const QModelIndex &parent = QModelIndex()) const override;
        QVariant data(const QModelIndex &index, int role) const override;
        QVariant headerData(int section, Qt::Orientation orientation, int role) const override;
        void updateData(const QList<AlarmLogEntry> &entries);
        void sort(int column, Qt::SortOrder order = Qt::AscendingOrder) override;
    private:
        QList<AlarmLogEntry> m_entries;
    };

视图层 (View)

  1. MainWindow 类 (mainwindow.h/cpp)

    class MainWindow : public QMainWindow {
    public:
        MainWindow(QWidget *parent = nullptr);
    private:
        void setupUI();
        void setupConnections();
        QTableView *m_alarmTableView;
        QPushButton *m_refreshButton;
        QComboBox *m_filterComboBox;
        QSpinBox *m_pageSizeSpinBox;
    };
  2. AlarmTableView 类 (alarmtableview.h/cpp)

    class AlarmTableView : public QTableView {
    public:
        AlarmTableView(QWidget *parent = nullptr);
    protected:
        void paintEvent(QPaintEvent *event) override;
    };

控制器层 (Controller)

  1. AlarmLogController 类 (alarmlogcontroller.h/cpp)
    class AlarmLogController : public QObject {
    public slots:
        void onRefreshButtonClicked();
        void onFilterChanged(const QString &filter);
        void onPageSizeChanged(int size);
        void onAcknowledgeAlarm(int alarmId);
    private:
        DBManager *m_dbManager;
        AlarmLogModel *m_model;
        void loadData();
    };

工具类 (Utils)

  1. ConfigManager 类 (configmanager.h/cpp)

    class ConfigManager {
    public:
        static ConfigManager& instance();
        void loadConfig();
        void saveConfig();
        int getRefreshInterval() const;
        QString getDbHost() const;
        // ... 其他配置项
    };
  2. Logger 类 (logger.h/cpp)

    class Logger {
    public:
        static void log(const QString &message, LogLevel level = LogLevel::Info);
    };

3. 数据库表结构

create table plc_alarm_log(
   id int auto_increment primary key,
   alarmID int not null,
   alarmName varchar(50),
   value bool not null,
   time timestamp default current_timestamp,
   quality int not null);

create table plc_alarm_info(
   alarmID int primary key,
   msg varchar(100) not null,
   area int);

About

qt制作的PLC报警信息显示

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published