Initial commit - Delphi MES client project
This commit is contained in:
@@ -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. **第四步**: 补充单元测试
|
||||
Reference in New Issue
Block a user