2. 软件系统架构:上位机、下位机与通信协议

大家好,我是老张。今天咱们聊聊S206D光刻机的软件系统架构。说实话,刚入行那会儿,我也觉得软件架构这东西挺虚的。直到有一次在现场调试,上位机跟下位机死活连不上,折腾了两天才发现是通信协议配置错了。从那以后,我养成了一个习惯——先画架构图,再动手干活。

这套系统的架构,说白了就是三层:上位机(PC端)下位机(固件层),以及连接它们的通信管道。咱们一个一个来看。

2.1 上位机软件架构:C/S模式

上位机我习惯用C/S模式,也就是客户端/服务器架构。为什么选这个?你想想看,光刻机通常需要多个操作终端同时监控,比如工艺工程师在办公室看数据,设备工程师在现场调参数。C/S模式天然支持这种多用户并发访问。

核心组件:

  • 服务器端:负责数据存储、业务逻辑处理、设备状态管理。我一般用Windows Service或者Linux Daemon来跑。
  • 客户端:负责UI展示、用户交互。可以是WPF、Qt或者Web前端。
  • 中间层:负责通信调度、权限管理、日志记录。

我个人习惯把服务器端拆成几个独立的模块:

  • 设备管理模块:维护设备列表、连接状态、心跳检测。
  • 工艺管理模块:管理Recipe(工艺配方)、参数校验、版本控制。
  • 数据采集模块:实时采集下位机上报的数据,存入数据库。
  • 报警管理模块:处理异常事件,生成报警记录。

嗯,这里要注意:客户端不要直接访问数据库。我在项目中遇到过有人图省事,让客户端直连SQLite,结果并发一上来就崩了。正确的做法是客户端只跟服务器通信,服务器统一管理数据。

2.2 下位机固件架构

下位机固件跑在嵌入式控制器上,比如STM32、Zynq或者专用的运动控制卡。它的任务很明确:实时控制。光刻机的运动控制、曝光控制、温度控制,都得靠它。

我常用的固件架构是分层设计:

  • 硬件抽象层(HAL):封装寄存器操作、GPIO、ADC/DAC。换硬件平台时,只需要改这一层。
  • 驱动层:管理电机驱动、传感器驱动、加热器驱动。
  • 控制层:实现PID控制、轨迹规划、同步逻辑。
  • 通信层:处理EtherCAT、TCP/IP、SECS/GEM协议栈。

小技巧:固件里一定要加看门狗(Watchdog)。我曾经遇到过下位机死机,上位机还傻傻地以为设备在正常运行。加了看门狗之后,死机自动复位,至少能保证不烧坏晶圆。

2.3 数据库选型:SQLite vs MySQL

数据库这块,我建议根据场景来选。别一上来就上MySQL,也别什么都用SQLite。

特性 SQLite MySQL
部署方式 嵌入式,无需安装服务 需要安装数据库服务
并发能力 弱,适合单机单用户 强,支持多用户并发
数据量 适合GB级别以下 适合TB级别
备份恢复 直接拷贝文件 需要mysqldump或工具
典型用途 本地配置、日志缓存 工艺数据、报警记录

我个人习惯:本地配置用SQLite,历史数据用MySQL。比如设备参数、网络配置这些不常变的数据,放SQLite里,启动快、不依赖网络。而工艺数据、报警记录、生产统计这些需要长期保存、多终端查询的,放MySQL里。

避坑指南:我曾经在项目里把SQLite当MySQL用,结果数据量到了几百万条,查询一次要好几秒。后来改成MySQL,同样的查询毫秒级返回。所以,别让SQLite干它干不了的活

2.4 通信协议:EtherCAT、TCP/IP、SECS/GEM

通信协议这块,是光刻机软件里最容易出问题的地方。我见过太多因为协议配置不对导致的通信故障。

2.4.1 EtherCAT

EtherCAT用于实时控制,比如运动轴同步、IO刷新。它的特点是:

  • 周期短:典型周期100μs~1ms
  • 抖动小:纳秒级同步精度
  • 拓扑灵活:支持线型、星型、树型

配置EtherCAT时,要注意从站顺序PDO映射。我习惯先用TwinCAT或者SOEM扫一遍从站,确认拓扑无误后再写配置文件。

2.4.2 TCP/IP

TCP/IP用于非实时通信,比如上位机与下位机之间的参数下发、状态查询。我一般用自定义的协议格式:

帧头(2字节) + 长度(2字节) + 命令字(2字节) + 数据(N字节) + 校验(2字节)

嗯,这里要注意:一定要加超时重传机制。网络环境复杂,丢包是常态。我遇到过因为没加超时,上位机一直等回复,结果界面卡死的情况。

2.4.3 SECS/GEM

SECS/GEM是半导体行业的标准通信协议,用于MES(制造执行系统)与设备之间的交互。它定义了:

  • SECS-I:基于RS-232的物理层
  • HSMS:基于TCP/IP的传输层
  • GEM:设备行为模型,包括状态机、事件报告、报警管理

说实话,SECS/GEM的协议栈挺复杂的。我建议直接用现成的库,比如SECSComm或者GEM300。自己从头实现的话,光解析SML(SECS Message Language)就能让你崩溃。

个人经验:调试SECS/GEM时,先用模拟器测通基本通信,再连真实设备。我习惯用SECS Simulator模拟MES端,用GEM Simulator模拟设备端。两边都跑通了,再上产线。

2.5 知识体系总览

下面这张图,是我自己整理的软件系统架构总览。你可以把它当作一个检查清单,看看自己有没有遗漏什么。

S206D 光刻机软件系统架构总览 上位机软件层(C/S模式) 服务器端 设备管理/工艺管理 客户端 UI展示/用户交互 中间层 通信调度/权限管理 数据库 SQLite/MySQL 通信协议层 EtherCAT(实时控制) TCP/IP(非实时通信) SECS/GEM(MES交互) 下位机固件层 硬件抽象层 寄存器/GPIO/ADC 驱动层 电机/传感器/加热 控制层 PID/轨迹规划 通信层 EtherCAT/TCP/SECS

这张图把上位机、通信协议、下位机三层的关系画得很清楚。你配置系统时,可以对照着检查:上位机服务器跑起来了没?通信协议配置对了没?下位机固件烧录了没?每一步都确认好,再上电调试。


公众号:蓝海资料掘金营,微信deep3321