当前位置: 首页 > article >正文

便携式动平衡仪Qt应用层详细设计方案


便携式动平衡仪Qt应用层详细设计方案

版本:1.0
日期:2023年10月


一、引言

1.1 文档目的

本文档详细描述了便携式动平衡仪软件中Qt应用层的设计实现,涵盖用户界面交互、功能模块划分、数据流管理及核心逻辑实现,确保开发过程规范化和可维护性。

1.2 适用范围
  • 开发团队:软件工程师、测试工程师
  • 硬件依赖:STM32MP157D(双核)、10英寸电容触控屏
  • 软件依赖:Qt 6.5、Linux 5.15、FreeRTOS 10

二、总体设计

2.1 应用层架构图
+---------------------+
|     UI界面层         |  <- QML界面、交互动画、触摸事件
+---------------------+
|   业务逻辑控制器      |  <- 模板管理、导航控制、数据转发
+---------------------+
|   服务代理层         |  <- 与Linux服务层通信(IPC)、文件读写
+---------------------+
2.2 模块划分
模块功能关键类/组件
启动与主界面模块开机动画、主界面布局、图标响应SplashScreen.qml MainWindow.qml
导航管理模块页面堆栈控制(前进/后退)StackView NavigationController
模板系统模块模板保存/加载、文件关联、桌面快捷方式生成TemplateManager FileDialog.qml
实时显示模块相位/角度仪表盘、数据表格、实时曲线PhaseMeter.qml DataTable.qml
配置模块平衡参数输入、传感器校准界面ConfigPage.qml CalibrationWizard

三、模块详细设计

3.1 启动与主界面模块
3.1.1 启动流程
  1. 长按电源键触发开机
    • 硬件中断唤醒M4核,初始化传感器。
    • A7核启动Linux,加载Qt应用。
  2. 启动动画实现
    // SplashScreen.qml  
    Image {  
        source: "logo.png"  
        SequentialAnimation on opacity {  
            loops: 3  
            NumberAnimation { from: 1; to: 0.3; duration: 200 }  
            NumberAnimation { from: 0.3; to: 1; duration: 200 }  
        }  
    }  
    
  3. 主界面布局
    // MainWindow.qml  
    ColumnLayout {  
        // 顶部状态栏  
        StatusBar {  
            Label { text: Qt.formatDateTime(new Date(), "yyyy-MM-dd") }  
            BatteryIndicator { value: Battery.status }  
        }  
    
        // 工作区图标网格  
        GridLayout {  
            columns: 5  
            IconButton { icon: "1-plane.png"; onClicked: enterConfigPage(1) }  
            IconButton { icon: "2-plane.png"; onClicked: enterConfigPage(2) }  
            // ...其他6个图标  
        }  
    
        // 底部导航栏  
        NavigationBar {  
            BackButton { onClicked: stackView.pop() }  
            NextButton { onClicked: stackView.push("BalancePage.qml") }  
        }  
    }  
    
3.2 导航管理模块
3.2.1 页面堆栈控制
  • 核心机制:使用Qt Quick的StackView管理页面跳转。
  • 代码示例
    // NavigationController.qml  
    StackView {  
        id: stackView  
        initialItem: MainWindow {}  
    
        function navigateTo(page, properties) {  
            stackView.push(page, properties);  
        }  
    }  
    
3.3 模板系统模块
3.3.1 模板文件设计
  • 文件格式:JSON + AES加密(扩展名.tpl)。
    {  
      "version": 1,  
      "rpm": 3000,  
      "plane_mode": 1,  
      "calibration": { "sensor_id": "SENSOR_001", "offset": 0.12 },  
      "timestamp": "2023-10-01T14:30:00Z"  
    }  
    
  • 文件关联
    // TemplateManager.cpp  
    void TemplateManager::registerFileType() {  
        QMimeDatabase db;  
        QMimeType mime = db.mimeTypeForName("application/x-balance-template");  
        mime.addGlobPattern("*.tpl");  
        // 注册双击事件  
        qApp->setProperty("templateMimeType", mime.name());  
    }  
    
3.3.2 模板加载逻辑
// FileBrowser.qml  
ListView {  
    model: fileModel  
    delegate: FileItem {  
        onClicked: {  
            if (isTemplate(filePath)) {  
                TemplateManager.loadTemplate(filePath);  
                stackView.replace("BalancePage.qml", { template: loadedTemplate });  
            }  
        }  
    }  
}  
3.4 实时显示模块
3.4.1 仪表盘实现
  • 相位圆环(OpenGL加速)
    // PhaseMeter.qml  
    Canvas {  
        renderTarget: Canvas.FramebufferObject  
        onPaint: {  
            var ctx = getContext("2d");  
            ctx.beginPath();  
            ctx.arc(centerX, centerY, radius, -Math.PI/2, currentAngle);  
            ctx.strokeStyle = "#FF0000";  
            ctx.lineWidth = 8;  
            ctx.stroke();  
        }  
    }  
    
