Initial commit - Delphi MES client project

This commit is contained in:
Developer
2026-05-07 20:25:34 +08:00
commit 819b4824f6
466 changed files with 1176403 additions and 0 deletions
+269
View File
@@ -0,0 +1,269 @@
# 项目分析报告
## 一、项目概述
### 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. **第四步**: 补充单元测试