4、核心依赖库安装:PyQt5/PySide6、OpenCV、numpy、pymodbus、pyvisa

好,咱们接着往下走。上一节我们把 Python 环境搭好了,现在要给它装上「灵魂」——也就是那些核心依赖库。你想想看,光刻机软件要是没有 GUI,你拿什么去操作?没有图像处理,怎么识别晶圆上的标记?没有数值计算,曝光参数怎么算?

我个人习惯是先把所有依赖列清楚,再一口气装完。这样不容易漏,也方便后面做版本管理。来,咱们一个一个过。

4.1 PyQt5 与 PySide6:GUI 框架的选择

先说 GUI。S206D 的操作界面,说白了就是操作员每天盯着看、点来点去的那块屏幕。我建议你用 PySide6,它是 Qt 官方支持的 Python 绑定,更新快,商业授权也友好。

当然,PyQt5 也很成熟,社区资源多。我在项目中遇到过一个问题:客户要求界面风格和 Windows 原生一致,PyQt5 的 QStyle 调了半天效果一般,换成 PySide6 的 Fusion 风格,几行代码就搞定了。

核心区别:

  • PySide6:Qt 官方维护,LGPL 协议,适合商业闭源项目
  • PyQt5:Riverbank 维护,GPL 协议,开源项目首选

安装命令很简单:

pip install PySide6
# 或者
pip install PyQt5

我的小建议:如果你刚开始学,两个都装上也没问题。代码里用 from PySide6 import ... 还是 from PyQt5 import ...,差别不大。但别混着用,一个项目里统一用一个框架。

4.2 OpenCV:图像处理的核心

光刻机离不开视觉系统。晶圆对准、标记识别、缺陷检测,全得靠 OpenCV。我刚开始做这个项目时,觉得 OpenCV 就是个「调参工具」,后来才发现它的算法库有多强大。

安装 OpenCV,我推荐用 opencv-python 这个包,它包含了核心模块和 contrib 模块。如果你需要 GUI 显示功能,可以装 opencv-contrib-python

pip install opencv-python
# 如果需要额外模块
pip install opencv-contrib-python

注意:OpenCV 的版本和 Python 版本要匹配。我曾经在 Python 3.12 上装 OpenCV 4.8,结果编译报错。后来降级到 Python 3.10 才顺利装上。建议你装 Python 3.9 或 3.10,兼容性最好。

4.3 numpy:数值计算的基石

numpy 不用多说,做数值计算的人都知道它。在光刻机软件里,numpy 主要用来处理矩阵运算——比如曝光剂量计算、光强分布模拟、对准误差分析。

安装 numpy 很简单,但要注意一点:别装错了版本。有些旧代码依赖 numpy 1.x 的 API,新版本可能不兼容。

pip install numpy

我的经验:numpy 的安装通常不会出问题。但如果你用的是 Anaconda 环境,它自带的 numpy 版本可能比较旧。建议用 pip 重新装一遍,确保是最新稳定版。

4.4 pymodbus:通信协议实现

光刻机要和下位机(比如运动控制器、温度传感器)通信,Modbus 协议是工业现场最常用的。pymodbus 这个库,说白了就是帮我们把 Modbus 的报文封装好,你只需要调用几个函数就能读写寄存器。

安装命令:

pip install pymodbus

我在项目中遇到过一个问题:用 pymodbus 读取温控器的数据,总是超时。后来发现是串口波特率设置不对。嗯,这里要注意:pymodbus 默认的串口参数是 19200 波特率、8 数据位、1 停止位、无校验,但实际设备可能不一样,一定要先看设备手册。

避坑指南:我曾经在调试时,pymodbus 返回的数据全是 0。排查了半天,发现是设备地址写错了。Modbus 设备的地址范围是 1-247,别写成 0。

4.5 pyvisa:仪器控制的利器

最后是 pyvisa。它用来控制 GPIB、USB、以太网接口的仪器,比如数字万用表、信号发生器、功率计。在光刻机校准阶段,我们需要用这些仪器来测量曝光能量、均匀性等参数。

安装 pyvisa 之前,你得先装一个 VISA 后端。我推荐 NI-VISA 或者 pyvisa-py(纯 Python 实现,不需要装 NI 的驱动)。

pip install pyvisa
# 如果选择 pyvisa-py 作为后端
pip install pyvisa-py

重要提醒:pyvisa 的安装坑比较多。我遇到过 pyvisa 找不到后端的情况,报错信息是「No VISA implementation found」。解决办法是手动指定后端:import pyvisa; rm = pyvisa.ResourceManager('@py')

4.6 依赖库关系图

为了让你更直观地理解这些库之间的关系,我画了一张图:

S206D 核心依赖库关系图 S206D 光刻机软件系统 PyQt5/PySide6 OpenCV numpy pymodbus pyvisa GUI 界面 图像处理 数值计算 设备通信 仪器控制

从这张图你可以看到:numpy 是底层基础,OpenCV 和 PyQt5 都依赖它做矩阵运算。pymodbus 和 pyvisa 负责和硬件打交道,一个管工业设备,一个管测量仪器。

4.7 批量安装脚本

为了省事,我通常写一个 requirements.txt 文件,一次性装完所有依赖:

# requirements.txt
PySide6==6.5.0
opencv-python==4.8.1.78
numpy==1.24.3
pymodbus==3.5.2
pyvisa==1.13.0
pyvisa-py==0.6.1

然后执行:

pip install -r requirements.txt

小技巧:版本号别写死,用 >= 也行。但我在项目中吃过亏——某个库升级后 API 变了,导致代码跑不起来。所以建议你锁定大版本,比如 PySide6>=6.0,<7.0

4.8 验证安装是否成功

装完之后,怎么知道有没有装对?写个简单的测试脚本:

import PySide6
import cv2
import numpy as np
import pymodbus
import pyvisa

print("PySide6 version:", PySide6.__version__)
print("OpenCV version:", cv2.__version__)
print("numpy version:", np.__version__)
print("pymodbus version:", pymodbus.__version__)
print("pyvisa version:", pyvisa.__version__)

print("所有依赖库安装成功!")

如果每个库都能正常导入并打印版本号,那就说明环境配好了。嗯,这一步别跳过,我见过太多人装完就跑,结果运行时才发现某个库没装上。

最后提醒:如果你用的是虚拟环境(我强烈建议你用),记得每次打开新终端都要先激活环境。不然你装了半天,发现装到系统 Python 里了,白忙活一场。


好了,核心依赖库就这些。装完之后,你的开发环境就具备了 GUI、图像处理、数值计算、通信和仪器控制的能力。下一节我们开始搭建项目骨架,把代码组织起来。

专注资料整理