3.4.2 数据表格动态更新
// DataTable.qml  
TableView {  
    columnWidthProvider: (column) => 120  
    model: BalanceDataModel {  
        updateInterval: 100 // 100ms刷新  
    }  
}  

四、接口定义

4.1 服务代理层接口
接口名称功能调用方式
loadTemplate()从文件系统加载模板Qt信号槽(跨线程)
saveMeasurement()保存测量结果到CSV/PDF异步Promise
getBatteryStatus()获取电池电量与状态直接调用
4.2 与硬件层通信协议
// 定义共享内存结构(A7与M4核共用)  
struct SharedData {  
    volatile float phase;   // 当前相位(rad)  
    volatile float amplitude; // 振幅(mm)  
    volatile uint8_t status; // 0:空闲 1:运行中  
    pthread_mutex_t lock;  
};  

五、关键数据结构

5.1 模板参数结构体
struct BalanceTemplate {  
    QString name;  
    int planeMode;  
    QMap<QString, QVariant> params;  
    QByteArray toEncryptedJson() const;  
    static BalanceTemplate fromEncryptedJson(const QByteArray &data);  
};  
5.2 实时数据容器
class RealtimeDataBuffer {  
private:  
    QVector<double> buffer;  
    QReadWriteLock lock;  
public:  
    void append(const QVector<double>& data);  
    QVector<double> fetchLatest(int maxSamples);  
};  

六、测试计划

6.1 单元测试用例
测试项输入预期输出
模板加载合法.tpl文件正确解析参数并跳转页面
文件关联双击.tpl文件触发loadTemplate信号
实时数据刷新模拟10kHz数据流界面无卡顿(FPS≥30)
6.2 自动化测试脚本
# pytest示例:测试模板加载流程  
def test_template_loading(qtbot):  
    main_window = MainWindow()  
    qtbot.mouseClick(main_window.file_button, Qt.LeftButton)  
    qtbot.keyClicks(file_dialog, "test.tpl")  
    assert main_window.current_page == "BalancePage"  

七、附录

7.1 UML类图
@startuml  
class MainWindow {  
  +StackView stackView  
  +void enterConfigPage(int mode)  
}  

class TemplateManager {  
  +BalanceTemplate loadTemplate(QString path)  
  +void saveTemplate(BalanceTemplate tpl)  
}  

class BalancePage {  
  -PhaseMeter phaseMeter  
  -DataTable dataTable  
  +void updateData(QVector<double> samples)  
}  

MainWindow --> TemplateManager : uses  
MainWindow --> BalancePage : navigates to  
@enduml  
7.2 参考文档
  1. 《Qt 6.5嵌入式开发指南》
  2. 《IEC 61326-1:2020 EMC测试标准》
  3. 《ISO 1940-1:2018机械振动平衡标准》

八、修订记录

版本日期修改内容
1.02023-10-01初版发布

该文档完整覆盖了Qt应用层的设计细节,可直接作为开发指南和交付文档。


http://www.kler.cn/a/558905.html

相关文章:

  • 第N6周:中文文本分类-Pytorch实现
  • MFC中CString的Format、与XML中的XML_SETTEXT格式化注意
  • 安全生产月安全知识竞赛主持稿串词
  • ES6 Set 与 Map 数据结构(复习/面试)
  • 3DGS(三维高斯散射)算法原理介绍
  • 【练习】【子集NO.1】力扣78. 子集
  • 微软发布Majorana 1芯片,开启量子计算新路径
  • OpenCV 4.10.0 图像处理基础入门教程
  • 【数据结构-并查集】力扣1722. 执行交换操作后的最小汉明距离
  • 微信小程序-组件复用机制behaviors
  • QT随记-菜单栏
  • 使用spring-boot-starter-test做单元测试简单示例
  • uniapp实现app的pdf预览
  • 言出法随!鹰谷电子实验记录本项目模块全面接入 DeepSeek
  • MATLAB学习之旅:数据建模与仿真应用
  • 数据结构:基数排序(c++实现)
  • 网络安全 | 信息安全管理体系(ISMS)
  • 基于Python+django+mysql旅游数据爬虫采集可视化分析推荐系统
  • uniapp 九宫格抽奖
  • QEMU源码全解析 —— 内存虚拟化(18)