Files
dyp/项目分析报告.md
T
2026-05-07 20:25:34 +08:00

7.8 KiB
Raw Blame History

项目分析报告

一、项目概述

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 优点

  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现代化:

// 当前: 使用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年)

🎯 优先升级方向:

  1. 第一步: 升级到 Delphi 11.x/12.x
  2. 第二步: 重构网络通信层
  3. 第三步: 优化数据结构存储
  4. 第四步: 补充单元测试