一、软件设计详细方案
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
四、文档管理建议
-
版本控制
- 使用Git管理文档(推荐工具:Git + Markdown)
- 版本号遵循语义化规则:
v<主版本>.<次版本>.<修订号>
(例:v2.1.3表示第2大版本第1次迭代第3次修正)
-
文档自动化
-
代码注释生成文档(Doxygen配置示例):
doxygenINPUT = ./src OUTPUT_DIRECTORY = ./docs GENERATE_LATEX = NO GENERATE_HTML = YES
-
-
协同评审
- 使用在线文档工具(如Confluence)进行评审标注
- 关键设计需进行DR(Design Review)会议并签署《设计评审记录表》
五、工业标准参考
- 功能安全
- 符合IEC 61508 SIL2等级要求(关键算法需双核校验)
- 电磁兼容
- 满足IEC 61326-1(工业环境EMC测试标准)
- 人机交互
- 遵循IEC 62366-1可用性工程要求