软开的过程


一、软件设计详细方案

1. 系统概述
  • 产品目标
    实现转子动平衡的快速测量与分析,支持单/双平面平衡,测量精度≤0.1g·mm。

  • 运行环境

    • 硬件平台:STM32MP157D(Cortex-A7 + M4双核)
    • 操作系统:Linux(A核) + FreeRTOS(M核)
    • 屏幕规格:10.1寸电容触控屏(1280×800)
  • 功能清单

    markdown 复制代码
    - 实时振动信号采集(采样率≥10kHz)
    - 1/2平面动平衡计算(ISO 1940标准)
    - 测量模板管理(.tpl格式加密存储)
    - 数据报表生成(PDF/Excel)
    - 多语言支持(中/英)
2. 系统架构设计

分层架构图

plaintext 复制代码
应用层
├─ UI交互模块(Qt Quick)
├─ 文件管理系统
└─ 报表生成器
↓
服务层
├─ 动平衡算法引擎
├─ 实时数据管道
└─ 硬件抽象层(HAL)
↓
系统层
├─ Linux(A核:UI/文件/网络)
└─ FreeRTOS(M核:ADC/DMA/实时控制)
3. 关键模块设计

3.1 实时数据采集模块

  • 输入接口

    c 复制代码
    // M4核驱动接口(STM32 HAL)
    void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef *hadc) {
        if (hadc->Instance == ADC1) {
            double val = HAL_ADC_GetValue(hadc) * 3.3 / 4096;
            DataPipe_push(val); // 写入共享内存
        }
    }
  • 性能指标

    参数 指标
    采样率 10kHz(±5%误差)
    信号带宽 0.1Hz~2kHz
    ADC精度 12bit(0.1% FSR)

3.2 动平衡算法模块

  • 算法流程
    是 否 振动信号采集 FFT频谱分析 频谱峰值检测 计算初始不平衡量U 重新采样 添加试重后二次测量 计算影响系数矩阵 求解校正质量
  • 核心公式
    U = A ⋅ e m ⋅ r ⋅ ω 2 U = \frac{A \cdot e}{m \cdot r \cdot \omega^2} U=m⋅r⋅ω2A⋅e
    (A: 振幅,e: 偏心距,m: 质量,r: 半径,ω: 角速度)

3.3 模板文件系统

  • 文件结构

    c 复制代码
    #pragma pack(1)
    typedef struct {
        char header[4];      // 魔数"BTPL"
        uint16_t version;    // 模板版本号
        float rpm;           // 额定转速
        uint8_t sensor_calib[32]; // 传感器校准参数
        uint8_t aes_iv[16];   // AES加密IV向量
        uint8_t data[128];    // 加密后的参数数据
        uint32_t crc32;       // 校验码
    } BalanceTemplate;
4. 接口定义

4.1 硬件抽象层接口(HAL)

cpp 复制代码
class HALInterface {
public:
    // 振动传感器接口
    virtual QVector<double> readVibrationData(int channel) = 0;
    
    // 转速脉冲输入
    virtual uint32_t getRpm() = 0;
    
    // 调试接口
    virtual void debugLedToggle() = 0;
};

4.2 跨核通信协议

c 复制代码
// A7核与M4核共享内存结构体
typedef struct {
    volatile uint32_t adc_data[1024]; // ADC环形缓冲区
    volatile uint8_t adc_ready;      // 数据就绪标志
    pthread_mutex_t lock;            // 互斥锁
} SharedMemory;
5. 数据结构设计

5.1 实时数据管道

cpp 复制代码
class DataPipeline {
private:
    QVector<QVector<double>> buffer;
    QReadWriteLock lock;
public:
    void write(const QVector<double>& data) {
        QWriteLocker locker(&lock);
        buffer.enqueue(data);
        if(buffer.size()>100) buffer.dequeue();
    }
    
    QVector<double> read() {
        QReadLocker locker(&lock);
        return buffer.isEmpty() ? QVector<double>() : buffer.dequeue();
    }
};

二、公司要求的软件设计文档清单

1. 需求文档
文档名称 内容要点 参考标准
《软件需求规格书(SRS)》 功能需求/性能指标/安全要求 IEEE 830-1998
《用户需求说明书(URS)》 用户操作场景/人机交互要求 GAMP5
2. 设计文档
文档名称 内容要点 模板参考
《软件架构设计说明书(SAD)》 系统分层/模块划分/接口定义 ISO/IEC 42010
《详细设计说明书(DDD)》 类图/流程图/状态机设计 UML 2.5
《数据库设计说明书》 模板文件结构/SQLite表定义 -
3. 验证文档
文档名称 内容要点 工具支持
《单元测试计划》 测试用例/覆盖率统计 Google Test
《集成测试报告》 跨模块交互测试结果 TestLink
《EMC测试报告》 电磁兼容性测试数据 IEC 61326-1
4. 管理文档
文档名称 内容要点 推荐工具
《项目开发计划》 甘特图/里程碑节点 Microsoft Project
《风险管理计划》 FMEA分析表/应对措施 FMEA Pro
《配置管理计划》 Git分支策略/版本号规则 GitLab

三、关键文档示例

1. 软件架构设计说明书(SAD)目录示例
markdown 复制代码
1. 引言
   1.1 文档目的
   1.2 适用范围
2. 系统概述
   2.1 产品功能
   2.2 运行环境
3. 架构设计
   3.1 总体架构图
   3.2 模块分解
       - 数据采集模块
       - 算法处理模块
       - 用户界面模块
4. 接口定义
   4.1 硬件接口(SPI/I2C)
   4.2 软件接口(API列表)
5. 设计约束
   5.1 实时性要求
   5.2 安全规范
6. 附录
   6.1 缩略语表
   6.2 参考文档
2. 详细设计说明书(DDD)类图示例
plantuml 复制代码
@startuml
class BalanceAlgorithm {
  +void setRpm(double rpm)
  +double calculateUnbalance()
  -QVector<double> fft(QVector<double> input)
}

class DataCollector {
  +QVector<double> readSensorData()
  -HALInterface *hal
}

class MainWindow {
  +void onTemplateLoaded(QString path)
  -BalanceAlgorithm *algorithm
}

DataCollector --> BalanceAlgorithm : provides data
MainWindow --> BalanceAlgorithm : calls
@enduml

四、文档管理建议

  1. 版本控制

    • 使用Git管理文档(推荐工具:Git + Markdown)
    • 版本号遵循语义化规则:v<主版本>.<次版本>.<修订号>
      (例:v2.1.3表示第2大版本第1次迭代第3次修正)
  2. 文档自动化

    • 代码注释生成文档(Doxygen配置示例):

      doxygen 复制代码
      INPUT                  = ./src
      OUTPUT_DIRECTORY       = ./docs
      GENERATE_LATEX         = NO
      GENERATE_HTML          = YES
  3. 协同评审

    • 使用在线文档工具(如Confluence)进行评审标注
    • 关键设计需进行DR(Design Review)会议并签署《设计评审记录表》

五、工业标准参考

  1. 功能安全
    • 符合IEC 61508 SIL2等级要求(关键算法需双核校验)
  2. 电磁兼容
    • 满足IEC 61326-1(工业环境EMC测试标准)
  3. 人机交互
    • 遵循IEC 62366-1可用性工程要求