# 项目分析报告 ## 一、项目概述 ### 1.1 基本信息 | 项目名称 | MainWin | |---------|--------| | **项目类型** | Delphi (Embarcadero RAD Studio) 桌面应用程序 | | **框架版本** | ProjectVersion 19.5 (大约对应 Delphi 10.4/10.5) | | **UI框架** | FireMonkey (FMX) | | **目标平台** | Win64 (主要), Win32 | | **当前版本** | 1.0.1.2 | | **运行权限** | requireAdministrator (需要管理员权限) | ### 1.2 业务定位 这是一个**工厂生产线数据采集与监控系统 (MES客户端)**,用于: - 生产线工位数据采集 - PLC设备通信控制 - 条码/二维码扫描识别 - 物料追踪与工艺流程管理 - 与后台Web服务数据同步 --- ## 二、技术架构分析 ### 2.1 技术栈概览 | 类别 | 技术组件 | 说明 | |-----|---------|------| | **UI框架** | FireMonkey (FMX) | 跨平台UI框架,支持Windows/macOS/iOS/Android | | **数据库** | FireDAC | Embarcadero原生数据访问框架,使用FDMemTable内存表 | | **网络通信** | RESTClient, Indy, SOAP | 多协议支持:REST API / TCP Socket / WebService | | **硬件通信** | SPComm, MahUSB, uPLCDevice | 串口、USB、PLC设备驱动 | | **并发处理** | TThread, TTimer | 多线程+定时器模式 | | **配置存储** | INI文件 / JSON文件 | 本地配置持久化 | ### 2.2 核心模块结构 ``` MainWin (主程序) ├── uMain.pas # 主窗体,UI主逻辑 ├── uDM.pas # 数据模块(TDataModule),核心数据管理 ├── uFrameBase.pas # 业务框架基类(工厂模式) ├── uFrameBaseBland.pas # 业务框架扩展类 ├── uListConent.pas # 业务内容列表 ├── json_webservice.pas # REST API通信服务 ├── uKsoap.pas # SOAP WebService通信 ├── uPLCDevice.pas # PLC设备通信(三菱/欧姆龙) ├── uTCPDevice.pas # TCP Socket通信 ├── SPComm.pas # 串口通信组件 ├── MahUSB.pas # USB设备通信 ├── json_dypSave.pas # 数据保存服务 └── uSafeLog.pas # 日志记录 ``` ### 2.3 业务框架设计 项目采用了**工厂模式 + 策略模式**的框架设计: - `TFrameBase` - 所有业务框架的基类,定义标准化接口 - `TFrameClass = class of TFrameBase` - 工厂类,用于动态创建业务框架 - 具体的业务框架包括:`uFrame_Dyp000/001/002/003` 等,针对不同产品/工艺流程 **关键设计模式**: ```pascal // 动态加载业务框架 FrameClass := TFrameClass(FindClass(FrameName)); CurrentFrame := FrameClass.Create(Self); ``` --- ## 三、依赖库分析 ### 3.1 核心运行时包 | 组件包 | 用途 | |-------|------| | `FireDAC` | 数据库访问 | | `RESTComponents` | REST客户端 | | `emsclientfiredac` | EMS中间件客户端 | | `IndyCore/IndyProtocols` | TCP/UDP通信 | | `soaprtl/soapserver` | SOAP WebService | | `FireDACSqliteDriver` | SQLite本地存储 | | `FMX*` | FireMonkey UI框架 | ### 3.2 第三方组件 | 组件 | 说明 | |-----|------| | `SPComm` | 串口通信组件 (1997年小猪工作室开发) | | `EhLib` | 数据感知控件库 | | `Tee*` | 图表组件 | --- ## 四、功能模块分析 ### 4.1 设备通信模块 | 模块 | 支持设备 | 通信方式 | |-----|---------|--------| | `uPLCDevice` | 三菱MELSEC, 欧姆龙OMRON | TCP Socket | | `SPComm` | 串口设备 | RS232/RS485 | | `MahUSB` | USB设备 | HID协议 | | `uTCPDevice` | 通用TCP设备 | TCP Socket | ### 4.2 数据交互模块 | 模块 | 协议 | 用途 | |-----|------|-----| | `json_webservice` | REST API | 与MES服务器数据交互 | | `uKsoap` | SOAP | 老式WebService调用 | | `json_dypSave` | REST API | 数据批量上报 | ### 4.3 业务功能 - **用户认证**: 工号/密码登录 - **工单管理**: 工单查询、录入、报工 - **物料追踪**: 批号、料号、条码扫描 - **生产报工**: 产量数据上报 - **设备监控**: PLC状态、报警灯、传感器 - **打印输出**: 标签打印、报表打印 --- ## 五、代码质量评估 ### 5.1 优点 1. **模块化设计**: 业务框架与UI分离,便于扩展 2. **多协议支持**: 同时支持REST/SOAP/TCP/串口,兼容性强 3. **多线程架构**: 使用TThread和定时器处理异步任务 4. **本地缓存**: 离线数据暂存,网络恢复后自动上报 ### 5.2 改进空间 1. **代码组织**: 部分业务逻辑直接写在Form中,可进一步抽象 2. **异常处理**: 错误处理可以更统一和规范化 3. **日志系统**: 已有uSafeLog,但日志粒度可更细致 4. **单元测试**: 缺少自动化测试覆盖 5. **文档**: 代码注释较少 --- ## 六、升级优化建议 ### 6.1 编译器/IDE升级 | 当前版本 | 建议版本 | 理由 | |---------|---------|-----| | ~Delphi 10.4/10.5 | **Delphi 11.x (Alexandria)** 或 **Delphi 12.x** | 最新LSP支持、更好的FMX性能、ARM64 Windows支持 | **升级步骤**: 1. 在新IDE中打开 `.dproj` 文件 2. 使用项目升级向导 3. 解决第三方组件兼容性问题 4. 重新编译测试 ### 6.2 框架现代化 **UI现代化**: ```delphi // 当前: 使用TRectangle模拟控件 Rectangle7: TRectangle; // 建议: 使用原生控件 + 样式表 Rectangle7: TPanel; // 或直接使用TStyledControl ``` **高DPI支持**: - 项目已设置 `AppDPIAwarenessMode=PerMonitor` - 建议在 Delphi 11+ 中使用新的 `FMX.Styles` 系统 ### 6.3 架构优化建议 | 方面 | 当前方案 | 优化建议 | |-----|---------|--------| | **网络库** | RESTClient (旧版) | 使用新版 `System.Net.HttpClient` | | **数据存储** | FDMemTable + INI | SQLite/FireDAC + JSON配置 | | **并发模型** | TThread + TTimer | 使用 `System.Threading.TTask` | | **依赖注入** | 直接引用 | 引入接口抽象 | ### 6.4 具体重构建议 **1. 网络通信层重构**: ```delphi // 当前: 使用TRESTClient (分散在各单元) RESTClient := TRESTClient.Create(sbaseUrl + '/prod-api/login'); // 建议: 统一网络服务层 INetworkService = interface function Get(const URL: string): string; function Post(const URL: string; const Body: string): string; end; ``` **2. 硬件通信抽象**: ```delphi // 当前: 直接实现 TMelsec = class FSocket: TClientSocket; end; // 建议: 接口抽象 IPlcDevice = interface procedure Connect; procedure Disconnect; function Read(const Address: string): string; procedure Write(const Address, Value: string); end; ``` **3. 数据库设计优化**: ```delphi // 当前: FDMemTable内存表 FDMemMain: TFDMemTable; // 建议: SQLite本地持久化 FDConnection: TFDConnection; FDQuery: TFDQuery; ``` ### 6.5 性能优化 | 优化点 | 当前实现 | 优化方案 | |-------|---------|--------| | **数据加载** | 启动时全量加载 | 懒加载 + 缓存 | | **UI刷新** | 定时器轮询 | 事件驱动 | | **文件监控** | 定时扫描目录 | 使用 `TFileMonitor` (已实现) | | **内存管理** | 手动Free | 使用接口和ARC模式 | --- ## 七、升级风险评估 | 风险项 | 等级 | 缓解措施 | |-------|-----|--------| | 第三方组件不兼容 | **高** | 确认组件有新版本,或寻找替代品 | | FMX行为变化 | **中** | 全面回归测试UI功能 | | 运行时库变化 | **低** | 检查第三方库依赖 | | 性能回归 | **中** | 性能基准测试 | --- ## 八、总结 这是一个**成熟稳定的工厂MES客户端**,基于 Delphi FMX 框架构建,具有以下特点: ✅ **优势**: - 跨平台潜力 (FMX框架) - 丰富的设备通信支持 - 模块化业务框架设计 - 离线数据缓存能力 ⚠️ **待改进**: - Delphi版本较旧 (约10.4/10.5) - 代码架构可进一步现代化 - 缺乏自动化测试 - 部分古老组件 (SPComm 1997年) 🎯 **优先升级方向**: 1. **第一步**: 升级到 Delphi 11.x/12.x 2. **第二步**: 重构网络通信层 3. **第三步**: 优化数据结构存储 4. **第四步**: 补充单元测试