根据SmartBalancer 4用户手册和技术文档内容,结合Qt架构设计原则,以下是系统化的功能模块划分方案:
1. 用户界面模块(UI Layer)
1.1 核心界面组件
- 主控界面:实现Home Screen导航(分析/平衡/启停机测试等功能入口)
- 动态仪表盘:实时传感器数据可视化(振动/位移/转速等参数的Live Data显示)
- 专业图表控件:开发定制化Qt图表(极坐标图/Bode图/Nyquist图/频谱图/时域波形)
- 多层级菜单系统:基于QTreeView的模板树形管理界面
1.2 专用交互组件
- 平衡向导界面:分步式平衡操作流程(初始测量-试重-校正的向导式交互)
- 测量参数面板:可折叠式参数设置区(频率范围/窗函数/谱线数等专业设置)
- 结果对比视图:多窗口联动分析(支持四象限视图对比不同测量点数据)
2. 设备管理模块(Device Management)
2.1 硬件接口层
- 传感器驱动:实现IEPE接口协议/激光测速仪通信
- 多通道采集:基于QThread的6通道同步数据采集
- 信号预处理:实时数字滤波(抗混叠滤波/重采样处理)
2.2 设备控制层
- 功耗管理:电池状态监控/低功耗模式切换
- 固件升级:USB-C固件更新流程(差分包校验/安全烧录)
- 自检诊断:开机自检流程(传感器环路测试/存储校验)
3. 模板引擎模块(Template Engine)
3.1 机器模板系统
- 层级建模工具:基于XML的机器树形结构建模(机组-机器-测点三级结构)
- 运动学建模:轴承类型/传动比/故障频率计算引擎
- 模板版本管理:支持模板克隆/差异比较/批量导出
3.2 任务模板系统
- 测量策略配置:预置ISO 10816/API 670等标准模板
- 智能参数推导:根据转速自动计算谱线数/采样率
- 模板验证引擎:配置合规性检查(频带范围/传感器匹配)
4. 测量分析模块(Measurement & Analysis)
4.1 核心测量功能
- 动态平衡系统:单/双平面影响系数法实现(含试重优化算法)
- 启停机分析:阶次跟踪分析(支持共振点自动标记)
- 包络解调分析:轴承故障特征频率提取算法
4.2 高级分析工具
- 多维度诊断:振动烈度/峭度因子/相位分析联合诊断
- 趋势预测:基于时频分析的故障预警模型
- 自动报告生成:符合API 670标准的PDF报告生成器
5. 数据管理模块(Data Management)
5.1 实时数据处理
- 环形缓冲区:基于QSharedMemory的实时数据缓存
- 信号处理链:FFT/包络解调/阶次分析流水线处理
- 数据压缩:振动波形有损/无损压缩存储
5.2 持久化存储
- 测量数据库:SQLite关系型数据存储(测点/结果/事件关联)
- 文件版本控制:测量数据差分备份机制
- 云同步接口:支持OPC UA/MTConnect协议对接
6. 系统服务模块(System Services)
6.1 基础服务
- 多语言引擎:动态语言切换(支持RTL语言布局)
- 单位换算系统:公制/英制智能转换引擎
- 日志系统:分级日志记录(操作日志/诊断日志)
6.2 安全服务
- 权限管理:操作员/管理员分级权限控制
- 数据加密:测量数据AES-256加密存储
- 审计追踪:关键操作不可抵赖记录
7. 辅助工具模块(Utilities)
7.1 设备维护工具
- 传感器校准:基于标准振动台的校准流程
- 存储诊断:MicroSD卡健康状态监测
- 诊断模式:原始信号直出测试接口
7.2 用户支持
- AR辅助:基于图像识别的测点定位指引
- 知识库系统:故障特征库与典型案例
- 远程协助:WebRTC远程技术支持通道
模块交互架构
关键设计考量
- 跨平台支持:采用Qt抽象层实现Windows/Linux/嵌入式系统兼容
- 实时性保障:关键数据采集线程设置QThread::TimeCritical优先级
- 可扩展架构:通过插件机制支持振动分析算法扩展
- 大屏适配:响应式布局支持从7寸到15寸多种屏幕尺寸
- 军工级可靠:关键模块采用N-version programming设计
该架构充分考虑了手册中描述的IP65防护、多传感器支持、复杂分析功能等需求,同时遵循Qt最佳实践,确保在工业现场的可靠性和易用性。
以下是基于SmartBalancer 4用户手册的模块划分、分层架构设计及类/接口规划方案,结合Qt框架特性实现工业级振动分析系统的完整架构:
分层架构设计
1. 表现层(Presentation Layer)
1.1 主控界面模块
- 类组成:
MainWindow
:主窗口框架管理DashboardWidget
:多参数仪表盘NavigationDock
:侧边导航栏StatusBar
:IP65状态指示条
- 核心接口:
class IMainWindow { public: virtual void switchApplicationMode(ApplicationMode mode) = 0; virtual void updateLiveData(const SensorDataSet& data) = 0; virtual void showAlarm(AlarmLevel level, const QString& message) = 0; };
1.2 专业图表模块
- 类组成:
PolarPlot
:平衡极坐标图BodePlotWidget
:波特图分析SpectrumAnalyzer
:FFT频谱视图TimeWaveform
:时域波形控件
- 核心接口:
class IVibrationPlot { public: virtual void setFrequencyRange(double min, double max) = 0; virtual void updatePlotData(const VibrationData& data) = 0; virtual void enableCursorTracking(bool enable) = 0; };
2. 业务逻辑层(Business Logic Layer)
2.1 平衡计算引擎
- 类组成:
UnbalanceCalculator
:影响系数法核心算法RotorModel
:转子动力学模型WeightOptimizer
:配重优化求解器
- 核心接口:
class IBalancingEngine { public: virtual BalancingResult calculateInitialUnbalance(const SensorData& data) = 0; virtual CorrectionWeight computeCorrection(const TrialRunData& trial) = 0; virtual bool validateRigidRotor(const RotorParameters& params) = 0; };
2.2 信号处理模块
- 类组成:
FFTProcessor
:快速傅里叶变换EnvelopeDetector
:包络解调分析OrderTracking
:阶次分析引擎
- 核心接口:
class ISignalProcessor { public: virtual SpectrumData performFFT(const TimeSeries& rawData) = 0; virtual EnvelopeData extractEnvelope(const AccelerationData& data) = 0; virtual OrderAnalysisResult trackOrders(const CoastDownData& data) = 0; };
3. 数据层(Data Layer)
3.1 测量数据管理
- 类组成:
MeasurementDatabase
:SQLite数据库接口DataCache
:环形缓冲区管理ReportGenerator
:PDF报告生成
- 核心接口:
class IDataManager { public: virtual bool saveMeasurement(const MachineTemplate& temp, const MeasurementData& data) = 0; virtual QList<MeasurementRecord> loadHistoryData(const QDateTime& from, const QDateTime& to) = 0; virtual void exportToPDF(const ReportConfig& config) = 0; };
3.2 模板管理系统
- 类组成:
TemplateParser
:XML模板解析器KinematicModeler
:运动学建模工具TemplateValidator
:配置合规检查
- 核心接口:
class ITemplateSystem { public: virtual MachineTemplate loadTemplate(const QString& path) = 0; virtual bool validateTemplate(const MachineTemplate& temp) = 0; virtual void createNewTemplate(const MachineProfile& profile) = 0; };
4. 硬件抽象层(Hardware Abstraction Layer)
4.1 传感器接口
- 类组成:
SensorDriver
:IEPE传感器驱动LaserRpmSensor
:激光测速仪控制TemperatureProbe
:温度探头接口
- 核心接口:
class ISensorInterface { public: virtual bool initSensor(SensorType type, int channel) = 0; virtual SensorReading readData(int channel) = 0; virtual bool performSelfTest() = 0; };
4.2 设备控制模块
- 类组成:
PowerManager
:电池管理系统FirmwareUpdater
:固件升级控制DeviceDiagnostics
:硬件自检系统
- 核心接口:
class IDeviceController { public: virtual BatteryStatus getBatteryInfo() = 0; virtual void enterLowPowerMode() = 0; virtual UpdateResult updateFirmware(const QByteArray& image) = 0; };
5. 基础设施层(Infrastructure Layer)
5.1 系统服务
- 类组成:
UnitConverter
:单位换算引擎Localization
:多语言支持SecurityManager
:数据加密服务
- 核心接口:
class ISystemService { public: virtual double convertUnit(QuantityType type, double value, UnitSystem from, UnitSystem to) = 0; virtual void switchLanguage(Language lang) = 0; virtual QByteArray encryptData(const QByteArray& raw) = 0; };
5.2 日志与诊断
- 类组成:
DataLogger
:分级日志记录FaultDetector
:异常诊断AuditTrail
:操作审计
- 核心接口:
class IDiagnostic { public: virtual void logEvent(LogLevel level, const QString& message) = 0; virtual FaultAnalysis analyzeVibration(const SpectrumData& data) = 0; virtual QList<AuditRecord> getAuditTrail() = 0; };
模块统计表
层级 | 模块名称 | 类数量 | 核心接口示例 |
---|---|---|---|
表现层 | 主控界面 | 4 | IMainWindow |
表现层 | 专业图表 | 5 | IVibrationPlot |
业务层 | 平衡计算 | 3 | IBalancingEngine |
业务层 | 信号处理 | 3 | ISignalProcessor |
数据层 | 数据管理 | 3 | IDataManager |
数据层 | 模板系统 | 3 | ITemplateSystem |
硬件层 | 传感器 | 3 | ISensorInterface |
硬件层 | 设备控制 | 3 | IDeviceController |
基础层 | 系统服务 | 3 | ISystemService |
基础层 | 日志诊断 | 3 | IDiagnostic |
关键设计特点
-
Qt特性深度整合:
- 使用
QCustomPlot
实现高性能振动图表 - 采用
QStateMachine
实现平衡流程状态管理 - 通过
QAbstractItemModel
实现测量数据模型
- 使用
-
工业级可靠性:
- 关键数据采集使用
QSerialPort
的异步IO - 信号处理线程设置
QThread::HighPriority
- 实现看门狗定时器防止界面冻结
- 关键数据采集使用
-
扩展性设计:
- 通过插件机制加载分析算法(
.so/dll
) - 使用桥接模式分离硬件接口与业务逻辑
- 采用策略模式实现多平衡算法切换
- 通过插件机制加载分析算法(
该架构严格遵循DIN ISO 10816标准,满足IP65防护要求,可扩展支持API 670规范,通过模块化设计确保在恶劣工业环境下的长期稳定运行。
模板引擎与数据管理模块的深度解耦设计
1. 模板数据结构设计(领域模型)
// 机器模板元数据
struct MachineTemplateMeta {
QString uuid; // 唯一标识符
QString name; // 模板名称
ApplicationMode mode; // 关联应用模式 (平衡/分析/启停机)
QDateTime createTime;
QVersionNumber version;
QMap<QString, QVariant> extendedProps; // 厂商扩展属性
};
// 机器层级结构
class MachineNode : public QObject {
Q_ENUM(NodeType)
public:
enum NodeType { Train, Machine, MeasurementPoint };
NodeType type;
QString name;
QVector<MachineNode*> children;
QJsonObject config; // 节点配置(轴承类型/传动比等)
// 运动学计算接口
virtual double calculateSpeedRatio() const = 0;
};
2. 存储架构设计
-
数据库存储:
templates
表:存储模板元数据template_files
表:文件路径索引dependency
表:模板依赖关系
-
文件存储:
.sbt
文件结构:TemplatePackage/ ├── manifest.json # 元数据描述 ├── structure.xml # 机器层级定义 ├── config/ │ ├── bearing.conf # 轴承配置 │ └── gearbox.conf # 齿轮箱配置 └── resources/ └── diagram.svg # 机器示意图
3. 模板引擎核心实现
class TemplateEngine : public QObject {
Q_OBJECT
public:
explicit TemplateEngine(IDataManager* dataManager, QObject* parent = nullptr);
// 模板生命周期管理
Q_INVOKABLE MachineTemplate loadTemplate(const QUuid& templateId);
Q_INVOKABLE bool saveCurrentTemplate();
Q_INVOKABLE void createDerivedTemplate(const QUuid& baseTemplateId);
// 动态配置接口
void updateKinematicModel(const KinematicParams& params);
void validateTemplateCompliance(ComplianceStandard standard);
signals:
void templateLoaded(const MachineTemplate&);
void validationError(TemplateError error);
private:
IDataManager* m_dataManager;
TemplatePackage m_currentPackage;
MachineModelBuilder m_modelBuilder;
};
4. 数据管理接口设计
class IDataManager {
public:
// 模板元数据操作
virtual QList<MachineTemplateMeta> listTemplates(ApplicationFilter filter) = 0;
virtual QUuid registerTemplate(const MachineTemplateMeta& meta) = 0;
// 二进制数据存取
virtual QByteArray loadTemplateBlob(const QUuid& templateId) = 0;
virtual bool saveTemplateBlob(const QUuid& templateId, const QByteArray& data) = 0;
// 版本控制
virtual QList<TemplateVersion> getVersionHistory(const QUuid& templateId) = 0;
virtual bool rollbackToVersion(const QUuid& templateId, int version) = 0;
// 依赖管理
virtual bool checkDependencies(const QUuid& templateId) = 0;
virtual QList<QUuid> getDependentTemplates(const QUuid& templateId) = 0;
};
5. 模板-应用联动机制
6. 关键技术实现点
-
模板热加载机制:
// 使用Qt插件系统动态加载模板组件 QLibrary lib(templateLibPath); auto createWidget = lib.resolve("createConfigurationWidget"); if (createWidget) { auto* configWidget = reinterpret_cast<QWidget*(*)(MachineNode*)>(createWidget)(rootNode); configWidget->show(); }
-
版本化存储策略:
// 使用Git-like增量存储 void TemplateVersionControl::commitChanges(const QString& diff) { auto snapshot = createSnapshot(); m_gitEngine.commit(QString("Template update %1").arg(QDateTime::currentDateTime().toString()), diff, snapshot); }
-
配置实时同步:
// 使用Shared Memory实现多进程配置同步 QSharedMemory sharedConfig("template_config"); if (sharedConfig.create(sizeof(ConfigData))) { ConfigData* data = static_cast<ConfigData*>(sharedConfig.data()); memcpy(data, ¤tConfig, sizeof(ConfigData)); }
-
合规性验证引擎:
class TemplateValidator { public: bool validateISO10816(const MachineTemplate& temp) { // 实现ISO 10816-3标准验证逻辑 // 包括振动烈度计算、频带检查等 } bool checkSafetyCompliance(SafetyStandard std) { // 安全规范检查(如IP65配置验证) } };
7. 模块交互边界控制
-
接口隔离原则:
- 模板引擎仅通过
IDataManager
接口访问存储 - 应用程序通过
ITemplateConsumer
接口获取配置
class ITemplateConsumer { public: virtual void applyTemplateConfig(const MachineTemplate&) = 0; virtual void onTemplateModified(const TemplateDelta& changes) = 0; };
- 模板引擎仅通过
-
变更通知机制:
// 使用Qt信号槽实现跨模块通知 connect(m_templateEngine, &TemplateEngine::templateLoaded, m_appController, &AppController::handleNewTemplate); connect(m_dataManager, &IDataManager::templateUpdated, m_templateEngine, &TemplateEngine::reloadDependencies);
-
沙箱化操作:
// 在独立进程中执行模板解析 QProcess* sandboxProcess = new QProcess; sandboxProcess->start("template_sandbox", {templatePath}); connect(sandboxProcess, &QProcess::finished, [](int exitCode) { // 处理沙箱执行结果 });
8. 性能优化策略
-
懒加载设计:
class LazyLoadedTemplate { public: MachineNode* getRootNode() { if (!m_loaded) { loadFromDisk(); m_loaded = true; } return m_rootNode; } };
-
内存缓存池:
TemplateCache& cache = TemplateCache::instance(); auto template = cache.get(templateId); // 使用LRU策略
-
批量操作优化:
m_dataManager->beginBatchOperation(); foreach (const auto& tpl, modifiedTemplates) { m_dataManager->saveTemplateBlob(tpl.id, tpl.data); } m_dataManager->commitBatchOperation(); // 使用事务提交
该设计方案实现了:
- 模板与数据的物理分离:元数据在数据库,二进制包在文件系统
- 逻辑解耦:通过接口和消息机制降低模块间依赖
- 可扩展性:支持动态加载模板组件
- 安全性:沙箱机制隔离高风险操作
- 性能保障:懒加载+缓存+批量处理三重优化
实际开发中需结合Qt的QAbstractItemModel
实现模板树形展示,利用QFileSystemWatcher
监控模板文件变化,通过QDataStream
实现版本化序列化,最终达成工业级可靠性要求。