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 知识体系总览
下面这张图,是我自己整理的软件系统架构总览。你可以把它当作一个检查清单,看看自己有没有遗漏什么。
这张图把上位机、通信协议、下位机三层的关系画得很清楚。你配置系统时,可以对照着检查:上位机服务器跑起来了没?通信协议配置对了没?下位机固件烧录了没?每一步都确认好,再上电调试。
公众号:蓝海资料掘金营,微信deep3321