7.8 KiB
7.8 KiB
项目分析报告
一、项目概述
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等,针对不同产品/工艺流程
关键设计模式:
// 动态加载业务框架
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 优点
- 模块化设计: 业务框架与UI分离,便于扩展
- 多协议支持: 同时支持REST/SOAP/TCP/串口,兼容性强
- 多线程架构: 使用TThread和定时器处理异步任务
- 本地缓存: 离线数据暂存,网络恢复后自动上报
5.2 改进空间
- 代码组织: 部分业务逻辑直接写在Form中,可进一步抽象
- 异常处理: 错误处理可以更统一和规范化
- 日志系统: 已有uSafeLog,但日志粒度可更细致
- 单元测试: 缺少自动化测试覆盖
- 文档: 代码注释较少
六、升级优化建议
6.1 编译器/IDE升级
| 当前版本 | 建议版本 | 理由 |
|---|---|---|
| ~Delphi 10.4/10.5 | Delphi 11.x (Alexandria) 或 Delphi 12.x | 最新LSP支持、更好的FMX性能、ARM64 Windows支持 |
升级步骤:
- 在新IDE中打开
.dproj文件 - 使用项目升级向导
- 解决第三方组件兼容性问题
- 重新编译测试
6.2 框架现代化
UI现代化:
// 当前: 使用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. 网络通信层重构:
// 当前: 使用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. 硬件通信抽象:
// 当前: 直接实现
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. 数据库设计优化:
// 当前: 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年)
🎯 优先升级方向:
- 第一步: 升级到 Delphi 11.x/12.x
- 第二步: 重构网络通信层
- 第三步: 优化数据结构存储
- 第四步: 补充单元测试