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

软开的过程


一、软件设计详细方案

1. 系统概述
  • 产品目标
    实现转子动平衡的快速测量与分析,支持单/双平面平衡,测量精度≤0.1g·mm。
  • 运行环境
    • 硬件平台:STM32MP157D(Cortex-A7 + M4双核)
    • 操作系统:Linux(A核) + FreeRTOS(M核)
    • 屏幕规格:10.1寸电容触控屏(1280×800)
  • 功能清单
    - 实时振动信号采集(采样率≥10kHz)
    - 1/2平面动平衡计算(ISO 1940标准)
    - 测量模板管理(.tpl格式加密存储)
    - 数据报表生成(PDF/Excel)
    - 多语言支持(中/英)
    
2. 系统架构设计

分层架构图

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

3.1 实时数据采集模块

  • 输入接口
    // 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=mrω2Ae
    (A: 振幅,e: 偏心距,m: 质量,r: 半径,ω: 角速度)

3.3 模板文件系统

  • 文件结构
    #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)

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

4.2 跨核通信协议

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

5.1 实时数据管道

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)目录示例
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)类图示例
@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配置示例):
      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可用性工程要求


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

相关文章:

  • 探索火山引擎 DeepSeek-R1:高速低延迟AI解决方案引领未来
  • 编程题-连接两字母单词得到的最长回文串(中等)
  • 【java】类声明的两种形式
  • 500字理透react的hook闭包问题
  • 【论文阅读笔记】知识蒸馏带来的礼物:快速优化、网络最小化和迁移学习 | FSP
  • 开源协议深度解析:理解MIT、GPL、Apache等常见许可证
  • 案例自定义tabBar
  • 鸿蒙开发深入浅出02(封装Axios请求、渲染Swiper)
  • 本地部署轻量级web开发框架Flask并实现无公网ip远程访问开发界面
  • Prompt-to-Prompt 进行图像编辑
  • forge-1.21.x模组开发(二)给物品添加功能
  • 高速差分信号的布线
  • 怎么合并主从分支,要注意什么
  • PHP二手车置换平台系统小程序源码
  • 【蓝桥】动态规划-多维dp-地图(带有转向次数限制)
  • stm32四种方式精密控制步进电机
  • 理解 “边缘计算“
  • 【C++】模版
  • 细说 Java 引用(强、软、弱、虚)和 GC 流程(二)
  • linux系统如何配置host.docker.internal